45

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

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

我怎么会做这样的事情?

4

2 回答 2

57

请参阅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

于 2011-03-04T23:56:51.910 回答
4

我发现使用 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 的调用中没有任何内容,则将起作用。

于 2012-02-13T23:40:03.893 回答