首页 > 解决方案 > 将 MathJax 与 kramdown 一起使用,而不在 div 中进行保护(如宣传的那样!)

问题描述

我正在尝试设置 jekyll 以正确显示数学。

如果我不在 div 标签内嵌套方程式以保护它们免受降价解析器的影响,问题就不会出现:(

---
layout: default
math:   true
---

# Using Mathjax

along markdown parsers is a real pain...

$$ a + b = c $$

doesn't show, though the following does:

<div> 
$$ x + y + c $$
</div>

布局测试通过 include 包含以下 mathjax 脚本{% if page.math %}

<script async src="https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js?config=TeX-AMS-MML_CHTML"></script>

我很困惑,因为:

这个话题已经有很多了,但是很多已经过时了!任何对顺利和简单配置的帮助将不胜感激。

标签: markdownjekyllmathjaxkramdown

解决方案


问题是 kramdown 的输出不再与 mathjax v3 兼容。

您可以检查 kramdown 是否$$ a + b = c$$在推荐的脚本标签内嵌套工作:

<script type="tex/math"> a = b + c </script> 

但是,正如此处(最后一个项目符号)所述,mathjax 不再使用这些脚本标签。

因此,让 kramdown 与 mathjax 一起工作需要:

  • 包括 mathjax 2 的可靠来源:我的尝试失败了
  • 在 mathjax 脚本之前包含这个复杂的 mathjax 3 配置对象,传递给它一个函数来查找这些标签
MathJax = {
  options: {
    renderActions: {
      find: [10, function (doc) {
        for (const node of document.querySelectorAll('script[type^="math/tex"]')) {
          const display = !!node.type.match(/; *mode=display/);
          const math = new doc.options.MathItem(node.textContent, doc.inputJax[0], display);
          const text = document.createTextNode('');
          node.parentNode.replaceChild(text, node);
          math.start = {node: text, delim: '', n: 0};
          math.end = {node: text, delim: '', n: 0};
          doc.math.push(math);
        }
      }, '']
    }
  }
};

无法理解为什么这种向后可战性而不是简单的选项开关......


推荐阅读