Кегль шрифта - одна из вещей, про которые вроде бы всем всё понятно, а на самом деле - совсем наоборот.
Вот, например, строка символов, каждый из которых имеет кегль 36 пикселов:
Шрифты разные, а кегль - одинаковый. Даже тире, запятая и цифры в верхнем индексе имеют кегль 36 пикселов, ни больше ни меньше.
Спрашивается, какая же величина у каждого из этих знаков равна 36 пикселам? От какой точки до какой нужно измерить расстояние, чтобы получить это число?
Правильный ответ: ни от какой ни до какой. Ни у одного из этих знаков никакое мыслимое измерение не составляет 36 пикселов.
Какой же тогда смысл в этой величине? Или поставим вопрос иначе: как связан формально заданный кегль шрифта (например, 36 пикселов) с реальными размерами символов (например, на экране)? Давайте разберёмся.
•
В былинные времена полоса набора складывалась из отдельных литер - металлических брусочков с зеркальными формами букв и других символов. Кеглем называлась высота литеры. На рисунке из Большой советской энциклопедии она обозначена буквой «г»:
В каждом шрифте все литеры имели одинаковую высоту, она и считалась кеглем шрифта. При этом размеры самих букв могли широко варьироваться. Не было стандартов о том, сколько процентов от кегля должен составлять рост прописной или строчной буквы. Случалось, что буква в одном шрифте кегля 9 пунктов имела такой же размер, как эта же буква в другом шрифте кегля 11 пунктов.
Если бы текст в моём примере был создан металлическим набором, литеры складывались бы приблизительно так:
Здесь важно, что высота всех литер одинакова, несмотря на разные шрифты и совершенно разнокалиберные размеры самих символов. В этом и состоит смысл кегля при старорежимном наборе.
•
Однако компьютерные шрифты - другое дело. Посмотрим, например, как отображается на веб‑странице фрагмент сплошного текста шрифтом Calibri, кеглем 16 пикселов:
А теперь во второй строке возьмём слова «за истиной» и поменяем их шрифт на Arial Unicode MS. Кегль остаётся прежним - 16 пикселов, остальные свойства шрифта тоже не трогаем:
Произошёл сюрприз: высота строки разъехалась. Будь это металлический набор, такого не могло бы случиться: мы ведь не меняли кегль шрифта и тем более междустрочный интервал. В чём же дело?
•
Внутри векторного компьютерного шрифта (например, TrueType или PostScript) все размеры и расстояния задаются относительно абстрактного кегля (em). Например, в шрифте Calibri контур буквы «Ф» имеет габариты 0,57 × 0,54 em. (Более точно -
1171⁄2048 × 1110⁄2048 em.) При выводе символа на экран или на печать все размеры масштабируются пропорционально заданному кеглю. Например, если «Ф» выводится кеглем 16 пунктов, то её реальные габариты будут (16 ∙ 0,57) × (16 ∙ 0,54) ≈ 9,15 × 8,67 пунктов. (По крайней мере, если не учитывать погрешности устройства вывода и специальные эффекты вроде сглаживания.)
Конкретные пропорции символов и их размеры относительно кегля остаются на усмотрение разработчика шрифта. Теоретически, он может задать высоту символа хоть в тысячу раз больше или меньше кегля - никаких технических или административных ограничений нет. На практике шрифтовые мастера руководствуются здравым смыслом, отраслевыми традициями, собственным опытом и чувством гармонии. В большинстве компьютерных шрифтов, как и металлических, рост строчных букв варьируется примерно от 0,40 до 0,55 кегля, а рост прописных - от 0,65 до 0,72 кегля.
Мы разобрались, как связаны видимые размеры букв с заданным кеглем шрифта, но остаётся неясным, что произошло с междустрочным интервалом.
•
В металлических шрифтах «жизненное пространство» символа ограничено физической прямоугольной площадкой литеры, с конкретной высотой и шириной. В цифровых шрифтах подобной площадки не существует. Контуры символов технически могут расползаться сколь угодно далеко по горизонтали и вертикали, пересекаясь с другими символами в этой же строке или окружающих строках.
Тем не менее, с каждым шрифтом связан набор вертикальных метрик, которые влияют на высоту строки.
Например, мой браузер ориентируется на свойства
usWinAscent и
usWinDescent, характерные для шрифтов TrueType. Эти свойства задают высоту частей «кегельной площадки» соответственно над и под линией шрифта (базовой линией). Высота строки по умолчанию равна сумме этих величин.
Повторю, что это всего лишь условные ограничители. Хотя большинство обычных букв и цифр умещаются между usWinAscent и usWinDescent, в принципе символы имеют право как угодно выступать за них, а то и вовсе целиком отображаться за их пределами.
В каждом шрифте - свои собственные usWinAscent и usWinDescent. Нет никаких формальных правил о том, чему должна равняться каждая из этих величин или соотношение между ними. Например, в шрифте Calibri usWinAscent и usWinDescent равны соответственно 0,95 и 0,27 кегля, а в Arial Unicode MS - 1,07 и тоже 0,27 кегля. Высота строки в Calibri получается 1,22, а в Arial Unicode MS - 1,34 кегля. Поэтому строка в нашем примере раздвинулась, чтобы уместить «кегельную площадку» нового шрифта:
В большинстве шрифтов usWinAscent составляет от 0,9 до 1,1 кегля, usWinDescent - от 0,2 до 0,3 кегля. Полная высота строки обычно варьируется от 1,1 до 1,3 кегля, что согласуется с простонародными представлениями о «стандартном» интерлиньяже в 120 %.
Таким образом, исходный пример складывается из разнородных «кегельных площадок». У каждой из них - свои независимые размеры, и все площадки нанизаны на общую линию шрифта, как птицы на провод. А тридцати шести пикселов нигде и нету.
•
Значения usWinAscent и usWinDescent - не единственные вертикальные метрики. Например, стандарт OpenType
рекомендует использовать для расчёта высоты строки три другие величины: sTypoAscender, sTypoDescender и sTypoLineGap. Приложения Mac ориентируются на свои собственные
Ascender, Descender и LineGap, а в Linux’е шрифты отрисовываются вообще какой‑то нечеловеческой магией.
Итак, если в докомпьютерные времена кегль шрифта был одним из измерений реальной физической литеры, то теперь кегль - абстрактный ориентир, относительно которого отсчитываются различные размеры виртуальных «литер».
Автор:
megamops.habrahabr.ru