我们已经使用mathjax到我们的网站(java-GWT)来渲染公式并且它工作得很好,但问题是我们需要向用户显示波斯语/阿拉伯语脚本中的数字。
我必须提到我们在我们的网站上有超过100k的多项选择题和超过5k篇文章,这些文章都有公式可供渲染。
答案 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{}
方法可以在所有三种输出格式中工作)。