2011-03-04 5 views

답변

37

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

이 페이지의 나머지 조판 MathJax 후 나타날 수 있습니다 수학 을 포함하는 내용이 이미 가지고있는 동적 웹 페이지 를 작성하는 경우에, 당신 가 MathJax 말할 필요합니다 새로운 컨텐츠가 생성 된 을 다시 페이지에서 수학을 찾으십시오. 을 수행하려면 MathJax.Hub.Typeset() 메서드를 사용해야합니다. 이 다시 페이지 를 통해 실행하는 처리기 (있는 가로드 된 경우)의 원인이됩니다 다음 MathJax 페이지 에 처리되지 않은 수학을 찾아 이미 조판 된 모든 수학을 변경 떠나, 그것을 조판됩니다.

그러나이 메소드를 직접 호출하면 안됩니다. 여기

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

데모 : 나는 MathML을 동적 업데이트를 할 수있는 간단한 방법 MathJax을 수 있도록하는 것입니다 발견 http://cdn.mathjax.org/mathjax/latest/test/sample-dynamic.html

+2

[docs] (http://www.mathjax.org/docs/2.0/typeset.html)에 따르면 MathJax가 비동기 적으로 작동하므로 MathJax.Hub.Typeset()을 직접 호출하면 안됩니다. 대신에'MathJax.Hub.Queue ([ "Typeset", MathJax.Hub]);를 호출해야합니다. " –

+0

@AnthonyBatchelor : 동의했습니다. 그 대답을 좀 더 분명하게하기 위해 그 대답을 업데이트했습니다. – thirtydot

+1

미래의 노트 : cdn.mathjax.org의 수명이 다해 가고 있습니다. 마이그레이션 팁은 https://www.mathjax.org/cdn-shutting-down/에서 확인하십시오. –

4

[대신한다] 명령 [이를 사용하여, 조판 작업을 대기열 (예 : 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에 대한 호출 내부에 수학 태그가 없으면 작동합니다.

관련 문제