2011-03-04 97 views
30

我需要MathJax再次檢查我的所有頁面。如何調用或重新啓動MathJax?

我的意思是當頁面被創建時,它確實很棒。但是我需要在window.onload之後調用它來重新分析頁面,因爲其內容在此期間已經改變。

我該怎麼做這樣的事情?

回答

37

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

如果你正在寫一個動態網頁 其中含數學 MathJax後,可能會出現內容已經 排版頁面的其餘部分,那麼你 需要告訴MathJax到 新內容產生時再次在頁面中尋找 數學。要做 那,你需要使用 MathJax.Hub.Typeset()方法。這 將使預處理器(如果有的話 裝載)超過 頁面運行一遍,然後MathJax將尋找 未處理數學 頁面並排版了,留下不變的任何 數學已經被排版。

但是,您不應該直接調用此方法。 [你不是應該]排隊排版行動,[使用本]命令:

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

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

+2

根據[文檔](http://www.mathjax.org/docs/2.0/typeset.html),您不應該直接調用MathJax.Hub.Typeset(),因爲MathJax是異步操作的。相反,你應該調用'MathJax.Hub.Queue([「Typeset」,MathJax.Hub]);' – 2012-06-20 13:06:35

+0

@AnthonyBatchelor:同意。我已經更新了我的答案,使其更加明顯。 – thirtydot 2012-06-20 13:20:21

+1

未來的注意事項:cdn.mathjax.org即將結束其生命週期,請查看https://www.mathjax.org/cdn-shutting-down/獲取遷移提示。 – 2017-04-12 08:40:16

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> 

所以只需使用功能,以取代新MATHML股利的全部內容,它會工作。 (腳本在頭上。)

注意:如果您有一個空的數學div並在稍後添加MathML,您將收到腳本錯誤。但是,如果數字標籤與updateMathContent的調用內沒有任何內容一起工作。