【问题标题】:How to recall or restart MathJax?如何召回或重新启动 MathJax?
【发布时间】:2011-07-09 04:53:07
【问题描述】:

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

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

我该怎么做?

【问题讨论】:

    标签: javascript html restart mathjax


    【解决方案1】:

    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

    【讨论】:

    • 根据the docs,您不应该直接调用MathJax.Hub.Typeset(),因为MathJax 是异步操作的。相反,您应该致电MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
    • @AnthonyBatchelor:同意。我已经更新了我的答案以使其更加明显。
    • 未来注意事项:cdn.mathjax.org 即将结束生命周期,请查看mathjax.org/cdn-shutting-down 了解迁移提示。
    • 其他方法尝试:Rerender,Reprocess
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-04-01
      • 2012-08-05
      • 2021-08-27
      • 1970-01-01
      • 2017-04-12
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 2018-09-20
      相关资源
      最近更新 更多