2009-02-28 19 views
2

我正在寫一段代碼處理數學變量和索引,我需要在CLI上打印下標和上標,是否有(可能是跨平臺的)方法來做到這一點?我在香草C++工作。如何在CLI上打印下標/上標?

注意:我希望這是跨平臺的,但從第一個答案這似乎並不可能我在MacOS和Ubuntu Linux(如此bash)下工作。

謝謝

回答

8

由於大多數的CLI是真的只有終端(非常愚蠢的人大多是的,但是有時顏​​色),我做過這唯一的跨平臺的方式是通過分配每個虛擬線muliple的物理線路,如:

 2 
f(x) = x + log x 
       2 

這並不理想,但它可能是最好的,你將得到沒有GUI。

跟着你額外的信息,以你在做什麼平臺主要興趣:

與Ubuntu至少,GNOME終端運行在UTF-8模式默認因此下面的代碼演示如何生成標和標:

#include <stdio.h> 

static char *super[] = {"\xe2\x81\xb0", "\xc2\xb9", "\xc2\xb2", 
    "\xc2\xb3", "\xe2\x81\xb4", "\xe2\x81\xb5", "\xe2\x81\xb6", 
    "\xe2\x81\xb7", "\xe2\x81\xb8", "\xe2\x81\xb9"}; 
static char *sub[] = {"\xe2\x82\x80", "\xe2\x82\x81", "\xe2\x82\x82", 
    "\xe2\x82\x83", "\xe2\x82\x84", "\xe2\x82\x85", "\xe2\x82\x86", 
    "\xe2\x82\x87", "\xe2\x82\x88", "\xe2\x82\x89"}; 

int main(void) { 
    int i; 
    printf ("f(x) = x%s + log%sx\n",super[2],sub[2]); 
    for (i = 0; i < 10; i++) { 
     printf ("x%s x%s ", super[i], sub[i]); 
    } 
    printf ("y%s%s%s z%s%s\n", super[9], super[9], super[9], sub[7], sub[5]); 
    return 0; 
} 

supersub字符*數組是UTF-8編碼用於數字標和下標(參見here)Unicode碼點。給定的程序將從上面輸出我的公式(在一行而不是三行),然後是所有選項的另一條測試行,以及y-super-999和z-sub-75,以便您可以看到它們的樣子。

MacOS似乎並未將gnome-terminal用作終端程序,但引用herehere似乎表明標準終端能理解UTF-8(或者您可以下載並安裝gnome-terminal作爲最後的手段)。

+0

非跨平臺方式呢? – tunnuz 2009-02-28 10:19:23

+0

這將取決於平臺:-)如果您可以告訴我們您期望可以運行的平臺,我們可以幫助您解決問題。 – paxdiablo 2009-02-28 10:22:29

4

我需要在CLI上打印下標和上標,是否有跨平臺的方式來做到這一點?

只有當你有一個支持Unicode的終端時,這是遠遠沒有保證。 Unicode定義子和標'兼容性角色的數量有限,你肯定不能用它在任何舊信:

₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎ₐₑₒₓ 
⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿⁱ 

即使如此,你在那裏是一個字形它在控制檯是依賴字體,這也遠沒有保證。上標2和3可能存在,因爲它們存在於ISO-8859-1中;其他人可能無法工作。