Удаление глифов в шрифтах и текстовых редакторах¶
Удаление глифа — это процесс исключения отдельного знака (глифа) из шрифтового набора, текстового документа или типографской вёрстки. Глиф — графическое начертание символа, входящего в шрифт: буква, цифра, знак препинания, математический символ, декоративный элемент. Удаление глифов выполняется по разным причинам: оптимизация веса шрифтового файла, исправление ошибок вёрстки, удаление нежелательных символов из текста, подготовка шрифта к публикации.
¶Что такое глиф и чем он отличается от символа
Символ — абстрактная единица текста (например, буква «А»), а глиф — её конкретное графическое воплощение. Один символ может иметь несколько глифов: обычное начертание, курсив, капитель, малые прописные, альтернативная форма. В Unicode закодированы символы, а не глифы; отображение символла как глифа определяет шрифт и используемые OpenType-функции.
Каждый шрифт содержит набор глифов, каждый из которых имеет собственный идентификатор — GID (Glyph ID). В шрифтах формата TrueType и OpenType глифы хранятся в таблицах glyf и CFF/CFF2 соответственно. Таблица cmap связывает кодовые точки Unicode с GID.
¶Причины удаления глифов
Основные сценарии, при которых возникает необходимость убрать глиф:
- Оптимизация веб-шрифтов. Полный шрифт может содержать тысячи глифов, включая редкие символы, лигатуры, стилизованные наборы. Для веба формируют подмножество (subset) только нужных глифов, что сокращает размер файла в десятки раз.
- Исправление вёрстки. В тексте могут оказаться нежелательные символы — невидимые управляющие знаки, дублирующие глифы, символы из другой кодовой страницы, отображаемые как квадраты (tofu).
- Подготовка к печати и публикации. Лишние глифы увеличивают время рендеринга и могут вызывать конфликты при экспорте в PDF.
¶Удаление глифа из текстового документа
¶В текстовых редакторах
В Microsoft Word, LibreOffice Writer и Google Docs удаление глифа — это обычное редактирование символа. Сложность возникает с невидимыми символами: неразрывными пробелами, мягкими переносами, управляющими кодами. В Word их отображают кнопкой «Показать все знаки» (¶). В LibreOffice — через меню «Вид» → «Форматирование» → «Невидимые знаки».
Для массового удаления используют функцию «Найти и заменить» с включённым регулярными выражениями или поиском по специальным кодам. Например, в LibreOffice Writer можно найти \n (перенос строки) или невидимые символы Unicode по диапазону кодов.
¶В графических редакторах
В Adobe Illustrator, CorelDRAW и подобных программах глиф может присутствовать как объект в кривых. Удаление выполняется стандартным инструментом Delete. Для удаления всех объектов, содержащих определённый глиф, используют поиск по символу или скрипты.
¶Удаление глифа из шрифта
¶Инструменты подмножеств
Для формирования подмножества шрифта (subsetting) используют:
| Инструмент | Тип | Особенности |
|---|---|---|
| FontTools (Python) | Библиотека, CLI | pyftsubset — стандарт де-факто, работает с TTF/OTF/WOFF2 |
| FontForge | GUI + CLI | Открытый редактор шрифтов с функцией удаления глифов |
| Glyphs | macOS GUI | Коммерческий редактор для профессиональной разработки шрифтов |
| FontLab | GUI | Профессиональный редактор шрифтов |
| online-font-tools | Веб-сервисы | Быстрое подмножество без установки ПО |
Пример команды подмножества через FontTools:
`` pyftsubset MyFont.ttf --unicodes="U+0020-007E,U+0410-044F" --output-file=subset.ttf ``
Команда оставляет только латиницу и кириллицу, удаляя все остальные глифы.
¶Ручное удаление в FontForge
В FontForge удаление глифа выполняется так: открыть шрифт, найти нужный глиф в окне шрифта, выбрать его, вызвать контекстное меню и выбрать «Clear» (очистить) или «Delete» (удалить). Очистка оставляет пустой глиф с сохранённым GID, удаление убирает его из набора и сдвигает последующие GID.
¶Автоматическое удаление неиспользуемых глифов
FontForge и FontTools умеют удалять глифы, на которые нет ссылок из таблицы cmap и из lookup-таблиц OpenType (лигатур, контекстных подстановок). Это позволяет очистить шрифт от «мёртвого» кода после редактирования.
¶Типичные проблемы при удалении глифов
- Слом шрифтовых функций. Удаление глифа, участвующего в лигатурах или контекстных подстановках, ломает цепочки замен. Перед удалением проверяют GSUB/GPOS-таблицы.
- Смещение GID. В старых форматах (TrueType) порядок глифов важен для некоторых приложений. Удаление из середины набора может сместить индексы.
- Пустые глифы. Иногда вместо удаления глифа оставляют пустое начертание — символ отображается как пробел. Так поступают, когда нужно скрыть символ, сохранив структуру шрифта.
- Конфликт с кернингом. Таблицы кернинга ссылаются на GID; после удаления глифов их необходимо перестроить.
¶Удаление глифов при вёрстке и программировании
В веб-разработке подмножество шрифта выполняют на этапе сборки: инструменты fonttools, glyphhanger, unicode-range в CSS позволяют отдавать пользователю только нужные глифы. В CSS свойство unicode-range задаёт, какие диапазоны символов загружать из конкретного файла шрифта, что косвенно исключает ненужные глифы из загрузки.
В LaTeX удаление глифа из текста выполняется стандартными средствами редактирования; для подавления отображения символа используют \phantom{}, \hbox{} или пакеты вроде showkeys.
¶Интересные факты
- В шрифте DejaVu Sans более 6000 глифов; подмножество для латиницы и кириллицы содержит около 500.
- Стандарт OpenType позволяет хранить до 65 535 глифов в одном шрифте.
- Некоторые символы Unicode не имеют визуального глифа в большинстве шрифтов — они отображаются как пустые прямоугольники (tofu), что и является визуальным проявлением отсутствия глифа.
¶Источники
- Microsoft Typography documentation
- FontForge documentation
- OpenType specification, Microsoft
- Unicode Standard, Chapter 2: General Structure
- FontTools documentation (python-fonttools)
