Как печатать нижние / надстрочные индексы в командной строке?

StackOverflow https://stackoverflow.com/questions/597813

Вопрос

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

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

Спасибо

Это было полезно?

Решение

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

        2
f(x) = x  + log x
               2

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

Следующая за вами дополнительная информация о том, какие платформы вас в основном интересуют:

По крайней мере, в 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;
}

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

macOS, похоже, не использует gnome-terminal в качестве терминальной программы, но ссылки здесь и здесь кажется, это указывает на то, что стандартный терминал понимает UTF-8 (или вы могли бы загрузить и установить gnome-terminal в качестве последнего средства).

Другие советы

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

Только если у вас есть терминал, поддерживающий Unicode, что далеко не гарантировано.Unicode определяет ограниченное количество ‘символов совместимости’ подстрочного и надстрочного индексов, вы, конечно, не можете использовать его ни в одном старом письме:

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top