Как обновить рукописный шрифт без дублей: имя семейства и версия файла

Новая сборка рукописного шрифта может выглядеть как отдельный шрифт, если вместе с контурами случайно изменились его внутренние имена. Чтобы обновление заняло место прежней версии, зафиксируйте идентичность семейства и начертания, а номер выпуска меняйте отдельно. Ниже — какие поля проверить, как подготовить замену и как убедиться, что редакторы видят именно новую сборку.
Почему новая сборка появляется рядом со старой
Приложения получают название и сведения о начертании не из имени файла. Они читают таблицу name внутри TTF или OTF. Переименовать файл с «Почерк-версия-2.ttf» на «Почерк.ttf» недостаточно: если внутри файла изменились семейство, стиль или PostScript-имя, система может показать его как ещё один вариант. И наоборот, два файла с похожими именами могут быть разными сборками одного семейства. Поэтому проверку обновления начинайте с метаданных файла, а не с папки и не с макета.
Важен и сценарий распространения. Для личного эксперимента рядом могут лежать старый и новый файлы. Для замены в уже существующем макете дизайнеру обычно нужно сохранить выбранную гарнитуру, чтобы текст продолжил ссылаться на знакомое семейство. Если в меню возник новый пункт, человек может выбрать не ту версию, а документ окажется набран смесью разных сборок. Сначала решите: это очередной выпуск того же семейства или намеренная параллельная ветка для сравнения.
Какие имена стоит сверить
В таблице name есть несколько разных строк, и у каждой своя задача. В компактном чек-листе обновления полезно различать семейство, подсемейство, полное имя, PostScript-имя и сведения о выпуске. Microsoft описывает эти идентификаторы в <a href="https://learn.microsoft.com/en-us/typography/opentype/spec/name">спецификации OpenType для таблицы name</a>; значения могут быть представлены в нескольких языковых и платформенных записях.
Сохраните семейство и стиль, если это тот же шрифт
Name ID 1 — имя семейства, ID 2 — подсемейство или стиль. Для обычной замены сохраняйте их прежними: например, «Мастерская» и «Regular». В расширенной типографической группе проверьте также ID 16 и 17 — предпочтительные типографические семейство и подсемейство. Если одно и то же значение было записано в разных языковых вариантах, обновите нужные записи согласованно. Не переводите название только в новой сборке и не добавляйте к стилю «v2», если хотите, чтобы редактор воспринимал её как продолжение прежней гарнитуры.
ID 4 содержит полное читаемое имя; ID 6 — PostScript-имя. Проверьте, что они соответствуют семейной и стилевой схеме и не стали случайно уникальными из-за имени файла или даты экспорта. На Apple-платформах совпадающие PostScript-имена установленных шрифтов считаются дубликатами, и доступным остаётся только один экземпляр; об этом сказано в <a href="https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html">справочнике Apple по таблице имён</a>. Это объясняет, почему переустановку лучше проверить на целевой системе, а не выводить её результат только по названию файла.
Обновляйте версию отдельно от идентичности
ID 5 хранит строку версии. Спецификация рекомендует начинать её с «Version » и номера вида major.minor; символ после номера младшей части завершает её, а установщик может использовать первую подходящую пару чисел для сравнения. Например, «Version 1.10; исправлены формы ж, к» понятнее для выпуска, чем произвольная строка «осень-финал». Выберите собственную последовательную схему и повышайте номер при каждом распространяемом изменении. Не считайте, что запятая или слово «новый» автоматически сделают сборку новее для программного установщика.
Есть и поле fontRevision в таблице head. Это поле задаёт производитель шрифта, но Microsoft отдельно уточняет: Windows не использует его для определения версии; для этого там оценивается строка версии ID 5. Поэтому не подменяйте одно другим. В редакторе проверьте оба значения, если ваша среда выпуска их показывает, согласуйте их по принятой схеме и затем проверьте результат реальной установкой. Ссылки на определения: <a href="https://learn.microsoft.com/en-us/typography/opentype/spec/head">таблица head в OpenType</a> и раздел ID 5 в таблице name.
Практический пример: одна гарнитура, три выпуска
Допустим, вы собрали семейство «Садовый почерк», начертание Regular. Первая версия корректно установлена, а вторая исправляет форму «д» и несколько боковых полей. Если во второй сборке оставить ID 1/2, ID 16/17 (когда используются), ID 4 и ID 6 в прежней согласованной форме, а в ID 5 указать следующий номер версии, документ по-прежнему обращается к «Садовый почерк Regular». Новая сборка отличается как выпуск, а не как неожиданно переименованное семейство.
Если нужно дать коллегам две сборки одновременно, поступите иначе: явно обозначьте тестовую ветку отдельным временным семейством, например «Садовый почерк Test», и зафиксируйте, что этот файл предназначен только для сравнения. Перед передачей рабочего релиза верните семейное имя к согласованному производственному значению. Не выпускайте одновременно две разные сборки с одинаковой идентичностью в одной папке установки: часть программ и систем будет выбирать один экземпляр или кэшировать старые сведения непредсказуемо для пользователя.
Пошаговая замена без путаницы
1. Зафиксируйте исходный выпуск
Скопируйте текущий файл в архив релизов, запишите его контрольное имя и сохраните рабочий экземпляр проекта. Откройте старый шрифт в редакторе или просмотрщике метаданных и выпишите фактические значения ID 1, 2, 4, 5, 6, а также 16 и 17, если они есть. Сохраните дату сборки отдельно от номера версии. Так вы сможете отличить намеренное переименование от случайного и вернуться к исходному файлу, если замена повлияет на макеты.
2. Определите тип изменения
Составьте короткое описание, что поменялось: исправлена одна буква, добавлены знаки, изменены ширины, скорректированы метрики или пересобран файл без редакторских правок. Если меняется рисунок или качество выпуска, но это то же семейство, не меняйте внутреннее название ради отличия. Если же вы сознательно проектируете отдельное семейство либо альтернативную стилистическую ветку, новое имя должно отражать реальное отличие, а не маскировать версию.
3. Проверьте все платформенные записи
Сравните старую и новую таблицу name целиком, а не только первую строку, показанную интерфейсом редактора. У семейства могут быть записи Windows, Unicode и Macintosh, варианты языка, идентификаторы предпочтительного семейства и стиль. Если меняется только версия, оставьте описания, авторство и юридические сведения без изменений, если они по-прежнему верны. Проверьте, что кириллические строки корректно представлены во всех нужных записях, и что имена внутри ID 4/6 не расходятся с ID 1/2.
4. Повысьте номер выпуска последовательно
Выберите следующий номер по правилам своего проекта и внесите его в ID 5. Например, если прошлый выпуск был Version 1.03, следующей сборке можно назначить Version 1.04. Значение должно действительно увеличиваться по вашей схеме. Дополнительную короткую пометку после номера используйте для человека, а не вместо номера. Проверьте, как редактор сохраняет данные: в некоторых инструментах существует отдельное поле версии, а не прямая таблица со всеми name ID.
5. Пересоберите файл и осмотрите метаданные заново
Экспортируйте новую сборку отдельным файлом. Снова прочитайте её метаданные после экспорта: редактор мог нормализовать или заменить имя, убрать записи, изменить имя PostScript либо оставить прежнюю версию. Не считайте экран экспорта доказательством того, что записалось в итоговый TTF/OTF. Сверьте файл с выписанными исходными значениями и проверьте, что поменялись именно запланированные поля.
6. Удалите прежний экземпляр и установите новый
Для проверки обновления закройте редакторы, удалите старый установленный файл штатным способом системы, затем установите новую сборку. Не удаляйте случайные шрифты из общей системной папки и не очищайте вручную внутренние кэши по случайным инструкциям. Повторно откройте приложение и проверьте список семейств, выберите нужное начертание и убедитесь, что прежний пункт не дублируется. Если старое имя осталось в открытом документе, закройте и заново откройте его после переустановки.
7. Проверьте документ, где шрифт уже использовался
Откройте копию контрольного макета с характерными словами и знаками. Убедитесь, что семейство выбрано под тем же именем, а исправленная буква, новые знаки и переносы соответствуют ожиданию. Затем сохраните документ, закройте программу и откройте его снова: так вы проверите, что ссылка на шрифт сохраняется после перезапуска. Проверка должна охватывать не только меню, но и видимый текст.
Как отличить проблему имени от старого кэша
Если появляется второй пункт в меню с другим стилем или названием, сначала сравните имена в обеих версиях. Если меню выглядит прежним, но контуры не обновились, проверьте ID 5 и убедитесь, что старая сборка действительно удалена из всех мест установки, которые использует ваша система. Потом завершите фоновые процессы редакторов и откройте приложение заново. При тестировании не держите одновременно копии одного выпуска в системной папке, пользовательской папке и каталоге проекта: одна из них может затруднить диагностику.
Разные приложения могут по-разному обновлять список установленных шрифтов, а открытый документ иногда хранит сведения до повторного открытия. Поэтому используйте последовательность «закрыть — удалить старый экземпляр — установить новый — открыть документ заново». Если проблема воспроизводится только в одном редакторе, повторите проверку в другом и зафиксируйте операционную систему, версию приложения, путь установленного файла и прочитанные метаданные. Это гораздо полезнее, чем менять семейное имя наугад.
Частые ошибки при выпуске обновления
- Менять имя семейства при каждом экспорте и тем самым создавать отдельные пункты вместо продолжения существующей гарнитуры.
- Оставлять прежний номер в ID 5, хотя контуры уже изменились, а затем ожидать, что установщик распознает новый выпуск.
- Менять только имя файла, принимая его за внутреннее имя шрифта.
- Обновлять одну языковую запись, но забывать параллельные строки таблицы name.
- Оставлять обе сборки установленными при проверке и делать выводы о том, какую из них выбрало приложение.
- Переименовывать ID 6 ради визуального различия без проверки систем и приложений, где используется шрифт.
- Проверять только окно метаданных, не открывая старый документ после замены.
Контрольный список перед передачей обновления
- Старый TTF/OTF и его значения имени сохранены в архиве релизов.
- Определено, продолжает ли сборка прежнее семейство или выпускается как отдельная ветка.
- Имена ID 1 и 2 согласованы с исходной версией; при наличии ID 16/17 проверены и они.
- Полное имя ID 4 и PostScript-имя ID 6 соответствуют семейству и стилю.
- Строка версии ID 5 увеличена и записана в согласованном формате; метаданные перепроверены после экспорта.
- Старая сборка удалена перед установкой, а проверка проведена в закрытом и заново запущенном редакторе.
- Контрольный макет открывается под тем же семейством и показывает ожидаемые исправления.
Вопросы и ответы
Нужно ли менять имя семейства при каждом исправлении?
Нет. Если это развитие того же семейства и пользователь должен выбрать его прежним именем, обычно сохраняют имя семейства и начертания. Менять их имеет смысл при реальном изменении идентичности или при выпуске специально обозначенной тестовой ветки.
Достаточно ли переименовать TTF-файл?
Нет. Имя файла не заменяет записи таблицы name, из которых приложения получают семейство, стиль, полное и PostScript-имя. Переименование файла полезно для порядка в архиве, но само по себе не обновляет шрифт в меню.
Что обязательно повышать: ID 5 или fontRevision?
ID 5 содержит строку версии, по которой Windows определяет версию шрифта. Microsoft указывает, что fontRevision в таблице head не используется Windows для этой цели. Поддерживайте оба поля в соответствии с вашим редакционным процессом, но не путайте их функции.
Почему после установки в macOS появилась только одна из двух сборок?
Apple указывает, что два установленных шрифта с одинаковым PostScript-именем считаются дубликатами, и использовать можно только один. Для проверки параллельных вариантов задайте им действительно различимые имена на время сравнения; для штатного обновления удалите прежнюю сборку и установите релиз.
Можно ли держать старую и новую версии рядом?
Можно хранить обе в архиве проекта. Для одновременной установки и сравнения задайте отдельной тестовой версии отличимую идентичность и предупредите коллег, какой пункт временный. Для обычного выпуска без дублей оставьте установленным один экземпляр семейства.
Номер версии не изменил вид меню. Это ошибка?
Не обязательно. Номер выпуска описывает сборку, а имя семейства и стиль управляют тем, как шрифт группируется и отображается. Сверьте ID 5 в итоговом файле, удалите старый экземпляр и проверьте семейство в заново открытом приложении.
Итог
Надёжное обновление строится на разделении двух задач: имя сообщает приложению, к какому семейству относится шрифт, а строка версии описывает выпуск. Сохраните семейную идентичность, последовательно повышайте ID 5, осмотрите экспорт и замените установленный файл в чистой проверке. Для новой сборки рукописного шрифта воспользуйтесь Fontgenerator, а затем сохраните исходный файл и метаданные релиза рядом с контрольным макетом.