LaTeX no es el futuro de los documentos
Recuerdo que en mi primer semestre en Plan Común de Ingeniería, nos enseñaron a usar LaTeX para escribir informes y tareas. Desde entonces, en todo contexto académico he notado en el inconsciente colectivo—incluyéndome—la creencia de que la única forma de escribir documentos serios es usando LaTeX.
Lo bueno de
A diferencia de editores WYSIWYG (what you see is what you get) como Microsoft Word o Google Docs, la filosofía de LaTeX es separar el contenido de la presentación. En Word eres autor y diseñador a la vez, mientras que en LaTeX (idealmente) solo te enfocas en el contenido, plasmándolo directamente en un archivo de texto plano mientras que el compilador se encarga de los márgenes, espaciados, tamaños, etcétera.
Aunque LaTeX no inventó esta filosofía, sí fue uno de los primeros en llevarla a cabo exitosamente, y hoy es el estándar en varias disciplinas académicas (principalmente en matemática, física y ciencias de la computación). Parte del éxito de LaTeX se lo atribuyo a este ideario: a un académico le interesa enfocarse más en el contenido que la presentación.
Además de esta filosofía, y antes de ponerme en modo hater, los siguientes aspectos de LaTeX me parecen positivos:
- El resultado suele ser bonito, casi sin esfuerzo.
- Es particularmente bueno y superior con respecto a sistemas WYSIWYG para escribir matemáticas, lo cual explica el tipo de disciplinas en las que predomina.
- El texto plano funciona muy bien con control de versiones y diffs.
- Tiene una gran comunidad que ha creado paquetes para casi todo.
Lo malo de
Antes de comenzar mi rant, quiero aclarar que valoro mucho el aporte histórico de TeX y LaTeX.
Para entender los problemas de LaTeX, tenemos que fijarnos un poco en la historia. En los ‘70, Donald Knuth se encontraba trabajando en su magnum opus, The Art of Computer Programming, cuando al ver una prueba impresa de cómo quedaría su libro se decepcionó de cómo se veía. Siendo la leyenda que es, su solución fue diseñar y programar un sistema de typesetting desde cero, al cual bautizó como .
TeX es muy bueno como typesetting engine, en el sentido de que los resultados que produce son funcionales y muy estéticos. El lenguaje era bueno hace 50 años, pero hoy resulta arcaico.
Cómo funciona TeX
No soy experto en TeX ni en teoría de lenguajes de programación, pero hace años le eché un ojo a TeX by Topic: a TeXnician’s Reference y descubrí que, aunque en detalle es bien complicado, la esencia de TeX es sencilla.
De forma muy simplificada, TeX entiende el input como una secuencia de tokens. Un token puede ser un carácter que participa del texto final, como por ejemplo las letras de una palabra de algún párrafo, o bien pueden ser control sequences, que se indican comenzando con un \. Éstos pueden ser macros, primitivas, y registros (variables).
Algunas control sequences se pueden expandir en más tokens, incluso recursivamente, y otras, como la mayoría de las primitivas, no. Por ejemplo el macro \TeX que dibuja el logo se expande en:
T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX
que son las letras T, E y X junto a varias primitivas que las desplazan con sus argumentos que son distancias.
Y eso es casi todo lo esencial. Hay otras cosas, como parameter tokens y category codes, pero no me odio lo suficiente como para ahondar en ello.
Mi punto es que TeX es muy rústico. A diferencia de cualquier lenguaje moderno, TeX no tiene un AST, si no que el parsing y la ejecución ocurren simultáneamente. Dado que un macro puede cambiar el significado de cualquier carácter en cualquier momento, es matemáticamente imposible construir de manera estática un AST.
Esto dificulta implementar herramientas que a mi parecer son esenciales, como un linter, formatter, y casi cualquier funcionalidad de LSP. Existen estas herramientas, y funcionan en la práctica, pero con limitaciones.
El lenguaje es casi más cercano a una máquina de turing física con cinta y todo que a un lenguaje de programación moderno. El mayor problema que esto genera es que intentar programar cualquier tipo de lógica en TeX es doloroso. A continuación, ejemplos de código que me parecieron divertidos:
\ifx\maxof#1%
\expandafter\expandafter\expandafter\expandafter
\expandafter\expandafter\expandafter\calc@maxmin@addsub
\else
\calc@numeric% no \expandafter needed for this one.
\fi\newcommand{\suf}[3][0]{
\ifthenelse{\value{afirm}=0}{
\stepcounter{afirm}
\begin{enumerate}[align=right, itemsep=#1pt, topsep=0.5cm, leftmargin=2.4cm, label=(\arabic*)]
}{}
\ifx$#2\ifx-#3\def\nnext{#2\mathllap{#3}}\else\def\nnext{#2#3}\fi
\else\def\nnext{#2#3}\fi
\item\nnext
}\newcount\i
\i=1
\def\myloop{%
\the\i\space
\advance\i by 1
\ifnum\i<6
\let\next\myloop
\else
\let\next\relax
\fi
\next
}
\myloopMacros, todo son macros
Ahora llegamos a la explicación de qué es LaTeX:

LaTeX es básicamente una mega colección de macros de TeX, junto con algunas herramientas de compilación, que hacen la vida mucho más fácil y nos acercan más a la filosofía de centrarnos en el contenido, ya que ahora podemos escribir \section{Introducción} y comenzar a escribir una introducción. En TeX habría que manualmente escoger la fuente, el tamaño, colocar el espaciado vertical y manejar el contador de la sección, mientras que el macro \section automatiza todo eso.
También tiene paquetes hechos por la comunidad, que también son básicamente colecciones de macros, y para mi la única razón por la que LaTeX ha sobrevivido. ¡Hacer un ciclo for es más fácil que nunca!
\usepackage{pgffor}
\foreach \i in {1,...,5} {
\i
}
Este paquete básicamente implementa un parser, lo que habilita esta sintáxis. Estamos usando primitivas de TeX para programar un parser que nos permite escribir este ciclo, por lo que es normal que un código así de sencillo se expanda en cientos, si no miles de primitivas y macros de TeX. Y en el momento que necesitas hacer algo más complicado que un for, volvemos al mismo problema del código ilegible. LaTeX está sujeto a las mismas limitaciones de TeX, que ninguna profundidad en el ya casi infinito árbol de macros puede resolver.
Mención honrosa a la gente de TikZ y paquetes PGF, unos verdaderos hechiceros de los macros.
Los problemas de LaTeX
Intentaré ser conciso, listando los problemas de mayor a menor gravedad para mi:
- Ineficiencia: Compilar un documento grande puede tomar mucho tiempo, minutos incluso. Claro, un solo macro de LaTeX se puede expandir en cientos de macros y primitivas de TeX. Al final, estamos dependiendo de tecnología de los ‘80. No existen técnicas modernas como compilación incremental. Hace poco Overleaf comenzó a poner un límite de tiempo de compilación para los usuarios gratuitos, y he escuchado a varios quejarse de ello.
- Errores incomprensibles: Los errores suelen ser complejos de entender, o no tener relación alguno con la abstracción de LaTeX a la que se enfrenta el usuario. ¿Qué es una overfull hbox? Apenas hay un error en las profundidades de la expansión de macros, la fachada del edificio que es LaTeX se cae y se ven todas las tuberías oxidadas de hace 50 años.
- Curva de aprendizaje: Al ser un lenguaje tan distinto, la curva de aprendizaje de LaTeX es bastante mala, como los errores son malos, la mayoría de las personas intenta cambiar cosas al azar hasta que funciona.
- Estancamiento: Donald Knuth anunció en 1990 que el diseño de TeX sería congelado y solo recibiría bug fixes. LaTeX2e salió en 1994, y desde esa misma década han habido planes para LaTeX3, el cual traería una nueva capa de programación (más macros). LaTeX3 se canceló, pero en 2018 se integró a LaTeX2e con la sintáxis de
expl3. No ahondaré en esto porque aunque soluciona algunos problemas, creo que sigue manteniendo varios. Acá hay ejemplos de cómo se ve (spoiler: son macros). - Instalación: Para instalar LaTeX no hay un método “oficial”, si no que hay que escoger alguna “distribución de TeX”, que es básicamente una colección de los binarios, scripts y librerías necesarias para compilar LaTeX. Muchas de estas distribuciones pesan varios gigabytes.
- Desarrollo de paquetes: Crear paquetes o templates es extremadamente complicado debido a que usar LaTeX como lenguaje de programación es extremadamente complicado, como vimos antes.
- Documentación: La documentación es un desastre. Obviamente no hay nada oficial, así que uno depende de lo que pueda encontrar por ahí. Suerte buscando documentación de cualquier cosa que no sea super usada. Los paquetes tienen la costumbre de poner toda su documentación en un solo pdf.
Mi historia con LaTeX
Cuando aprendí LaTeX, me encantó. Pude producir documentos hermosos con cero habilidad de diseño, y más encima escribiendo código que es algo que me gusta. Entiendo la sensación de que es la buena forma de escribir documentos, e incluso entiendo el apego que le genera a mucha gente que ya lleva cientos de horas escribiendo LaTeX y puede usarlo fácilmente en el día a día.
En 2019, por coincidencias de la vida, me tocó desarrollar un par de templates en LaTeX. Mientras más aprendía de LaTeX, más comenzaba a notar sus problemas. En los siguientes años, mientras más aprendía sobre computación, me di cuenta que LaTeX era totalmente arcaico.
Entre 2020 y 2022 me pregunté varias veces por qué no existía una alternativa moderna a LaTeX, hasta que en 2023 conocí mi nueva esperanza.
Typst
Un día de Mayo de 2023, mi amigo Eric descubrió Typst, y lo envió por un grupo. Typst es el intento más ambicioso de crear una alternativa moderna a LaTeX que he visto. Su compilador es open source y está escrito en Rust.
Me pareció una maravilla, y sentí que me habían leído la mente. Inicialmente seguí el desarrollo de cerca con el escepticismo necesario, y con el tiempo me di cuenta que tiene todas las posibilidades de reemplazar a LaTeX.
Ventajas
Escribiré acerca de algunas cosas que me gustan. Primero, es un lenguaje moderno. Esto significa que tiene un AST, por lo que es fácil de parsear, con lo que rápidamente la comunidad creó herramientas excelentes como tinymist (revisa el perfil de GitHub de Myriad-Dreamin, es increíble la cantidad de proyectos geniales que mantiene). Además, esto lo hace mucho, mucho más eficiente que un sistema que va leyendo y expandiendo strings, junto con la compilación incremental: recompilar un documento que ya fue compilado es mucho más rápido, porque permite recompilar solo las partes que cambian.
Otro aspecto positivo es la sintáxis. Para alguien que sabe cualquier lenguaje moderno, es mucho más fácil entender Typst que LaTeX:
Y tiene features bien útiles como cargar datos de un CSV o varios otros formatos. En general el lenguaje es bien rápido de aprender, mucho más que LaTeX, sobre todo cuando quieres hacer algo más complicado.
Typst tiene muchísimas más ventajas. Por nombrar algunas:
- Los mensajes de error son útiles y entendibles.
- Tiene un sistema oficial de paquetes (aún algo minimalista, pero con un futuro ambicioso), y el proceso de descargar y usar un paquete consiste solamente en importarlo en tu código. Yo mismo creé un template para la Universidad, y fue increíblemente sencillo de hacer.
- Instalarlo es mucho más fácil y ligero. El compilador es solo un binario que pesa 50mb y, a diferencia de LaTeX, para la mayoría de las cosas no es necesario instalar paquetes ya que trae muchísima funcionalidad built-in. Aún tengo pesadillas con la vez que intenté instalar
texliveen una red lenta. - Los desarrolladores trabajan a tiempo completo en Typst, tienen un método de monetización razonable, que es la aplicación web (la cual a diferencia del compilador no es open source), como Overleaf pero con menos prácticas anti usuario, y tienen lazos estrechos con la comunidad.
- La documentación es infinitamente superior a la de LaTeX: typst.app/docs
Además, como está escrito en Rust, se puede transpilar fácilmente a WebAssembly. ¿No me crees? Boom, compilador web de Typst:
Mientras que Overleaf te baja el límite de tiempo de compilación a menos que pagues, la aplicación web de Typst compila localmente en tu navegador y órdenes de magnitud más rápido.
Nota que apenas escribes un carácter, se genera la previsualización instantáneamente. Esto es porque la compilación es muy rápida y permite recompilar en vivo al escribir cada carácter, lo cual funciona incluso en documentos grandes.
Concluyendo
Aunque Typst lleva pocos años existiendo, creo que ya ha logrado más que el proyecto LaTeX en cuarenta. Me parece mucho más rápido, ergonómico y satisfactorio trabajar con Typst; creo que ya es más poderoso que LaTeX y tiene una buena comunidad con unos desarrolladores apasionados y con una buena visión del futuro.
Me hace feliz ver el crecimiento y alcance que ha logrado desde 2023, y espero que logre superar la resistencia de journals para convertirse en el nuevo estándar.