2017-09-21 7 views
0

MathJax with AsciiMathは式1,000/5を1、000/5としてレンダリングします。小数部の分子は1,000ではなく000として表示されます。MathJax(AsciiMath)を千単位区切り記号を使用できるように構成する方法

JSFiddle:https://jsfiddle.net/kai100/wLhbqkru/

MathJaxのドキュメントには、桁区切りについて沈黙しています。

以下のスタックオーバーフローの答えは、TeX入力の場合はこの質問に答えますが、AsciiMath形式で入力する必要があり、設定ファイルの "Tex"を "AsciiMath"に変更しても機能しません。 mathjax commas in digits

ご協力いただければ幸いです。ありがとうございました。

答えて

1

あります。そのため、あなたは数字として扱われる「0.12」が見えなくなっています。 AsciiMathには3桁ごとにカンマを解析する仕組みがありません。

私が示唆できる最良の方法は、AsciiMathプレフィルタを使用して、AsciiMathが前処理してAsciiMathが式を解析する前にコンマを削除することです。ただ前にトリックを行う必要がありますMathJax.jsをロードするスクリプトをページに

<script type="text/x-mathjax-config"> 
MathJax.Hub.Register.StartupHook("AsciiMath Jax Ready", function() { 
    function removeCommas(n) {return n.replace(/,/g,'')} 
    MathJax.InputJax.AsciiMath.prefilterHooks.Add(function (data) { 
    data.math = data.math.replace(/\d{1,3}(?:\,\d\d\d)+/g,removeCommas); 
    }); 
}); 
</script> 

のようなものを追加します。これは、カンマが出力に表示されないことを意味します。カンマを4桁以上持つすべての数字にコンマを追加したい場合を除いて、それを行う自然な方法はありません(コンマを使用していなくても)。これは、ポストフィルタが生成されたMathMLに戻って、その数値をコンマで区切って変換する必要があります。次のようなものがあります。

MathJax.Hub.Register.StartupHook("AsciiMath Jax Ready", function() { 
    function removeCommas(n) { 
    return n.replace(/,/g,''); 
    } 
    function addCommas(n){ 
    return n.replace(/\B(?=(\d{3})+(?!\d))/g, ","); 
    } 
    function recursiveAddCommas(node) { 
    if (node.isToken) { 
     if (node.type === 'mn') { 
     node.data[0].data[0] = addCommas(node.data[0].data[0]); 
     } 
    } else { 
     for (var i = 0, m = node.data.length; i < m; i++) { 
     recursiveAddCommas(node.data[i]); 
     } 
    } 
    } 
    MathJax.InputJax.AsciiMath.prefilterHooks.Add(function (data) { 
    data.math = data.math.replace(/\d{1,3}(?:\,\d{3})+/g, removeCommas); 
    }); 
    MathJax.InputJax.AsciiMath.postfilterHooks.Add(function (data) { 
    recursiveAddCommas(data.math.root); 
    }); 
}); 

が動作します。

1

AsciiMath設定オプションは、残念ながら正しく文書化されていません。

あなたのMathJaxの構成ブロックに

//... 
    AsciiMath: { 
     decimal: "," 
    }, 
//... 

を経由して、これを指定することができます。

これは、(たとえば、(1,2)などの)さまざまな解析の複雑さを引き起こすことに注意してください。完了の場合、ドキュメントは小数点セパレータではなく期間としてコンマを使用ヨーロッパ数値形式を使用するAsciiMathに指示

decimal: ',' 

設定http://docs.mathjax.org/en/latest/options/input-processors/AsciiMath.html

+0

"decimal: '、'"を追加すると、千単位の区切り記号(おかげで)に役立ちますが、MathJaxは小数点記号の後にスペースを追加します(例:「0.12」)。その問題の解決法はありますか? –

関連する問題