IPAK

Статьи · Этап 4 · Рабочий шрифт

Полоса знака: как выровнять Oʻ и Gʻ

Почему в слове GʻALLA появлялась дыра и как мы научили шрифт мерить просвет только там, где стоит знак.

Знак ʻ маленький. Он стоит наверху, на уровне верхней трети прописной буквы, а под ним — пустота до самой строки. Пока знак окружён круглыми буквами, это почти не заметно. Но поставьте его между G и A — и в слове GʻALLA появляется дыра.

В этой статье — как мы с ней справились в рабочем шрифте Ipak Davlat и почему обычный способ выравнивания здесь не работает. Поправки расстояния для отдельных пар букв называются кернингом.

GʻALLA MAʼNO: без нашего кернинга и с ним
GʻALLA MAʼNO в Ipak Davlat Regular: без нашего кернинга и с ним. Ipak; набрано HarfBuzz (hb-view): сборка Ipak Davlat Regular без нашего кернинга и итоговая; шрифт — SIL OFL 1.1 · CC BY 4.0 · Ipak

Откуда дыра

Посмотрите на верхнюю строку картинки. Знак ʻ отстоит от G, затем идёт ещё один просвет до A. A сверху острая, она тоже даёт много воздуха. Три пустоты складываются в одну, и слово распадается на «G» и «ʻALLA».

С тутуком ʼ в MAʼNO то же самое: A открыта вверху справа, ʼ узкий, N начинается вертикальной стойкой. Между A и N образуется щель шире, чем между любыми другими буквами слова.

Об этой проблеме в узбекском наборе предупреждает обзор type.today: интервал между O или G и знаком ʻ не должен быть слишком большим, иначе в тексте появляются дыры.

Как обычно ставят расстояния

Компьютерная проверка пар, которую мы написали для Ipak, работает так же, как автоматические «спейсеры» — программы, расставляющие отступы. Пару букв разрезают на горизонтальные строки от базовой линии до верха прописной. В каждой строке меряют белое расстояние от правого края левой буквы до левого края правой. Среднее по всем строкам — оптический просвет пары. Оптический — потому что так его оценивает глаз, а не линейка.

Глубокие провалы, как внутри L или под перекладиной A, обрезают: глаз не заглядывает в них до конца.

Эталон — просвет пары HH. Две прямые стойки — самый простой случай, и отступы основы мы считаем правильными.

Почему это не работает для знака

Знак занимает только верхнюю часть строки. Ниже него нет ничего. Если мерить по всей высоте, в среднее попадает пустота под знаком, а она большая. Алгоритм видит «огромный просвет» и придвигает знак вплотную или даже заводит под соседнюю букву.

Наш первый вариант так и сделал: знак налез на A. Мы ослабили правило — и знак «перепрыгнул»: встал вплотную к A и стал читаться её частью, а не частью G. Читатель видел «G ʻA».

Обе ошибки — следствие одной причины: просвет меряли там, где знака нет.

Полоса знака

Решение — мерить только в той полосе, где знак реально стоит. Знак ʻ в Ipak Davlat занимает верхние 38 % высоты прописной. Эту же полосу мы и берём.

Полоса знака: верхние 38 % высоты прописной
Полоса знака: верхние 38 % высоты прописной. Просвет между буквами и знаком меряется только в ней. Ipak; Ipak Davlat Regular, разметка по метрикам шрифта; шрифт — SIL OFL 1.1 · CC BY 4.0 · Ipak

В полосе видно то, что видит глаз на уровне знака: правый край G, сам знак, левый край A. Пустота под знаком в расчёт не входит.

Для строчных полоса шире: от середины высоты строчной x до верха прописной. Строчные ниже, и знак над ними выступает.

Несимметричное правило

Второе открытие: знаку нужны разные расстояния с двух сторон.

ʻ принадлежит O и G. Это не отдельный символ, а часть буквы. Поэтому к ним знак ставится плотно: цель — 0,45 обычного просвета HH. А до следующей буквы — обычный просвет, 1,0. Так Gʻ читается одной буквой, а знак не «прыгает» к A.

ʼ разделяет слоги. Он ничей: не принадлежит ни левой, ни правой букве. Поэтому стоит ровно посередине, 0,8 просвета с обеих сторон.

Ещё два ограничения страхуют от крайностей. В самом узком месте знак не ближе 0,4 просвета HH к соседу. И ни одна пара в шрифте не ближе 5 % кегля, это защита от касаний. Кегль — размер шрифта; 5 % кегля — это 5 мм для букв, набранных размером 10 см.

Наш замер до и после, Ipak Davlat Regular, в долях просвета HH, в полосе знака:

Пара Без нашего кернинга С ним
G → ʻ 1,16 0,69
ʻ → A 1,12 0,99
A → ʼ 1,21 0,80
ʼ → N 1,10 0,81

G и знак не дошли до цели 0,45 — их остановила защита от касаний. Так и задумано: лучше чуть свободнее, чем слипание в мелком кегле.

Кириллица: та же логика, другой эталон

Вторая половина работы — кириллица. В Overpass она почти не кернилась: ГЛ, ТЛ, УА стояли разреженно, а для Қ Ғ Ҳ поправок не было вовсе.

Здесь мы сравнивали Ipak Davlat с пятью профессиональными открытыми шрифтами: Fira Sans, Inter, Noto Sans, Onest и IBM Plex Sans. Важная оговорка: их значения кернинга мы не копировали. Мы мерили, насколько плотно каждый из них ставит пару относительно своего HH, брали медиану и подгоняли Ipak Davlat под неё. Медиана — середина ряда: половина шрифтов ставит пару плотнее, половина свободнее. Она не даёт одному необычному шрифту сбить результат.

Узбекские слова кириллицей: кернинг основы и наш
Узбекские слова кириллицей: кернинг основы и наш. Ipak; набрано HarfBuzz (hb-view); шрифт — SIL OFL 1.1 · CC BY 4.0 · Ipak

Два правила упростили работу.

Двойники. Кириллические буквы, совпадающие с латинскими по форме (А, В, Е, К, М, Н, О, Р, С, Т, Х), ставятся так же, как латинские. Пара КА равна паре KA. Иначе одно и то же слово в двух письменностях выглядело бы по-разному.

Хвосты. Буква с хвостом под строкой — Қ, Ҳ, Ц, Щ — ставится как её основа: Қ как К, Ҳ как Х. Хвост лежит ниже строки и в просвет не входит.

Тут случилась ошибка, которую нашли при проверке. Защита от касаний сначала мерила только выше строки, и хвосты Қ и Ҳ почти касались соседней А. Замер расширили вниз, до хвостов, и проблема ушла.

Итог: 784 пары в Regular и 802 в Bold. Подробная проба «до/после» — ниже.

Рабочая проба «до/после» из сборки
Рабочая проба «до/после» из сборки: латиница со знаками и кириллица, прописные и строчные. Ipak; рабочая проба сборки; шрифт — SIL OFL 1.1 · CC BY 4.0 · Ipak

Спор о касании

При проверке было замечание: знак в Gʻ почти касается G, около 1 % кегля. Если бы это подтвердилось, шрифт нельзя было бы выпускать.

Мы проверили по контуру: отрисовали пару в растр, где кегль равен 2000 точкам, и измерили кратчайшее расстояние между чернилами G и знака. Вышло 145 единиц в Regular и 119 в Bold — 7,3 и 6,0 % кегля. Независимый замер другим способом дал 7,8 и 7,0 %. Порог, который предлагался в самом замечании, 60–80 единиц, выполнен с запасом. Замечание отклонили с цифрами. Близость знака к G здесь не ошибка: так и задумано, чтобы Gʻ читалась одной буквой.

Что из этого следует

Знак ʻ — не кавычка, и выравнивать его как кавычку нельзя. Три вывода, которые пригодятся любому, кто делает шрифт для узбекского:

  1. Мерить просвет нужно там, где знак стоит, а не по всей высоте строки.
  2. ʻ тяготеет к своей букве, ʼ стоит посередине: правило несимметрично.
  3. Защита от касаний важнее красивой цифры: в мелком кегле слипание хуже лишнего воздуха.

Источники

  • Совет о зазоре между O/G и ʻ — А. Шайдуллина, type.today, 04.12.2023.
  • Имена и номера U+02BB и U+02BC — таблица Юникода Spacing Modifier Letters.
  • Описание фичи kern — спецификация OpenType, Microsoft Typography.
  • Метод и числа — наши: замер выполнен через HarfBuzz и FreeType на сборке Ipak Davlat v0.1, октябрь 2026 года.
  • Эталонные шрифты: Fira Sans, Inter, Noto Sans, Onest, IBM Plex Sans (все под SIL OFL 1.1).

Ссылки: