如何在mathjax中更改数字语言

时间:2015-07-19 12:12:52

标签: fonts mathjax

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

我必须提到我们在我们的网站上有超过100k的多项选择题和超过5k篇文章,这些文章都有公式可供渲染。

2 个答案:

答案 0 :(得分:1)

这是Java的做法。我回答了这个问题,因为你有一个java标签。我不知道mathjax。我希望你能在你的代码中实现这个逻辑。

阿拉伯语为01232456789 = \ u06f0 \ u06f1 \ u06f2 \ u06f3 \ u06f4 \ u06f5 \ u06f6 \ u06f7 \ u06f8 \ u06f9。

我们将每个字符作为char而不是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);
}

答案 1 :(得分:0)

为了访问波斯数字,您需要使用对这些字形的Unicode位置的引用。波斯数字位于U + 06F0至U + 06F9(阿拉伯数字为U + 0660至U + 0669)。因此,您可以使用\unicode{0x6F2}生成2(2)的波斯字形。 MathJax中提供的Web字体不包含阿拉伯语或波斯语数字的字形,因此无法保证阅读器能够查看此符号。您可以通过包含包含该符号的建议字体来提高赔率。看起来像Arial和Times New Roman都包括阿拉伯语和波斯语字符,所以

\unicode['Times New Roman',Arial]{x6F2}

可能会让大多数观众看到您期望的角色。当然,您可以创建\0\1\2等宏,以便更轻松地进行输入。

或者,如果您希望“123”自动显示为“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.js本身的脚本之前的页面。这会将所有数字0到9重新映射到他们的波斯语(如果您将ZERO = 0x6F0更改为ZERO = 0x660),则会将其重新映射到其中。

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