数学変数とインデックスを扱うコードを書いています.CLIで下付き文字と上付き文字を出力する必要があります.(おそらくクロスプラットフォームの)方法はありますか? 私はバニラC ++で作業しています。
注:これをクロスプラットフォームにしたいのですが、最初の回答からこれは不可能と思われるため、MacOSとUbuntu Linux(bash)で作業しています。
ありがとうございました
数学変数とインデックスを扱うコードを書いています.CLIで下付き文字と上付き文字を出力する必要があります.(おそらくクロスプラットフォームの)方法はありますか? 私はバニラC ++で作業しています。
注:これをクロスプラットフォームにしたいのですが、最初の回答からこれは不可能と思われるため、MacOSとUbuntu Linux(bash)で作業しています。
ありがとうございました
ほとんどの CLI は実際には端末にすぎないため (ほとんどはかなりばかげていますが、色が付いている場合もあります)、これまでに行った唯一のクロスプラットフォームの方法は、次のように、仮想回線ごとに複数の物理回線を割り当てることです。
2
f(x) = x + log x
2
理想的ではありませんが、おそらく GUI なしで得られる最高のものです。
あなたが主に興味を持っているプラットフォームに関する追加情報を以下に示します。
少なくとも Ubuntu では、gnome-terminal はデフォルトで 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;
}
およびchar* 配列はsuper
、sub
数字の上付き文字と下付き文字の Unicode コード ポイントの UTF-8 エンコーディングです (こちらを参照)。指定されたプログラムは、上記の式を (3 行ではなく 1 行で) 出力し、次にすべての選択肢と y-super-999 および z-sub-75 の別のテスト行を出力して、それらがどのように見えるかを確認します。
MacOS は端末プログラムとして gnome-terminal を使用していないようですが、参照hereおよびhereは、標準端末が UTF-8 を理解することを示しているようです (または、最後の手段として gnome-terminal をダウンロードしてインストールすることもできます)。
CLI で下付き文字と上付き文字を出力する必要がありますが、それを行うクロスプラットフォームの方法はありますか?
Unicode 対応の端末を使用している場合のみ、これは保証されていません。Unicode では、限られた数の下付き文字と上付き文字の「互換性文字」が定義されています。これを古い文字で使用することはできません。
₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎ₐₑₒₓ
⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿⁱ
それでも、コンソールフォントにグリフがあることに依存していますが、これも保証されていません. 上付き文字 2 と 3 は、ISO-8859-1 に存在するため、存在する可能性があります。他のものはうまくいかないかもしれません。