Экспорт символов юникода в pdf с использованием латекса из режима org

15

Здравствуйте, Добрые люди из Emacs!

У меня проблемы с экспортом математических символов Юникода из буфера (режим org) в файл PDF.

1. Описание проблемы:

Символы вставляются в буфер как символы Юникода (с помощью метода ввода TEX или фирменной математики )

Вот демонстрация исходного кода:

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

ℝ ℤ ℕ ⇒ ∈ ∀ 

Same symbols in latex format:

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

Произведенный файл .tex содержит символы Юникода:

% 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: это включено в ответ Расмуса. Здесь я должен признать: я не использую версию разработки org-mode, которую он упоминает. (не удалось установить) Я все равно попробовал xelatex и unicode-math. Моя версия режима Org - 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 в режиме Org (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. Вопрос: Как экспортировать символы Юникода из org-mode в pdf?

  • Нужно ли настраивать какую-либо переменную org-mode?
  • Компилировать с другим переводчиком латекса?
  • Есть еще идеи?
  • Если версия для разработчиков исправляет это .... Как я могу установить это?
Empty_Mind
источник
не могли бы вы привести пример в виде открытого текста в дополнение к изображениям ...
rasmus

Ответы:

9

Вам нужно использовать латексный файл, \usepackage[utf8x]{inputenc}а не по умолчанию \usepackage[utf8]{inputenc}. Это работает со стандартным (pdf) латексом.

Чтобы org export сгенерировал это, вы должны установить переменную 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опции:

Эта опция по умолчанию отключена, поскольку использование математического греческого языка в обычном тексте выглядит не очень хорошо.

Если вы хотите, чтобы эти параметры применялись только к текущему файлу, а не глобально, вы можете определить их как локальные переменные файла . Добавьте следующее в конец файла:

# 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 при загрузке файла

JeanPierre
источник
Символы Ω Θ Γ ωне экспортируются. Предполагается, что будет больше символов, которые не будут экспортироваться.
Empty_Mind
@Empty_Mind Боже мой. Возможно, это было слишком просто, чтобы по-настоящему работать (хотя на приведенном примере это нормально). Нужно больше исследований на стороне латекса.
JeanPierre
@Empty_Mind Только что отредактировал мой пост. Пробовал только омегу и тэту, надеюсь, что и другие работают.
JeanPierre
Так как я не мог сделать это сам: как вы нашли необходимую информацию? Что вы искали?
Empty_Mind
2
@Empty_Mind Первым шагом было получить работу с латексной деталью. Я искал unicode на tex.stackexchange, а затем использовал локальную документацию tex (inputenc, ucs). Удобно редактировать текстовый файл, экспортированный org, и компилировать его, чтобы попробовать. Как только вы получите работающий латексный файл, второй шаг - заставить org экспортировать нужные вещи. Я нашел информацию о переменных в файле, ox-latex.elгде определен «Бэкэнд LaTeX для Org Export Engine». Должен ли я упомянуть, что впервые использовал латекс в 1995 году и постепенно перехожу на юникод?
JeanPierre
5

Вам просто нужно загрузить надлежащую поддержку юникода в LaTeX через unicode-mathи fontspec. Тогда вам нужно скомпилировать с xelatexили lualatex.

См строку документации из следующих переменных: org-latex-packages-alist, org-latex-pdf-processи org-latex-compiler(последняя введена в Org 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}

org-mode компиляция латексных документов с символами юникода

Расмус
источник
Это выглядит многообещающе. Но я получаю Process completed with errors: [package error] какие-либо идеи, как это исправить, или получить более конкретное описание ошибки?
Empty_Mind
Как я могу установить версию для разработчиков?
Empty_Mind
2

Два пути:

1) Либо напишите правильные выражения TeX (вместо юникода), и позвольте 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=en .

Dieter.Wilhelm
источник
1
объявление 2) как мне загрузить этот пакет TeX?
Empty_Mind
@Empty_Mind #+latex_header: \usepackage{unicode-math}. Но этот пакет не работает для меня.
JeanPierre