Существуют ли моноширинные шрифты, поддерживающие пробелы разной ширины?

(Потерпите меня, я знаю, что наличие символов, которые не являются моноширинными в моноширинном шрифте, несколько противоречит здравому смыслу, но ниже приведен законный вариант использования.)

У меня есть приложение, которое я написал, где мне нужны шестнадцатеричные символы фиксированной ширины , чтобы мой вывод мог выглядеть следующим образом:

21 41 49 56 44 4d 2c 31 
2c 31 2c 2c 41 2c 42 35 
4e 62 54 66 50 30 3f 36 
66 64 57 36 56 33 69 4b 

Очень важно, чтобы столбцы оставались идеально выровненными, поэтому моноширинный шрифт имеет решающее значение.

Однако мне не нужно так много пробелов между символами, и на самом деле это затрудняет использование пользовательского интерфейса из-за избыточного расстояния. В результате я хотел бы найти шрифт, в котором символы без пробелов будут иметь постоянную ширину, но где я могу настроить пробелы, как в примерах, приведенных в https://jkorpela.fi/chars/spaces.html . .

Существует ли такой зверь?

Используйте вкладки и настройте точки табуляции. В любом случае, трудно сказать, поскольку вы не говорите, в какой среде вы работаете.
Я считаю, что есть шрифты, которые в целом пропорциональны, но имеют фиксированные цифры ширины.
Существуют пропорциональные шрифты с альтернативными глифами для моноширинных цифр («табличные числа»), но я не думаю, что это применимо к символам для использования в качестве шестнадцатеричных цифр. Вы также можете подумать о создании собственного шрифта, возможно, начав со свободно изменяемого.

Ответы (3)

Мы не знаем о технической стороне «приложения, которое вы написали» , но в некоторых дизайнерских программах есть пробелы разной ширины, кроме обычных Space.

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

В качестве альтернативы вы можете поэкспериментировать с более сжатым моноширинным шрифтом.

Смотрите это: Какова функция пространств EM и EN?

введите описание изображения здесь

введите описание изображения здесь

Очень интересно. Я пробовал все пробелы emи enюникод с Courier New, но неудивительно, что все они сопоставляются с одним emпробелом. Мое программное обеспечение просто показывает одну строку простого неформатированного текста, поэтому в этом отношении оно несколько жестко. Я не думаю, что есть какой-то безболезненный способ добиться того, чего я хочу, кроме как найти правильный шрифт.
Насколько я понимаю, TeX и LaTeX вообще не вставляют «пробелы» и не ссылаются на шрифт для них, а вместо этого сами обрабатывают все пробелы. Конечно, возможно, что это поведение изменится при использовании моноширинного шрифта (но тогда, даже если это произойдет, вы почти наверняка сможете снова изменить его в этих системах).

Крайне маловероятно, что шрифт с фиксированной шириной имеет такую ​​функцию, потому что это позволит шрифтам не выравниваться под себя. Это явно не то, что задумал дизайнер. Но учтите:

  1. Для большинства парсов даже нет необходимости в таких вещах, так как есть символ, который имеет неуказанную ширину, которую пользователь может настроить. Это символ табуляции. Таким образом, даже самые элементарные системы должны позволять вам отображать вкладку, чтобы она делала то, что вы хотите.

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

  2. Если у вас действительно должно быть специальное место. Просто возьмите шрифт с открытым исходным кодом, откройте его в fontforge и определите указанное пространство. 15 минут работы, включая загрузку fontforge.

    Хотя я бы сказал, что это действительно плохой рабочий процесс.

В indesign вы можете сделать это с помощью вкладок, «вставить пробел» или с помощью стиля символа grep.

вставить пробел:

введите описание изображения здесь

стиль символа grep:

Используйте «/s», чтобы сопоставить все пробелы и увеличить ширину, используя отслеживание в стиле символов.

введите описание изображения здесь

Мне пришлось посмотреть, что такое InDesign, лол. Вы хотите сказать, что с InDesign я могу создать собственный шрифт, изменив существующий моноширинный шрифт?
@KennSebesta на самом деле не имеет значения, какие функции имеет шрифт. Все приложения, предназначенные для типографики, имеют пробелы свободного размера и функции табуляции. Дело в том, что вы задаете проблему XY. В этом случае вы думаете, что правильное пространство решает вашу проблему. Наверное, так и было бы. Но на что вы не обращаете внимания, так это на то, что почти каждая система имеет механизм настройки типографики. Если вы спросите на форуме графического дизайна, то получите ответ с их точки зрения. Но если бы вы просто сказали, в какой системе вы программируете, то люди рассказали бы, как настроить программу.
@joojaa Боюсь, я вас не понимаю, но я извиняюсь, если обидел вас, потому что это не было моим намерением. Я пишу кросс-платформенный последовательный терминал с открытым исходным кодом, gitlab.com/kubark42/AeroTerm , и я использую простой текстовый виджет, потому что он имеет все необходимые мне функции. Он будет поддерживать любой шрифт, который я ему добавлю, поэтому, если бы меня заботила только ширина пробела, я мог бы использовать шрифт переменной ширины, а затем использовать Unicode для достижения того, что я хочу. Однако мне также нужен текст для выравнивания, для чего требуется моноширинный шрифт. Поскольку он шестнадцатеричный, меня интересуют только цифры 0-9, буквы A-Fи a-f.
@KennSebesta QT имеет способы справиться с этим внутри, без необходимости в шрифте. См. stackoverflow.com/questions/13027091/…
Интересный. Я понятия не имел, что это возможно, и я не думал о том, чтобы взломать вкладку, чтобы она служила пробелом. Хороший! FWIW, я использую не QTextEdit, а TextArea в QML, поэтому он наследуется от TextEdit QML. К счастью, разработчики Qt сделали tabStopDistance доступным через интерфейс QML. К сожалению, даже когда он установлен как , doubleон усекается до int, тогда как ширина шрифта в пикселях является реальной, поэтому этот классный хак не работает в этом контексте. Я постараюсь сделать размер моего шрифта целочисленной шириной, а также отправлю отчет об ошибке в Qt.