2017-08-11 66 views
1

如何获取方程的标签?我试图重新处理一个带有标签的公式,但是我必须首先从MathJax.Extension["TeX/AMSmath"].labels中删除标签,为此必须知道标签...获取MathJax方程的标签

我知道我可以扫描标签的源文本MathJax.Hub.getAllJax("mathDiv")[0}.SourceElement().find("\label(") (...),但这似乎是不必要的复杂。有没有更好的办法?

+0

您主要问是否存在用于此目的的内置API或者您在寻找更健壮的方式找到相关的ID? –

+1

@PeterKrautzberger b uilt-in将是可取的,但如果这不是一个选项,一个可靠的方法是可以接受的。我目前的解决方案是使用'MathJax.Extension [“TeX/AMSmath”]。labels = {}'来简单地刷新标签列表,这似乎解决了我的问题,但我可以想象解决方案可能是有用的给别人。 –

回答

1

这里没有内置的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密钥中)。