Cuaderno de GNUtas

Org Mode como interfaz integral para LaTeX (1): el caso de las listas

He aprovechado el comienzo de la composición del Diccionario Hispánico de la Tradición Clásica para dar el salto a Org y producir el libro desde allí. Algo que, por cierto, ya venía haciendo en mis propios escritos, pero tenía pendiente de probar en mi trabajo de composición tipográfica. ¿Por qué Org? O, para decirlo más exactamente, ¿por qué usar Org como interfaz de LATEX? Las respuestas podrían compendirase en la siguiente enumeración.

  1. Org es un lenguaje de marcado ligero, y ello supone el alivio de trabajar sobre un input muy limpio, ordenado y legible para ojos humanos. Sí, LATEX también nació (entre otras cosas) como un lenguaje de alto nivel para TEX que aspiraba a ser más simple y usable mediante su sintaxis de macros. Pero el tiempo nos ha acabado enseñando que LATEX no ha resultado todo lo liviano que hubiésemos deseado. LATEX es perfecto en lo que hace: ser el «director editorial» del cajista binario TEX, y aportarle por tanto su capa semántica. Pero el input de LATEX sigue siendo denso (en ocasiones demasiado denso). Cuanto más simple es el código en que trabajamos, más fácil se nos hará el depurarlo.
  2. Org es también lo que llamaríamos «texto plano enriquecido». No tiene sentido usarlo fuera de Emacs y es Emacs el que le da toda su potencia, modelabilidad y extensibilidad.
  3. Por último, Org nos permite contar con un único documento que pueda tener salida a diferentes formatos, no sólo tipográfico (LATEX) sino también a HTML, ODT, Epub, etc. Esta salida siempre es coherente y puede controlarse hasta el último detalle dependiendo del formato escogido.

Por supuesto, este sistema de trabajo en la composición tipográfica no nos va a librar de conocer LATEX, TEX y sus intríngulis. Escribiremos código LATEX como hacíamos antes, sólo que en esta ocasión lo dejaremos en segundo plano, a favor de una capa más ligera y legible.

El caso de las listas

Trabajar con listas y enumeraciones en Org representa un ejemplo gráfico impagable de esa ligereza y legibilidad que veníamos defendiendo más arriba. Una lista en Org es, ante todo, lo que la comprensión humana entiende y espera de una lista. Por ejemplo, algo así:

1. Peras
2. Manzanas
3. Ciruelas
4. Albaricoques

o así:

- Peras
- Manzanas
- Ciruelas
- Albaricoques

Y si queremos una lista estilo descripción, podemos hacer algo como esto:

- Peras :: la descripción que sea
- Manzanas :: más descripción
- Ciruelas :: todavía más
- Albaricoques :: y aún más

¿Y con varios niveles? Pues así, mediante un esperable sangrado:

1. Frutas
   a. Peras
   b. Manzanas
   c. Ciruelas
   d. Albaricoques
2. Verduras
   a. Acelgas
   b. Col
   c. Lombarda

Ni siquiera debemos preocuparnos por recordar las viñetas o seguir la numeración, ya que Org Mode lo hace automáticamente. Por ejemplo, si escribimos justo al principio de una línea 1. seguido de espacio, Org ya entiende que tenemos entre manos una lista numerada. Si pulsamos M-RET nos crea el siguiente ítem. Y si tecleamos M-right o M-left podemos cambiar de nivel. En el gif de la figura 1 se muestra un ejemplo de manipulación de listas en Org mediante unos simples acordes de teclado1.

listas-org.gif

Figura 1: Manipulación de listas en Org Mode

Controlando el formato de una lista en la exportación

Vamos a partir del supuesto de que nuestro documento va a tener una salida principal, «tipográfica» mediante LATEX, y otra a formato HTML. En el primer caso, siempre recomendaré sin dudar el paquete enumitem de Javier Bezos para controlar todos los aspectos formales de una lista de manera limpia. Así, si queremos pasar una serie de opciones de enumitem a nuestra lista numerada en la salida a LATEX, podemos hacerlo simplemente así:

#+ATTR_LaTeX: :options [parsep=0pt,itemsep=0pt,leftmargin=*,labelindent=0em]
1. Peras
2. Manzanas
3. Ciruelas
4. Albaricoques

El código en nuestra salida a LATEX quedaría entonces:

\begin{enumerate}[parsep=0pt,itemsep=0pt,leftmargin=*,labelindent=0em]
\item Peras
\item Manzanas
\item Ciruelas
\item Albaricoques
\end{enumerate}

Simplificar los atributos de LATEX2 en una macro de sustitución de Org3 siempre resulta muy práctico. Por ejemplo, si queremos que alguna de nuestras listas tengan un formato alfabético. Podemos definir esta macro:

#+MACRO: mialfalista #+ATTR_LaTeX: :options [label=\alph*.,widest=a]

Y aplicarla en alguna lista:

{{{mialfalista}}}
1. Peras
2. Manzanas
3. Ciruelas
4. Albaricoques

El uso de macros, por cierto, nos permite tener un control extremo sobre las distintas salidas de formato a exportar, ya que podemos introducir en cada macro algo de código Elisp, que se evaluará en un punto muy temprano de la exportación. Con un simple condicional estableceremos dos formatos distintos de lista, según se exporte a LATEX o a HTML. Siguiendo con nuestro ejemplo de las listas con enumeración alfabética, definiríamos esta nueva versión de nuestra macro (ojo, debemos escapar la barra invertida: \\alph*) en el caso de los atributos de LATEX:

#+MACRO: mialfalista (eval (if (org-export-derived-backend-p org-export-current-backend 'latex) "#+ATTR_LaTeX: :options [label=\\alph*.,widest=a]" "#+ATTR_HTML: :type a"))

De esa forma, cuando exportemos a HTML nuestra lista numerada también tendrá formato alfabético:

<ol type="a" class="org-ol">
<li>Peras</li>
<li>Manzanas</li>
<li>Ciruelas</li>
<li>Albaricoques</li>
</ol>

Figura 2: Lista alfabética en Org Mode del Diccionario Hispánico de la Tradición Clásica (izquierda) y código LaTeX de la misma lista (click en la imagen para ampliar)

Publicado: 18/01/20

Última actualización: 21/01/22


Índice general

Acerca de...

Esta obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internacional.

Notas al pie de página:

1

Para aprender a trabajar con listas en Org, siempre es recomendable comenzar por la Guía compacta de Org Mode, que se puede consultar aquí en versión HTML y en traducción de David Arroyo Menéndez.

2

Recuérdese que esta línea de atributos la podemos situar encima de cualquier lista, incluso sobre listas anidadas a distintos sub-niveles.

3

Para la sintaxis y uso de las utilísimas macros de sustitución, véanse esta y esta otra GNUta.

© Juan Manuel Macías
Creado con esmero en
GNU Emacs