Web 数学 (MathJax / KaTeX)

要在 网页上显示 LaTeX 数学公式,不是在浏览器中运行 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 覆盖的命令更多。若要把 整篇 LaTeX 文档高保真放到 Web 上,请使用转换工具(tex4ht/LaTeXML)——见“LaTeX → HTML”。

  • 兼容性、MathML(可访问性)、\eqref → MathJax。
  • 速度、体积小、大量公式 → KaTeX。
  • 整篇文档上 Web → 转换工具(见“LaTeX → HTML”)。