我正在使用MathJax,并且遇到以下情况:
当页面包含MathJax将正确处理和呈现的一些Math时,我想运行一些代码
考虑以下示例:
<p>
This is a page containing an equation: $b^2 - 4ac$.
</p>
此处的函数或我可以使用的任何函数都将返回true
。但是,如果该页面不包含要处理的TeX代码块(或任何与配置MathJax触发方式有关的代码),则该API将返回false
。
这与修改渲染管道无关。 MathJax最终会完成工作,我对此表示满意。我只需要一种可靠的方法(希望由库的API提供)来检测该页面具有一些需要处理的数学。
MathJax是否具有可用于获取此信息的功能?另外,为了完整起见,我添加了配置MathJax的方式(内联):
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
extensions: ["tex2jax.js"],
jax: ["input/TeX", "output/CommonHTML"],
tex2jax: {
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
processEscapes: true
},
"CommonHTML": { linebreaks: { automatic: true } }
});
</script>
<script src="//mathjax.rstudio.com/latest/MathJax.js?config=TeX-MML-AM_CHTML"></script>
如果我要问的内容实际上不可行,那怎么办?
我可以在渲染管道中附加一个事件,以便在MathJax完成渲染数学运算后执行回调函数吗?
我看到了MathJax startup sequence,而答案可能就在那里。但是,当页面上没有数学运算时,我也看到触发器也在运行。
我尝试检测是否存在添加到所生成元素中的类,例如MathJax_Preview
或mjx-chtml
。但是此代码不可靠,因为它需要在渲染过程之后触发。这会增加计算时间。
我找不到用于查询要渲染的数学运算的API,但似乎很奇怪,MathJax没有公开这样的东西。
答案 0 :(得分:1)
可能的解决方法是创建自己的类,然后测试DOM中是否存在该类,然后根据需要动态嵌入mathjax
带有数学代码段:
var test = document.querySelectorAll('.math2Process');
if(test.length>0){
var mathJax_config = document.createElement('script');
mathJax_config.setAttribute('type','text/x-mathjax-config');
mathJax_config.text = `MathJax.Hub.Config({
extensions: ["tex2jax.js"],
jax: ["input/TeX", "output/CommonHTML"],
tex2jax: {
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
processEscapes: true
},
"CommonHTML": { linebreaks: { automatic: true } }
});`
var mathJax_script = document.createElement('script');
mathJax_script.setAttribute('src','//mathjax.rstudio.com/latest/MathJax.js?config=TeX-MML-AM_CHTML');
document.head.appendChild(mathJax_config);
document.head.appendChild(mathJax_script);
}
<p class="math2Process">
This is a page containing an equation: $b^2 - 4ac$.
</p>
相同但没有数学:
var test = document.querySelectorAll('.math2Process');
if(test.length>0){
var mathJax_config = document.createElement('script');
mathJax_config.setAttribute('type','text/x-mathjax-config');
mathJax_config.text = `MathJax.Hub.Config({
extensions: ["tex2jax.js"],
jax: ["input/TeX", "output/CommonHTML"],
tex2jax: {
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
processEscapes: true
},
"CommonHTML": { linebreaks: { automatic: true } }
});`
var mathJax_script = document.createElement('script');
mathJax_script.setAttribute('src','//mathjax.rstudio.com/latest/MathJax.js?config=TeX-MML-AM_CHTML');
document.head.appendChild(mathJax_config);
document.head.appendChild(mathJax_script);
}
<p>
This is a page containing an equation: $b^2 - 4ac$.
</p>