Cuaderno de GNUtas

Sobre el bloque VERSE en Org Mode y su exportación a LaTeX

Usar Org Mode para escribir o citar pasajes de poesía en verso conlleva una serie de ventajas respecto a hacerlo en Markdown, tanto en lo que atañe a la propia escritura como a la exportación a otros formatos.

En efecto, un poema (o fragmento de poema) se representa en Org Mode dentro de un bloque predefinido llamado VERSE, el cual podemos invocarlo en Emacs tecleando la secuencia <v seguida del tabulador1. Obtendremos, automáticamente:

#+BEGIN_VERSE
<aquí irían nuestros versos>
#+END_VERSE

De tal forma que, por ejemplo, las dos primeras estrofas de la Sonatina de Darío quedarían así:

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

El jardín puebla el triunfo de los pavos reales.
Parlanchina, la dueña dice cosas banales,
y vestido de rojo piruetea el bufón.
La princesa no ríe, la princesa no siente;
la princesa persigue por el cielo de Oriente
la libélula vaga de una vaga ilusión.
#+END_VERSE

Vemos que dentro de ese bloque el poema puede escribirse de una manera natural y directa, sin necesidad de emplear marcas explícitas de corte de línea en cada verso, como tendría que hacerse si estuviésemos escribiendo en Markdown (generalmente, acabando los versos con un doble espacio o, en el caso del Markdown de Pandoc, iniciándolos con el carácter de la barra vertical | seguido de un espacio).

Exportando versos a LaTeX desde Org Mode

Si echamos mano del exportador nativo de Org Mode en Emacs hacia LaTeX, observaremos el siguiente comportamiento en el proceso para generar el archivo fuente *.tex:

  • Todo bloque VERSE se traducirá en un entorno verse estándar de LaTeX.
  • Todo verso acabará con la marca habitual que se usa en LaTeX dentro de dicho entorno para cortar la línea: \\
  • Todo salto de estrofa se representará con un espacio vertical de 1 cuadratín, es decir, 1 em.

Nuestras dos estrofas de Darío quedarían representadas, pues, de esta forma:

\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.\\
\vspace*{1em}
El jardín puebla el triunfo de los pavos reales.\\
Parlanchina, la dueña dice cosas banales,\\
y vestido de rojo piruetea el bufón.\\
La princesa no ríe, la princesa no siente;\\
la princesa persigue por el cielo de Oriente\\
la libélula vaga de una vaga ilusión.\\
\end{verse}

Como se ve, el resultado por defecto es bastante aceptable, salvo que habría que hacer dos objeciones a la separación entre estrofas. La primera, el \vspace* con asterisco, que crearía un espacio espurio si la estrofa comenzase una página. La segunda, la propia separación vertical de 1 em. El em (o el cuadratín, en la tradición española) es una medida variable que equivale al cuerpo de la fuente en un texto dado. Su nombre en la tradición anglosajona viene del nombre de la letra «m» en inglés, aunque casi nunca equivale hoy día al ancho de esta letra, como tantas veces se suele decir por ahí, debido a una confusión con este concepto que se remonta a los tiempos de la impresión mecánica o manual. Así que, si estamos componiendo a 11 puntos, la separación estrófica aquí de 1 em equivaldría a 11 puntos. Un poco estrecho, la verdad, pues lo más normal es separar las estrofas por un valor equivalente al interlineado, como si introdujésemos una línea blanca. El interlineado habitual es del 120 por ciento del cuerpo de letra, de modo que, para 11 puntos, nos daría 13.2 puntos, que es igual a 1.2 em. Por supuesto, convendría expresar aquí los valores en ems, dado que es una medida variable que depende del cuerpo de letra, mientras que la longitud en puntos es fija.

Es más, si queremos ahorrarnos la corrección manual en el documento resultante, siempre podremos redefinir esta longitud en el exportador nativo de Org Mode. Para ello, basta con incluir este código en nuestro archivo ~/.emacs2:

;;;; Para modificar la exportación del bloque VERSE a LaTeX

(defun org-latex-verse-block (verse-block contents info)
  "Transcode a VERSE-BLOCK element from Org to LaTeX.
CONTENTS is verse block contents.  INFO is a plist holding
contextual information."
  (org-latex--wrap-label
   verse-block
   (format "\\begin{verse}\n%s\\end{verse}"
	   (replace-regexp-in-string
	    "^[ \t]+" (lambda (m) (format "\\hspace*{%dem}" (length m)))
	    (replace-regexp-in-string
	     "^[ \t]*\\\\\\\\$" "\\vspace{1.2em}" ;; aquí habría que cambiar el espacio entre estrofas, y eliminar el asterisco
	     (replace-regexp-in-string
	      "\\([ \t]*\\\\\\\\\\)?[ \t]*\n" "\\\\\n"
	      contents nil t) nil t) nil t))
   info))

Así, cada vez que exportemos un bloque VERSE de Org a LaTeX, se añadirá automáticamente nuestro deseado espacio entre estrofas de 1.2 em.

¿Y qué pasa con los espacios horizontales?

Otra cualidad interesante que encontramos en la exportación del bloque VERSE es que los espacios horizontales que expresemos a principio de cada verso serán respetados, de alguna forma, en el proceso de exportación. En el caso de la salida a LaTeX, cada espacio horizontal será traducido por el valor de 1 em. De tal forma que si tenemos en Org:

#+BEGIN_VERSE
verso sin espacio
 verso con un espacio
  verso con dos espacios
    verso con tres espacios
#+END_VERSE

Obtendremos en nuestro *.tex resultante:

\begin{verse}
verso sin espacio\\
\hspace*{1em}verso con un espacio\\
\hspace*{2em}verso con dos espacios\\
\hspace*{3em}verso con tres espacios\\
\end{verse}

Tal vez nos parezca excesivo el valor de 1 em que asigna el exportador por defecto para representar el espacio simple. Una forma de corregirlo sería la que sigue.

Primero, declararemos una nueva longitud, que podemos llamar, por ejemplo, \espacioverso, e incluiremos estas dos líneas en la cabecera de nuestro documento *.org, para mandarlas luego al preámbulo del documento .tex resultante:

#+LaTeX_HEADER: \newlength{\espacioverso}
#+LaTeX_HEADER: \setlength{\espacioverso}{0.5em}

Por último, en nuestro archivo ~/.emacs acudimos al código que hemos añadido para modificar la exportación del bloque VERSE y editamos la línea 9:

"^[ \t]+" (lambda (m) (format "\\hspace*{%dem}" (length m)))

de tal forma que quede:

"^[ \t]+" (lambda (m) (format "\\hspace*{%d\\espacioverso}" (length m)))

es decir, sustituyendo el valor em tras la expresión regular %d por \\espacioverso (ojo con el carácter de escape para la barra invertida). El resultado, pues, será 1, 2, 3, 4… n (veces) el valor de \espacioverso, longitud que en nuestro preámbulo habrá quedado definida con 0.5 em:

\begin{verse}
verso sin espacio\\
\hspace*{1\espacioverso}verso con un espacio\\
\hspace*{2\espacioverso}verso con dos espacios\\
\hspace*{3\espacioverso}verso con tres espacios\\
etc\\
\end{verse}

Publicado: 31/08/2018

Última actualización: 31/08/2018


Índice general

Acerca de...

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

Notas:

1

Actualización de [2019-01-14 lun]: En Org 9.2 esto ha cambiado (probablemente para bien). Se remite a la lista de novedades. Sin embargo, si se desea mantener el comportamiento antiguo, basta con introducir en neustro archivo de inicio (require 'org-tempo).

2

En ocasiones puede ser necesario escribir previamente (require 'ox-latex).

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