如何配置MathJax(AsciiMath)以允许数千个分隔符

问题描述:

带有AsciiMath的MathJax将表达式1,000/5表示为1,000/5,其中分数的分子只显示为000而不是1,000。如何配置MathJax(AsciiMath)以允许数千个分隔符

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

的MathJax文档沉默千位分隔符。

的堆栈溢出的答案回答以下问题,这个问题对TeX的输入,但我需要它在AsciiMath格式输入,并没有能够使它通过在配置文件中改变“德州”到“AsciiMath”工作: mathjax commas in digits

任何帮助将不胜感激。谢谢。

设置

decimal: ',' 

告诉AsciiMath使用欧洲的数字格式,使用逗号作为小数代替隔离而不是句点。这就是为什么你不再将“0.12”视为一个数字。 AsciiMath没有每三位解析一次逗号的机制。

我可以建议的最好的方法是使用AsciiMath预过滤器预处理AsciiMath,以便在AsciiMath分析表达式之前删除逗号。添加类似

<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> 

的页面只是之前加载MathJax.js应该做的伎俩脚本。请注意,这意味着逗号不会出现在输出中;有没有自然的方式来做到这一点,除非你想添加逗号给所有具有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); 
    }); 
}); 

应该工作。

不幸的是,AsciiMath配置选项没有正确记录。

你可以在你的MathJax配置块通过

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

指定。

请注意,这会导致各种解析复杂性(例如(1,2))。

完成,该文件是在http://docs.mathjax.org/en/latest/options/input-processors/AsciiMath.html

+0

添加“decimal:','”有助于使用千位分隔符(谢谢),但也会导致MathJax在每个小数点后加一个空格,例如“0.12”。有没有解决这个问题的方法? –