使用AsciiMath输入更新MathJax

时间:2015-07-18 11:14:26

标签: javascript mathjax asciimath

我有以下div:

<div id="math-display">``</div>

页面加载时页面运行MathJax.Hub.Queue(['Typeset', MathJax.Hub, 'math-display'])`是AsciiMath输入的分隔符。

如果我使用latex输入方程式,并想要刷新math-display,我可以运行以下代码:

MathJax.Hub.Queue(['Text', MathJax.Hub.getAllJax('math-display')[0], 'new latex here'])

但是,如果我将AsciiMath输入而不是latex输入,结果仍然使用latex进行渲染(即使在'new latex here'字符串中使用了AsciiMath分隔符)。如何使用AsciiMath输入更新显示的MathJax,而不是乳胶?

如果可能,我不希望调用Typeset来更新。

1 个答案:

答案 0 :(得分:1)

Text()方法仅更新对象实例的文本,并且此对象已将输入类型作为属性。创建对象时,此类输入由delimiters定义。

当您使用text()时,您修改了delimiters之间的字符串,因此您不需要delimiters,但您无法更改输入类型。

但你可以typeset一个元素。它将使用分隔符定义的输入创建一个新对象。请参阅代码段:

document.querySelector('#switch').onclick = function() {
  //inputJax property defines type of input  
  alert('input type of math-display is: ' + MathJax.Hub.getAllJax('math-display')[0].inputJax);
  
  //To change type of input, you can modifiy content of math-display, not of the math object that was generated 
  document.querySelector('#math-display').textContent = "$$x = {-b \\pm \\sqrt{b^2-4ac} \\over 2a}.$$";
  
  //You typeset only element that has id math-display. 
  MathJax.Hub.Queue(['Typeset', MathJax.Hub, 'math-display']);

}
<script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-MML-AM_HTMLorMML"></script>
<div id="math-display">`sum_(i=1)^n i^3=((n(n+1))/2)^2`</div>
<button id="switch">Change content</button>