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)와 같이) 다양한 구문 분석 문제가 발생합니다.

완료를 들어, 문서

decimal: ',' 

는 소수점 분리기 아닌 기간으로 쉼표를 사용하는 유럽 숫자 형식을 사용하는 AsciiMath 지시 설정 http://docs.mathjax.org/en/latest/options/input-processors/AsciiMath.html

+0

"decimal : ','"을 추가하면 천 단위 구분 기호가 사용됩니다 (감사). 그러나 MathJax는 10 진수 부호마다 공백을 추가합니다 (예 : "0.12"). 그 문제에 대한 해결책이 있습니까? –