Все статьи
24 сентября 2026 г.8 мин чтения

Как сделать поднабор шрифта для проекта и не потерять знаки

Как сделать поднабор шрифта для проекта и не потерять знаки

Поднабор шрифта — это отдельный файл, в котором оставлены только символы, нужные конкретному проекту. Он помогает передать компактный набор для одной книги, экспозиции или серии карточек, когда полный файл содержит много неиспользуемых языков и знаков. Сначала составьте список реальных текстов, затем добавьте обязательные символы и проверьте результат на сценариях, которые файл должен поддерживать.

Когда поднабор действительно нужен

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

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

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

Начните со списка текстов, а не с алфавита

Обычного русского алфавита мало, чтобы описать реальные тексты. В книге могут встретиться кавычки разных типов, тире, знак номера, проценты, латинские обозначения, даты, неразрывный пробел, математические знаки и редкие имена. Набор зависит от содержания и правил редакции, а не только от языка публикации.

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

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

Составьте обязательный запас знаков

Тексты корпуса дают необходимый минимум, но не всегда охватывают весь будущий ввод. В отдельный список включите знаки, которые должны быть доступны независимо от примеров: пробел, перенос строки в тестовых данных, базовую пунктуацию, открывающие и закрывающие кавычки, дефис и тире, скобки, цифры, знаки валюты или математические операторы — если проект их использует.

Не добавляйте символ просто потому, что он встречался где-то в интернете. Уточните у редактора или владельца макета, будет ли он нужен. При этом слишком строгий список ровно по текущему тексту часто хрупок: небольшое изменение формулировки приводит к пустому квадрату или подстановке другого шрифта.

Разделяйте три множества:

  • Обязательные знаки: файл должен показывать их во всех предусмотренных текстах.
  • Допустимый резерв: редкие символы могут пригодиться для правок, но их наличие не является критерием приёмки.
  • Исключённые знаки: их отсутствие согласовано, потому что проект не содержит таких языков или функций.

Такое решение помогает не путать технически пропущенный знак с осознанным ограничением поставки.

Unicode-код и глиф — не одно и то же

В файле шрифта символ текста сопоставляется с глифом через таблицу cmap. В спецификации OpenType Microsoft описывает её именно как отображение кодов символов в индексы глифов. Это полезное различие: список глифов внутри редактора не равен списку символов, которые пользователь сможет набрать.

Один глиф может обслуживать несколько символов, а для некоторых сочетаний шрифт может подставлять дополнительный глиф средствами OpenType. Поэтому выбирать глифы вручную по названиям недостаточно. Для простого поднабора обычно надёжнее указывать Unicode-символы из корпуса, а затем проверить, что все используемые последовательности отображаются ожидаемо.

Проверяйте не только наличие буквы, но и её код в текстовом источнике. Визуально похожие символы могут быть разными: латинская A и кириллическая А, обычный пробел и неразрывный, дефис и короткое тире. Подмена часто остаётся незаметной в макете, пока текст не скопируют, не найдут поиском или не передадут другой программе.

Подробнее о роли cmap можно прочитать в спецификации OpenType от Microsoft. Она объясняет, что таблица связывает коды символов с индексами глифов, а не просто перечисляет нарисованные формы.

Что происходит с комбинируемыми знаками и функциями

Особенно внимательно проверяйте диакритические знаки. В видимом тексте буква с акцентом может быть представлена одним предварительно составленным символом либо базовой буквой и комбинируемым знаком. Если тест содержит только один вариант, другой может отсутствовать, хотя внешне задача кажется выполненной.

Проверяйте строку после копирования из реального источника и, когда это важно, обе формы Unicode-нормализации. Не полагайтесь только на набор вручную набранных в редакторе букв: клавиатура или приложение может автоматически заменить символы.

Если шрифт использует лигатуры, контекстные альтернативы или другие функции OpenType, тестируйте слова и фразы целиком. Отдельные буквы подтверждают лишь наличие базовых символов, но не правильность замены или соединения. Инструмент поднабора может добавлять связанные глифы для сохранённых функций; конкретное поведение зависит от настроек и реализации. После любого экспорта проверяйте результат визуально, а не предполагайте, что зависимости сохранены автоматически.

Подготовьте две независимые проверки

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

Вторая проверка отвечает на вопрос «всё ли выглядит и работает?». Откройте собранный файл в целевой программе и проверьте строки, где встречаются кавычки, пунктуация, диакритика, переносы, лигатуры и знаки из резерва. Сравните новую сборку с полным шрифтом в одном и том же макете. Ищите квадрат замены, другой шрифт внутри слова, исчезнувший акцент, изменившийся интервал или пропавшую альтернативу.

Документация FontTools описывает fonttools subset как инструмент, который формирует поднабор по глифам, символам или функциям OpenType и оптимизирует некоторые данные. Она также предлагает задавать начальное множество текстом, файлом с текстом или кодовыми точками. Даже если используется другой интерфейс, сама идея полезна: фиксируйте, по каким входным данным формируется производный файл, чтобы сборка была воспроизводимой. См. документацию FontTools по поднаборам.

Порядок сборки для одного проекта

  1. Зафиксируйте область применения. Укажите, какие документы или интерфейсы использует файл, кто будет вносить правки и допустимо ли добавлять новые языки.
  2. Соберите корпус. Сохраните реальные тексты и список переменных значений в UTF-8. Уберите случайный текст, который не относится к проекту.
  3. Добавьте обязательный резерв. Согласуйте кавычки, тире, цифры, пробелы и специальные знаки с владельцем макета.
  4. Соберите поднабор. Используйте утверждённый набор кодов или текстовый файл. Сохраните параметры экспорта рядом с источником, но не заменяйте полный мастер-файл.
  5. Проверьте покрытие. Сравните каждый знак из корпуса с поддерживаемыми кодами и зафиксируйте отсутствующие символы.
  6. Проверьте рендеринг. Откройте контрольные строки в нужной программе, затем проверьте печать или веб-встраивание, если они входят в задачу.
  7. Передайте ограничения. Назовите файл ясно и приложите короткую заметку о языках, поддерживаемых наборах и процедуре расширения.

Пример: небольшой каталог изделий

Представим каталог на русском языке с названиями, ценами и короткими описаниями. В корпус включили только основной текст и получили поднабор, в котором нет знака ₽, кавычек-ёлочек и длинного тире. Первые страницы выглядят правильно, потому что в исходных названиях этих знаков не было; после добавления акционного блока программа показывает валютный знак системным шрифтом.

Чтобы избежать этого, до сборки нужно включить реальные поля каталога, числовые форматы цены, редакционные кавычки и предусмотренные варианты описаний. Проверочная строка может выглядеть так: «Набор № 12 — 1 250 ₽, доступен до 30 сентября». В тесте полезно добавить также латинский код товара, если он будет присутствовать в карточках. Это не универсальный тестовый текст, а короткий пример, который следует адаптировать к проекту.

Если каталог пополняется новыми карточками, поднабор должен иметь понятную процедуру расширения: владелец присылает новые тексты, специалист пересобирает файл из полного мастера и проверяет старые страницы вместе с новыми. Нельзя надёжно расширить уже сокращённый файл, если удалённые глифы отсутствуют в нём; нужен исходник, из которого делался экспорт.

Частые ошибки

  • Собирать только по списку букв. Так теряются пунктуация, пробелы, цифры и составные последовательности.
  • Оставлять только знаки первого макета. Редактура, имена и новые поля легко выходят за границы начального корпуса.
  • Судить по внешнему виду. Похожие латинские и кириллические знаки могут иметь разные коды и разные результаты поиска.
  • Смешивать поднабор и веб-сжатие. Компактный файл может быть маленьким потому, что в нём отсутствует нужная часть алфавита.
  • Удалять полный исходник. Производную сборку нельзя считать надёжным источником для будущего расширения.
  • Проверять только в одной программе. Целевая среда и цепочка экспорта могут по-разному обрабатывать функции и запасные шрифты.

Контрольный список перед передачей

Передайте файл только после того, как сможете ответить «да» на каждый пункт:

  • Корпус содержит окончательные тексты и предусмотренные переменные поля.
  • В нём есть обязательные знаки пунктуации и пробелы проекта.
  • Каждая используемая последовательность отображается без пропусков и неожиданной подстановки.
  • Требуемые функции шрифта проверены в словах и строках, где они нужны.
  • Сохранён полный исходный файл, из которого собран поднабор.
  • Название производного файла и примечание объясняют его область применения.
  • Получатель знает, куда передавать новые тексты для пересборки.

Частые вопросы

Можно ли сделать поднабор по всему тексту документа?

Да, это хороший исходный материал, если документ окончательный. Но добавьте обязательные знаки интерфейса, переменные поля и редакционные правки, которых в текущей версии может не быть. Затем прогоните будущие значения через ту же проверку.

Поднабор всегда уменьшает размер файла?

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

Подойдут ли одни и те же символы для русского и украинского текста?

Не обязательно. Сравните фактический корпус каждого языка и проверьте специфические буквы, диакритические сочетания и пунктуационные нормы проекта. Составляйте перечень по текстам и требованиям редакции, а не по предположению о сходстве алфавитов.

Можно ли расширить поднабор позже?

Да, если сохранились полный мастер-файл и исходный список включённых символов. Соберите новую производную версию из мастера, добавьте новые тексты и повторите оба теста — на покрытие и на отображение.

Нужно ли оставлять OpenType-функции?

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

Итог

Поднабор полезен, когда проект ограничен и его тексты можно описать заранее. Составляйте его по реальному корпусу и согласованному резерву, сверяйте коды символов, проверяйте функции в строках и всегда храните полный мастер. Для собственного рукописного проекта сначала создайте базовый шрифт в Fontgenerator, а затем готовьте производный файл под подтверждённые задачи.