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

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

[Oʻzbekcha](https://ipak.xronocode.com/maqolalar/mark-band/index.md) · [English](https://ipak.xronocode.com/en/maqolalar/mark-band/index.md) · [Русский](https://ipak.xronocode.com/ru/maqolalar/mark-band/index.md) · [Español](https://ipak.xronocode.com/es/maqolalar/mark-band/index.md) · [Português](https://ipak.xronocode.com/pt/maqolalar/mark-band/index.md) · [中文](https://ipak.xronocode.com/zh/maqolalar/mark-band/index.md)

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

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

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

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

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

![GʻALLA MAʼNO: без нашего кернинга и с ним](https://ipak.xronocode.com/images/p/mark-band/kern-before-after.png)

*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 и знаком ʻ не должен быть слишком большим, иначе в тексте появляются дыры.

**Справка.** Знак тутук (tutuq belgisi, ʼ, U+02BC) — разделительный знак узбекской латиницы. По правилам орфографии 1995 года (пункт 32) он показывает, что гласный перед ним произносится долго или что гласный после него произносится отдельно от предыдущего согласного: maʼno, taʼlim, sanʼat. Знак ʻ (U+02BB) — часть букв Oʻ и Gʻ. По Юникоду оба — буквы-модификаторы, а не кавычки.

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

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

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

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

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

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

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

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

## Полоса знака

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

![Полоса знака: верхние 38 % высоты прописной](https://ipak.xronocode.com/images/p/mark-band/band-diagram.png)

*Полоса знака: верхние 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 — их остановила защита от касаний. Так и задумано: лучше чуть свободнее, чем слипание в мелком кегле.

**Справка.** Кернинг — поправка расстояния для конкретной пары знаков. Она хранится внутри файла шрифта, в служебной таблице GPOS (она отвечает за положение знаков), и применяется автоматически: программе набора ничего настраивать не нужно. Наши поправки добавлены к кернингу основы отдельным блоком и не меняют исходных пар Overpass.

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

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

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

![Узбекские слова кириллицей: кернинг основы и наш](https://ipak.xronocode.com/images/p/mark-band/cyrillic-before-after.png)

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

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

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

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

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

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

![Рабочая проба «до/после» из сборки](https://ipak.xronocode.com/images/p/mark-band/davlat-proof-regular.png)

*Рабочая проба «до/после» из сборки: латиница со знаками и кириллица, прописные и строчные. 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ʻ читалась одной буквой.

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

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

Мерить просвет нужно там, где знак стоит, а не по всей высоте строки.

ʻ тяготеет к своей букве, ʼ стоит посередине: правило несимметрично.

Защита от касаний важнее красивой цифры: в мелком кегле слипание хуже лишнего воздуха.

## Источники

Совет о зазоре между 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).

Ссылки:

А. Шайдуллина. Uzbek. type.today, 04.12.2023. [https://type.today/en/journal/uzbek](https://type.today/en/journal/uzbek)

Unicode: Spacing Modifier Letters (U+02B0–U+02FF). [https://www.unicode.org/charts/PDF/U02B0.pdf](https://www.unicode.org/charts/PDF/U02B0.pdf)

OpenType: фича kern (Microsoft Typography). [https://learn.microsoft.com/en-us/typography/opentype/spec/features_ko](https://learn.microsoft.com/en-us/typography/opentype/spec/features_ko)

HarfBuzz — движок раскладки текста. [https://harfbuzz.github.io/](https://harfbuzz.github.io/)

Fira Sans. [https://github.com/mozilla/Fira](https://github.com/mozilla/Fira)

Inter. [https://github.com/rsms/inter](https://github.com/rsms/inter)

Noto Sans. [https://github.com/notofonts/latin-greek-cyrillic](https://github.com/notofonts/latin-greek-cyrillic)

Onest. [https://github.com/simpals/onest](https://github.com/simpals/onest)

IBM Plex. [https://github.com/IBM/plex](https://github.com/IBM/plex)

---
Страница: https://ipak.xronocode.com/ru/maqolalar/mark-band/ · SIL Open Font License 1.1 · avenex@xronocode.com
