代码之家  ›  专栏  ›  技术社区  ›  tunnuz

如何在CLI上打印下标/上标?

  •  5
  • tunnuz  · 技术社区  · 17 年前

    我正在写一段处理数学变量和索引的代码,我需要在CLI上打印下标和上标,有没有(可能是跨平台的)方法?我在香草C++工作。

    注: 我希望这是跨平台的,但从第一个答案来看,这似乎不可能,我在MacOS和UbuntuLinux下工作(所以bash)。

    非常感谢。

    2 回复  |  直到 16 年前
        1
  •  13
  •   paxdiablo    17 年前

    由于大多数CLI实际上都是唯一的终端(大多数都是非常愚蠢的终端,但有时是彩色的),因此我唯一的跨平台方法是为每个虚拟线路分配多条物理线路,例如:

            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 char*数组是数字上标和下标的Unicode码点的UTF-8编码(请参阅 here ).给定的程序将从上面输出我的公式(在一行而不是三行),然后是所有选项的另一个测试行以及y-super-999和z-sub-75,以便您可以看到它们的样子。

    MacOS似乎没有将gnome终端用作终端程序,而是引用 here here 似乎表明标准终端理解UTF-8(或者您可以下载并安装gnome终端作为最后手段)。

        2
  •  6
  •   bobince    17 年前

    我需要在CLI上打印下标和上标,有跨平台的方法吗?

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

    即使这样,您仍然依赖于控制台字体中的字形,这也远远不能保证。上标2和上标3可能存在,因为它们存在于ISO-8859-1中;其他的很可能不起作用。

    推荐文章