MathJax是当前最稳妥的HTML5数学公式嵌入方案,通过JavaScript自动适配浏览器能力并回退渲染,需正确引入脚本、标记公式及动态触发typeset。
原生 HTML5 不支持 LaTeX 或 MathML 公式渲染,必须借助 JavaScript 渲染库。MathJax 是目前兼容性最好、配置最灵活的选择,能自动检测浏览器能力(如是否支持原生 MathML),并 fallback 到 SVG 或 HTML-CSS 渲染。不推荐直接用 标签尝试原生 MathML——多数现代浏览器已弃用或仅部分支持,Chrome 甚至完全移除了对 MathML 的默认支持。
把以下代码插入 或页面底部 前即可启用基础渲染:
注意几个关键点:
tex-mml-chtml.js 表示同时支持
$$...$$、\(...\))和 MathML()输入,输出为可缩放的 HTML+CSS(非图片)tex-svg.js,它强制输出 SVG,在复杂公式或动态内容中易出现尺寸错位async defer 属性避免阻塞渲染:
es5/tex-mml-chtml.js
MathJax 默认启用 LaTeX 解析,但 HTML 环境下容易因字符转义或标签冲突失效。务必遵守:
\( ... \) 或 $...$(注意:单个 $ 在 Markdown 或 CMS 中可能被误解析,优先选 \( \))$$...$$ 或 \[...\](后者更安全,$$ 在某些构建工具中会被预处理器吞掉)&、_、% 等字符必须先被 HTML 转义,例如写矩阵时:\begin{array}{c|c} a & b \end{array},不能直接写 &
\( x^2 \) 会破坏解析器状态如果用 JavaScript 动态往 DOM 中添加含公式的 HTML(如 element.innerHTML = 'x = \(a + b\)'),MathJax 不会自动识别。必须显式调用:
MathJax.typeset([element]);
其中 element 是包含公式的 DOM 节点(如 document.getElementById('formula-box'))。常见疏漏点:
typeset() → 报错 MathJax is not defined,应放在 MathJax.startup.promise.then(() => { ... }) 回调里MathJax.typeset()(无参数),但性能差;只刷新局部区域更高效mounted 或 useEffect 后调用,且注意框架可能重复渲染导致多次 typeset公式渲染不是“设好 script 就一劳永逸”的事,动态场景下手动触发和时机控制是实际项目中最常卡住的地方。