Esportazione di caratteri unicode in pdf usando latex dalla modalità org


15

Ciao brava gente di Emacs!

Sto riscontrando problemi nell'esportazione dei simboli matematici unicode dal buffer (modalità org) al file pdf.

1. Descrizione del problema:

I simboli vengono inseriti nel buffer come caratteri unicode (tramite metodo di input TEX o matematica aziendale )

Ecco la dimostrazione del codice sorgente:

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

ℝ ℤ ℕ ⇒ ∈ ∀ 

Same symbols in latex format:

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

Il file .tex prodotto include simboli 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}

Il file PDF non:

inserisci qui la descrizione dell'immagine

2. Cose che ho provato finora:

Xelatex e unicode-math: sono inclusi nella risposta di Rasmus. Qui devo ammettere: non sto usando la versione di sviluppo della modalità org di cui parla. (impossibile installarlo) Ho provato comunque xelatex e unicode-math. La mia versione della modalità Org è la 8.2.10.

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

Includere questo nel file introduce un messaggio non così bello invece del file pdf.

org-latex-compile: file PDF ./unicode_export_test.pdf non prodotto: [errore pacchetto]

Ho verificato la corretta installazione di unicode-math:

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

L'installazione di Xelatex è la versione più recente:

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

installa la versione di sviluppo di org-mode: (fallito) Seguendo Come posso rimanere aggiornato con lo sviluppo di bleeding edge? - tutorial Sono stato in grado (credo) di scaricarlo e compilarlo. Poiché non ho idea di come dire a Emacs di eseguire questa versione, Emacs esegue la versione 8.2.10 in modalità Org (release_8.2.10 @ /usr/local/share/emacs/24.4/lisp/org/). Ho provato ad aggiungere le seguenti righe alla mia configurazione.

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

Senza risultato piacevole.

Ricerca in Internet: soluzione non trovata.

Battendo me stesso per essere stupido: non ha aiutato.

3. Domanda: Come esportare i caratteri unicode da org-mode a pdf?

  • Devo configurare alcune variabili in modalità org?
  • Compilare con diversi interpreti in lattice?
  • Altre idee?
  • Se la versione di sviluppo risolve questo problema .... Come posso installarlo?

potresti per favore fornire un esempio in chiaro oltre alle immagini ...
rasmus

Risposte:


9

È necessario utilizzare il file in lattice \usepackage[utf8x]{inputenc}anziché quello predefinito \usepackage[utf8]{inputenc}. Funziona con lattice standard (pdf).

Perché l'esportazione dell'organizzazione generi questo, devi impostare la variabile di org-latex-inputenc-alistconseguenza. Per esempio:

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

Per definire la variabile, potrebbe essere necessario (require 'ox-latex)innanzitutto.

Sfortunatamente, questo supporta solo un numero limitato di lettere matematiche. Molto di più può essere supportato includendo \usepackage[mathletters]{ucs}. Questo deve apparire prima delle inputenccose, quindi non puoi semplicemente usare a #+latex_header:. Un modo per farlo è quello di aggiungerlo a capo di org-latex-default-packages-alist.

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

Si noti che la ucsdocumentazione (generalmente disponibile tramite texdoc ucs) avverte mathlettersdell'opzione:

Questa opzione è disabilitata per impostazione predefinita, poiché l'utilizzo del greco matematico in un testo normale non è ottimale.

Se si desidera applicare tali impostazioni solo al file corrente anziché a livello globale, è possibile definirle come variabili locali del file . Aggiungi quanto segue vicino alla fine del file:

# 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 è una pseudo variabile che consente di eseguire il codice lisp quando il file viene caricato.


I simboli Ω Θ Γ ωnon vengono esportati. Indovinando ci saranno più simboli che non verranno esportati.
Empty_Mind

@Empty_Mind Oh mio. Probabilmente questo era troppo semplice per funzionare davvero (anche se va bene nell'esempio fornito). Ha bisogno di ulteriori indagini sul lato in lattice.
JeanPierre,

@Empty_Mind Ho appena modificato il mio post. Ho provato solo Omega e Theta, spero che anche altri lavori.
JeanPierre,

Dal momento che non sono stato in grado di farlo da solo: come hai trovato le informazioni necessarie? Cosa stavi cercando?
Empty_Mind

2
@Empty_Mind Il primo passo è stato far funzionare la parte in lattice. Ho cercato Unicode su tex.stackexchange e poi ho usato la documentazione tex locale (inputenc, ucs). È conveniente modificare direttamente il file tex esportato da org e compilarlo per provare le cose. Una volta ottenuto un file in lattice funzionante, il secondo passo è rendere l'organizzazione esportare le cose necessarie. Ho scoperto le variabili nel file in ox-latex.elcui è definito il "LaTeX Back-End per Org Export Engine". Devo dire che ho usato il lattice per la prima volta nel 1995 e mi sto lentamente spostando verso l'unicode?
JeanPierre,

5

Dovresti solo caricare il supporto Unicode adeguato in LaTeX tramite unicode-mathe fontspec. Quindi dovresti compilare con xelatexo lualatex.

Vedere la docstring delle seguenti variabili: org-latex-packages-alist, org-latex-pdf-processe org-latex-compiler(quest'ultimo viene introdotto in Org 9).

Nella versione di sviluppo di Org potresti fare qualcosa del genere:

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

documenti in lattice compilanti in modalità org con simboli unicode


Sembra promettente. Ma sto ricevendo Process completed with errors: [package error] qualche idea su come risolvere questo problema o ottenere una descrizione dell'errore più specifica?
Empty_Mind

Come posso installare la versione di sviluppo?
Empty_Mind

2

Due modi per andare:

1) o scrivere appropriate espressioni TeX (invece di Unicode) e lasciare che org semplicemente visualizzare loro come caratteri UTF-8 (con C-c C-x \). http://orgmode.org/manual/Special-symbols.html

Oppure 2) Carica un pacchetto TeX che traduca i tuoi caratteri utf-8 nelle giuste espressioni matematiche. Ad esempio https://www.ctan.org/pkg/unicode-math?lang=en .


1
annuncio 2) come carico quel pacchetto TeX?
Empty_Mind

@Empty_Mind #+latex_header: \usepackage{unicode-math}. Ma questo pacchetto non funziona per me.
JeanPierre,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.