LaTeX → HTML (tex4ht/make4ht/lwarp/LaTeXML)

Im Dezember 2023 begann arXiv damit, eingereichte Artikel zusätzlich als HTML-Version zu veröffentlichen. Nach über dreißig Jahren reinem PDF war der Grund für die Umstellung die Barrierefreiheit, und die Umwandlung übernimmt LaTeXML. Es gibt weitere Wege von LaTeX nach HTML – make4ht (tex4ht), lwarp, pandoc – und die Wahl hängt letztlich an einer einzigen Frage: Führt das Werkzeug eine echte TeX-Engine aus oder liest es LaTeX selbst? Daraus ergibt sich alles Weitere: ob eigene Makros überleben, ob Formeln als MathML oder als Bilder ankommen und was aus TikZ-Abbildungen wird.

Es gibt nur zwei Familien von LaTeX-nach-HTML-Konvertern

Die eine Familie führt TeX aus: tex4ht (angesteuert über das Frontend make4ht) und lwarp gehören dazu. Die andere liest LaTeX selbst: das sind LaTeXML und pandoc. Der Unterschied ist keine Geschmacksfrage der Implementierung, sondern entscheidet über die Qualität der Umwandlung. Die TeX-Seite lässt TeX die selbst geschriebenen \newcommands expandieren, sodass eigene Makros und entlegene Pakete in der Regel durchkommen. Der Preis ist ein auffälliger Kunstgriff – dem Satzprozess von der Seite zuzusehen und daraus HTML zusammenzubauen – und eine schwere Werkzeugkette. Die selbst lesende Seite ist schnell, liefert aufgeräumte Ausgabe und beherrscht semantische Auszeichnung, doch was sie nicht kennt, kennt sie nicht. arXiv wählte LaTeXML, weil die semantische Struktur eingereichter Quellen – Sätze, Verweise, der Aufbau der Formeln – nach HTML und MathML gerettet werden sollte; die optische Seite nachzubilden war nie das Ziel.

WerkzeugFührt TeX aus?Formeln standardmäßigBezugsquelle
make4htja, über htlatexinline als HTML, abgesetzt als SVG-Bildin TeX Live enthalten
lwarpja, zwei parallele pdflatex-LäufeSVG-Bilder; mit Option mathjax MathJaxin TeX Live enthalten
latexmlnein – ein Perl-ParserMathMLPerl-Programm; nicht Teil von TeX Live
pandocnein – überführt LaTeX in einen eigenen ASTwählbar mit --mathml oder --mathjaxHaskell-Programm; nicht Teil von TeX Live

make4ht und tex4ht: der Kniff, TeX von der Seite zuzusehen

Liegt ein Dokument vor und soll einfach HTML herauskommen, ist make4ht file.tex der richtige erste Griff. Nichts zusätzlich zu installieren: Es liegt TeX Live bei. Der Mechanismus ist verwegen. tex4ht lässt TeX das Dokument ganz normal setzen und schmuggelt dabei Haken in den DVI-Strom, die unterwegs HTML-Tags ausgeben. Ein Dokument, das kompiliert, lässt sich also meist auch umwandeln – einschließlich der selbst mit \newcommand definierten Befehle, denn TeX expandiert sie, und der Konverter muss nichts von ihnen wissen. In einer Testdatei mit \newcommand{\stress}[1]{\textbf{\itshape #1}} erschien im HTML tatsächlich ein korrekt fett-kursives span. Geschrieben wurde tex4ht von Eitan Gurari (1947–2009) an der Ohio State University, der es ab 1996 im Alleingang pflegte. Nach seinem plötzlichen Tod 2009 übernahmen Michal Hoftich, Karl Berry und andere. In der README, die TeX Live 2024 mitliefert, steht bis heute, die Dokumentation stamme vom ursprünglichen Autor Gurari und sei seit seinem Tod nur wenig verändert worden.

terminal
# 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"

Der direkte Aufruf von htlatex steht in vielen älteren Anleitungen, üblich ist heute jedoch make4ht. Es ist ein in Lua geschriebenes Build-Frontend von Michal Hoftich: HTML5 von Haus aus, und ein einziger Befehl, der zusätzlich bibtex oder makeindex ausführt, das erzeugte HTML nachbearbeitet und Bilder umwandelt; für Feinheiten gibt es eine Lua-Build-Datei. Dennoch liest sich tex4ht-Ausgabe mitunter weniger wie HTML als wie eine Abzeichnung der gesetzten Seite in HTML. Denn standardmäßig werden TeX-Schriftnamen zu CSS-Klassencmr-12, cmmi-10 und Verwandte tauchen an einzelnen Textstücken auf. Soll die Seite ins Web, plant man daher besser gleich ein, doc.css zu ersetzen oder ein eigenes Stylesheet darüberzulegen. Die Umwandlungsregeln je Paket stehen in .4ht-Konfigurationsdateien; tex4ht in TeX Live 2024 bringt 496 davon mit.

Formeln als MathML, als Bild oder als MathJax

Ein schlichtes make4ht file.tex macht aus Inline-Mathematik HTML-Text und aus abgesetzten Formeln ein SVG-Bild. Unter TeX Live 2024 ausprobiert: $f\colon \R \to \R$ kam als gewöhnlicher Text mit heraus, während der Inhalt von \begin{equation} zu einem Bild namens doc0x.svg wurde, dessen alt-Attribut eine ASCII-Näherung der Formel enthielt. Diese Voreinstellung ist lesbar, wird beim Vergrößern aber grob, lässt sich nicht kopieren und wird nicht gefunden. Steht die Mathematik im Mittelpunkt, ändert man die Ausgabe per Option. make4ht -u file.tex "mathml" lieferte auch für abgesetzte Formeln MathML, sodass nur die TikZ-Abbildung als Bild übrig blieb. make4ht -u file.tex "mathjax" belässt die Mathematik als LaTeX im HTML und setzt eine window.MathJax-Konfiguration samt MathJax-3-Lader in den head.

terminal
# 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"

Hier liegt die Falle, in die nur tappt, wer mathjax wählt: eigene Makros werden nicht expandiert. MathML und Bilder sind das, was TeX gesetzt hat, dort ist \newcommand selbstverständlich längst angewendet; der Modus mathjax schreibt die Mathematik dagegen als Quelltext heraus. Im Test enthielt das HTML eines Dokuments mit \newcommand{\R}{\mathbb{R}} wörtlich \(f\colon \R \to \R \) – und keine einzige der \newcommand-Definitionen wurde mitgegeben. MathJax im Browser kennt \R nicht, und genau diese Formel wird zur roten Fehlermeldung über ein undefiniertes Makro. Abhilfe: dieselben Makros in der MathJax-Konfiguration wiederholen (tex.macros innerhalb von window.MathJax). Umgekehrt gesagt: Für ein Dokument mit vielen eigenen Makros ist mathml die sicherere Wahl – auch hinsichtlich Barrierefreiheit, denn ein Screenreader liest MathML, aber kein Bild.

lwarp: das HTML in ein PDF setzen und wieder herauslesen

lwarp von Brian Dunn geht dasselbe Problem von einer ganz anderen Seite an. Es nutzt die Ausgabemaschinerie von LaTeX selbst: pdflatex wird dazu gebracht, den HTML-Quelltext als Fließtext zu setzen, und pdftotext holt diesen Text anschließend aus dem entstandenen PDF wieder heraus in eine .html-Datei. Das ist tatsächlich der Mechanismus – in der mit TeX Live gelieferten lwarpmk.lua findet sich die Zeile, die pdftotext -enc UTF-8 -nopgbrk -layout aufruft. Für ein Testdokument mit vier Abschnitten umfasste das Zwischen-PDF zur HTML-Erzeugung hier 16 Seiten. Der Umweg hat einen Grund: Querverweise, Inhaltsverzeichnis, Register und Literaturverzeichnis von LaTeX funktionieren dabei genau wie sonst. lwarp hält für jedes unterstützte Paket eine HTML-seitige Nachbildung bereit; TeX Live 2024 liefert 593 Dateien lwarp-*.sty mit.

latex
% 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}}}
terminal
pdflatex doc.tex     # first pass writes lwarpmk.conf and doc_html.tex
lwarpmk html         # build the HTML
lwarpmk limages      # render the math and picture images

Beim tatsächlichen Lauf stößt man zuerst auf die Ladereihenfolge. Steht \usepackage{lwarp} hinter tikz, bricht der Lauf ab mit ! Package lwarp Error: Package color, or one which uses color, must be loaded after Lwarp. lwarp muss vor fast allem anderen geladen werden – das ist das größte Hindernis, wenn man es einem bestehenden Dokument nachträglich verpasst. Formeln werden standardmäßig zu SVG-Bildern, doch das alt-Attribut trägt den LaTeX-Quelltext wörtlich, und das Element erhält role="math" (mit \usepackage[mathjax]{lwarp} schaltet man auf MathJax um und liefert eigene Makros über \CustomizeMathJax nach). Die Bilder entstehen in einem eigenen Schritt, lwarpmk limages, der intern pdfseparate, dann pdfcrop und schließlich pdftocairo -svg aufruft – genau die Kette, die auf der Seite dieser Website über den Bildexport beschrieben wird.

LaTeXML und der HTML-Weg von arXiv

LaTeXML ist ein in Perl geschriebener Konverter von Bruce Miller am US-amerikanischen National Institute of Standards and Technology (NIST). Er überführt LaTeX zunächst in semantisches XML und schreibt daraus HTML5 mit MathML, ePub, JATS und weitere Formate. Die Arbeit geschieht in zwei Stufen: latexml erzeugt das XML, latexmlpost macht daraus HTML. Diese Trennung löst Analyse und Darstellung voneinander, sodass aus einer XML-Datei mehrere Ausgabeformate entstehen können. Die HTML-Ausgaben von arXiv, seit Dezember 2023 verfügbar, stehen in derselben Linie – das frühere arXivLabs-Projekt ar5iv hatte den gesamten Bestand bereits mit LaTeXML umgewandelt. Für mathematiklastige Arbeiten, bei denen Semantik und Barrierefreiheit zählen, ist LaTeXML die erste Wahl. Teil von TeX Live ist es allerdings nicht. Es muss getrennt als Perl-Distribution installiert werden; auf dem Rechner für diesen Artikel war latexml nicht vorhanden, die obige Beschreibung der zwei Stufen folgt daher der offiziellen Dokumentation und keinem lokalen Lauf.

terminal
# 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

Wie weit kommen eigene Makros und TikZ wirklich?

Ehrlich gesagt: Ein Dokument, das sich auf eigene Makros und TikZ stützt, wandelt sich nicht sauber um. Bei eigenen Makros ist die TeX-ausführende Familie (tex4ht, lwarp) im Vorteil – TeX expandiert sie, der Konverter sieht den ursprünglichen Befehl gar nicht erst. Was die Expansion hinterlässt, sind aber optische Anweisungen, fett oder kursiv, keine Bedeutung; ein semantisches HTML-Element entsteht daraus nicht. \newcommand{\keyterm}[1]{\textbf{#1}} liefert das Äquivalent von <b>, niemals <dfn>. TikZ verlangt einen noch nüchterneren Kompromiss: tex4ht und lwarp kommen zum selben Schluss und setzen die Abbildung als Bild ein. Im Versuch hier wurde die TikZ-Grafik zu einer einzelnen SVG-Datei namens doc0x.svg, deren alt-Text nur aus aneinandergereihten Knotenbeschriftungen bestand. Wer eine Abbildung will, die im HTML etwas bedeutet, fährt schneller, wenn er sie nicht vom Konverter erwartet, sondern die Grafik getrennt exportiert und den alt-Text selbst schreibt.

Welches Werkzeug wofür – die Kurzfassung

  • Einfach HTML, ohne neue Werkzeugkettemake4ht file.tex. Liegt TeX Live bei und läuft, ohne das Dokument anzurühren.
  • Formeln als MathML (besser für Screenreader, Suche und Zoom) → make4ht -u file.tex "mathml" oder LaTeXML.
  • Eine ernsthafte Web-Ausgabe, die LaTeX-Funktionen erhältlwarp – aber nur für Dokumente, bei denen \usepackage{lwarp} an erster Stelle stehen kann.
  • Ein semantisches HTML-Paper im arXiv-StilLaTeXML (Perl; getrennt von TeX Live zu installieren).
  • Die Quelle ist Markdown, leichte Ausgabe genügtpandoc (Haskell; getrennt zu installieren). Die Unterstützung für LaTeX-Eingabe ist begrenzt.
  • TikZ-Abbildungen stehen im Mittelpunkt → nicht delegieren: jede Abbildung einzeln als SVG exportieren und den alt-Text selbst schreiben.