Mathjax 打破 \mathcal 和下标

Mathjax breaking with \mathcal and subscript

我在 Jekyll 网站上使用 MathJax3。当 \mathcalequation 环境中下标时,我遇到了问题。

例如下面的代码是行不通的(呈现为纯文本)

\begin{equation}
    f(x) = \mathcal{L}_{\theta}(x)\sum_{i=1}^N x^2
\end{equation}

但在 $$ 环境中同样可以正常工作:

$$
    f(x) = \mathcal{L}_{\theta}(x)\sum_{i=1}^N x^2
$$

问题似乎在于 \mathcal 带有下标,后跟 \sum 带有下标。如果我从 \mathcal\sum 中删除下标,一切都在 equation 环境中也有效。但是,\sum 不会给任何其他组件带来这个问题,因此我认为问题出在 \mathcal.

我的 MathJax 配置如下:

<!-- MathJax --> 
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
<script async src="https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js?config=TeX-AMS-MML_CHTML"></script>

<script>
    MathJax = {
      tex: {
        inlineMath: [['$', '$'], ['\(', '\)']],
        tags: 'ams'
      }
    };
</script>

<script type="text/javascript"
    src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>

首先,您要加载 MathJax 三次 次,这绝不是一个好主意。另外,您正在加载三个不同的版本(您的第一个脚本加载 MathJax v3,第二个脚本加载最新的 v2 (2.7.9),最后一个脚本加载 MathJax v2.7.1)。因为前两个脚本具有 async 属性,它们不会阻止处理页面的其余部分,因此最终脚本(没有 async)可能会是 运行已加载前两个,因此您可能得到的是 2.7.1 版,该版本已经很旧了。但可能是如果其他版本之一在您的浏览器缓存中,它可能会立即 运行,您会得到它,因此不清楚您实际得到的是什么版本。因此,您应该做的第一件事是清理您对 MathJax 的加载(确定您要使用的版本并仅加载该版本)。

带有 MathJax 配置变量的脚本包含 v3 配置,因此您可能希望保留第一个 MathJax 加载脚本并删除其他脚本。但是配置脚本应该加载MathJax的脚本之前出现(所以它在MathJax加载时就位)。

但其中 none 是导致您遇到问题的原因。这是 Jekyll 的 Markdown 和页面中的 LaTeX 之间的不良交互。 Markdown 使用下划线来分隔斜体文本,所以当你有两个项目的下标时,Markdown 将插入 <emph>...</emph> (或类似的东西),并且由于 MathJax 不处理包含 HTML 标签的数学,这将阻止你的等式被排版了。

显然,Jekyll 知道 $$...$$ 定界符并阻止下划线被 Markdown 处理,但不知道 \begin{equation}...\end{equation},所以下划线在那里被处理。我自己不使用 Jekyll,所以我无法测试它,但这就是我的样子。

有关与 content-management 系统的此类交互以及潜在 work-arounds 的信息,请参阅 MathJax documentation