2011-03-04 21 views
30

Necesito MathJax para volver a verificar toda mi página.¿Cómo recuperar o reiniciar MathJax?

Me refiero a cuando se crea la página, todo va muy bien. Pero necesito llamarlo después de window.onload para volver a rastrear la página, ya que sus contenidos han cambiado mientras tanto.

¿Cómo podría hacer tal cosa?

Respuesta

37

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

Si está escribiendo una página web dinámica donde el contenido que contiene las matemáticas puede aparecer después de mathjax ya ha composición tipográfica el resto de la página, a continuación, necesitará decirle mathjax a busque matemáticas en la página otra vez cuando se produzca el nuevo contenido . Para hacer , debe usar el método MathJax.Hub.Typeset(). Este hará que los preprocesadores (si los hay fueron cargados) para funcionar sobre la página de nuevo, y luego mathjax buscará las matemáticas no procesados ​​en la página y componer, dejando sin cambios cualquier matemáticas que ya ha sido componer.

No obstante, no debe simplemente llamar a este método directamente. [En su lugar debe] Cola la acción composición tipográfica, [el uso de esta] comando:

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

demo aquí: http://cdn.mathjax.org/mathjax/latest/test/sample-dynamic.html

+2

De acuerdo con [los documentos] (http://www.mathjax.org/docs/2.0/typeset.html), no debe llamar a MathJax.Hub.Typeset() directamente, ya que MathJax funciona de forma asíncrona. En su lugar, debe llamar a 'MathJax.Hub.Queue ([" Typeset ", MathJax.Hub]);' –

+0

@AnthonyBatchelor: De acuerdo. He actualizado mi respuesta para que sea más obvio. – thirtydot

+1

Nota del futuro: cdn.mathjax.org está llegando al final de su vida útil, consulte https://www.mathjax.org/cdn-shutting-down/ para obtener sugerencias de migración. –

4

encontré la forma más sencilla de hacer actualizaciones dinámicas con MathML es dejar que mathjax hacer los cambios de contenido (en lugar de la función jQuery .html (s), por ejemplo) Luego procesa las operaciones matemáticas al cambiar el contenido.

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

Entonces sólo tiene que utilizar la función de reemplazar todo el contenido de la nueva div con MathML y ​​funcionará. (El guión va en la cabeza.)

Nota: Si tiene un div matemático vacío y agrega MathML más tarde, obtendrá un error de guión. Pero si las etiquetas matemáticas están presentes sin nada dentro de la llamada a updateMathContent funcionará.

Cuestiones relacionadas