获取MathJax方程的标签
问题描述:
如何获取方程的标签?我试图重新处理一个带有标签的公式,但是我必须首先从MathJax.Extension["TeX/AMSmath"].labels
中删除标签,为此必须知道标签...获取MathJax方程的标签
我知道我可以扫描标签的源文本MathJax.Hub.getAllJax("mathDiv")[0}.SourceElement().find("\label(")
(...),但这似乎是不必要的复杂。有没有更好的办法?
答
这里没有内置的API。
如果您不需要保留的标签,然后复位in the comment above可能是去了解它的最佳方式:
MathJax.Extension["TeX/AMSmath"].labels = {}
一个快速和肮脏的方式来获得的ID是利用一个事实,即他们最终在输出。所以,你可以得到所有的ID的输出,例如
const math = MathJax.Hub.getAllJax()[0];
const nodesWithIds = document.getElementById(math.root.inputID).previousSibling.querySelectorAll('[id]');
const ids = [];
for (node of nodesWithIds) ids.push(node.id);
一个更清洁,也许在概念上更简单的方法是利用MATHML(这基本上是内部格式):在\label{}
总是一个mlabeledtr
结束。麻烦的是,你必须重新解析,例如,
const temp = document.createElement('span');
temp.innerHTML = math.root.toMathML();
const nodesWithIds = temp.querySelectorAll('mlabeledtr [id]');
const ids = [];
for (node of nodesWithIds) ids.push(node.id);
这将确保该数组只有相关的ID在他们(和节点的内容应与\label{}
。
我想用帮助程序库可能会更容易直接跳入math.root
对象并递归查找ID(在其data
密钥中)。
您主要问是否存在用于此目的的内置API或者您在寻找更健壮的方式找到相关的ID? –
@PeterKrautzberger b uilt-in将是可取的,但如果这不是一个选项,一个可靠的方法是可以接受的。我目前的解决方案是使用'MathJax.Extension [“TeX/AMSmath”]。labels = {}'来简单地刷新标签列表,这似乎解决了我的问题,但我可以想象解决方案可能是有用的给别人。 –