2017-08-11 6 views
1

方程式のラベルを取得するにはどうすればよいですか?私はラベルを使って方程式を再解析しようとしていますが、最初にラベルを削除する必要があります。MathJax.Extension["TeX/AMSmath"].labels ... (...)しかし、これは不必要に複雑に思えます。より良い方法がありますか?MathJax方程式のラベルを取得

+0

あり、このためのAPIで、組み込まれているか、あなたが探している場合は、主に求めています関連IDを見つけるためのより堅牢な方法? –

+1

@PeterKrautzberger b uilt-inは優先されますが、それがオプションでない場合は、堅牢な方法でも問題ありません。私の現在の解決策は 'MathJax.Extension [" TeX/AMSmath "]。labels = {}'を使ってラベルリストをリフレッシュすることです。私の場合はこの問題を解決したようですが、誰かに –

答えて

1

このためのAPIはありません。

あなたはラベルを保持する必要がない場合は、リセットin the comment aboveは、おそらくそれについて移動するための最良の方法である:IDを取得する

MathJax.Extension["TeX/AMSmath"].labels = {} 

迅速かつ汚い方法があるという事実を活用することです彼らは出力に終わる。だから、あなただけの出力のすべての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); 

この配列は、それらのみ(ノードの内容は\label{}に対応する必要がありますに関連したIDを持っていることを確認します、例えばそれを再解析する必要があるだろうということである。

私はヘルパーライブラリと直接math.rootオブジェクトに飛び込むと、(そのdataキーで)再帰のIDを探すことが容易であるかもしれないと仮定します。

関連する問題