Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检测MathJax中是否存在要处理的数学_Javascript_Html_Mathjax - Fatal编程技术网

Javascript 检测MathJax中是否存在要处理的数学

Javascript 检测MathJax中是否存在要处理的数学,javascript,html,mathjax,Javascript,Html,Mathjax,我正在使用MathJax,我有以下场景: 当页面包含MathJax将正确处理和呈现的数学时,我想运行一些代码 考虑这个例子: 这是一个包含等式的页面:$b^2-4ac$。 在这里,函数或我可以使用的任何函数将返回true。但是,如果页面不包含要处理的TeX代码块(或者根据MathJax的触发方式配置的任何代码),那么该API将返回false 再详细一点 这与修改渲染管道无关。MathJax最终会完成它的工作,我对此很满意。我只需要一种可靠的方法(希望由库的API提供)来检测页面是否存在需要

我正在使用MathJax,我有以下场景:

当页面包含MathJax将正确处理和呈现的数学时,我想运行一些代码

考虑这个例子:


这是一个包含等式的页面:$b^2-4ac$。

在这里,函数或我可以使用的任何函数将返回
true
。但是,如果页面不包含要处理的TeX代码块(或者根据MathJax的触发方式配置的任何代码),那么该API将返回
false

再详细一点 这与修改渲染管道无关。MathJax最终会完成它的工作,我对此很满意。我只需要一种可靠的方法(希望由库的API提供)来检测页面是否存在需要处理的数学问题

MathJax是否有我可以用来获取此信息的功能?此外,为了完整性,我添加了配置MathJax(内联)的方式:


MathJax.Hub.Config({
扩展:[“tex2jax.js”],
jax:[“输入/TeX”,“输出/CommonHTML”],
tex2jax:{
inlineMath:[['$','$'],[“\\(“,“\\)”],
displayMath:[['$','$$'],[“\\[”,“\\]”],
processEscapes:正确
},
“CommonHTML:{linebreaks:{automatic:true}}
});
或者。。。 如果我所问的实际上不可行,那么这个呢:

我是否可以附加到渲染管道中的事件,以便在MathJax渲染完数学后执行回调函数

我看到了答案,我的答案可能就在这里。但是,我看到当页面上没有数学时,触发器也会运行


故障排除 我尝试检测添加到生成的元素中的类,如
MathJax_Preview
mjx-chtml
。但此代码不可靠,因为它需要在渲染过程后触发。这增加了计算的时间


我找不到我正在寻找的用于查询要呈现的math是否存在的API,但MathJax没有公开这样的东西似乎很奇怪。

一个可能的解决方法是创建自己的类,然后测试该类是否存在于DOM中,然后根据需要动态嵌入MathJax

数学片段:

var test=document.querySelectorAll('.math2Process');
如果(测试长度>0){
var mathJax_config=document.createElement('script');
mathJax_config.setAttribute('type','text/x-mathJax-config');
mathJax_config.text=`mathJax.Hub.config({
扩展:[“tex2jax.js”],
jax:[“输入/TeX”,“输出/CommonHTML”],
tex2jax:{
inlineMath:[['$','$'],[“\\(“,“\\)”],
displayMath:[['$','$$'],[“\\[”,“\\]”],
processEscapes:正确
},
“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_脚本);
}

这是一个包含等式的页面:$b^2-4ac$。


如果其中一个引用了mathjax,那么检查脚本标记如何?我总是在页面上显示它们。它总是返回
true
。你的“交替”让我有点吃惊。通常出现这个问题是因为人们不想在没有数学的情况下加载MathJax。另一种选择是真正的问题吗?@PeterKrautzberger:回头看,你是对的。我的问题基本上是,如果页面上没有数学,我就不想加载MathJax。但它也有点复杂。你看,我有一些特殊的代码,它监听页面上的
ersize
事件,以便通过调用MathJax来重新渲染数学。这确保了我的数学总是正确地融入到页面包装中。但是,如果页面上没有数学,我不想在调整大小时附加事件(从UI角度看代价高昂)。。。显示如何截获新的数学信号。要不加载MathJax,唯一可靠的方法是构建对tex2jax预处理器的修改。这是一个可能有助于构建的解决方案。这是一个有效的替代方案,尽管我不喜欢它,因为它使流程复杂了一点,但它绝对是一个解决方案。谢谢,我会考虑的。
<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>