Web 数式(MathJax / KaTeX)

LaTeX の数式を Web ページに 表示するには、ブラウザで TeX を動かすのではなく、JavaScript の数式レンダラを使います。二大標準は MathJax(最も高機能)と KaTeX(最速)。どちらも LaTeX の数式記法を受け取ります。このページで両者を比べます。

MathJax

MathJax(v3)は、LaTeX 数式(さらに MathML・AsciiMath)を HTML/CSS・SVG・MathML に描画します。MathML 出力は スクリーンリーダー対応 に有用。LaTeX 数式の 互換性が最も広く(amsmath、自作マクロ、\label\eqref まで)、v3 の書き直しで以前の速度差もかなり縮まりました。スクリプト読込前に window.MathJax オブジェクトで設定します(区切り記号・パッケージなど)。

terminal
<script>
  window.MathJax = { tex: { inlineMath: [["$","$"]], displayMath: [["$$","$$"]] } };
</script>
<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>

KaTeX

KaTeX(Khan Academy 製)は 高速・軽量 なレンダラ——同期描画でリフローが起きず、サイズも小さい。LaTeX 数式の大きな 部分集合 に対応しますが、すべてではありません(とくに \label\eqref の数式参照は不可)。数式が大量で速度が要るときに最適。CSS と JS、そして自動描画拡張(renderMathInElement)を読み込みます。

terminal
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex/dist/contrib/auto-render.min.js"
        onload="renderMathInElement(document.body);"></script>

設定・互換性・選び方

区切り記号:行内は $...$\(...\)、別行は $$...$$\[...\]。どれを有効にするか選びます(MathJax は設定オブジェクト、KaTeX は renderMathInElementdelimiters)。互換性:どちらも LaTeX の 数式だけ を受け取り(文書全体ではない)、本物の TeX エンジンは動かさず JS で数式組版を再実装しています。コマンドの網羅は MathJax が広め。文書全体 を忠実に Web 化したいなら、変換ツール(tex4ht/LaTeXML)を使います(→「LaTeX → HTML」)。

  • 互換性・MathML(アクセシビリティ)・\eqref → MathJax。
  • 速度・軽さ・大量の数式 → KaTeX。
  • 文書全体を Web 化 → 変換ツール(→「LaTeX → HTML」)。