La lunotipia. Tipografía digital, TeX y cafeína

Apunte sobre el tratamiento (y estado de la cuestión) de los versos en TeX

Aunque creemos que es tema éste merecedor de un tratamiento algo más extenso, ensayaremos de momento una suerte de estado de cosas urgente en torno a la poesía versal en la tipografía digital real, es decir, en TeX1. Conviene aclarar una vez más, y antes de empezar, que nos referimos a la composición tipográfica de los versos llamados «clásicos», donde por norma la tipografía suele aplicar de oficio una serie de procedimientos. El poeta tiene siempre el derecho a desautomatizar tales protocolos. Quizás sea el único tipo de autor que pueda jactarse de semejante bula. Y el tipógrafo, en el otro extremo, el deber de escucharlo y dialogar con él. Pero al poeta también le cabe el deber de adquirir una cierta noción del medio en que va a ser pubicado —el objeto que llamamos «libro»—, y de no pedir caprichos que no sólo van más allá de las normas básicas y más razonables de la tipografía, sino también de la naturaleza y de la física e incluso del sentido común. En la otra orilla el tipógrafo, por supuesto, goza del derecho de advertirle de todo aquello al poeta o, en última instancia, de ignorar sus demandas2.

El macro paquete verse.sty

Esta biblioteca de código, firmada en origen por Peter Wilson para Herries Press, es sin lugar a dudas la opción más completa que tenemos en el vasto ecosistema LaTeX para el tratamiento tipográfico serio de los versos: ya sea para componer libros enteros de poesía o para incluir poemas en cualquier otro contexto, por ejemplo las citas con fragmentos de poemas. Posee la gran virtud que siempre aplaudo en ciertos paquetes de LaTeX, y que es su carácter abstracto. Esto es, partiendo de una serie de macros básicas que hacen cada cual una cosa y la hacen bien (como Unix manda), podemos extenderlo y adaptarlo a nuestras necesidades particulares.

La pulpa del paquete no es otra que la redefinición del entorno verse de LaTeX, reemplazando al que viene «de fábrica», que es bastante limitado e ineficiente para componer versos. Éste, en efecto, y entre otras precariedades, nos sitúa el poema en un margen fijo hacia la izquierda de la página. La nueva versión nos proporcionará un argumento opcional donde poder declarar la anchura máxima entre la cual podrán expandirse los versos. Algo muy útil y que nos permitirá llevar a cabo procedimientos esenciales como el centrado óptico del poema en la página, como veremos a continuación.

Además de eso, verse cuenta con más funcionalidades útiles, como la numeración de versos en el margen junto a la posibilidad de controlar su formato secuencia, el sangrado automático de versos pares (entorno altverse), el encabalgamiento de versos o el tratamiento automatizado de los versos que abarcan más de una línea.

El entorno verse viene a ser el mismo, en lo que hace a su estructura, que el que proporciona LaTeX de manera estándar. Al igual que en éste, los versos han de terminar con el signo \\, salvo el último de cada estrofa. La separación estrófica, asímismo, se marca con una línea en blanco. A dicha separación podemos asignarle desde nuestro preámbulo un valor fijo (lo razonable sería lo equivalente a una interlínea: \baselineskip o 1.2em) o una longitud con propiedades elásticas (un glue, en la jerga de TeX) dentro de unos márgenes de plus y minus.

El centrado óptico del poema

El centrado óptico de los poemas en la página es de las cosas que más brillan por su ausencia en los libros de poesía publicados hoy día (véase fig. 1). En parte, porque los «maquetadores» o editores lo desconocen; en parte porque aquellos que sí saben de su existencia escurren grácilmente el bulto, pues estas técnicas hay que realizarlas a mano y a ojímetro (tabuladores, cajas de texto y demás triquiñuelas) en InDesign, el programa que se usa mayoritariamente para hacer libros y que no sabe hacer libros. Hay honrosas excepciones, ojo. Pero es una pena que prefieran anclarse en un software ineficiente e incompetente a todas luces y pagar desproporcionadas licencias propietarias de uso antes que estudiar la tipografía digital real y los medios y el flujo de trabajo coherentes con ella. Por supuesto, hay que estudiar y mucho, como para casi todo en esta vida, y tener curiosidad y no plegarse al conformismo. Nadie espera pilotar un avión de buenas a primeras y por inspiración.

versos_mal_bien.png

Figura 1: Incorrecta vs. correcta disposición óptica del poema en el marco de la página

El paquete verse nos proporciona los recursos necesarios para poder realizar un centrado óptico «guiado» del poema, tomando como referencia la anchura del verso más largo. Este verso se añade, literalmente, como valor de la longitud \versewidth mediante la orden \settowidth, justo antes de iniciar el entorno verse, al que le habremos pasado el valor de \versewidth como argumento opcional, para declarar que ésa es la anchura máxima del poema. Veamos un ejemplo con las dos primeras estrofas de la Sonatina de Darío:

%declaramos el verso más largo como valor de |\versewidth|
\settowidth{\versewidth}{La princesa está triste... ¿Qué tendrá la princesa?}

\begin{verse}[\versewidth] % <== Aplicamos esta longitud como argumento opcional del
                           % entorno, indicando que se trata de la anchura del poema

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}

Tras la compilación, el poema quedará centrado ópticamente entre sendos márgenes verticales de la página. Por supuesto, la longitud \versewidth es variable, y su valor se reiniciará cada vez que establezcamos un nuevo \settowidth.

Una función para Gnu Emacs

Para facilitar la inclusión de estos comandos en el editor GNU Emacs escribí esta función en elisp que realiza lo siguiente:

  1. En un poema señalado (marcado, en la jerga emacsiana) nos busque y copie el verso más largo;
  2. Nos encierre ese poema dentro del entorno antes descrito, con el valor de ese verso añadido a \versewidth.

Este breve vídeo muestra todo el procedimiento en acción.

El tratamiento de los versos que abarcan más de una línea

Este es un escenario que puede estar abierto a muchas y variadas estrategias. Optar por una u otra dependerá en gran medida del contexto, del tipo de poema, del libro que estamos componiendo, etc. El paquete verse ofrece una solución que podríamos tildar de «clasica», y que consiste en sangrar la línea o líneas del verso desbordado desde el margen izquierdo por un valor que se controla con la longitud \vindent. Ésta es la opción que yo suelo preferir y, de hecho, resulta casi la única posibilidad a escoger cuando el verso se desborda a lo largo de varias líneas. Pero, al margen de qué camino sigamos, parece haber una premisa que se impone: si el verso se desborda es porque el poema se ha expandido en algún lugar más allá de los márgenes de la caja de texto. La primera línea, por tanto, ha de ser siempre una línea justificada a ambos márgenes. Y (aunque asumo que en esto puede haber controversia), no debemos huir en este contexto del corte de palabras por guiones. Yo no lo hago. Ni TeX ni el paquete verse tampoco. Será el mayor aliado que tengamos aquí para facilitar la lectura. Y es que el habitual guionado sólo puede producir extrañeza cuando el lector no está ejerciendo el rol que debe ejercer ante una página, es decir, el de leer el poema y no mirar el poema. Y el rol que le toca a la tipografía (no debemos olvidarlo, señores «diseñadores gráficos») es el de guiar sutilmente, como un Virgilio cualquiera, al lector hacia su cometido.

Por tanto, si entendemos que la primera línea del verso se desborda, ya no tendría sentido declarar un valor para el verso más largo. En este caso, la longitud que debemos pasar como argumento opcional del entorno verse no será la variable \versewidth sino, directamente, \textwidth. En el momento en que el verso desborde ese margen, verse ya entiende el tipo de situación y se encargará de hacer los cálculos oportunos. Imaginemos un caso con un verso palmariamente largo que pueda abarcar varias líneas. Así, partiendo de este código fuente, donde la cadena de texto completa constituye un único verso (marcado al final con \\):

  \begin{verse}[\textwidth]

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec
hendrerit tempor tellus. Donec pretium posuere tellus. Proin quam
nisl, tincidunt et, mattis eget, convallis nec, purus. Cum sociis
natoque penatibus et magnis dis parturient montes, nascetur
ridiculus mus. Nulla posuere. Donec vitae dolor. Nullam tristique
diam non turpis. Cras placerat accumsan nulla. Nullam rutrum. Nam
vestibulum accumsan nisl.\\

  \end{verse}

Obtendremos tras compilar el resultado que se aprecia en la fig. 2. La macro de verse habrá sangrado las líneas restantes con el valor de \vindent, que en este caso tengo fijado a 1em.

versos-desbordados1.png

Figura 2: Tratamiento de los versos que abarcan más de una línea con el paquete verse.sty

Un tratamiento alternativo

Sin embargo, habrá ciertas situaciones en que la solución de sangrar las líneas desbordadas desde el margen izquierdo no sea la más satisfactoria. Un caso muy típico se da cuando es el propio poema el que ya nos viene con uno o varios versos sangrados, según ha dispuesto el poeta. Corremos el riesgo de confundir muy fácilmente al lector, que tendrá entonces que discernir más de una vez qué línea sangrada es continuación del anterior verso y cuál constituye un verso autónomo. En tales pasajes creo que la opción más aconsejable consiste en alinear el fragmento de verso desbordado a la derecha, tras un corchete o claudátur de apertura. El paquete verse.sty no trae este procedimiento automatizado «de fábrica», pero no es muy difícil ensayar un poco de código de alto nivel. Podemos definir, por ejemplo, un comando como éste:

\newlength{\vdesbordado}
% la anchura del makebox es el ancho de texto menos el valor de vindent (1em)
\def\vresto#1{\makebox[\textwidth-1em][r]{[#1}}

Y encerrar en nuestro comando \vresto{...} el tramo de verso que en una primera compilación nos resulta desbordado. El resultado de la compilación puede verse en la fig. 3.

\begin{verse}[12cm]
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit \vresto{tempor tellus.}\\
Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget,
convallis nec, purus. vestibulum accumsan nisl.\\
\end{verse}

versos-desbordados2.png

Figura 3: Tratamiento de los versos desbordados con el procedimiento del claudátur

Conflictos de verse.sty con otros paquetes

Naturalmente, uno habla aquí de los paquetes que más suele utilizar, y a partir de la experiencia puedo afirmar que verse.sty es un código bastante estable y que no suele acusar problemas de convivencia con otros macro paquetes. Sin embargo, hay dos en concreto donde se produce un choque frontal: microtype y el paquete para componer ediciones críticas filológicas reledmac.

El caso de microtype

No es especialmente traumático, dado que podemos cargar ambos paquetes en el preámbulo sin que suceda ninguna catástrofe. El único problema menor es que el entorno verse está basado en el entorno list, donde las esotéricas y microtipográficas propiedades de microtype no tienen efecto alguno. ¿Debe quitarnos esto el sueño? Sí —o, al menos, moderadamente sí— en caso de que juzguemos al margen izquierdo del poema con la misma legitimidad que tiene el margen real de la caja de texto en la página para admitir el alineamiento óptico o protrusion. Pero hay un contexto que nos puede desvelar aún más, y es aquél donde queramos aplicar la técnica del «colgado de diacríticos» para la poesía en griego politónico, que supone un caso extremo del alineamiento óptico de márgenes y del cual hablamos en la anterior entrada sobre El funeral de Sarpedón de Cavafis. Por suerte, existe una solución, no todo lo elegante y limpia que nos gustaría, pero que funciona: el hacking que sugiere el autor de microtype para el entorno list y que, por consiguiente, también resulta satisfactorio para el entorno verse. Si el lector desea más información, le remito a la mencionada entrada.

El caso de reledmac

Aquí ya entramos de lleno en el drama, pues el entorno verse sencillamente no funcionará dentro de una sección numerada de reledmac (o sea, el texto editado propiamente dicho de una edición crítica) y entregará un error grave de compilación. Cabe decir que reledmac cuenta con sus propios recursos para la composición de poesía versal, pero no es la clase de composición que aquí nos interesa, ya que consiste en un tratamiento del verso destinado a la edición crítica de poesía, especialmente de largas tiradas de versos, donde se siguen unos protocolos algo distintos de los que aquí estamos comentando, que es la edición de la poesía como un objeto artístico y un corpus literario para ser leído, más que un texto «crítico» anotado filológicamente, tal y como lo presentaría reledmac.

Aun así, dentro de estos textos anotados puede haber pasajes donde se citen unos versos o un poema entero, y en tal caso es preciso componer esa parte atendiendo a la norma del centrado óptico, si bien es común en las ediciones críticas que no se añada epacio antes ni después de los versos. Éstos, al formar parte del texto anotado filológicamente, entrarían en el cómputo de la numeración de lineas. Un ejemplo de lo dicho lo encontramos en esta página de Teubner, donde el autor editado (Dionisio de Halicarnaso) cita un fragmento de Safo:

Ejemplo_versocitado_Teubner.jpg

Figura 4: Disposición con centrado óptico de unos versos de Safo en una edición de Teubner

Como dije, no podemos usar dentro de una región textual donde actúa reledmac el entorno verse. Se me ocurrió, sin embargo, una solución definiendo el siguiente comando, que he puesto en práctica con óptimo resultado en una edición crítica del Calírroe de Caritón, trabajo que terminé recientemente (fig. 5). Para que este comando funcione correctamente, necesitamos cargar antes el paquete calc:

\usepackage{calc} %%%%%%%%%%%%%%%%%% se necesita para lo de los versos
\newlength{\verso} % anchura variable: el v. más largo del poema
\newlength{\versob} % anch. variable: es siempre el ancho de texto menos el verso más largo
\def\versolargo#1{\settowidth{\verso}{#1}}
\newenvironment{edpoema}%
{\setlength{\versob}{\textwidth-\verso}%
  \leftskip=0.5\versob %divide en dos para ambos márgenes
  \parindent=0pt % elimina la sangría de primera línea
}
{\par}

La anchura variable \verso, que va a definir siempre el verso más largo del pasaje citado, nos puede resultar útil también para este otro comando destinado a los versos que comienzan in media re, y que por tanto deben alinearse a la derecha (según convenciones de las ediciones críticas), tomando como margen el de dicho verso más largo:

\def\finverso#1{\makebox[\verso][r]{#1}}

resultado-cariton.png

Figura 5: Detalle del centrado óptico de los versos en una edición crítica compuesta por el autor de este artículo

El macro paquete gmverse.sty, ¿una alternativa a verse.sty?

La biblioteca de código gmverse, escrita por Grzegorz Murzynowski y cuya última versión se remonta al 2008, pretende ser una redefinición completa y desde cero del entorno verse, lo cual implica que ya no estamos ante un entorno, en este caso, dependiente del entorno list. Aparte de eso, el paquete aporta una serie de características novedosas, pero destacaremos aquí dos que son especialmente interesantes: el centrado óptico «automático» y el tratamiento, igualmente «automático», de los versos que desbordan la línea, realizado mediante la técnica del alineamiento a la derecha y el corchete.

Centrado óptico automático

Junto a un centrado óptico guiado al estilo de verse (en este caso, mediante el comando \versecenterdue{...}, en que se encerraría el verso más largo del poema a centrar), la característica de un centrado óptico que se ejecute de manera automática es ciertamente innovadora. No contento con eso, además, el autor aporta cuatro variantes, cuyos entresijos técnicos y matemáticos explica en la documentación del paquete3: \vocweigh1, \vocweigh2, \vocweigh3 y \vocweigh8.

gmverse.png

Figura 6: Un detalle de la documentación de gmverse.sty donde se explica el centrado óptico automático

Sin embargo, he de decir que ninguna de las cuatro opciones logra centrar el poema de manera perfecta. Todas fallan (unas más que otras) por un pequeño margen positivo o negativo, si comparamos (fig. 7) sus resultados con los del centrado guiado, que son los correctos.

comparacion-centrados.png

Figura 7: Comparación del centrado óptico automático con el centrado «guiado»

Tratamiento automático de los versos desbordados

El comando \versehangright, es el que se encarga del alineamiento a la derecha del verso que desborda la línea. Es la opción por defecto. De hecho, es la única opción para este tipo de contextos; es decir, que ni existe un \versehangleft ni debemos esperarlo. Si deseamos, además, que la línea desbordada se encierre en el típico claudátur, tendremos que declarar antes el comando \versehangrightsquare. Ahora bien, como ya dijimos más arriba, los casos de verso desbordado implican que el poema se ha llegado a expandir en un punto determinado más allá de los márgenes izquierdo y derecho de la caja de texto, así que la primera línea del verso ha de estar justificada a ambos márgenes. Por defecto, gmverse aplica una pequeña sangría a todo el poema desde el margen izquierdo, cuyo valor controla el comando \verseleftskip y que debemos poner previamente a cero: \verseleftskip=0pt. De todas formas, por el margen derecho también se evita la justificación completa, como se puede apreciar en el breve vídeo que he hecho para ilustrar el procedimiento.

Uso de gmverse conjuntamente con verse

En teoría sería posible, según la documentación del paquete, si añadimos la opción local al cargarlo en el preámbulo. En este caso, las macros de gmverse no se aplicarían por defecto y habría que declararlas previamente. No obstante, si bien el tratamiento de los versos desboradados en versión de gmverse funciona correctamente y puede convivivir sin problemas con el de verse, la opción del centrado automático del primero se comporta de forma errática si la activamos de manera local.

En suma

La poesía constituye un caso muy particular dentro de la composición tipográfica y la producción de libros. Pero en ese quehacer también representa un perfecto ejemplo de lo que podríamos denominar la capa semántica de la tipografía, que se movería en una órbita superior a su capa física o pragmática. Allí mismo, más abajo, el tipógrafo (incluyendo a nuestro tipógrafo binario TeX) sólo ve palabras, líneas y párrafos. Pero estas líneas, en ocasiones, han de entenderse también como versos. LaTeX, que es la cara semántica de TeX, lo comprende estupendamente, y por eso se convierte (como en cualquier otro aspecto de la composición libresca) en la perfecta herramienta y en el mejor aliado del tipógrafo digital. Por eso mismo, también, un entorno de LaTeX tenía que acabar llamándose verse.

Por otra parte, paquetes de factura más reciente como gmverse.sty han aportado novedades muy interesantes. Si bien es una lástima que su desarrollo haya quedado algo estancado. En todo caso, el código está ahí, abierto y al alcance de todos. No hace falta insistir en que el ecosistema TeX es conocimiento libre. Y probablemente no se haya dicho la última palabra en este vasto ámbito respecto al centrado óptico automático de los poemas.

Actualización de 26/11/21: una función en Lua para los versos con claudátur

Una de las características esenciales de LuaTeX, y la que precisamente da nombre a esta versión del motor tipográfico, es la de poder acceder a los entresijos de TeX mediante scripts en Lua, de una forma limpia, simple y quirúrgica, y asociarlos a distintos callback o grupos especializados de funciones de forma que se ejecuten en puntos determinados del proceso de compilación. Dado que contamos con un callback llamado post_linebreak_filter, o sea, específico para todo código que ha de entrar en acción cada vez que TeX corte una línea, se me ocurrió escribir y asociarle esta función, para que aquellos versos desbordados se ajusten automáticamente a la derecha, tras un claudátur, según el procedimiento que vimos en Un tratamiento alternativo. La ventaja es que funciona bien con el paquete verse y supone una solución alternativa y automatizada para los versos desbordados, que ya hemos visto que el paquete verse los trata mediante sangrías.

Primeramente, debemos definir una nueva caja para nuestro claudátur:

\newbox\claudatur

\setbox\claudatur=\hbox{[}

Nuestra función en Lua, encerrada en el entorno luacode, del paquete del mismo nombre, pintaría tal que así:

versos_desbordados = function(head)
   local last_line = nil
   for line in node.traverse_id(node.id("hlist"), head) do
      if last_line then
         local has_userpenalty = false
         for pen in node.traverse_id(node.id("penalty"), last_line.list) do
            if not has_userpenalty then
               has_userpenalty = (pen.subtype == 0 and pen.penalty == -10000)
            else
               break
            end
         end
         if not has_userpenalty then
            line.head = node.insert_before(line.head,line.head,node.copy(tex.box.claudatur))
            x = node.new("glue")
            x.stretch = 2^16
            x.stretch_order = 3
            line.head = node.insert_before(line.head,line.head,x)
            x = node.new("glue")
            x.stretch = 2^16
            x.stretch_order = 2
            line.head = node.insert_before(line.head,line.head,x)
         end
      end
      last_line = line
   end
   return head
end

Y ya sólo nos quedaría definir dos comandos para activar y desactivar la función a voluntad, es decir, para asociarla y desligarla del callback, respectivamente:

\newcommand\onclaudatur{%
  \directlua{luatexbase.add_to_callback("post_linebreak_filter",
    versos_desbordados, "versos_desbordados")}

\newcommand\offclaudatur{%
  \directlua{luatexbase.remove_from_callback("post_linebreak_filter",
    "versos_desbordados")}

Podemos poner el código en práctica con estos versos de Auden, y los márgenes adecuados para garantizar el desbordamiento de algunos versos. El resultado de la compilación, en la fig. 8.

\onclaudatur
\poemtitle{In memory W.B. Yeats (W.H. Auden, fragmento)}
\begin{verse}
But for him it was his last afternoon as himself,\\
An afternoon of nurses and rumours;\\
The provinces of his body revolted,\\
The squares of his mind were empty,\\
Silence invaded the suburbs,\\
The current of his feeling failed; he became his admirers.

Now he is scattered among a hundred cities\\
And wholly given over to unfamiliar affections,\\
To find his happiness in another kind of wood\\
And be punished under a foreign code of conscience.\\
The words of a dead man\\
Are modified in the guts of the living.

But in the importance and noise of to-morrow\\
When the brokers are roaring like beasts on the floor of the bourse,\\
And the poor have the sufferings to which they are fairly accustomed\\
And each in the cell of himself is almost convinced of his freedom\\
A few thousand will think of this day\\
As one thinks of a day when one did something slightly unusual.

What instruments we have agree\\
The day of his death was a dark cold day.\\
\end{verse}

yeats.png

Figura 8: Versos desbordados con claudátur (ejemplo con un poema de Auden)

Publicado: 29/09/19

Ú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:

1

Nos ceñiremos, no obstante, sólamente al formato LaTeX.

2

Como por desgracia ha venido sucediendo en tantas otras cosas, el Microsoft Word ha hecho estragos entre algunos poetas, lastrándolos de no pocos desvaríos tipográficos, de los cuales probablemente estarían a salvo si empleasen un editor de texto en condiciones o, al menos, una máquina de escribir. O incluso bolígrafo y papel. Les serviría también de saludable penitencia.

3

Documentación que, dicho sea de paso, no es precisamente un ejemplo de claridad de cara a un público más general, y en la que a menudo se hace necesario navegar por el código para llegar a entender las diversas funcionalidades o enterarnos de su existencia.

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