How to recall or restart MathJax?

Solution 1:

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

Solution 2:

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.