Как я могу сделать моноширинный шрифт?

14

Предположим , что у меня есть шрифт в скромно популярном формате ( .ttf, .otfи т.д.), и у меня есть законные права на изменение его. В его нынешнем виде это обычный шрифт с разными символами (глифами?), Различающимися по ширине и расстоянию. Как мне превратить указанный шрифт в моноширинный шрифт (например, все символы имеют одинаковые размеры и т. Д.)?

Если возможно, есть ли автоматизированные инструменты, которые могут сделать некоторые догадки для вас? (Результаты не обязательно должны быть идеальными .) Шрифт может быть большим (много символов), и редактирование может быть утомительным.

Любые предложения по проблеме очень ценятся! :)


Отказ от ответственности: извините, если это считается простым практическим заданием , но у Google очень мало информации по этому вопросу, и для программиста, который не имеет дело с графикой или шрифтами, это точно не просто . Кроме того, извините, если моя терминология выключена ...: P

Miguel
источник
Какое программное обеспечение шрифтов вы используете, если таковые имеются? FONTLAB? FontForge?
Томасруттер

Ответы:

12

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

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

См. Раздел часто задаваемых вопросов "Как пометить шрифт как моноширинный?"

Чтобы на самом деле редактировать ширину всех глифов одновременно в пакете, вы можете просто зайти в меню «Метрики» -> «Установить ширину», но я не ожидаю, что это будет работать для всех символов. Вам, вероятно, придется вручную редактировать все широкие символы, такие как «W», «M», «@» и т. Д., Чтобы они не перекрывались. А при объединении диакритических знаков (акценты, которые должны быть «объединены» с буквами во время рендеринга), могут быть испорчены все их позиции (что трудно проверить, если вы американец / англичанин и почти не используете их).

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

thomasrutter
источник
У меня тот же вопрос о преобразовании шрифта в моноширинный. Я понимаю, что растягивание было бы плохо. Что я действительно ищу, так это инструмент, который 1) найдет самый широкий глиф, 2) затем вместо того, чтобы растягивать глифы, я бы хотел, чтобы они центрировались в поле этой ширины. Нет ли инструмента для этого?
NJRandy
@thomasrutter в случае с GNU Unifont? (растровый шрифт, где глиф - 8 16 или 16 16)
user2284570
Отличный ответ. Редактирование непосредственно из пользовательского интерфейса FontForge мне не помогло (оно оставалось замороженным в течение нескольких часов, прежде чем я его убил). Вместо этого я использовал привязки Python. Моей целью было использовать моноширинный шрифт как запасной вариант, поэтому плохой кернинг и кровотечение не были большими проблемами. Я подробно изложил все это в отдельном ответе.
Климент
1
Когда я только начинал учиться, я сделал много монофонических шрифтов, редактируя бесплатные шрифты. Как и любой инструмент автоматизации, он должен быть только отправной точкой: необходимо настроить результаты по мере необходимости. Я обнаружил, что у Fontographer самая быстрая кривая обучения. Выберите глифы, перейдите Set Widthпод Metricsниспадающего меню: установить все глифы одной средней ширины (изменить позже , если это необходимо) и , наконец, выбрать Equalise Sidebearingsтакже по Metricsменю центрировать глифы в эм-квадрат. Конечно, изучите, как другие преодолели трудности, связанные с разработкой успешных шрифтов с фиксированной шириной.
Москарда
7

Томасруттер предлагает больше технического ответа; Я покажу вам некоторые принципы типографики, чтобы отговорить вас делать то, что вы хотите делать, если вам действительно не нужно.

Нажмите на «я» и «м» в Консолас или Курьер, а затем Корбель или Вердана. Обратите внимание, насколько разными должны быть буквы, чтобы моноспейс работал. Чтобы правильно преобразовать шрифт в моноширинный формат, требуется много знаний и работы. Общая идея растягивания шрифтов осуждается любым дизайнером, который стоит их соли, поэтому даже переход от обычного к сжатому варианту требует перерисовки всех глифов.

Итак, посмотрите на Consolas против Corbel здесь и посмотрите, как, когда он увеличен, вы можете посмотреть на 1) расстояние между буквами, 2) согласованность толщины обводки и 3) как каждая буква помещается в свой ящик. Посмотрите на одноразмерное лицо (первое) по сравнению с переменным разнесенным лицом (второе), затем посмотрите третье и четвертое, чтобы увидеть, что происходит, когда вы пытаетесь растянуть пространство и сделать его равным. В-четвертых, я сделал Ms squish до 75%, чтобы попасть в коробку, но теперь они намного худее, чем Is. это будет заметно при использовании.

Сравнение моноширинных и переменных космических гарнитур

Итак, вкратце: не связывайтесь с гарнитурами; они намного более грозные, чем вы ожидаете!

Brendan
источник
2
Да, растягивание широких символов, таких как M, не является достаточно хорошим решением именно по той причине, на которую указывает Брендан: его вертикальные черты становятся уже, чем другие буквы, и это выглядит плохо. Вы должны на самом деле редактировать глифы вручную, выбирая контрольные точки и перемещая их. Надеемся, что это дает ОП некоторое представление о том, как сделать это правильно (или приятно) - задача не из легких. Особенно, если вы хотите иметь несколько приличное покрытие глифа.
Томасруттер
@Brendan Я думаю, что это должно быть по-другому для растрового шрифта, где есть только две ширины глифов (в моем случае, глифы имеют ширину 8 или 16 пикселей)
user2284570
+1; нереально надеяться на полный автоматический перевод. Однако в ограниченном контексте то, что вы показали на третьем рисунке, действительно работает хорошо: если вы хотите импортировать отсутствующие математические операторы в моноширинный шрифт, это решение будет выглядеть довольно хорошо (я разместил программное обеспечение для этого в качестве отдельного ответа).
Климент
@ Брендан, я не согласен. проблема всех ваших примеров в том, что вы не применили одно и то же преобразование ко всем глифам
symbiont
6

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

Хотя верно, что «моноспазмывание» полного шрифта приведет к ужасным результатам (кернинг, ширина обводки и общий баланс будут полностью испорчены), импорт всего лишь нескольких символов из шрифта переменной ширины в моноширинный даст хорошие результаты. Анимация ниже показывает использование Consolas + Symbola в качестве запасного варианта по сравнению с использованием Consolas + моноспасифицированной версии Symbola:

до и после моноспасификации

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

  • Широкие символы будут немного кровоточить в соседних местах (хотя они могут быть немного уменьшены, чтобы смягчить проблему)
  • Кернинг будет плохим (не слишком большая проблема, так как это всего лишь запасной вариант)

Я запустил проект GitHub для автоматической обработки таких преобразований шрифтов. Он включает в себя предварительно сгенерированные шрифты и код с использованием привязок Python fontforge.

Смотрите также этот вопрос emacs.se .

Клеман
источник
-1

В текстовом процессоре я: (1) создал таблицу; (2) разбить на столбцы - один столбец для каждой буквы; (3) центрировать буквы; и (4) сделал все границы, внутренние и внешние невидимыми.

user56627
источник
1
Это не отвечает на вопрос. Это не помогает создать шрифт и звучит как пустая трата времени.
Москарда