我正在寫一段代碼處理數學變量和索引,我需要在CLI上打印下標和上標,是否有(可能是跨平臺的)方法來做到這一點?我在香草C++工作。如何在CLI上打印下標/上標?
注意:我希望這是跨平臺的,但從第一個答案這似乎並不可能我在MacOS和Ubuntu Linux(如此bash)下工作。
謝謝
我正在寫一段代碼處理數學變量和索引,我需要在CLI上打印下標和上標,是否有(可能是跨平臺的)方法來做到這一點?我在香草C++工作。如何在CLI上打印下標/上標?
注意:我希望這是跨平臺的,但從第一個答案這似乎並不可能我在MacOS和Ubuntu Linux(如此bash)下工作。
謝謝
由於大多數的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;
}
的super
和sub
字符*數組是UTF-8編碼用於數字標和下標(參見here)Unicode碼點。給定的程序將從上面輸出我的公式(在一行而不是三行),然後是所有選項的另一條測試行,以及y-super-999和z-sub-75,以便您可以看到它們的樣子。
MacOS似乎並未將gnome-terminal用作終端程序,但引用here和here似乎表明標準終端能理解UTF-8(或者您可以下載並安裝gnome-terminal作爲最後的手段)。
我需要在CLI上打印下標和上標,是否有跨平臺的方式來做到這一點?
只有當你有一個支持Unicode的終端時,這是遠遠沒有保證。 Unicode定義子和標'兼容性角色的數量有限,你肯定不能用它在任何舊信:
₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎ₐₑₒₓ
⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿⁱ
即使如此,你在那裏是一個字形它在控制檯是依賴字體,這也遠沒有保證。上標2和3可能存在,因爲它們存在於ISO-8859-1中;其他人可能無法工作。
非跨平臺方式呢? – tunnuz 2009-02-28 10:19:23
這將取決於平臺:-)如果您可以告訴我們您期望可以運行的平臺,我們可以幫助您解決問題。 – paxdiablo 2009-02-28 10:22:29