程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了MathJax:无法使用 Jekyll 渲染 \begin{cases}...\end{cases}大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决MathJax:无法使jekyll 渲染 \begin{Cases}...\end{Cases}?

开发过程中遇到MathJax:无法使jekyll 渲染 \begin{Cases}...\end{Cases}的问题如何解决?下面主要结合日常开发的经验,给出你关于MathJax:无法使jekyll 渲染 \begin{Cases}...\end{Cases}的解决方法建议,希望对你解决MathJax:无法使jekyll 渲染 \begin{Cases}...\end{Cases}有所启发或帮助;

我们在 our course website 上使用 MathJax,它在 jekyll 中实现并托管在 GitHub 页面上。对于小而简单的方程,MathJax 工作得很好,但我从来没有能够让稍微更复杂的方程起作用。我花了很多时间进行调查和实验,所以我想我终于可以在这里提问了。

例如,以下无法呈现:

$$
S_{i} =
\begin{Cases}
    X_{1} & \text{if i = 1}\\
    \Alpha \cdot X_{i} + (1 - \Alpha) \cdot S_{i-1} & \text{if i $>$ 1}
\end{Cases}
$$ 

Web 浏览器中的渲染输出实际上是空白的。

当我查看呈现的 HTML 时,我看到:

<p>
<span class="MathJax_PrevIEw" style="color: inherit; display: none;"></span>
<span ID="MathJax-Element-5-Frame" class="mjx-cHTML MathJax_CHTML" tabindex="0" data-mathml="
    <math
        xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; />" role="presentation" style="Font-size: 113%; position: relative;">
        <span ID="MJXc-Node-149" class="mjx-math" aria-hIDden="true">
            <span ID="MJXc-Node-150" class="mjx-mrow"></span>
        </span>
        <span class="MJX_Assistive_MathML" role="presentation">
            <math
                xmlns="http://www.w3.org/1998/Math/MathML">
            </math>
        </span>
    </span>
    <script type="math/tex" ID="MathJax-Element-5">% 
        <![cdaTA[ S_{i} = \begin{Cases} X_{1} & \text{if i = 1}\\ \Alpha \cdot X_{i} + (1 - \Alpha) \cdot S_{i-1} & \text{if i $>$ 1} \end{Cases} %]]>
    </script>
</p>

我不是 LaTeX 专家,所以我经常在 https://www.codecogs.com/latex/eqneditor.php 或 OverLeaf 等在线编辑器中编写方程式(或至少检查它们)。他们在那里渲染得很好。

我在 tex StackExchange 上首先问过这个问题 (link),但他们说这是题外话。


更新:我最终在 MathJax 用户组 (link) 上提出了这个问题,并收到了一个有效的解决方案,详细描述了 on GitHub。感谢大家的回复!

解决方法

看起来 jekyll 将数学插入为 MathJax <script> 标签 (<script type="math/tex">),并且该标签的内容是 TeX 表达式。不幸的是,该插件正在插入一些额外的文本来将内容标记为 CDATA。这在 HTML 中不需要,但对于 XHTML 可能需要。你的页面是 XHTML(我不知道 jekyll 生成什么)?

无论如何,插件可能是最初插入的

<script type="math/tex">
% <![CDATA[
... your expression...
% ]]>
</script>

那会起作用(即使它是不必要的),因为 TeX 中的 % 标记了注释,因此 <![CDATA[ 将被忽略,结束 ]]> 也将被忽略。

除了 GitHub 页面删除了换行符,所以你得到了

<script type="math/tex">% <![CDATA[... your expression...% ]]></script>

都在一行上。这意味着第一个 % 使整个表达式的其余部分成为注释,并且数学被有效地注释掉。这意味着您没有输出,因为数学表达式实际上是空的。

这之前出现过,我提供了 a work-around 对于版本 2:

<script type="text/x-mathjax-config">
MathJax.Hub.Register.StartupHook('TeX Jax Ready',function () {
  MathJax.InputJax.TeX.prefilterHooks.Add(function (data) {
    data.math = data.math.replace(/^% <!\[CDATA\[/,'').replace(/%\]\]>$/,'');
  });
});
</script>

还有第 3 版:

<script>
MathJax = {
  startup: {
    ready: function() {
      var HTMLDomStrings = MathJax._.handlers.html.HTMLDomStrings.HTMLDomStrings;
      var handleTag = HTMLDomStrings.prototype.handleTag;
      HTMLDomStrings.prototype.handleTag = function (node,ignorE) {
        if (this.adaptor.kind(nodE) === '#comment') {
          var text = this.adaptor.textContent(nodE);
          if (text.match(/^\[CDATA\[(?:\n|.)*\]\]$/)) {
            this.String += '<!'
            this.extendString(node,text);
            this.String += '>';
            return this.adaptor.next(nodE);
          }
        }
        return handleTag.call(this,node,ignorE);
      }
      MathJax.startup.defaultReady();
      MathJax.startup.document.inputJax[0].preFilters.add(function (data) {
        data.math.math = data.math.math.replace(/^% <!\[CDATA\[/,'');
      });
    }
  }
};
</script>

无论如何,是(可能不必要的)CDATA“注释”以及换行符的删除导致了问题。

大佬总结

以上是大佬教程为你收集整理的MathJax:无法使用 Jekyll 渲染 \begin{cases}...\end{cases}全部内容,希望文章能够帮你解决MathJax:无法使用 Jekyll 渲染 \begin{cases}...\end{cases}所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。