从组织模式使用乳胶将Unicode字符导出为pdf


15

您好,Emacs的好人!

我在将Unicode数学符号从缓冲区(组织模式)导出到pdf文件时遇到麻烦。

1.问题描述:

将符号作为unicode字符插入缓冲区(通过TEX输入法company-math

这是源代码演示:

#+TITLE: Unicode characters export test 
#+AUThor: 
#+date:
Unicode characters:

ℝ ℤ ℕ ⇒ ∈ ∀ 

Same symbols in latex format:

$$\Bbb{R} \Bbb{Z} \Bbb{N} \Rightarrow \in \forall$$

产生的.tex文件包含unicode符号:

% Created 2016-03-04 Pá 21:01
\documentclass[11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{fixltx2e}
\usepackage{graphicx}
\usepackage{longtable}
\usepackage{float}
\usepackage{wrapfig}
\usepackage{rotating}
\usepackage[normalem]{ulem}
\usepackage{amsmath}
\usepackage{textcomp}
\usepackage{marvosym}
\usepackage{wasysym}
\usepackage{amssymb}
\usepackage{hyperref}
\tolerance=1000
\date{}
\title{Unicode characters export test}
\hypersetup{
  pdfkeywords={},
  pdfsubject={},
  pdfcreator={Emacs 24.4.1 (Org mode 8.2.10)}}
\begin{document}

\maketitle
\tableofcontents

Unicode characters:

ℝ ℤ ℕ ⇒ ∈ ∀ 

Same symbols in latex format:

$$\Bbb{R} \Bbb{Z} \Bbb{N} \Rightarrow \in \forall$$
% Emacs 24.4.1 (Org mode 8.2.10)
\end{document}

PDF文件不:

在此处输入图片说明

2.到目前为止我尝试过的事情:

Xelatex和unicode-math: 这包括在Rasmus的答案中。在这里,我不得不承认:我没有使用他提到的org-mode的开发版本。(无法安装)无论如何我都尝试过xelatex和unicode-math。我的组织模式为8.2.10。

#+latex_compiler: xelatex
#+latex_header: \usepackage{libertine}
#+latex_header: \usepackage{unicode-math}

在文件中包含此内容会引入不太可爱的消息,而不是pdf文件。

org-latex-compile:PDF文件./unicode_export_test.pdf未生成:[打包错误]

我已经检查了正确的unicode-math安装:

~ $ kpsewhich unicode-math.sty
/usr/share/texlive/texmf-dist/tex/latex/unicode-math/unicode-math.sty

Xelatex的安装是最新版本:

~ $ sudo apt-get install texlive-xetex
Reading package lists... Done
Building dependency tree       
Reading state information... Done
texlive-xetex is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 16 not upgraded.

安装org-mode的开发版本:(失败)以下如何保持最新的前沿开发?-我已经可以(并认为)下载并编译该教程。由于我不知道如何告诉Emacs运行此版本,因此Emacs运行组织模式8.2.10(release_8.2.10 @ /usr/local/share/emacs/24.4/lisp/org/)。我试图将以下行添加到我的配置中。

(add-to-list 'load-path (expand-file-name "~/elisp/org-mode/lisp"))
(remove 'load-path (expand-file-name "/usr/local/share/emacs/24.4/lisp/org/"))
(add-to-list 'auto-mode-alist '("\\.\\(org\\|org_archive\\|txt\\)$" . org-mode))
(require 'org)

没有令人满意的结果。

搜索互联网: 找不到解决方案。

愚蠢地殴打自己: 没有帮助。

3.问:如何将unicode字符从org-mode导出到pdf?

  • 我是否必须配置一些组织模式变量?
  • 使用不同的Latex解释器进行编译?
  • 还有其他想法吗?
  • 如果开发版本解决了此问题。...我如何安装它?

除了图像之外,您能否以纯文本形式提供示例...
rasmus

Answers:


9

您需要使用乳胶文件\usepackage[utf8x]{inputenc}而不是默认文件\usepackage[utf8]{inputenc}。这适用于标准(pdf)乳胶。

为了使组织导出生成此文件,您必须相应地设置变量org-latex-inputenc-alist。例如:

(setq org-latex-inputenc-alist '(("utf8" . "utf8x")))

对于要定义的变量,您可能需要(require 'ox-latex)首先。

不幸的是,这仅支持有限的一组数学字母。可以提供更多支持\usepackage[mathletters]{ucs}。它必须出现在inputenc内容之前,因此您不能仅使用#+latex_header:。一种方法是将其添加到的开头org-latex-default-packages-alist

(setq org-latex-default-packages-alist (cons '("mathletters" "ucs" nil) org-latex-default-packages-alist))

请注意,ucs文档(通常可通过访问texdoc ucs)警告有关该mathletters选项的信息:

默认情况下,此选项是禁用的,因为在普通文本中使用math希腊语看起来不太好。

如果您希望这些设置仅应用于当前文件而不是全局,则可以将它们定义为文件局部变量。在文件末尾附近添加以下内容:

# Local Variables:
# org-latex-inputenc-alist: (("utf8" . "utf8x"))
# eval: (setq org-latex-default-packages-alist (cons '("mathletters" "ucs" nil) org-latex-default-packages-alist))
# End:

eval 是一个伪变量,允许在加载文件时执行Lisp代码。


Ω Θ Γ ω不导出符号。猜测会有更多不会导出的符号。
–Empty_Mind

@Empty_Mind哦,天哪。可能这太简单了,无法真正起作用(尽管在提供的示例中可以)。乳胶方面需要更多调查。
JeanPierre 2016年

@Empty_Mind刚刚编辑了我的帖子。尝试过欧米茄和theta,希望其他工作也是如此。
JeanPierre 2016年

由于我无法做到这一点,我自己:您如何找到必要的信息?你在找什么
–Empty_Mind

2
@Empty_Mind第一步是使乳胶零件起作用。我在tex.stackexchange上搜索了unicode,然后使用了本地tex文档(inputenc,ucs)。直接编辑由org导出的tex文件并进行编译以尝试操作很方便。一旦获得了有效的乳胶文件,第二步就是让组织导出所需的东西。我发现文件ox-latex.el中定义了“组织导出引擎的LaTeX后端” 的变量。我是否应该说我在1995年首次使用乳胶,然后逐渐转向unicode?
JeanPierre 2016年

5

您只需要通过unicode-math和在LaTeX中加载适当的unicode支持fontspec。然后,您需要使用xelatex或进行编译lualatex

请参见下面的变量的文档字符串:org-latex-packages-alistorg-latex-pdf-processorg-latex-compiler(后者在组织9引入)。

在Org的开发版本中,您可以执行以下操作:

#+latex_compiler: xelatex
#+latex_header: \usepackage{libertine}
#+latex_header: \usepackage{unicode-math}

* Unicode symbols
 $z$ ∈ ℝ ∖ ℤ
\begin{equation}
\label{eq:1}
X ≔ \left\{ z\colon z ∈ ℝ ∖ ℤ \right\}
\end{equation}

组织模式用Unicode符号编译乳胶文档


这看起来很无礼。但是我有Process completed with errors: [package error] 任何想法如何解决这个问题,或者获得更具体的错误描述?
–Empty_Mind

如何安装开发版本?
–Empty_Mind

2

两种方法:

1)编写正确的TeX表达式(而不是unicode),并让org 它们显示为utf-8字符(带有C-c C-x \)。http://orgmode.org/manual/Special-symbols.html

或者2)加载TeX软件包,该软件包会将您的utf-8字符转换为正确的数学表达式。例如https://www.ctan.org/pkg/unicode-math?lang=zh-CN


1
广告2)如何加载该TeX软件包?
–Empty_Mind

@Empty_Mind #+latex_header: \usepackage{unicode-math}。但是此软件包对我不起作用。
JeanPierre 2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.