2017-05-05 7 views
0

MathJax.jsを使ってWebページでMathをレンダリングするデモがあります。このデモはOnline Demoです。MathJaxでレンダリングされた数式に関連付けられたTexマークアップを取得するにはどうすればよいですか?

完全にレンダリングされたMathを取得しましたが、今度はMathレンダリングの逆を実行します。つまり、レンダリングされたMathに関連付けられたHTMLマークアップを取得します。私はMathJax.Hub.getJaxFor(div)div.innerHTMLの2つの方法を試しましたが、元のマークアップを私に与えませんでした。

このデモでは、MathJaxでAPIを使用して$$x^2 = x +2$$というオリジナルのマークアップを取得したいと考えています。

質問

MathJaxでどのようなAPI私は以下のデモで、元のマークアップを取得するために使用されますか?

デモコード

<script> 
    function getMathMarkup() { 
    var div = document.getElementById("mathMarkup"); 
    //I need to get the original Tex markup with $$ delimiters 
    //once the Math gets rendered 
     alert(MathJax.Hub.getJaxFor(div)); 
     alert(div.innerHTML); 
    } 
</script> 
<script type="text/x-mathjax-config"> 
    MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}}); 
</script> 
<script type="text/javascript" 
    src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> 
<button type="button" onclick="getMathMarkup();return false;">Get Math Markup</button> 
<div id="mathMarkup"> 
    $$x^2 = x +2$$ 
</div> 

答えて

1

私はこのデモでは$$ MathJaxでいくつかのAPIを使用して、X^2 = X + 2 $$あるオリジナルのマークアップを取得したいです。

これはそうではありません。デリミタは前処理中に削除され、格納されません。オリジナルが必要な場合は、ユーザー入力を自分で追跡する必要があります。

ただし、表示スタイルをルックアップしてそこから区切り文字を派生させることができます。

例を示します。

<script> 
 
    function getMathMarkup() { 
 
    var div = document.getElementById("mathMarkup"); 
 
    //I need to get the original Tex markup with $$ delimiters 
 
    //once the Math gets rendered 
 
    var math = MathJax.Hub.getAllJax("MathMarkup")[0]; 
 
    var text = '$' + math.originalText + '$'; 
 
    if (math.root.display) text = '$' + text + '$'; 
 
    alert(text); 
 
    }; 
 
</script> 
 
<script type="text/x-mathjax-config"> 
 
    MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}}); 
 
</script> 
 
<script type="text/javascript" 
 
    src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> 
 

 
<button type="button" onclick="getMathMarkup();return false;">Get Math Markup</button> 
 
<div id="mathMarkup"> 
 
    $$x^2 = x+2$$ 
 
</div>

代替は、単に右の出力後にDOMに配置されたスクリプトタグを検索することです。その後、MathJaxのAPIに頼らずにそこから情報を再構築できます。

+0

ありがとうございました。 'math.root.display'は何をチェックしますか?それはMathMLに関連していますか? – Sunil

+0

入力の表示スタイル(ブロックまたはインライン)をチェックします。これは、数学レンダリングエンジンでよく見られる違いです。 MathJaxの場合、内部データ構造であるため、MathMLと多少関連しています。 –

+0

ありがとう。私は数学のレンダリングのための入力を得るための簡単な方法はないと思います。 – Sunil

関連する問題