【发布时间】:2019-05-11 21:43:27
【问题描述】:
我正在使用 MathJax,我有以下场景:
当页面包含一些 MathJax 将正确处理和呈现的数学时,我想运行一些代码
考虑这个例子:
<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 没有公开这样的东西。
【问题讨论】:
-
如果其中一个引用了 mathjax ,如何检查脚本标签?
-
我总是把它们放在页面上。它总是返回
true。 -
你的“另类”让我有点吃惊。通常会出现这个问题,因为人们不想在没有数学的时候加载 MathJax。替代方案是真正的问题吗?
-
@PeterKrautzberger:回头看,你是对的。我的问题基本上是如果页面上没有数学,我不想加载 MathJax。但它也有点复杂。你看,我有一些特殊的代码可以监听页面上的
ersize事件,以便通过调用 MathJax 重新呈现数学。这可确保我的数学始终正确地适合页面换行。但是,如果页面上没有数学,我不想在调整大小时附加事件(从 UI 角度来看代价高昂)... -
This sample from the MathJax repository 展示了如何拦截
New Math信号。要不加载 MathJax,唯一可靠的方法是构建 tex2jax 预处理器的修改。这是一个MathJax-independent copy,可能有助于构建。
标签: javascript html mathjax