Как напечатать подписные / верхние индексы на CLI? - PullRequest
5 голосов
/ 28 февраля 2009

Я пишу фрагмент кода, который имеет дело с математическими переменными и индексами, и мне нужно напечатать индексы и индексы на CLI, есть ли (возможно, кросс-платформенный) способ сделать это? Я работаю в ванильном C ++.

Примечание: Я бы хотел, чтобы это было кроссплатформенным, но, поскольку с первых ответов это кажется невозможным, я работаю под MacOS и Ubuntu Linux (так, bash).

Спасибо

Ответы [ 2 ]

11 голосов
/ 28 февраля 2009

Поскольку большинство CLI на самом деле являются только терминалами (в основном довольно тупыми, но иногда цветными), единственный кроссплатформенный способ, который я когда-либо делал, - это выделение нескольких физических линий на виртуальную линию, например:

        2
f(x) = x  + log x
               2

Это не идеально, но, вероятно, лучшее, что вы получите без графического интерфейса.

После получения дополнительной информации о том, какие платформы вам интересны в основном:

По крайней мере, с 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 * представляют собой кодировки UTF-8 для кодовых точек Unicode для числовых верхних и нижних индексов (см. здесь ). Данная программа выведет мою формулу сверху (в одной строке вместо трех), затем в другую тестовую строку для всех вариантов, а также y-super-999 и z-sub-75, чтобы вы могли видеть, как они выглядят.

Похоже, что MacOS не использует gnome-терминал в качестве программы терминала, но ссылки здесь и здесь , похоже, указывают на то, что стандартный терминал понимает UTF-8 (или вы можете загрузить и установите gnome-терминал в крайнем случае).

5 голосов
/ 28 февраля 2009

Мне нужно напечатать подписные и верхние индексы на CLI, есть ли кросс-платформенный способ сделать это?

Только если у вас есть терминал с поддержкой Unicode, что далеко не гарантировано. Unicode определяет ограниченное количество под- и надстрочных «символов совместимости», вы, конечно, не можете использовать его для любой старой буквы:

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

Даже тогда вы полагаетесь на наличие символа для этого шрифта в консоли, что также далеко не гарантировано. Надстрочные индексы 2 и 3, вероятно, существуют, поскольку они присутствуют в ISO-8859-1; другие могут не работать.

...