【问题标题】:MathJax equation numbers do not show using Jekyll on GitHub Pages在 GitHub 页面上使用 Jekyll 不显示 MathJax 方程编号
【发布时间】:2020-03-27 05:16:46
【问题描述】:

这是我的mathjax.html

<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js","TeX/AMSmath.js","TeX/AMSsymbols.js"],
    jax: ["input/TeX","output/HTML-CSS"],
    tex: {
      equationNumbers: { autoNumber: "AMS" },
      tagSide: "right"
    },
    tex2jax: {
      inlineMath: [ ['$','$'], ["\\(","\\)"] ],
      displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
      processEscapes: true
    }
  });
</script>
<script type="text/javascript"
  charset="utf-8"
  src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>

它被包含在head.html 文件夹中的_includes\

{% include mathjax.html %}

这又在default.html 文件夹中的default.html 中引用

{%- include head.html -%}

当我随后在通过 GitHub Pages 部署的 Jekyll 网站上的 Markdown 文档中使用 \label{eq:xyz}\ref{eq:xyz}\eqref{eq:xyz} 时,

  • 方程没有编号
  • 公式引用显示为“(???)”

例子:

$$ \label{eq:MSE}\tag{1}
\mathrm{MSE}(\hat{\theta}) = \mathrm{Var}(\hat{\theta}) - \mathrm{Bias}(\hat{\theta},\theta)^2
$$
(...)
\eqref{eq:MSE}

我尝试了几乎所有可以在 Internet 上找到的 MathJax 配置,但无济于事。我让它工作的唯一方法是在每个方程的标签之后添加\tag{1}\tag{2}\tag{3}...,即使这样,使用\begin{split} ... \end{split} 的方程仍然没有编号。谁能告诉我怎么回事?

【问题讨论】:

    标签: github jekyll github-pages equation mathjax


    【解决方案1】:

    对于autoNumber: "AMS",只有某些方程式环境会自动编号。特别是,由$$...$$ 分隔的数学不会自动编号;为此,您需要使用\begin{equation}...\end{equation}(或其他编号的对齐环境之一)。因此,使用\tag{} 是获取使用$$...$$ 的方程的方程编号的唯一方法。

    如果您希望对双美元分隔的显示方程进行编号,请使用autoNumber: 'all'。这将使每个显示的方程都有一个编号,而不仅仅是 AMS 编号的环境。

    还要注意split 环境不提供等式编号;它用于在外部编号的环境中使用。


    编辑:原来你的问题是 TeX 配置块的大小写。它应该是 TeX: 而不是 tex: (在版本 2 中,这是您正在使用的),因此 TeX 输入 jax 没有找到您的 TeX 配置,因此没有被使用。这是一个工作示例:

    <script type="text/x-mathjax-config">
      MathJax.Hub.Config({
        TeX: {
          equationNumbers: { autoNumber: "AMS" },
          tagSide: "right"
        },
        tex2jax: {
          inlineMath: [ ['$','$'], ["\\(","\\)"] ],
          displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
          processEscapes: true
        }
      });
      MathJax.Hub.Register.StartupHook("TeX AMSmath Ready", function () {
        MathJax.InputJax.TeX.Stack.Item.AMSarray.Augment({
          clearTag() {
            if (!this.global.notags) {
              this.super(arguments).clearTag.call(this);
            }
          }
        });
      });
    </script>
    <script type="text/javascript" charset="utf-8"
      src="https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js?config=TeX-AMS_CHTML">
    </script>
    
    <p>
    \begin{equation}
    \label{eq:square}
    \begin{split}
       (x+1)^2 &= (x+1)(x+1)\\
               &= x^2 + 2x + 1
    \end{split}
    \end{equation}
    </p>
    
    <p>
    Link to equation \eqref{eq:square}
    </p>

    我还将 CDN 更改为不是已停用的 cdn.mathjax.org,并将配置文件更改为仅加载 TeX(不是 MathML)并使用 CommonHTML 输出而不是较旧(且速度较慢)的 HTML-CSS输出。最后,我删除了不需要的配置部分(extensionsjax 数组,因为它们已经包含在组合配置文件 TeX-AMS_CHTML 中。

    【讨论】:

    • 我现在尝试了两种方法,(a) autonumber: "AMS" 结合 \begin{equation}...\end{equation} 和 (b) autonumber: "all" 结合 $$...$$正如我所料,两者都不起作用。(很可能,这些选项是“我可以在互联网上找到的几乎所有 MathJax 配置”的一部分,所以我之前可能已经尝试过它们。)我调用 MathJax 的方式有什么问题(可能导致配置被忽略)?
    • @JoramSoch,我在上面编辑了我的答案以包含一个工作示例。您的配置问题在于 TeX 配置块的大写。
    • 首先,非常感谢您详细的编辑/回复!我现在将autoNumber: "all"$$...$$ 一起使用,它终于可以在没有\tag{x} 的情况下工作。我仍然没有在\begin{split}...\end{split} 上获得等式编号,即使将其包含在$$...$$ 中,如果我使用\begin{align}...\end{align},等式的每一行都被编号(这不是我想要的,因为我只使用一个每组拆分/对齐方程的标签)。
    • 顺便说一句,我在这里发布了对剩余(较小)问题的描述:github.com/StatProofBook/StatProofBook.github.io/issues/7
    • @JoramSoch,我已经打开了一个MathJax issue 来解决当标签设置为all 时单个split 环境没有得到数字的问题。
    猜你喜欢
    • 2017-05-09
    • 2017-02-19
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 2015-07-01
    相关资源
    最近更新 更多