En décembre 2023, arXiv a commencé à publier une version HTML des articles qu'il reçoit. Après plus de trente ans de PDF exclusif, le motif du changement était l'accessibilité, et le convertisseur à l'œuvre est LaTeXML. D'autres chemins mènent de LaTeX à HTML — make4ht (tex4ht), lwarp, pandoc — et le choix tient en réalité à une seule question : l'outil exécute-t-il un vrai moteur TeX, ou analyse-t-il LaTeX lui-même ? Une fois la réponse connue, tout le reste en découle : la survie des macros maison, la sortie des formules en MathML ou en images, et le sort des figures TikZ.
Il n'existe que deux familles de convertisseurs LaTeX vers HTML
La première famille exécute TeX : tex4ht (piloté par le front-end make4ht) et lwarp en font partie. La seconde analyse LaTeX elle-même : ce sont LaTeXML et pandoc. La distinction n'est pas affaire de goût d'implémentation, elle décide de la qualité de la conversion. Du côté qui exécute TeX, c'est TeX lui-même qui développe les \newcommand que vous avez écrits, si bien que les macros maison et les paquets confidentiels passent en général. Le prix à payer est un tour de force — observer la composition de côté et en reconstituer du HTML — et une chaîne d'outils lourde. Du côté qui analyse, c'est rapide, la sortie est propre et le balisage sémantique soigné, mais ce qu'il ne connaît pas, il ne le connaît pas. Si arXiv a choisi LaTeXML, c'est pour transporter la structure sémantique des sources reçues — théorèmes, références, structure des formules — vers HTML et MathML ; reproduire l'apparence de la page n'a jamais été le but.
| Outil | Exécute TeX ? | Formules par défaut | Provenance |
|---|---|---|---|
make4ht | oui, via htlatex | en ligne en HTML, hors-texte en image SVG | fourni avec TeX Live |
lwarp | oui, deux compilations pdflatex parallèles | images SVG ; MathJax avec l'option mathjax | fourni avec TeX Live |
latexml | non — un analyseur en Perl | MathML | programme Perl ; ne fait pas partie de TeX Live |
pandoc | non — il ramène LaTeX à son propre AST | au choix avec --mathml ou --mathjax | programme Haskell ; ne fait pas partie de TeX Live |
make4ht et tex4ht : l'invention qui regarde TeX de côté
Si un document est déjà là et qu'il faut simplement du HTML, le bon premier geste est make4ht file.tex. Rien de plus à installer : c'est livré avec TeX Live. Le mécanisme est audacieux. tex4ht laisse TeX composer le document normalement tout en glissant dans le flux DVI des crochets qui émettent au passage des balises HTML. Un document qui compile se convertit donc le plus souvent — y compris les commandes définies soi-même avec \newcommand, puisque TeX les développe et que le convertisseur n'a jamais besoin de savoir qu'elles existaient. Sur un fichier de test définissant \newcommand{\stress}[1]{\textbf{\itshape #1}}, le HTML est bien sorti avec un span en gras italique. tex4ht a été écrit par Eitan Gurari (1947–2009), à l'Ohio State University, qui l'a mené seul depuis 1996. Après sa mort soudaine en 2009, Michal Hoftich, Karl Berry et d'autres ont pris le relais. Le README livré dans TeX Live 2024 indique encore que la documentation a été écrite par Gurari, l'auteur original, et n'a été que légèrement mise à jour depuis sa disparition.
# 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"L'appel direct de htlatex figure dans bien des textes anciens, mais l'usage actuel est make4ht. C'est un front-end de construction écrit en Lua par Michal Hoftich : HTML5 par défaut, et une seule commande qui lance aussi bibtex ou makeindex, post-traite le HTML produit et convertit les images, avec un fichier de build Lua pour les réglages fins. Malgré cela, la sortie de tex4ht ressemble parfois moins à du HTML qu'à un croquis en HTML de la page composée. Par défaut, en effet, les noms de fontes TeX deviennent des classes CSS — on voit apparaître cmr-12, cmmi-10 et consorts sur des fragments de texte. Si la page part sur le web, mieux vaut prévoir dès le départ de remplacer doc.css ou de superposer sa propre feuille de style. Les règles de conversion par paquet vivent dans des fichiers de configuration .4ht ; tex4ht dans TeX Live 2024 en livre 496.
Les formules en MathML, en images ou en MathJax
Un simple make4ht file.tex transforme les mathématiques en ligne en texte HTML et les formules hors-texte en image SVG. Essai fait sous TeX Live 2024 : $f\colon \R \to \R$ est ressorti en texte ordinaire contenant ℝ, tandis que le contenu de \begin{equation} est devenu une image nommée doc0x.svg, dont l'attribut alt portait une approximation en art ASCII de la formule. Ce réglage par défaut se lit, mais il se pixellise à l'agrandissement, ne se copie pas et échappe aux recherches. Si les mathématiques sont l'essentiel, il faut changer la sortie par une option. make4ht -u file.tex "mathml" a produit du MathML y compris pour les formules hors-texte, ne laissant en image que la figure TikZ. make4ht -u file.tex "mathjax" laisse les mathématiques en LaTeX dans le HTML et place dans le head une configuration window.MathJax ainsi que le chargeur 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"Voici le piège qui ne prend que ceux qui choisissent mathjax : vos macros ne sont pas développées. MathML et images sont ce que TeX a composé, \newcommand y est donc déjà appliqué ; le mode mathjax, lui, écrit les mathématiques telles quelles, en source. À l'essai, un document définissant \newcommand{\R}{\mathbb{R}} a produit un HTML contenant littéralement \(f\colon \R \to \R \), sans qu'aucune des définitions \newcommand ne soit émise avec. MathJax, dans le navigateur, n'a jamais entendu parler de \R : cette formule-là devient une erreur rouge de macro non définie. Le remède consiste à répéter les macros dans la configuration MathJax (tex.macros dans window.MathJax). Autrement dit : pour un document truffé de macros maison, mathml est plus sûr — et du point de vue de l'accessibilité aussi, un lecteur d'écran lit du MathML, pas une image.
lwarp : composer le HTML dans un PDF, puis l'en extraire
lwarp, de Brian Dunn, prend le même problème par un tout autre bout. Il se sert de la machinerie de sortie de LaTeX : on fait composer à pdflatex le code source HTML comme s'il s'agissait de texte courant, puis pdftotext extrait ce texte du PDF obtenu pour en faire un fichier .html. C'est bien là le mécanisme — ouvrez le lwarpmk.lua livré avec TeX Live et vous y trouverez la ligne qui appelle pdftotext -enc UTF-8 -nopgbrk -layout. Pour un document d'essai de quatre sections, le PDF intermédiaire servant à produire le HTML faisait ici 16 pages. Le détour a sa raison : renvois, table des matières, index et bibliographie de LaTeX continuent de fonctionner exactement comme d'habitude. lwarp embarque une réimplémentation côté HTML pour chaque paquet qu'il prend en charge, et TeX Live 2024 en livre 593 sous forme de fichiers 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 imagesLa première chose que l'on rencontre à l'usage, c'est l'ordre de chargement. Placer \usepackage{lwarp} après tikz a arrêté la compilation sur ! Package lwarp Error: Package color, or one which uses color, must be loaded after Lwarp. lwarp doit être chargé avant presque tout le reste — c'est le principal obstacle quand on veut le greffer sur un document existant. Les formules deviennent par défaut des images SVG, mais l'attribut alt contient la source LaTeX telle quelle et l'élément reçoit role="math" (avec \usepackage[mathjax]{lwarp} on bascule sur MathJax, et l'on redéclare ses macros via \CustomizeMathJax). Les images sont produites par une étape distincte, lwarpmk limages, qui enchaîne en interne pdfseparate, puis pdfcrop, puis pdftocairo -svg — exactement la chaîne décrite sur la page de ce site consacrée à l'export des figures en images.
LaTeXML et la voie HTML d'arXiv
LaTeXML est un convertisseur écrit en Perl par Bruce Miller au National Institute of Standards and Technology (NIST) des États-Unis. Il ramène d'abord LaTeX à du XML sémantique, puis en tire du HTML5 avec MathML, de l'ePub, du JATS et d'autres formats. Le travail se fait en deux temps : latexml construit le XML, latexmlpost le transforme en HTML. Cette division sépare l'analyse de la présentation : un même fichier XML donne plusieurs formats de sortie. Les éditions HTML d'arXiv, en service depuis décembre 2023, procèdent de la même lignée — le projet arXivLabs antérieur ar5iv convertissait déjà l'ensemble du corpus avec LaTeXML. Pour un travail riche en mathématiques où comptent la sémantique et l'accessibilité, c'est le premier candidat. LaTeXML ne fait toutefois pas partie de TeX Live. Il s'installe séparément comme distribution Perl ; latexml n'était pas présent sur la machine ayant servi à cet article, si bien que la description en deux temps ci-dessus suit la documentation officielle et non un essai 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 + MathMLJusqu'où passent réellement les macros maison et TikZ ?
Disons-le franchement : un document qui s'appuie sur des macros maison et sur TikZ ne se convertit pas proprement. Pour les macros, la famille qui exécute TeX (tex4ht, lwarp) a l'avantage : TeX les développe, et le convertisseur ne voit même pas la commande d'origine. Mais ce que laisse le développement, ce sont des consignes visuelles — gras, italique — et non du sens ; aucune balise HTML sémantique n'en sort. \newcommand{\keyterm}[1]{\textbf{#1}} donnera l'équivalent d'un <b>, jamais un <dfn>. TikZ impose un compromis plus net encore : tex4ht comme lwarp aboutissent à la même conclusion et collent la figure sous forme d'image. Dans l'essai mené ici, le graphique TikZ est devenu un unique SVG nommé doc0x.svg dont le texte alt n'était que la suite des étiquettes de nœuds. Si l'on veut une figure qui ait du sens en HTML, la voie rapide n'est pas de l'attendre du convertisseur, mais d'exporter la figure à part et d'écrire soi-même le alt.
Lequel choisir, selon ce que vous faites
- Vous voulez juste du HTML, sans nouvelle chaîne d'outils →
make4ht file.tex. Livré avec TeX Live, il fonctionne sans toucher au document. - Vous voulez du MathML (meilleur pour les lecteurs d'écran, la recherche et le zoom) →
make4ht -u file.tex "mathml", ou LaTeXML. - Il vous faut une vraie édition web conservant les fonctions de LaTeX →
lwarp— uniquement pour un document où\usepackage{lwarp}peut venir en premier. - Vous visez un article HTML sémantique à la manière d'arXiv →
LaTeXML(Perl ; installé séparément de TeX Live). - La source est du Markdown et une sortie légère suffit →
pandoc(Haskell ; installé séparément). Sa prise en charge de l'entrée LaTeX est partielle. - Les figures TikZ sont l'essentiel → ne les déléguez pas : exportez chaque figure seule en SVG et rédigez vous-même le texte
alt.