Representar gráficamente la línea base, la altura «x» y la altura de las mayúsculas con LuaTeX
Puede haber ocasiones en que necesitemos representar gráficamente ciertas rejillas de
escritura en nuestro texto, como por ejemplo el trazo de las líneas base. En el ecosistema
TEX hay muchas y variadas formas de lograr esto, si bien he encontrado una
especialmente sencilla para LuaTEX mediante una simple función en Lua anclada al
callback que recoge los procesos destinados a actuar justo después del corte de líneas
(post_line_break_filter
). En el ejemplo que vamos a ver no sólo dibujaremos la línea
base sino también la línea de la altura «x» de la fuente actual y la línea de la altura de
las mayúsculas, cada una en un color. Y, posteriormente, definiremos un entorno que tenga
como argumentos obligatorios el cuerpo de letra e interlineado y como argumento opcional
la familia de la fuente a representar. Vamos a necesitar tikz
y xcolor
, así como
fontspec
para la definición de fuentes y xparse
para facilitar nustra definición del
entorno, de modo que procedemos a cargarlos sin demora:
\usepackage{tikz,xcolor} \usepackage{xparse} \usepackage{fontspec}
A continuación definiremos un par de comandos, por comodidad, para la altura «x» y para la altura de la mayúsculas. Este último, tal vez y dependiendo de la fuente, haya que redefinirlo al vuelo. La altura «x», naturalmente, siempre será el valor de 1ex:
\newcommand{\alturax}{1ex} \newcommand{\alturamay}{1.6ex}
Y nos queda por definir una caja, donde encerrar el contenido gráfico:
\newbox\rejillas
Le toca el turno a nuestra función en Lua para post_line_break_filter
. La podemos
incluir simplemente dentro de la primitiva directlua
:
\directlua{
rejilla = function(head)
for linea in node.traverse_id(node.id("hlist"), head) do
node.insert_after(linea.list, node.tail(linea.list),node.copy(tex.box.rejillas))
end
return head
end
}
Y, finalmente, nuestro entorno, definido con la siempre cómoda sintaxis de xparse
(recordemos que nuestro argumento opcional será la familia de la fuente):
\NewDocumentEnvironment{rejilla}{o m m}{% \IfNoValueF{#1}{\fontspec{#1}} \fontsize{#2}{#3}\selectfont \setbox\rejillas=\hbox{% \fontsize{#2}{#3}\selectfont \begin{tikzpicture}[overlay] \draw[teal!60] ((-\textwidth,\alturamay) -- ++(\textwidth,0); \draw[red!60] ((-\textwidth,\alturax) -- ++(\textwidth,0); \draw[black!35] ((-\textwidth,0) -- ++(\textwidth,0); \end{tikzpicture}} \directlua{luatexbase.add_to_callback("post_linebreak_filter", rejilla, "rejilla")} } {% \normalfont\par% \directlua{luatexbase.remove_from_callback("post_linebreak_filter", "rejilla")} }
Unos ejemplos de uso (el resultado de la compilación en fig. 1):
Adobe Garamond + Minio Pro + Sabon \begin{rejilla}{20pt}{24pt} {\fontspec{Adobe Garamond}Lorem ipsum} {\fontspec{Minion Pro}Lorem ipsum} {\fontspec{Sabon LT Std}Lorem ipsum} \end{rejilla} \bigskip \renewcommand{\alturamay}{1.5ex} TeX Gyre Pagella \begin{rejilla}[TeX Gyre Pagella]{20pt}{24pt} Lorem ipsum dolor sit amet LOREM IPSUM DOLOR SIT AMET \end{rejilla} \bigskip Optima \begin{rejilla}[Optima LT Std]{20pt}{24pt} Lorem ipsum dolor sit amet LOREM IPSUM DOLOR SIT AMET \end{rejilla}
Figura 1: Varios ejemplos con la representación gráfica de la línea base, la altura «x» y la altura de mayúsculas
∞
Publicado: 22/01/22
Última actualización: 22/01/22
Esta obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internacional.