2015-07-19 129 views
0

我們已經使用mathjax到我們的網站(java-GWT)來渲染公式,它工作得很好,但問題是我們需要向用戶顯示波斯語/阿拉伯語腳本中的數字。如何更改數字語言在mathjax

我不得不提到我們有超過10萬個選擇題和超過5K的文章在我們的網站上有公式來呈現。

回答

0

這是Java的做法。我回答這個,因爲你有一個Java標籤。我不知道mathjax。我希望你可以在你的代碼中實現這個邏輯。

阿拉伯語爲= \ 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); 
} 
+0

感謝您的回答,但我需要使用mathjax來做,因爲我不希望它們被更改的頁面中有很多數字。我只需要在數學公式中改變數字 –

0

爲了訪問波斯文數字,您需要使用對這些字形的Unicode位置的引用。波斯的數字在U + 06F0到U + 06F9(阿拉伯數字是U + 0660到U + 0669)。因此,您可以使用\unicode{0x6F2}生成2(2)的波斯字形。 MathJax中提供的網絡字體不包括阿拉伯數字或波斯數字的字形,但是不能保證讀者能夠查看該符號。您可以通過添加包含符號的建議字體來提高賠率。它看起來像宋體和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 = 0x6F0ZERO = 0x660)對應。

請注意,這隻會影響HTML-CSS輸出。如果您將HTML-CSS更改爲SVG,則類似的配置可用於SVG輸出。但是這不會改變NativeMML輸出的結果(然而原始的\unicode{}方法可以在所有三種輸出格式中工作)。