Cuaderno de Gnutas

Table of Contents

Convertir de Org a LaTeX con versos numerados

Desde hace un tiempo vengo trabajando en la traducción de la Odisea, empresa que supone ya una odisea en sí misma, empezando (cómo no) por el formato textual con que realizar la traducción. Después de mucho vagar, finalmente he encontrado mi Ítaca particular en el Org Mode de Emacs. Las razones son diversas, pero algo de eso ya lo expliqué (creo) aquí.

El caso es que, de vez en cuando, necesito contar con una salida limpia y simple a PDF de mi trabajo en curso, que incluya una numeración al margen de los versos de cada canto, un índice previo y poco más. La salida impecable a PDF nos la proporciona LaTeX, y para la conversión desde el formato Org (y en este caso concreto) lo más sencillo que he encontrado es echar mano de los propios conversores nativos de Org Mode en Emacs, ya que con Pandoc necesitaba dos pasos para obtener el PDF con el contenido tal y como quería.

El proceso de conversión de Org a LaTeX desde Emacs es muy sencillo y rápido, pero primero necesitaba hacer unos cuantos ajustes. Lo más importante era conseguir que el archivo *.tex resultante tuviese un preámbulo personalizado, algo similar a lo que supone usar una plantilla de LaTeX en Pandoc. Dicho preámbulo no sería demasiado extenso, pues casi todo lo que necesito lo cargo llamando a un archivo *.sty creado por mí (normal-lua.sty) con una serie de macros y paquetes. A continuación se incluirían un par de definiciones de títulos, estilos de página e índice de contenidos (con los paquetes titlesec y titletoc, cargados ya en mi archivo *.sty) y un par de comandos para numerar los versos. Sobre esto, hay que tener en cuenta lo siguiente.

En Org Mode, una serie de versos se representa dentro de un bloque llamado VERSE:

#+BEGIN_VERSE
La princesa está triste... ¿Qué tendrá la princesa?
Los suspiros se escapan de su boca de fresa,
que ha perdido la risa, que ha perdido el color.
La princesa está pálida en su silla de oro,
está mudo el teclado de su clave sonoro,
y en un vaso, olvidada, se desmaya una flor.
#+END_VERSE

Tras convertirlo a LaTeX, el resultado sería éste, con el entorno verse estándar:

\begin{verse}
La princesa está triste... ¿Qué tendrá la princesa?\\
Los suspiros se escapan de su boca de fresa,\\
que ha perdido la risa, que ha perdido el color.\\
La princesa está pálida en su silla de oro,\\
está mudo el teclado de su clave sonoro,\\
y en un vaso, olvidada, se desmaya una flor.\\
\end{verse}

Para que esos versos se numeren al margen, se puede echar mano del paquete verse, que ofrece el comando \poemlines{<SECUENCIA DE LA NUMERACIÓN>} para ser incluído dentro del entorno verse. A fin de no tener que hacerlo a mano luego en cada canto, dentro del archivo *.tex resultante, podemos redefinir antes el entorno verse así:

\let\oldverse\verse
\renewenvironment{verse}
{\begin{oldverse}\poemlines{5}}
{\end{oldverse}\par}

Ya tenemos decidido todo lo que incluirá nuestro preámbulo. Ahora falta crear una plantilla. Para ello añadiremos a nuestro archivo ~/.emacs una nueva clase org-latex que pueda entender el exportador. La sintaxis se explica prolijamente en este tutorial, pero la estructura básica vendría a ser así (cuidado con la barra invertida de los comandos LaTeX: debe escribirse en lisp con su carácter de escape \\):

;; Clase personalizada para exportar la Odisea de Org a LaTeX

(add-to-list 'org-latex-classes
      '("odisea-org"  ;; Aquí indicamos el nombre de nuestra clase
         "\\documentclass[11pt]{article} 
          \\usepackage{normal-lua}
          \\usepackage{titletoc}
          \\titlecontents{section}[0em]{}{}{}{\\titlerule*[1pc]{.}\\contentspage}
          \\setmainfont[Numbers=OldStyle]{Linux Libertine}
          \\newpagestyle{canto}{\\headrule\\sethead[][\\small\\itshape Odisea -- \\sectiontitle][]{}{\\small\\itshape Odisea -- \\sectiontitle}{}\\setfoot[][\\thepage][]{}{\\thepage}{}}
          \\pagestyle{canto}
          \\newcommand{\\sectionbreak}{\\clearpage}
          \\assignpagestyle{\\section}{canto}
          \\titleformat{\\section}{\\thispagestyle{plain}\\addfontfeature{Letters=Uppercase,Kerning=Uppercase,LetterSpace=2.0}\\centering\\fontsize{11pt}{13.2pt}\\selectfont\\mdseries}{}{0em}{}
          \\titlespacing{\\section}{0pt}{0pt}{26.4pt}
          \\let\\oldverse\\verse
          \\renewenvironment{verse}{\\begin{oldverse}\\poemlines{5}}{\\end{oldverse}\\par}
          [NO-DEFAULT-PACKAGES] 
          [PACKAGES] 
          [EXTRA]"
         ("\\section{%s}" . "\\section*{%s}")
         ("\\subsection{%s}" . "\\subsection*{%s}")
         ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
         ("\\paragraph{%s}" . "\\paragraph*{%s}")
         ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))

Ya sólo queda añadir #+LaTeX_CLASS: odisea-org al principio de nuestro documento *.org para que el exportador lea la nueva clase. Así, de hecho, se encabeza mi traducción de la Odisea:

#+TITLE: Odisea
#+AUTHOR: Traducción: Juan Manuel Macías
#+DATE: En algún lugar de vuelta a Ítaca -- \today
#+LaTeX_CLASS: odisea-org

Y ya podemos exportar nuestro Org a LaTeX cuando queramos. Podemos, por ejemplo, introducir la orden básica para abrir el exportador: C-c C-e, y teclear a continuación l-L, si queremos que se nos abra un nuevo buffer con el archivo *.tex generado. Una de las cosas gratas, por cierto, que tiene este procedimiento es que podemos exportar todo el documento Org o, simplemente, uno de los árboles secundarios. Por ejemplo, si queremos exportar el sub-árbol que incluye el canto 7, nos situamos en éste, tecleamos C-c C-x b, y se nos mandaría a un buffer nuevo para poder exportarlo desde allí, con las opciones del encabezado del documento padre, o incluso con otro encabezado distinto que deseáramos añadirle ad hoc.

orglatex1.png

Podemos también, por último, exportar directamente a PDF y hacer que éste se abra dentro de Emacs. Volvemos a abrir el exportador con C-c C-e, pero esta vez tecleamos l-o. Ahora bien, como yo quiero que use LuaTeX para compilar, en lugar de pdfTeX, añado estas líneas a mi ~/.emacs:

;; exportar de Org a PDF con LuaLaTeX por defecto

(setq org-latex-pdf-process
      '("lualatex -shell-escape -interaction nonstopmode %f"
        "lualatex -shell-escape -interaction nonstopmode %f"))

orglatex2.png


Índice general

Author: Juan Manuel Macías

Created: 2018-08-21 mar 06:12

Validate