Mathjax 打破 \mathcal 和下标
Mathjax breaking with \mathcal and subscript
我在 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 三次 次,这绝不是一个好主意。另外,您正在加载三个不同的版本(您的第一个脚本加载 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。
我在 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 三次 次,这绝不是一个好主意。另外,您正在加载三个不同的版本(您的第一个脚本加载 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。