Superíndices y subíndices reales y falsos en LuaTeX
Las propiedades OpenType etiquetadas como SUPS
y SUBS
permiten a las fuentes representar los superíndices y los
subíndices reales, respectivamente, mediante glifos diseñados a tal efecto, sin necesidad de delegar en las triquiñuelas
de escalado y posición del software editor de turno. La ventaja tipográfica es evidente, por la legibilidad y
consistencia que ganará el texto si se emplean letras dibujadas ad hoc y no las recicladas o sintetizadas. Siempre que
se pueda, por tanto, recomiendo usar esta opción.
Figura 1: Superíndices reales (arriba) y sintetizados (abajo) en la fuente Linux Libertine
En LuaLaTeX y en XeLaTeX, el imprescindible paquete fontspec
permite aplicar ambas propiedades mediante las opciones
VerticalPosition=Superior
y VerticalPosition=Inferior
. Por formato directo podemos hacer, por ejemplo, esto cada vez
que necesitemos colocar un superíndice:
... palabreja{\addfontfeature{VerticalPosition=Superior}34}
o, mejor, definir un comando para usar a costa del habitual \textsuperscript{}
:
\def\misup#1{{\addfontfeature{VerticalPosition=Superior}#1}} ... palabreja\misup{34}
Inevitablemente, se producirían unas cuantas inconsistencias: sin ir más lejos con las marcas de notas al pie, que
seguirían siendo glifos escalados. Habría que tomarse la molestia de redefinirlas. Por suerte, contamos con otro paquete
indispensable, realscripts
, que nos dispensa de todo eso. Si cargamos este paquete en nuestro preámbulo después de
fontspec
, se ocupará de aplicar la propiedad OpenType necesaria allí donde haya un superíndice o un subíndice. Además
ofrece un par de opciones a los comandos nativos de LaTeX \textsuperscript
y \textsubscript
. Las versiones con un
asterisco (\textsuperscript*
y \textsubscript*
) producirán los «antiguos» glifos escalados; las que no llevan
asterisco nos darán los glifos OpenType.
Sin embargo, conviene andarse con ojo en un detalle. La variedad de superíndices y subíndices auténticos que ofrecen las fuentes puede ser muy diversa, y son más bien pocas las que están dotadas de un juego completo de caracteres alfanuméricos básico. No digamos ya si precisamos para esas posiciones signos de naturaleza más exótica. De ello se desprende una obligación (acaso un deber) para todo compositor tipográfico que se precie: conocer a fondo la fuente con que se va a componer, sus virtudes, sus defectos y sus limitaciones. Por ejemplo, la fuente Old Standard (que yo uso bastante) sólo dispone de caracteres numéricos para superíndices y subíndices, de forma que si escribimos algo como
... palabreja\textsuperscript{abcd1234}
nos toparemos con esto tras compilar:
Figura 2: La fuente Old Standard sólo dispone de caracteres numéricos para los superíndices OpenType
Así que tendríamos que ir alternando entre las versiones con o sin asterisco de los comandos de turno, lo cual —admitámoslo— es una lata. Pero si estamos en el maravilloso LuaTeX podemos salir del paso fácilmente con un poco de código Lua que nos haga el apaño.
Empecemos ensayando una sencilla función para ejecutar en el pre-procesado, y que actúe sólo sobre caracteres alfabéticos en el contexto necesario (téngase en cuenta que el ejemplo que sigue es para los superíndices):
\usepackage{realscripts} \usepackage{luacode} %% Código Lua \begin{luacode} function cambiar_superindice ( super ) super = string.gsub ( super, "\\textsuperscript{%a+}", "\\textsuperscript*{%0}" ) return super end \end{luacode}
Es decir, cuando el comando \textsuperscript
encierra uno o más caracteres alfabéticos (clase
%a
), se le añadirá el asterisco para que se genere el superíndice a la manera «antigua», escalada. Sólo queda definir
un comando para LaTeX que active la función Lua de manera global en todo el documento:
\newcommand\superalfabet{\directlua{luatexbase.add_to_callback ( "process_input_buffer" , cambiar_superindice , "cambiar_superindice" )}}
Ahora bien, encontraremos que esto nos trae un par de inconvenientes. A saber:
- Sólo nos serviría en caso de que nuestro texto contenga superíndices con caracteres numéricos y alfabéticos claramente separados. Si ambos se mezclasen impredeciblemente en un sólo superíndice, entonces la función Lua que hemos definido arriba no sería la idónea.
- Y, lo más importante, está el inconveniente esencialmente tipográfico, ya que perderemos consistencia cuando aprezcan superíndices reales y falsos desperdigados aquí y allá en nuestro documento. Probablemente sea necesario hacer algunos ajustes de escalado y posición (según la fuente) para intentar igualar el aspecto lo más posible. Y aun así, quedará por valorar si nos compensa un apaño de este tipo.
Por último, ¿qué ocurriría si nuestros superíndices cobijan arbitrariamente tanto letras como números? Pues habría que dar algo más de vueltas, pero la solución se presume igualmente sencilla en LuaTeX. O, al menos, el remiendo.
En primer lugar, definiríamos un comando para escalar y posicionar los caracteres alfabéticos, en lugar de usar
\textsuperscript
(los valores de escalado y posición intentan adaptarse a Old Standard. Para este ejemplo al vuelo
usamos puntos, una medida absoluta. Para trabajar a varios cuerpos de letra sería más conveniente usar una medida
relativa, como em
o, mejor, ex
):
\def\alfasup#1{% {\addfontfeature{Scale=0.65} \raisebox{2.7pt}{#1}}}
A continuación, una función en Lua que encierra uno o más caracteres alfabéticos en el comando anterior:
\begin{luacode} function letrasup ( letra ) letra = string.gsub ( letra, "%a+", "\\alfasup{%0}" ) tex.print(letra) end \end{luacode}
Defino, entonces, un comando LaTeX cuyo argumento es la aplicación de la función Lua:
\newcommand{\letrasup}[1]{{\directlua{letrasup([[#1]])}}}
Para terminar, redefinimos \textsuperscript
añadiendo el comando previo, de manera que cualquier carácter alfabético
dentro del argumento de \textsuperscript
se convierta en un superíndice «falso», aunque razonablemente normalizado con
los verdaderos. A juzgar por el resultado (fig. 3), y aunque los valores de escalado y posición siempre
se puedan ajustar y limar un poco más, quedaría por ver de nuevo si la argucia nos compensa. Es decir, si preferimos el
mal menor o el mal mayor (ergo, usar superíndices únicamente falsos en esta fuente), pero coherentemente unificado.
Figura 3: Nuestros superíndices impostores y a continuación los verdaderos en la fuente Old Standard
∞
Publicado: 01/08/2019
Última actualización: 01/08/2019
Esta obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internacional.