如何调用或重启 MathJax?

IT技术 javascript html restart mathjax
2021-03-03 20:28:03

我需要 MathJax 重新检查我的所有页面。

我的意思是当页面被创建时,它一切都很好。但是我需要在 window.onload 之后调用它来重新解析页面,因为它的内容在此期间发生了变化。

我怎么会做这样的事情?

2个回答

请参阅http://docs.mathjax.org/en/latest/advanced/typeset.html

如果您正在编写一个动态网页,其中在 MathJax 已经排版了页面的其余部分之后可能会出现包含数学的内容,那么您将需要告诉 MathJax 在生成新内容时再次在页面中查找数学。为此,您需要使用该 MathJax.Hub.Typeset()方法。这将导致预处理器(如果有的话)再次在页面上运行,然后 MathJax 将在页面上查找未处理的数学并对其进行排版,任何已经排版的数学保持不变。

但是,您不应简单地直接调用此方法。[您应该改为] 将排版操作排入队列,[使用此] 命令:

MathJax.Hub.Queue(["Typeset",MathJax.Hub]);

演示在这里:http : //cdn.mathjax.org/mathjax/latest/test/sample-dynamic.html

未来注意事项:cdn.mathjax.org 即将结束,请查看mathjax.org/cdn-shutting-down以获取迁移提示。
2021-04-26 20:28:03
根据文档,您不应直接调用 MathJax.Hub.Typeset(),因为 MathJax 是异步操作的。相反,你应该打电话MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
2021-04-27 20:28:03
@AnthonyBatchelor:同意。我已经更新了我的答案,使其更加明显。
2021-04-27 20:28:03
其他方法尝试:RerenderReprocess
2021-05-15 20:28:03

我发现使用 MathML 进行动态更新的最简单方法是让 MathJax 进行内容更改(而不是 jQuery .html(s) 函数,例如)然后它在更改内容的同时处理数学。

<script type="text/javascript">
   function updateMathContent(s) {
       var math = MathJax.Hub.getAllJax("mathdiv")[0];
       MathJax.Hub.Queue(["Text", math, s]);
   }
</script>

...

<div id="mathdiv">
   <math xmlns="http://www.w3.org/1998/Math/MathML">
      <msup>
         <mi>x</mi>
         <mn>2</mn>
       </msup> 
   </math>
</div>

因此,只需使用该函数将 div 的全部内容替换为新的 MathML 即可。(脚本在头脑中。)

注意:如果您有一个空的数学 div 并且稍后添加 MathML,您将收到一个脚本错误。但是,如果数学标记在对 updateMathContent 的调用中没有任何内容,则将起作用。