Mathjax破除\ mathcal和下标

问题描述

我正在Jekyll网站上使用MathJax3。我在\mathcal环境中下标equation时遇到问题。

例如,以下代码不起作用(将其显示为纯文本)

\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 3次,这绝不是一个好主意。另外,您正在加载三个不同的版本(第一个脚本加载MathJax v3,第二个脚本加载最新的v2(2.7.9),最后一个脚本加载MathJax v2.7.1)。因为前两个脚本具有async属性,所以它们不会阻止页面的其余部分被处理,因此最终脚本(无async)可能会在前两个脚本中的任何一个之前运行已加载,因此您可能正在获得版本2.7.1,该版本已经很旧了。但是,如果浏览器缓存中存在其他版本之一,则可能会立即运行该版本,并且您将获得该版本,因此尚不清楚您实际上会获得哪个版本。因此,您应该做的第一件事是清理MathJax的加载(确定要使用的版本,然后仅加载该版本)。

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

但是这些都不是导致您遇到问题的原因。这是Jekyll的Markdown与页面中的LaTeX之间的不良互动。 Markdown使用下划线来分隔斜体文本,因此,当您有两个项目的下标时,Markdown将插入<emph>...</emph>(或类似内容),并且由于MathJax不处理包含HTML标记的数学运算,因此将阻止方程排版。

显然,Jekyll知道$$...$$分隔符并阻止Markdown处理下划线,但不知道\begin{equation}...\end{equation},因此下划线在那里处理。我自己没有使用Jekyll,因此无法对其进行测试,但这就是我的样子。

有关与内容管理系统的此类交互以及可能的解决方法的信息,请参见MathJax documentation