延迟特定元素的 MathJax 处理

Delay MathJax processing of specific elements

我有一个只有简单文本的网站,混合了最初只有 header 可见的部分。单击 header 展开该部分。这个页面的所有部分都可以包含我想用 MathJax 很好地排版的数学,但是这些部分可能很长并且包含很多数学。 我想推迟每个部分的处理,直到相应的 header 被点击。 这可能吗?

我知道 MathJax 有 TypeSet 函数,我可以在显示部分时调用这些函数,因此动态排版数学不是问题。我还找到了 elements 配置选项,但这与我想要的相反:它让你只处理某些元素,而我想排除某些元素。

示例页面:http://jsfiddle.net/pnbjh5tg/

我想出了一个方法来做到这一点。本质上,我忽略了 tex2jax pre-processorignoreClass 选项。将 class tex2jax_ignore 添加到所有部分可确保在页面加载时不处理它们。以下 JavaScript 然后在它们的 header 被点击时处理它们:

var section = $(this).parent().children('.section-container');
section.removeClass("tex2jax_ignore");
MathJax.Hub.Queue(["Typeset",MathJax.Hub,section.get(0)]);

结果见this jsFiddle

在当前的 MathJax 版本 (v3.0.1) 中,您可以通过添加

typeset: false

在您的配置脚本中。 (MathJax source code) 当你想排版文档时,你可以从 JS 运行 MathJax.typeset()

有关演示,请参阅 this jsFiddle