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

OpenType MATH: как шрифт помогает верстать сложные формулы

OpenType MATH: как шрифт помогает верстать сложные формулы

Таблица OpenType MATH хранит параметры, по которым математический движок размещает дроби, индексы, акценты и растягиваемые скобки с учётом конкретного рисунка шрифта. Она нужна, когда формула выглядит тесной, индекс съезжает к краю буквы или высокая скобка не подстраивается под выражение. Разберём, что именно кодирует таблица, как проверить её наличие и как отделить дефект шрифта от поведения редактора.

Почему формула устроена не как обычная строка

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

Обычные таблицы OpenType GSUB и GPOS помогают обрабатывать текстовые последовательности, но сами по себе не описывают полный набор параметров математической раскладки. MATH передаёт движку данные, специфичные для математики: расстояния, смещения, поправки для отдельных глифов, готовые варианты знаков и детали сборки крупных конструкций. Алгоритм, который применяет эти сведения, остаётся задачей программы. Поэтому одна и та же таблица не гарантирует абсолютно одинаковую формулу во всех приложениях.

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

Три части MATH отвечают за разные задачи

В спецификации OpenType таблица MATH делится на три крупные области.

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

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

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

Дроби и индексы: когда нужны константы

Представим дробь, у которой числитель прижат к черте, а знаменатель почти касается соседней строки. Увеличивать межстрочный интервал всего документа — грубое исправление: оно меняет расстояния и там, где проблема отсутствует. В MathConstants есть параметры зазора между чертой и числителем/знаменателем, а также смещения базовой линии дроби. Движок может использовать их, чтобы развести части конкретной дроби.

С индексами ситуация похожа, но зависит ещё и от формы базы. Для выражения f(x)² верхний индекс должен быть читаемым и не сталкиваться с верхним штрихом курсивной f. Общие константы задают стартовые смещения и минимальные расстояния между верхним и нижним индексами. Но если вершина глифа выступает за его ширину, одного общего отступа недостаточно.

Поэтому MATH допускает italic correction — индивидуальную поправку для наклонного глифа. Она может сдвинуть верхний индекс или предел оператора так, чтобы он не налезал на выступающую часть буквы. MathKern идёт дальше: допускает поправку, зависящую от высоты столкновения, и помогает, например, разместить индекс рядом с широким или наклонным знаком. Эти значения не заменяют проверку визуального результата: после изменения формы базового глифа поправки тоже могут потребовать пересмотра.

Скобки и радикалы: как знак растёт вместе с выражением

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

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

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

При проверке смотрите не только на то, достиг ли знак нужной высоты. Место стыка не должно превращаться в тёмный узел, горизонтальная черта должна выглядеть непрерывной, а центр знака — оставаться визуально согласованным с остальной формулой. Здесь помогает набор тестов с несколькими размерами выражения: короткий символ, дробь внутри скобок и многострочная высокая конструкция.

Акценты и наклонные буквы

Математические акценты располагаются иначе, чем акценты в обычном тексте. Для низкой строчной буквы геометрический центр может быть достаточным ориентиром, но для широкой или наклонной x он часто даёт неудачное положение. MATH может сообщить точку верхнего присоединения для базового глифа, чтобы шляпка или тильда центрировалась по рисунку, а не по условной середине его advance width.

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

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

Как понять, где искать причину плохой формулы

Диагностируйте по шагам и меняйте по одному фактору.

1. Сохраните исходный пример. Запишите программу, название и версию шрифта, кегль, текст формулы и режим отображения. Сделайте снимок или PDF, чтобы сравнивать один и тот же результат. 2. Проверьте наличие знаков. Если нужного глифа нет либо он заменён другим шрифтом, настройка расстояний MATH не исправит подмену. Уточните, какой шрифт использован для всей формулы, а не только выбран в списке гарнитур. 3. Сравните простой и сложный случай. Начните с одного индекса, затем проверьте наклонную базу, пределы интеграла, дробь и высокие скобки. Так станет яснее, ошибка общая или связана с конкретным типом конструкции. 4. Сравните тот же тест в другом движке. Если проблема встречается только в одном приложении, вероятна разница реализации или настроек. Если она повторяется в нескольких средах, изучите данные шрифта и его математические варианты. 5. Осмотрите таблицу MATH. Утилита ttx из FontTools умеет перечислять таблицы и выгружать выбранную в читаемый XML. Например, сначала проверьте ttx -l font.otf, а затем выгрузите MATH командой ttx -t MATH -o math.ttx font.otf. Сравните структуру и значения с описанием OpenType. 6. Повторите проверку после экспорта. В редакторе шрифта таблица могла быть неполной или вообще не попасть в экспорт. Проверьте именно финальный файл, который использует редактор формул.

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

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

Перед передачей математического набора проверьте:

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

Частые ошибки при проверке MATH

Считать MATH готовой системой вёрстки. Таблица предоставляет параметры шрифту; программа всё равно определяет алгоритм композиции и может по-разному их применять.

Править только обычный кернинг. Если индекс касается курсивной буквы, нужны математические поправки и проверки в формульном движке, а не только пары GPOS для текста.

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

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

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

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

MATH — это отдельный формат файла шрифта?

Нет. MATH — таблица внутри OpenType-шрифта. Она может сосуществовать с обычными таблицами глифов, кодирования и текстовых функций; проверяйте наличие именно в файле, который подключён к редактору формул.

Нужна ли MATH для любого шрифта с цифрами и математическими знаками?

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

Если в шрифте нет таблицы MATH, можно ли набрать формулы?

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

Почему один шрифт выглядит по-разному в разных редакторах формул?

MATH содержит данные, но не полный алгоритм раскладки. Программы могут реализовать расчёты и поддержку отдельных сведений по-разному, поэтому сравнивайте одну формулу, кегль и файл в каждой целевой среде.

Можно ли проверить MATH в TTX?

Да. FontTools умеет перечислять таблицы OpenType и выгружать отдельную таблицу в XML. Команда ttx -t MATH -o math.ttx font.otf подходит для первичной диагностики; для проверки значений сверяйтесь со спецификацией и визуальным результатом.

Исправит ли MATH отсутствие символа в шрифте?

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

Вывод

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

Источники