我需要 MathJax 重新检查我的所有页面。
我的意思是当页面被创建时,一切都很好。但是我需要在 window.onload 之后调用它来重新解析页面,因为它的内容同时发生了变化。
我怎么会做这样的事情?
我需要 MathJax 重新检查我的所有页面。
我的意思是当页面被创建时,一切都很好。但是我需要在 window.onload 之后调用它来重新解析页面,因为它的内容同时发生了变化。
我怎么会做这样的事情?
请参阅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
我发现使用 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 的调用中没有任何内容,则将起作用。