MathJax

来自 ArchWiki

MathJax 是一个用于数学的 JavaScript 显示引擎,可在所有浏览器中工作。它能够解析 html 文件中的 TeX 输入,以生成 svg 输出以及其他支持的格式。更高级别的 Jupyter notebook 依赖于 MathJax 和其他模块来进行绘图、运行交互式代码等。

MathJax 可以轻松嵌入到任何网站上以排版您的 TeX。可以将 MathJax 与分布式网络服务快速集成,请点击 此处 查看当前可用的 CDN。

本文假设您希望在您的系统上拥有 MathJax 的硬拷贝。

安装

安装 以下软件包之一:

配置

本地使用

MathJax 的脚本位于 /usr/share/mathjax,版本 2 和 3 都是如此。版本之间脚本的使用方式存在一些差异。对于版本 3,有许多预构建组件,它们具有不同的输出结果和功能,点击此处查看组件的列表和说明。

要让 MathJax 解析 ~/equations.html 中的 TeX 代码并生成 SVG 输出

<head>
    ... 
    Version 2
    <script src="/usr/share/mathjax/MathJax.js?config=TeX-AMS_SVG"></script> 
    ...
    ... 
    Version 3
    <script src="/usr/share/mathjax/tex-mml-svg.js"></script>
    ...
</head>

不要忘记包含配置查询字符串,以告知 MathJax 您所需的 i/o 格式。

您还可以内联配置 MathJax,有关更多详细信息和配置选项,请参阅此处

您的浏览器现在应该在 file:///home/user/equations.html 呈现符号。

请注意,MathJax 默认使用的 TeX 分隔符对于行内数学是 \( ... \) ,对于行外数学是 \[ ... \] , $$ ... $$


服务器使用

为了向您的客户端提供 MathJax 处理过的文档,您需要您的脚本访问其主文件

/usr/share/mathjax/tex-mml-chtml.js.js(或版本 2 的 /usr/share/mathjax/MathJax.js)。

假设服务器的根目录设置为 /srv/http/,创建符号链接将允许您的脚本访问已安装的软件包

$ cp -rs /usr/share/mathjax /srv/http/mathjax

现在,您可以通过在其头部包含以下代码,让 MathJax 解析 /srv/http/pages/equations.html 中的 TeX 代码

<script src="../mathjax/tex-mml-chtml.js></script>

或者对于版本 2

<script src="../mathjax/MathJax.js?config=TeX-AMS_SVG"></script>

故障排除

MathJax 和 Plotly

如果您也使用 plotly.js,则在 Plotly 之前加载 MathJax 可能无法渲染 TeX 代码。在 MathJax 之前 加载 Plotly 应该可以工作。例如

<head>
     <script src="path-to-plotly/plotly-latest.min.js"></script>
     <script src="path-to-mathjax/MathJax.js?config=TeX-AMS_SVG"></script>
</head>

您也可以尝试不同的 MathJax 输出。

页面加载时 TeX 原始代码可见

可能会发生 MathJax 需要一些时间来排版,并且在此期间会显示原始 TeX 代码,从而产生不令人满意的结果。

您可以通过在某些元素的 css 属性中设置 visibility: hidden 来解决此问题,并在 MathJax 完成排版后捕获其发出的事件以显示它

MathJax.Hub.Queue( function () { 
    document.getElementById("myID").visibility = "visible";
});