Как вспомнить или перезапустить MathJax? - PullRequest
36 голосов
/ 05 марта 2011

Мне нужен MathJax, чтобы перепроверить всю мою страницу.

Я имею в виду, что когда страница создается, все прекрасно. Но мне нужно вызвать его после window.onload, чтобы проанализировать страницу, так как ее содержимое за это время изменилось.

Как бы я поступил так?

Ответы [ 2 ]

42 голосов
/ 05 марта 2011

См. 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

4 голосов
/ 14 февраля 2012

Я обнаружил, что самый простой способ динамического обновления с помощью 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, и он будет работать.(Сценарий идет в голову.)

Примечание. Если у вас пустой математический блок и вы добавите MathML позже, вы получите ошибку сценария.Но если внутри математических тегов ничего нет, вызов updateMathContent будет работать.

...