如何调用或重新启动MathJax?

发布于 2024-10-20 03:45:40 字数 124 浏览 8 评论 0原文

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

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

我该怎么做这样的事呢?

I need MathJax to recheck again all my page.

I mean when the page is created it does all great. But I need to call it after window.onload to reparse the page, as its contents have changed in the meantime.

How would I do such a thing?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

情话难免假 2024-10-27 03:45:40

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

See http://docs.mathjax.org/en/latest/advanced/typeset.html:

If you are writing a dynamic web page
where content containing mathematics
may appear after MathJax has already
typeset the rest of the page, then you
will need to tell MathJax to look for
mathematics in the page again when
that new content is produced. To do
that, you need to use the
MathJax.Hub.Typeset() method. This
will cause the preprocessors (if any
were loaded) to run over the page
again, and then MathJax will look for
unprocessed mathematics on the page
and typeset it, leaving unchanged any
math that has already been typeset.

You should not simply call this method directly, however. [You should instead] queue the typeset action, [using this] command:

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

Demo here: http://cdn.mathjax.org/mathjax/latest/test/sample-dynamic.html

漆黑的白昼 2024-10-27 03:45:40

我发现使用 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 的调用将起作用。

I found the simplest way to do dynamic updates with MathML is to let MathJax do the content changes (instead of the jQuery .html(s) function, e.g.) Then it processes the math while changing the content.

<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>

So just use the function to replace the entire contents of the div with new MathML and it will work. (The script goes in the head.)

Note: If you have an empty math div and add MathML later, you will get a script error. But if the math tags are present with nothing inside the call to updateMathContent will work.

剑心龙吟 2024-10-27 03:45:40

@thirtydot 的答案仅适用于 MathJax2。对于异步请求,MathJax3 的答案现在只是 MathJax.typeset()MathJax.typesetPromise()

从页面的新版本(2023 年 6 月)开始:https://docs。 mathjax.org/en/latest/advanced/typeset.html

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

此命令同步运行,但如果页面上的数学使用 \require 或导致自动加载扩展(通过自动加载组件),这将导致排版调用失败。在这种情况下,您应该使用 MathJax.typesetPromise() 代替。这会返回一个在排版完成时解析的承诺。

@thirtydot's answer only works for MathJax2. The MathJax3 answer is now simply MathJax.typeset() or MathJax.typesetPromise() for an asynchronous request.

From the new (June 2023) version of the page: https://docs.mathjax.org/en/latest/advanced/typeset.html

If you are writing a dynamic web page where content containing mathematics may appear after MathJax has already typeset the rest of the page, then you will need to tell MathJax to look for mathematics in the page again when that new content is produced. To do that, you need to use the MathJax.typeset() method. This will cause MathJax to look for unprocessed mathematics on the page and typeset it, leaving unchanged any math that has already been typeset.

This command runs synchronously, but if the mathematics on the page uses \require or causes an extension to be auto-loaded (via the autoload component), this will cause the typeset call to fail. In this case, you should use MathJax.typesetPromise() instead. This returns a promise that is resolves when the typesetting is complete.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文