Fonts 如何在mathjax中更改数字语言

Fonts 如何在mathjax中更改数字语言,fonts,mathjax,Fonts,Mathjax,我们已经在我们的网站(java-GWT)上使用mathjax来呈现公式,它工作得很好,但问题是我们需要用波斯语/阿拉伯语脚本向用户显示数字 我必须提到的是,我们网站上有超过10万个选择题和超过5万篇文章,其中有公式可以呈现。这是Java的方法。我回答这个问题是因为您有一个java标记。我不知道mathjax的事。我希望您可以在代码中实现这个逻辑 阿拉伯语,表示01232456789=\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u0

我们已经在我们的网站(java-GWT)上使用mathjax来呈现公式,它工作得很好,但问题是我们需要用波斯语/阿拉伯语脚本向用户显示数字


我必须提到的是,我们网站上有超过10万个选择题和超过5万篇文章,其中有公式可以呈现。

这是Java的方法。我回答这个问题是因为您有一个java标记。我不知道mathjax的事。我希望您可以在代码中实现这个逻辑

阿拉伯语,表示01232456789=\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9

我们将每个字符作为字符处理,而不是int。因此,将数字转换为字符串,然后使用此函数。它应该符合你的目的

private static String decimalToArabic(String number) {
    char[] chars = new char[number.length()];
    for(int i=0;i<number.length();i++) {
        char ch = number.charAt(i);
        switch(ch) {
            case '\u06F0' : chars[i] = '0';
                            break;
            case '\u06F1' : chars[i] = '1';
                            break;
            case '\u06F2' : chars[i] = '2';
                            break;
            case '\u06F3' : chars[i] = '3';
                            break;
            case '\u06F4' : chars[i] = '4';
                            break;
            case '\u06F5' : chars[i] = '5';
                            break;
            case '\u06F6' : chars[i] = '6';
                            break;
            case '\u06F7' : chars[i] = '7';
                            break;
            case '\u06F8' : chars[i] = '8';
                            break;
            case '\u06F9' : chars[i] = '9';
                            break;
        }
    }
    return new String(chars);
}
private静态字符串decimaltorabic(字符串编号){
char[]chars=新字符[number.length()];

对于(int i=0;i为了访问波斯语数字,您需要使用对这些字形的Unicode位置的引用。波斯语数字位于U+06F0到U+06F9(阿拉伯数字是U+0660到U+0669)。因此,您可以使用
\Unicode{0x6F2}
生成2的波斯语字形(۲)。MathJax中可用的web字体不包含阿拉伯语或波斯语数字的字形,因此不能保证读者能够查看此符号。但是,您可以通过包含该符号的建议字体来提高几率。看起来Arial和Times New Roman都包含阿拉伯文和波斯文字符,所以

\unicode['Times New Roman',Arial]{x6F2}
可能使大多数观众都能看到您期望的字符。当然,您可以创建宏,如
\0
\1
\2
等,以便更容易键入

或者,如果您想让“123”自动显示为“۱۲۳”,可以通过添加以下内容来完成

<script type="text/x-mathjax-config">
MathJax.Hub.Config({
  "HTML-CSS": {
    undefinedFamily: "'Times New Roman',Arial,STIXGeneral,'Arial Unicode MS',serif",
    noReflows: false
  }
});
MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready", function () {
  var REMAP = MathJax.OutputJax["HTML-CSS"].FONTDATA.REMAP;
  var ZERO = 0x6F0;     // use 0x660 for Arabic, 0x6F0 for Persian
  for (var i = 0; i < 10; i++) {REMAP[0x30+i] = ZERO+i}
});
</script>

MathJax.Hub.Config({
“HTML-CSS”:{
未定义的家族:“'Times New Roman',Arial,STIXGeneral,'Arial Unicode MS',serif”,
noReflows:错误
}
});
MathJax.Hub.Register.StartupHook(“HTML-CSS Jax就绪”,函数(){
var REMAP=MathJax.OutputJax[“HTML-CSS”].FONTDATA.REMAP;
var ZERO=0x6F0;//阿拉伯语使用0x660,波斯语使用0x6F0
对于(var i=0;i<10;i++){REMAP[0x30+i]=ZERO+i}
});
在加载MathJax.js本身的脚本之前添加到您的页面。这将把所有数字0到9重新映射到它们的波斯语(如果您将
ZERO=0x6F0
更改为
ZERO=0x660
)对应项


请注意,这只影响HTML-CSS输出。如果您将HTML-CSS全部更改为SVG,则SVG输出将使用类似的配置。但这不会更改NativeMML输出的结果(但是,原始的
\unicode{}
方法将在所有三种输出格式中都有效).

谢谢你的回答,但我需要使用mathjax,因为页面上有很多数字,我不想更改。我只需要更改数学公式中的数字