En diciembre de 2023 arXiv empezó a publicar una versión HTML de los artículos que recibe. Tras más de treinta años de PDF exclusivo, el motivo del cambio fue la accesibilidad, y el conversor que hace el trabajo es LaTeXML. Hay otros caminos de LaTeX a HTML —make4ht (tex4ht), lwarp, pandoc— y la elección se reduce en realidad a una sola pregunta: ¿el programa ejecuta un motor TeX de verdad o analiza LaTeX por su cuenta? Respondida esa pregunta, lo demás viene solo: si sobreviven las macros propias, si las fórmulas llegan como MathML o como imágenes, y qué ocurre con las figuras de TikZ.
Solo hay dos familias de conversores de LaTeX a HTML
Una familia ejecuta TeX: tex4ht (manejado a través del front-end make4ht) y lwarp pertenecen a ella. La otra analiza LaTeX por su cuenta: ahí están LaTeXML y pandoc. La distinción no es una cuestión de gusto de implementación; decide la calidad de la conversión. El lado que ejecuta TeX deja que sea TeX quien expanda los \newcommand que usted escribió, de modo que las macros propias y los paquetes poco frecuentes suelen pasar. El precio es un truco llamativo —mirar la composición de reojo y armar HTML a partir de ella— y una cadena de herramientas pesada. El lado que analiza es rápido, produce una salida limpia y marca bien la semántica, pero lo que no conoce, no lo conoce. arXiv eligió LaTeXML porque quería llevar la estructura semántica de las fuentes recibidas —teoremas, referencias, la estructura de las fórmulas— hasta HTML y MathML; reproducir el aspecto de la página nunca fue el objetivo.
| Herramienta | ¿Ejecuta TeX? | Fórmulas por defecto | Procedencia |
|---|---|---|---|
make4ht | sí, mediante htlatex | en línea como HTML, aparte como imagen SVG | incluido en TeX Live |
lwarp | sí, dos compilaciones pdflatex paralelas | imágenes SVG; MathJax con la opción mathjax | incluido en TeX Live |
latexml | no, es un analizador en Perl | MathML | programa en Perl; no forma parte de TeX Live |
pandoc | no, reduce LaTeX a su propio AST | se elige con --mathml o --mathjax | programa en Haskell; no forma parte de TeX Live |
make4ht y tex4ht: el truco de mirar a TeX de reojo
Si ya hay un documento delante y solo hace falta HTML, el primer movimiento correcto es make4ht file.tex. Nada que instalar aparte: viene con TeX Live. El mecanismo es audaz. tex4ht deja que TeX componga el documento con normalidad mientras unos ganchos colados en el flujo DVI van emitiendo etiquetas HTML por el camino. Así, un documento que compila casi siempre se convierte, incluidas las órdenes definidas por uno mismo con \newcommand, porque las expande TeX y el conversor nunca necesita saber que existieron. Con un archivo de prueba que definía \newcommand{\stress}[1]{\textbf{\itshape #1}}, el HTML salió con un span correctamente en negrita cursiva. tex4ht lo escribió Eitan Gurari (1947–2009) en la Ohio State University, y lo mantuvo él solo desde 1996. Tras su muerte repentina en 2009, Michal Hoftich, Karl Berry y otros lo tomaron a su cargo. El README que se distribuye en TeX Live 2024 sigue diciendo que la documentación la escribió Gurari, el autor original, y que apenas se ha actualizado desde su fallecimiento.
# the friendly front-end: HTML5 by default, no options needed
make4ht file.tex
# the classic driver, still what make4ht calls underneath
htlatex file.tex "html5,charset=utf-8" " -cunihtf -utf8"Llamar a htlatex directamente aparece en muchos textos antiguos, pero hoy lo habitual es make4ht. Es un front-end de compilación escrito en Lua por Michal Hoftich: HTML5 de serie y una sola orden que además ejecuta bibtex o makeindex, posprocesa el HTML generado y convierte imágenes, con un archivo de build en Lua para los ajustes finos. Aun así, la salida de tex4ht a veces parece menos HTML que un apunte en HTML de la página compuesta. Por defecto los nombres de fuente de TeX se convierten en clases CSS: verá cmr-12, cmmi-10 y parientes sobre fragmentos sueltos de texto. Si la página va a la web, conviene contar desde el principio con sustituir doc.css o superponer una hoja de estilo propia. Las reglas de conversión de cada paquete viven en archivos de configuración .4ht; tex4ht en TeX Live 2024 trae 496.
Las fórmulas como MathML, como imágenes o como MathJax
Un simple make4ht file.tex convierte las matemáticas en línea en texto HTML y las fórmulas aparte en una imagen SVG. Probado sobre TeX Live 2024: $f\colon \R \to \R$ salió como texto corriente con ℝ, mientras que el contenido de \begin{equation} se convirtió en una imagen llamada doc0x.svg cuyo atributo alt guardaba una aproximación en arte ASCII de la fórmula. Ese valor por defecto se lee, pero se pixela al ampliar, no se puede copiar y no aparece en las búsquedas. Si las matemáticas son lo importante, hay que cambiar la salida con una opción. make4ht -u file.tex "mathml" produjo MathML también para las fórmulas aparte, dejando como imagen solo la figura de TikZ. make4ht -u file.tex "mathjax" deja las matemáticas en LaTeX dentro del HTML y coloca en el head una configuración window.MathJax y el cargador de MathJax 3.
# display math as an SVG image (the default)
make4ht file.tex
# display math as MathML — only TikZ pictures stay images
make4ht -u file.tex "mathml"
# leave the math as LaTeX and let MathJax 3 render it in the browser
make4ht -u file.tex "mathjax"Aquí está la trampa en la que solo caen quienes eligen mathjax: las macros propias no se expanden. MathML e imágenes son lo que TeX compuso, así que \newcommand ya se ha aplicado; el modo mathjax, en cambio, escribe las matemáticas tal cual, como fuente. En la prueba, un documento que definía \newcommand{\R}{\mathbb{R}} produjo HTML con un literal \(f\colon \R \to \R \), y no se emitió ni una sola de las definiciones \newcommand. MathJax, en el navegador, no ha oído hablar de \R, así que esa fórmula se convierte en un error rojo de macro no definida. La solución es repetir las macros en la configuración de MathJax (tex.macros dentro de window.MathJax). Dicho al revés: para un documento cargado de macros propias, mathml es más seguro — y también por accesibilidad, ya que un lector de pantalla lee MathML, no una imagen.
lwarp: componer el HTML dentro de un PDF y volver a sacarlo
lwarp, de Brian Dunn, ataca el mismo problema desde un ángulo completamente distinto. Se apoya en la propia maquinaria de salida de LaTeX: hace que pdflatex componga el código fuente HTML como si fuera texto corrido y después pdftotext extrae ese texto del PDF resultante para escribirlo en un .html. Ese es el mecanismo de verdad: abra el lwarpmk.lua que viene con TeX Live y encontrará la línea que llama a pdftotext -enc UTF-8 -nopgbrk -layout. Con un documento de prueba de cuatro secciones, el PDF intermedio usado para generar el HTML llegó aquí a 16 páginas. El rodeo tiene su razón: referencias cruzadas, índice general, índice analítico y bibliografía de LaTeX siguen funcionando igual que siempre. lwarp lleva una reimplementación del lado HTML para cada paquete que admite, y TeX Live 2024 distribuye 593 archivos lwarp-*.sty.
% lwarp must be loaded BEFORE anything that pulls in color, graphics or hyperref
\documentclass{article}
\usepackage{lwarp}
\usepackage{amsmath,amssymb}
\usepackage{tikz}
\usepackage{hyperref}
% repeat your own macros for MathJax mode:
% \CustomizeMathJax{\newcommand{\R}{\mathbb{R}}}pdflatex doc.tex # first pass writes lwarpmk.conf and doc_html.tex
lwarpmk html # build the HTML
lwarpmk limages # render the math and picture imagesLo primero con lo que se tropieza al ejecutarlo de verdad es el orden de carga. Poner \usepackage{lwarp} después de tikz detuvo la compilación con ! Package lwarp Error: Package color, or one which uses color, must be loaded after Lwarp. lwarp debe cargarse antes que casi todo lo demás, y ese es el mayor obstáculo para injertarlo en un documento ya existente. Las fórmulas se convierten por defecto en imágenes SVG, pero el atributo alt lleva la fuente LaTeX literal y el elemento recibe role="math" (con \usepackage[mathjax]{lwarp} se pasa a MathJax, y las macros propias se reponen con \CustomizeMathJax). Las imágenes las produce un paso aparte, lwarpmk limages, que internamente ejecuta pdfseparate, luego pdfcrop y luego pdftocairo -svg: exactamente la cadena que describe la página de este sitio sobre exportar figuras como imágenes.
LaTeXML y la vía HTML de arXiv
LaTeXML es un conversor escrito en Perl por Bruce Miller en el National Institute of Standards and Technology (NIST) de Estados Unidos. Primero reduce LaTeX a XML semántico y de ahí escribe HTML5 con MathML, ePub, JATS y más. El trabajo va en dos etapas: latexml construye el XML y latexmlpost lo convierte en HTML. Esa división separa el análisis de la presentación, de modo que un mismo XML rinde varios formatos de salida. Las ediciones HTML de arXiv, en servicio desde diciembre de 2023, vienen de la misma estirpe: el proyecto anterior de arXivLabs, ar5iv, ya convertía todo el corpus con LaTeXML. Para trabajos cargados de matemáticas donde importan la semántica y la accesibilidad, es el primer candidato. LaTeXML, sin embargo, no forma parte de TeX Live. Hay que instalarlo aparte como distribución de Perl; en la máquina usada para este artículo no estaba latexml, así que la descripción de las dos etapas anteriores sigue la documentación oficial y no una ejecución local.
# LaTeXML is a separate Perl install, not part of TeX Live
latexml --dest=file.xml file.tex
latexmlpost --dest=file.html file.xml # HTML5 + MathML¿Hasta dónde llegan realmente las macros propias y TikZ?
Con franqueza: un documento que se apoya en macros propias y en TikZ no se convierte limpiamente. Para las macros propias, la familia que ejecuta TeX (tex4ht, lwarp) lleva ventaja: TeX las expande y el conversor ni siquiera ve la orden original. Pero lo que deja la expansión son instrucciones visuales, negrita o cursiva, no significado, así que no aparece ninguna etiqueta HTML semántica. \newcommand{\keyterm}[1]{\textbf{#1}} dará el equivalente de <b>, nunca un <dfn>. TikZ exige un compromiso todavía más seco: tex4ht y lwarp llegan a la misma conclusión y pegan la figura como imagen. En el experimento hecho aquí, el gráfico de TikZ se convirtió en un único SVG llamado doc0x.svg cuyo texto alt no era más que las etiquetas de los nodos encadenadas. Si quiere una figura que signifique algo en HTML, el camino rápido no es esperarlo del conversor sino exportar la figura por separado y escribir usted mismo el alt.
Cuál elegir, según lo que esté haciendo
- Solo quiere HTML y ninguna cadena de herramientas nueva →
make4ht file.tex. Viene con TeX Live y funciona sin tocar el documento. - Quiere MathML (mejor para lectores de pantalla, búsqueda y ampliación) →
make4ht -u file.tex "mathml", o LaTeXML. - Necesita una edición web seria que conserve las funciones de LaTeX →
lwarp, pero solo para un documento donde\usepackage{lwarp}pueda ir primero. - Busca un artículo HTML semántico al estilo de arXiv →
LaTeXML(Perl; se instala aparte de TeX Live). - La fuente es Markdown y basta con una salida ligera →
pandoc(Haskell; se instala aparte). Su soporte de entrada LaTeX es parcial. - Las figuras TikZ son lo importante → no las delegue: exporte cada figura por separado en SVG y escriba usted el texto
alt.