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

2023 年 12 月、arXiv は投稿された論文の HTML 版を出しはじめました。30 年以上 PDF 一本だったプレプリントサーバーが方針を変えた理由はアクセシビリティで、変換を担っているのは LaTeXML です。LaTeX を HTML にする道具は他にも make4httex4ht)・lwarppandoc とあり、どれを選ぶかは実は一点で決まります——その道具が本物の TeX エンジンを走らせるかどうか。ここが決まると、自作マクロが通るか、数式が MathML になるのか画像になるのか、TikZ の図がどうなるかまで芋づる式に決まります。

LaTeX → HTML の変換器は2系統しかない

一方は TeX を走らせる系統で、tex4ht(front-end は make4ht)と lwarp がこれにあたります。もう一方は LaTeX を自前で解析する系統で、LaTeXMLpandoc がこちら。この違いは実装の趣味ではなく、変換の質を直接決めます。TeX を走らせる側は、あなたが書いた \newcommand を TeX 自身に展開させるので、自作マクロやマイナーなパッケージでも「とりあえず通る」。代わりに、組版の途中経過を横から覗いて HTML を組み立てるという離れ業が必要で、道具立ては重くなります。自前で解析する側は速くて出力が整い、意味的なタグ付けもうまいのですが、知らない命令は知らないままです。arXiv が LaTeXML を選んだのは、投稿されてくる LaTeX の意味構造(定理、参照、数式の構造)を保ったまま HTML と MathML にしたかったからで、見た目の再現が目的ではありません。

道具TeX を走らせるか既定の数式出力入手先
make4htはい(htlatex 経由)インラインは HTML、別行立ては SVG 画像TeX Live 同梱
lwarpはい(pdflatex を2系統走らせる)SVG 画像。mathjax 指定で MathJaxTeX Live 同梱
latexmlいいえ(Perl で解析)MathMLPerl 製。TeX Live には入っていない
pandocいいえ(自前の AST に落とす)--mathml--mathjax で選択Haskell 製。TeX Live には入っていない

make4ht と tex4ht——組版を横から覗く発明

手元に文書があってとにかく HTML が欲しいなら、まず make4ht file.tex を試すのが正解です。追加インストールは要らず、TeX Live に最初から入っています。仕組みは大胆で、tex4ht は文書を 普通に TeX で組版させながら、DVI に紛れ込ませたフックから HTML のタグを吐き出させます。だから TeX が通る文書はだいたい通る——\newcommand で定義した自分だけの命令も、TeX が展開してくれるので変換器は何も知らなくて済みます。実際に \newcommand{\stress}[1]{\textbf{\itshape #1}} を定義した文書を通すと、HTML 側にはボールドイタリック相当の span がきちんと出ました。tex4ht を書いたのは Eitan Gurari(1947–2009、オハイオ州立大学)で、1996 年から一人で育てた仕事です。2009 年に急逝したあと、Michal Hoftich と Karl Berry らが引き継ぎました。TeX Live 2024 に入っている README には「ここにある文書は原作者 Eitan Gurari が書いたもので、彼の死後ほとんど手を加えていない」と、いまも書かれています。

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"

htlatex を直に叩く形は古い解説によく出てきますが、いまは make4ht を使うのが定石です。make4ht は Michal Hoftich による Lua 製のビルド front-end で、HTML5 を既定にし、bibtex や makeindex の実行、生成後の HTML の後処理、画像の変換までを 1 コマンドにまとめてくれます。細かい調整は Lua のビルドファイルに書けます。それでも tex4ht の出力は「HTML というより、組版結果を HTML で写生したもの」に見えることがあります。既定では文字ごとに cmr-12 cmmi-10 といった TeX のフォント名がそのまま CSS クラスになるためで、Web ページとして配るなら doc.css を差し替えるか自分の CSS を後段で被せる前提で考えたほうがよいでしょう。パッケージごとの変換規則は .4ht という設定ファイルに書かれていて、TeX Live 2024 の tex4ht には 496 個入っています。

数式は MathML か、画像か、MathJax か

既定の make4ht file.tex は、インライン数式を HTML の文字列に、別行立ての数式を SVG 画像にします。TeX Live 2024 で実際に試すと、$f\colon \R \to \R$ を含む普通のテキストになり、\begin{equation} の中身だけが doc0x.svg という画像になって alt 属性にはアスキーアートの近似が入りました。この既定は「とりあえず読める」ものの、拡大すると粗く、コピーもできず、検索にも引っかかりません。数式が主役の文書なら、オプションを付けて出力を変えるべきです。make4ht -u file.tex "mathml" とすると別行立ても含めて MathML になり、画像は TikZ の図だけになりました。make4ht -u file.tex "mathjax" なら数式は LaTeX のまま HTML に埋め込まれ、window.MathJax の設定と MathJax 3 の読み込みが 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"

ここに、mathjax を選んだ人だけが踏む落とし穴があります。自作マクロが展開されません。 MathML と画像は TeX に組版させた結果なので \newcommand は当然展開されていますが、mathjax は数式を ソースのまま書き出すやり方です。実測すると、\newcommand{\R}{\mathbb{R}} を定義した文書の HTML には \(f\colon \R \to \R \) がそのまま入り、\newcommand の定義は 1 つも書き出されませんでした。ブラウザ側の MathJax は \R を知らないので、そこだけ赤い未定義エラーになります。対処は、MathJax の設定に同じマクロを書き足すこと(window.MathJaxtex.macros)です。逆に言えば、自作マクロを大量に使っている文書では mathml のほうが安全です——アクセシビリティの観点でも、スクリーンリーダーが読めるのは画像ではなく MathML のほうです。

lwarp——HTML を PDF に組版して、pdftotext で取り出す

Brian Dunn の lwarp は、同じ問題をまったく違う角度から解きます。lwarp が使うのは LaTeX の出力機構そのもので、pdflatexHTML のソースコードを本文として組版させ、できあがった PDF から pdftotext でテキストを抜き出して .html にする——これが本当の仕組みです。信じがたい話ですが、TeX Live に入っている lwarpmk.lua を読むと pdftotext -enc UTF-8 -nopgbrk -layout を呼ぶ行が確かにあります。手元の 4 節ほどの文書でも、HTML 生成用の中間 PDF は 16 ページになりました。この遠回りには理由があって、LaTeX の相互参照・目次・索引・文献の仕組みをそのまま使えるのです。lwarp はパッケージごとに HTML 用の代替実装を持っていて、TeX Live 2024 には lwarp-*.sty593 個入っています。

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

実際に走らせて最初にぶつかるのは、読み込み順です。\usepackage{lwarp}tikz のあとに置いたら、! Package lwarp Error: Package color, or one which uses color, must be loaded after Lwarp. で止まりました。lwarp はほぼすべてのパッケージより先に読み込む必要があります——既存の文書に後から足すときの最大の障害はここです。数式は既定で SVG 画像になりますが、その alt 属性には LaTeX のソースがそのまま入り、role="math" も付きます(\usepackage[mathjax]{lwarp} にすれば MathJax に切り替わり、自作マクロは \CustomizeMathJax で補います)。画像を作るのは lwarpmk limages という別ステップで、内部では pdfseparatepdfcroppdftocairo -svg という、このサイトの画像書き出しのページで説明しているのと同じ流れが走ります。

LaTeXML と arXiv の HTML 版

LaTeXML は Bruce Miller が米国標準技術研究所(NIST)で開発した Perl 製の変換器で、LaTeX をいったん 意味的な XML に落としてから HTML5+MathML、ePub、JATS などへ書き出します。処理は 2 段構えで、latexml が XML を作り、latexmlpost がそれを HTML に変換します。この分業のおかげで「解析」と「見せ方」が切り離され、同じ XML から複数の出力形式が取れます。arXiv が 2023 年 12 月から HTML 版の配信を始められたのはこの系譜の延長で、先行した arXivLabs のプロジェクト ar5iv が LaTeXML で全論文を HTML 化していた蓄積が土台にありました。数式が多く、意味構造とアクセシビリティを重視するなら第一候補です。ただし LaTeXML は TeX Live には含まれていません。 Perl のディストリビューションとして別途インストールする必要があり、この記事の環境でも latexml は入っていなかったため、上の 2 段構えは公式ドキュメントの記述に基づいています。

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

自作マクロと TikZ はどこまで通るか

正直に書くと、自作マクロと TikZ に寄りかかった文書はきれいには変換されません。 自作マクロについては、TeX を走らせる系統(tex4ht・lwarp)が有利です——TeX が展開してしまうので、変換器はもとの命令を見ることすらありません。ただし展開の結果は「太字」「イタリック」といった見た目の指示に潰れているので、意味に対応する HTML タグは付きません。\newcommand{\keyterm}[1]{\textbf{#1}}<b> 相当にはなっても <dfn> にはならない、ということです。TikZ はさらに割り切りが必要で、tex4ht も lwarp も 図を画像にして貼るという結論を出します。手元の実験でも、TikZ のグラフは doc0x.svg という 1 枚の SVG になり、alt にはノードのラベルだけが並びました。HTML として意味のある図が欲しいなら、変換器に期待するのではなく、図だけを別に書き出して手で alt を付けるのが結局は速い道です。

どれを選ぶか——用途別の結論

  • とにかく HTML が欲しい・環境を増やしたくないmake4ht file.tex。TeX Live に入っていて、文書に手を入れずに動きます。
  • 数式を MathML にしたい(読み上げ・検索・拡大に強い)make4ht -u file.tex "mathml"、または LaTeXML。
  • LaTeX の機能をできるだけ保った本格的な Web 版が要るlwarp。ただし \usepackage{lwarp} を先頭に置ける文書に限ります。
  • 論文を arXiv 流の意味的 HTML にしたいLaTeXML(Perl。TeX Live とは別に導入)。
  • もとが Markdown・出力も軽くてよいpandoc(Haskell 製。TeX Live とは別に導入)。LaTeX 入力の対応範囲は限られます。
  • TikZ の図が主役 → 変換器に任せず、図を単体で SVG に書き出して alt を自分で書く。