Як я можу зробити шрифт однобічним?


14

Припустимо, що у мене є шрифт у досить популярному форматі ( .ttf, .otfі т. Д.), І я маю законні права змінювати його. Як відомо, це звичайний шрифт з різними символами (гліфами?), Різними по ширині та відстані. Як би я міг перетворити згаданий шрифт в однобічний шрифт (наприклад, всі символи мають однакові розміри тощо)?

Якщо можливо, чи є якісь автоматизовані інструменти, які можуть зробити деякі здогадки для вас? (Результати не повинні бути ідеальними .) Шрифт може бути великим (багато символів), і редагування може бути втомливим.

Будь-які пропозиції щодо проблеми дуже вдячні! :)


Відмова: Вибачте, якщо це вважається простим методом , але Google має дуже мало інформації з цього приводу, а для програміста, який не займається графікою чи шрифтами, це, звичайно, не просто . Також вибачте, якщо моя термінологія вимкнена ...: P


Яке шрифтове програмне забезпечення ви використовуєте, якщо воно є? Fontlab? Fontforge?
thomasrutter

Відповіді:


12

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

В основному, щоб шрифт вважався монопростором, кожен гліф повинен бути однакової ширини, аж до точно такої ж кількості одиниць. Сюди входять навіть гліфи, які зазвичай повинні бути нульовою шириною або певною шириною (наприклад, пробіли em, em тире тощо).

Див. Запис у поширених запитаннях "Як я можу позначити шрифт як одномісний?"

Щоб фактично відредагувати ширину всіх гліфів одразу в партії, ви можете просто перейти до меню «Метрики» -> «Встановити ширину» у меню, але я не очікував би, що він працює для всіх символів. Можливо, вам доведеться вручну редагувати всі знаки, такі як "W", "M", "@" тощо, щоб вони не закінчилися перекриватися. І поєднання діакритичних знаків (акценти, призначені для "комбінування" з літерами під час візуалізації) може зіпсувати всі їхні позиції (що важко перевірити, якщо ви американський / англійський і ви майже ніколи не використовуєте їх).

Людина, яка вміє створювати та редагувати шрифти, змогла б виконати це завдання, але це все ще не було б просто.


У мене те саме питання щодо перетворення шрифту в монопростір. Я розумію, що закопування було б погано. Я дуже шукаю інструмент, який 1) знайде найширший гліф, 2) тоді замість того, щоб розтягнути гліфи, я хотів би, щоб вони були зосереджені в полі такої ширини. Чи немає інструменту для цього?
NJRandy

@thomasrutter у випадку з gnu unifont? (шрифт растрових зображень, де гліф становить 8 16 або 16 16)
користувач2284570

Чудова відповідь. Редагування безпосередньо з інтерфейсу FontForge не працювало для мене (воно залишалося замороженим годинами, перш ніж я його вбив). Натомість я використав прив’язки Python. Моєю метою було використати односкладний шрифт як запасний варіант, тому поганий кернінг та кровотеча не були великими проблемами. Я все це детально розказав в окремій відповіді.
Клімент

1
Коли я вперше вчився, я створив багато моно шрифтів, редагуючи безкоштовні шрифти. Як і будь-який інструмент автоматизації, він повинен бути лише відправною точкою: слід підкоригувати результати у міру необхідності. Я виявив, що Фонтограф має найшвидшу криву навчання. Виберіть гліфи, перейдіть Set Widthпід Metricsспадаючого меню: встановити всі гліфи однієї середньої ширини (змінити пізніше , якщо це необхідно) і , нарешті, вибрати Equalise Sidebearingsтакож по Metricsменю центрировать гліфи в ем-квадрат. Звичайно: вивчіть, як інші подолали труднощі, зокрема, для створення успішних шрифтів фіксованої ширини.
Москарда

7

thomasrutter пропонує більше технічної відповіді; Я покажу вам деякі принципи типографії, щоб відмовити вам робити те, що ви хочете робити, якщо вам справді не потрібно.

Збільшити масштаби "я" та "м" у консолях чи кур'єрі, а потім Корбеля чи Вердани. Зауважте, наскільки різні букви мають бути для того, щоб змусити роботу простору. Для правильного перетворення шрифту в монопростір потрібно багато знань і роботи. Загальна думка про розтягнення шрифтів взагалі нахмурюється будь-яким дизайнером, вартим їхньої солі, тому навіть перехід від нормального до конденсованого варіанту перемальовує всі гліфи.

Отже, подивіться тут на Consolas vs. Corbel і подивіться, як при збільшенні масштабу ви можете подивитися на 1) інтервал між літерами, 2) узгодженість товщини штриха та 3) як кожна буква вписується у свій ящик. Подивіться на однорозмірне обличчя (перше) порівняно зі змінним віднесеним обличчям (друге), потім подивіться третє та четверте, щоб побачити, що відбувається, коли ви намагаєтесь розтягнутись та пробіл, щоб зробити його рівним. По-четверте, я зробив пані до 75%, щоб потрапити в коробку, але зараз вони набагато худіші, ніж "Є". це буде помітно при використанні.

Порівняння монопростірних та змінних шрифтів простору

Отже, коротше: не возиться зі шрифтами; вони набагато грізніші, ніж ви очікували!


2
Так, розтягнення широких гліфів на зразок М - недостатньо вдале рішення саме з тієї причини, яку вказує Брендан: його вертикальні штрихи стають вужчими, ніж інші літери, і це виглядає погано. Ви повинні фактично редагувати гліфи вручну, вибираючи контрольні точки та переміщуючи їх. Сподіваємось, це дає ОП деяке уявлення про те, як зробити це правильно (або добре) не є невеликим завданням. Особливо, якщо ви хочете мати дещо пристойне покриття гліфів.
thomasrutter

@Brendan Я думаю, що для шрифту растрових зображень, де є лише дві ширини гліфів, має бути інакше (у моєму випадку гліфи
user2284570

+1; сподіватися на повний автоматичний переклад нереально. Однак у обмежених контекстах те, що ви показали на третьому малюнку, насправді працює добре: якщо ви хочете імпортувати відсутні шрифти з математичних операторів у шрифт монопростіру, це рішення буде виглядати досить нормально (я розмістив програмне забезпечення, щоб це зробити як окрему відповідь).
Клімент

@Brendan Я не згоден. проблема з усіма вашими прикладами, є те , що ви не застосувати той же перетворення для всіх гліфів
симбіонт

6

Я зіткнувся з цією самою проблемою, намагаючись редагувати вихідний код, використовуючи символи Unicode. У цьому контексті більша частина вихідного коду відображається одним шрифтом монопростору, а кілька символів, які не охоплені цим шрифтом, закінчуються руйнуванням вирівнювання.

Хоча це правда, що "одношаровий" повний шрифт дасть жахливі результати (кернінг, ширина обведення та загальний баланс буде повністю зіпсований), імпорт лише декількох символів із шрифту змінної ширини у монопростір дає гідні результати. Наведена нижче анімація показує використання консолей + Symbola як резервного копіювання, порівняно з використанням консолей + односкладну версію Symbola:

до і після моноспацифікації

Це не марно для розширеної типографії, але це приємний компроміс, якщо ви хочете використовувати символи у вихідному коді без руйнування відступу. Однак є ряд застережень:

  • Широкі персонажі трохи кровоточать на сусідні простори (хоча їх можна трохи зменшити, щоб пом'якшити проблему)
  • Кернінг буде поганий (не надто велика проблема, оскільки це лише резервна робота)

Я запустив проект GitHub для автоматичного управління таким видом перетворення шрифту. Він включає заздалегідь створені шрифти та код, використовуючи прив'язки Python шрифту fontforge.

Дивіться також це питання emacs.se .


-1

У текстовому процесорі я: (1) створив таблицю; (2) розділити на стовпці - по одному стовпчику на кожну букву; (3) по центру літери; і (4) зробив усі межі, внутрішні та зовнішні, невидимими.


1
Це не відповідає на запитання. Це не допомагає створити шрифт, і це звучить як трата часу.
Москарда
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.