Eksportowanie znaków Unicode do pdf przy użyciu lateksu z trybu org

15

Cześć Dobrzy ludzie z Emacsa!

Mam problem z eksportowaniem symboli matematycznych Unicode z bufora (tryb org) do pliku pdf.

1. Opis problemu:

Symbole są wstawiane do bufora jako znaki Unicode (metodą wprowadzania TEX lub matematyki firmy )

Oto demonstracja kodu źródłowego:

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

ℝ ℤ ℕ ⇒ ∈ ∀ 

Same symbols in latex format:

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

Wytworzony plik .tex zawiera symbole 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}

Plik PDF nie:

wprowadź opis zdjęcia tutaj

2. Rzeczy, które próbowałem do tej pory:

Xelatex i matematyka-unicode: Jest to uwzględnione w odpowiedzi z programu Rasmus. Muszę przyznać, że nie używam wersji programistycznej trybu org, o którym wspominał. (nie udało się go zainstalować) W każdym razie próbowałem xelatex i matematyki Unicode. Moja wersja trybu Org to 8.2.10.

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

Włączenie tego do pliku wprowadza niezbyt uroczą wiadomość zamiast pliku pdf.

org-latex-compile: plik PDF ./unicode_export_test.pdf nie został utworzony: [błąd pakietu]

Sprawdziłem poprawność instalacji matematyki:

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

Instalacja Xelatex to najnowsza wersja:

~ $ 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.

zainstaluj rozwojową wersję trybu org: (nie powiodło się) Następujące Jak mogę być na bieżąco z najnowocześniejszymi rozwiązaniami? - tutorial Udało mi się (jak sądzę) pobrać i skompilować. Ponieważ nie mam pojęcia, jak powiedzieć Emacsowi, aby uruchomił tę wersję, Emacs uruchamia tryb Orga w wersji 8.2.10 (release_8.2.10 @ /usr/local/share/emacs/24.4/lisp/org/). Próbowałem dodać następujące wiersze do mojej konfiguracji.

(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)

Bez przyjemnego rezultatu.

Wyszukiwanie w Internecie: Nie znaleziono rozwiązania.

Pokonanie siebie za głupotę: Nie pomogłem.

3. Pytanie: Jak wyeksportować znaki Unicode z trybu org do trybu pdf?

  • Czy muszę skonfigurować zmienną trybu org?
  • Kompilujesz z innym tłumaczem lateksu?
  • Jakieś inne pomysły?
  • Jeśli wersja rozwojowa to rozwiązuje .... Jak mogę to zainstalować?
Pusty umysł
źródło
czy możesz podać przykład w postaci zwykłego tekstu oprócz zdjęć ...
rasmus

Odpowiedzi:

9

Potrzebujesz pliku lateksu \usepackage[utf8x]{inputenc}zamiast domyślnego \usepackage[utf8]{inputenc}. Działa to ze standardowym (pdf) lateksem.

Aby eksportowany org mógł to wygenerować, musisz odpowiednio ustawić zmienną org-latex-inputenc-alist. Na przykład:

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

Aby zmienna została zdefiniowana, może być konieczne (require 'ox-latex)najpierw.

Niestety obsługuje to tylko ograniczony zestaw liter matematycznych. Znacznie więcej można wesprzeć, włączając \usepackage[mathletters]{ucs}. To musi pojawić się przed inputencmateriałem, więc nie możesz po prostu użyć #+latex_header:. Sposobem na to jest dodanie go na czele org-latex-default-packages-alist.

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

Pamiętaj, że ucsdokumentacja (zazwyczaj dostępna za pośrednictwem texdoc ucs) ostrzega o mathlettersopcji:

Ta opcja jest domyślnie wyłączona, ponieważ użycie greckiej matematyki w zwykłym tekście nie wygląda dobrze.

Jeśli chcesz, aby te ustawienia były stosowane tylko do bieżącego pliku, a nie globalnie, możesz zdefiniować je jako lokalne zmienne pliku . Dodaj następujące na końcu pliku:

# 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 to pseudo-zmienna pozwalająca na wykonanie kodu lisp podczas ładowania pliku.

Jean Pierre
źródło
Symbole Ω Θ Γ ωnie są eksportowane. Zgaduję, że będzie więcej symboli, które nie zostaną wyeksportowane.
Empty_Mind
@Empty_Mind Oh my. Prawdopodobnie było to zbyt proste, aby naprawdę działało (choć w podanym przykładzie jest to w porządku). Potrzebuje więcej badań po stronie lateksu.
JeanPierre,
@Empty_Mind Właśnie edytowałem mój post. Próbowałem tylko omega i theta, mam nadzieję, że również inne prace.
JeanPierre,
Ponieważ nie byłem w stanie tego zrobić: jak znalazłeś niezbędne informacje? Czego szukałeś
Empty_Mind
2
@Empty_Mind Pierwszym krokiem było uzyskanie części lateksowej. Szukałem Unicode na tex.stackexchange, a następnie użyłem lokalnej dokumentacji tex (inputenc, ucs). Wygodne jest bezpośrednie edytowanie pliku tex eksportowanego przez org i kompilowanie go w celu wypróbowania. Po uzyskaniu działającego pliku lateksowego drugim krokiem jest, aby org wyeksportował potrzebne rzeczy. Dowiedziałem się o zmiennych w pliku, w ox-latex.elktórym zdefiniowano „zaplecze LaTeX dla silnika eksportu organizacji”. Czy powinienem wspomnieć, że pierwszy raz użyłem lateksu w 1995 roku i powoli przechodzę na Unicode?
JeanPierre,
5

Wystarczy załadować odpowiednią obsługę Unicode do LaTeXa przez unicode-mathi fontspec. Następnie musisz skompilować z xelatexlub lualatex.

Patrz docstring następujących zmiennych org-latex-packages-alist, org-latex-pdf-processa org-latex-compiler(te ostatnie są wprowadzane w Org 9).

W wersji programistycznej Org możesz zrobić coś takiego:

#+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}

tryb org kompilujący dokumenty lateksowe z symbolami Unicode

rasmus
źródło
To wygląda obiecująco. Ale dostaję Process completed with errors: [package error] jakieś pomysły, jak to naprawić lub uzyskać bardziej szczegółowy opis błędu?
Empty_Mind
Jak mogę zainstalować wersję rozwojową?
Empty_Mind
2

Dwie drogi do przejścia:

1) Napisz odpowiednie wyrażenia TeXa (zamiast Unicode) i pozwól, aby org wyświetlał je jako znaki utf-8 (z C-c C-x \). http://orgmode.org/manual/Special-symbols.html

Lub 2) Załaduj pakiet TeX, który tłumaczy twoje znaki utf-8 na odpowiednie wyrażenia matematyczne. Na przykład https://www.ctan.org/pkg/unicode-math?lang=en .

Dieter.Wilhelm
źródło
1
ad 2) Jak załadować ten pakiet TeX?
Empty_Mind
@Empty_Mind #+latex_header: \usepackage{unicode-math}. Ale ten pakiet nie działa dla mnie.
JeanPierre,