2009-02-28 2 views
2

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

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

Спасибо

ответ

8

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

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

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

+0

Как насчет не-межплатформенного способа? – tunnuz

+0

Это будет зависеть от платформы :-) Если вы можете рассказать нам о платформах, на которых вы планируете работать, мы сможем вам помочь. – paxdiablo

+0

Я отредактировал мой вопрос, хотя MacOS и Ubuntu Linux. – tunnuz

4

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

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

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

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

+0

Мне просто нужны числовые индексы и надстрочные индексы. – tunnuz

+0

И, хорошо, но как распечатать их из C++? – tunnuz

+0

wchar_t/wprintf/std :: wstring, я думаю. – bobince

Смежные вопросы