数学¶
MathJax 和 KaTeX 是两种流行的库,用于在浏览器中显示数学内容。尽管这两个库提供类似的功能,但它们使用不同的语法并具有不同的配置选项。此文档网站提供了如何轻松将它们与 Material for MkDocs 集成的信息。
配置¶
以下配置启用使用 MathJax 和 KaTeX 渲染块和行内方程的支持。
MathJax¶
MathJax 是一个强大而灵活的库,支持多种输入格式,如 LaTeX、MathML、AsciiMath,以及各种输出格式,如 HTML、SVG、MathML。要在您的项目中使用 MathJax,请将以下行添加到您的 mkdocs.yml。
window.MathJax = {
tex: {
inlineMath: [["\\(", "\\)"]],
displayMath: [["\\[", "\\]"]],
processEscapes: true,
processEnvironments: true
},
options: {
ignoreHtmlClass: ".*|",
processHtmlClass: "arithmatex"
}
};
document$.subscribe(() => { // (1)!
MathJax.startup.output.clearCache()
MathJax.typesetClear()
MathJax.texReset()
MathJax.typesetPromise()
})
- 这将 MathJax 与 即时加载 集成。
请参阅其他配置选项:
KaTeX¶
KaTeX 是一个轻量级库,专注于速度和简单性。它支持 LaTeX 语法的一个子集,并可以将数学渲染为 HTML 和 SVG。要在您的项目中使用 KaTeX,请将以下行添加到您的 mkdocs.yml。
document$.subscribe(({ body }) => { // (1)!
renderMathInElement(body, {
delimiters: [
{ left: "$$", right: "$$", display: true },
{ left: "$", right: "$", display: false },
{ left: "\\(", right: "\\)", display: false },
{ left: "\\[", right: "\\]", display: true }
],
})
})
- 这将 KaTeX 与 即时加载 集成。
使用¶
使用块语法¶
块必须用 $$...$$ 或 \[...\] 包围,并单独放在一行上:
使用行内块语法¶
行内块必须用 $...$ 或 \(...\) 包围:
同态 \(f\) 当且仅当其核仅为单例集 \(e_G\) 时是单射,因为否则 \(\exists a,b\in G\) 使得 \(a\neq b\) 且 \(f(a)=f(b)\)。
比较 MathJax 和 KaTeX¶
在选择 MathJax 和 KaTeX 之间时,有几个关键因素需要考虑:
-
速度: KaTeX 通常比 MathJax 更快。如果您的网站需要快速渲染大量复杂方程,KaTeX 可能是更好的选择。
-
语法支持: MathJax 支持更广泛的 LaTeX 命令,并可以处理多种数学标记语言(如 AsciiMath 和 MathML)。如果您需要高级的 LaTeX 特性,MathJax 可能更合适。
-
输出格式: 两个库都支持 HTML 和 SVG 输出。然而,MathJax 还提供 MathML 输出,这对于可访问性至关重要,因为它可以被屏幕阅读器读取。
-
可配置性: MathJax 提供了一系列配置选项,允许更精确地控制其行为。如果您有特定的渲染要求,MathJax 可能是一个更灵活的选择。
-
浏览器支持: 虽然两个库在现代浏览器中都表现良好,但 MathJax 对旧浏览器的兼容性更广泛。如果您的受众使用各种浏览器,包括旧版浏览器,MathJax 可能是一个更安全的选择。
总之,KaTeX 在速度和简单性方面表现出色,而 MathJax 提供了更多功能和更好的兼容性,但速度较慢。两者之间的选择在很大程度上取决于您的具体需求和限制。