Описание фоpмата chr шpифтов


Содержание

Компью А рт

Управление шрифтами в TЕX

Что такое TЕX

Прежде всего поясним, о чем, собственно, идет речь. TЕX — это система верстки текстов, преимущественно различных научных статей и технической литературы. Надо сразу сказать, что TЕX не какой-то текстовый редактор. Это, скорее, язык программирования или разметки. Причем довольно простой — с ним можно вполне комфортно работать, зная набор из, скажем, 20 команд (правил).

Слово TЕX составлено из заглавных греческих букв: тау, эпсилон и хи, являющихся корнем слова «техника». TЕX не рекомендуется путать с TЕX (тэкс) — это совсем другая программа.

Первое, что нужно знать о TЕX, — его форматы. Формат Plain принимается по умолчанию и в оригинале поддерживает только американский вариант английского языка. Но существует целый ряд его русификаций.

LATЕX

Plain TЕX не слишком удобен для комфортного набора и верстки математических текстов. Для упрощения такой работы, а также для интеграции многочисленных наработок Лэсли Лэмпорт (Leslie Lamport) создал свой формат — LATЕX (к слову, Майкл Дэвид Спивак (Michael David Spivak) создал еще одну распространенную реализацию — AMS-TЕX). LATЕX на единой основе (\begin<окружение>. \end ) дает широкому кругу пользователей возможность решать почти все задачи по написанию статей при минимуме знаний. LATЕX — наиболее популярный набор макрорасширений системы верстки TЕX, который облегчает набор сложных документов.

Всё, что можно сделать в LATЕX’е, можно сделать и в Plain TЕX’е, но благодаря различным упрощениям использование макропакетов зачастую позволяет избежать сложного программирования.

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

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

Термин LATЕX относится только к языку разметки, он не является текстовым редактором. Для того чтобы создать документ с его помощью, надо набрать TЕX-файл в каком-нибудь текстовом редакторе. В принципе, подойдет любой редактор, но большинство людей предпочитают использовать специализированные, которые облегчают работу по набору текста и его разметке.

Будучи распространяемым под лицензией Project Public License, LATЕX относится к свободному программному обеспечению.

Главная идея этой системы состоит в том, что авторы должны думать о том, что они пишут, не беспокоясь о конечном визуальном облике. Готовя свой документ, автор указывает логическую структуру текста (разбивая его на главы, разделы, таблицы, изображения), а LATЕX уже решает вопросы его отображения. Так содержание отделяется от оформления. Оформление при этом или определяется заранее (стандартное), или разрабатывается для конкретного документа. Это похоже на стили оформления, которые применяются в текстовых процессорах, или на использование стилевых таблиц в HTML.

NFSS (New Font Selection Scheme)

Произвольный шрифт в LATЕX’е полностью характеризуется набором из пяти атрибутов: внутренняя кодировка (ENC), гарнитура (family), насыщенность (series), начертание (shape) и размер (size). На восприятие текста влияет также расстояние между строками, которое можно изменять, задавая расстояние baselineskip в единицах длины или вводя масштабный коэффициент baselinestretch. Любой атрибут можно задавать независимо от других, получая в результате множество разных вариантов. Такая схема выбора шрифтов получила название New Font Selection Scheme (NFSS), то есть новая схема выбора шрифтов. Поскольку она давно перестала быть новой, ее еще иногда называют ортогональной, чтобы подчеркнуть ее основное отличие от схемы, использовавшейся в предыдущей версии LATЕX 2.09, где невозможно было изменить насыщенность шрифта, не изменив его начертание.

Отдельные характеристики текущего шрифта изменяются при помощи деклараций:

Каждая из них устанавливает один из атрибутов; исключение составляет декларация “\fontsize”, которая задает одновременно два параметра. Поскольку параметры baselineskip и baselinestretch характеризуют не столько шрифты, сколько макет полосы набора, есть и другой способ их настройки.

Перечисленные декларации только подготавливают переключение шрифта. Поскольку зачастую нужно изменять несколько атрибутов одновременно, было бы неразумно загружать шрифты после указания отдельного атрибута. Реальное переключение шрифта производит декларация
“\selectfont”, которая должна следовать за перечисленными декларациями безо всякого промежутка (допускаются только пробелы). Набор изменяемых атрибутов при этом может быть любым. Например, можно изменить гарнитуру и насыщенность шрифта или только одно начертание. Важно, чтобы между декларированием атрибутов и “\selectfont” не было никакого текста. Декларация “\usefont — это сокращенный вариант набора деклараций “\font. ” с последующим переключателем “\selectfont”, устанавливающий четыре из пяти атрибутов (кроме размера).

В обычном документе, как правило, ни одну из перечисленных выше деклараций не используют. К их помощи приходится прибегать для получения шрифтов с необычным сочетанием атрибутов, например прямого курсива
(<\usefontтекст>).

TЕX и DVI

DVI (от англ. DeVice Independent — аппаратно независимый) — формат выходных файлов издательской системы TЕX. Для генерации файлов в формате DVI используются текстовые файлы на языке TЕX, но, в отличие от них, файлы DVI не приспособлены для чтения человеком, они содержат двоичные данные, описывающие визуальное представление документа способом, не ориентированным на какой-либо формат изображения, монитор или принтер (отсюда название формата). Файлы DVI обычно подаются на вход другой программы (называемой DVI-драйвером), которая преобразует их в графические данные. Например, многие дистрибутивы TЕX включают программу предпросмотра файлов DVI на мониторе, которая является драйвером. Драйверы также используются для конвертирования файлов DVI в другие форматы (такие как PostScript, PDF) и для печати. В Википедии для получения изображений математических формул применяется PNG-драйвер.

Описание формата DVI

Формат DVI разрабатывался с тем условием, чтобы быть компактным и простым для машинной обработки. По этой причине файл DVI представляет собой последовательность команд на «машиноподобном» языке. Каждая команда начинается с 8-битного кода, за которым следуют необязательные байты параметров. Например, команды с кодами в группе от 0x00 до 0x7F (0-127 в десятичной системе), set_char_i, печатают один символ и сдвигают воображаемый курсор вправо на ширину соответствующего изображения. В то же время команда с кодом 0xF7 (247), pre (преамбула; эта команда должна быть первой в DVI-файле), имеет как минимум 14 байтов параметров и необязательный комментарий длиной до 255 байт.

В общих чертах файл формата DVI состоит из преамбулы, одной или более страниц и заключительной части. Имеется шесть переменных состояния: h, v, w, x, y, z; где
h и v — текущее горизонтальное и вертикальное смещение от верхнего левого угла (увеличение v сдвигает позицию на странице вниз), w и x содержат значения горизонтальных промежутков, y и z — вертикальных. Эти переменные могут обрабатываться в стеке.

Шрифты загружаются из файлов TFM и как таковые не содержатся в DVI-файле. Вместо этого хранятся лишь ссылки на них. На каждый загруженный один раз шрифт можно сослаться с помощью внутреннего индекса. Это сделано для уменьшения размеров файлов.

Формат DVI также ориентирован на кодировку символов в шрифтах, а не на кодировку используемой системы. Это означает, что, например, основанная на EBCDIC система может свободно обрабатывать файл DVI, созданный в системе, которая базируется на ASCII.

Исходный текст на языке TЕX может быть (по крайней мере, частично) восстановлен из файлов DVI, хотя получаемые при этом конструкции могут и не совпадать с оригинальными высокоуровневыми конструкциями языка, особенно если в исходном тексте использовались расширения стандартного TЕX.

DVI отличается от PostScript и PDF тем, что не поддерживает встроенные шрифты (документы в форматах PostScript и PDF могут содержать как непосредственно встроенные шрифты, так и ссылки на внешние шрифты). При печати или просмотре файла DVI не нужно иметь все шрифты, на которые он ссылается; будут показаны только символы имеющихся шрифтов.

Типы шрифтов

Некоторое время спустя после изобретения LATЕX мог работать только со шрифтами METAFONT. Выбор шрифтов METAFONT и сегодня небольшой, поэтому документы LATЕX имеют легко узнаваемый вид.

Д. Кнут назвал созданную им коллекцию из 31 шрифта семейством Computer Modern, хотя в традиционном понимании это, скорее, метасемейство, то есть набор семейств шрифтов. METAFONT позволяет получить из одного исходного описания множество совершенно различных шрифтов. Новые шрифты получаются варьированием нескольких входных параметров. Прямые, наклонные, курсивные, контурные (пустотелые), жирные и тонкие, с засечками (серифами) и рубленые — все получаются из одного исходника, в качестве которого служит небольшая программа, записанная в файле с расширением *.mf.

Современный LATЕX обеспечивает доступ к шрифтам любых типов, которые применяются в компьютерных системах. Однако процедура подключения шрифтов, разработанных для иных компьютерных приложений, не очень-то проста. Рядовой пользователь должен использовать пакеты шрифтов, адаптированные для LATЕX специалистами. Процедура адаптации заключается в генерации метрических файлов шрифтов (с расширением *.tfm) и файлов определения шрифтов (с расширением *.fd). Это всё непросто, поэтому обычному пользователю достаточно знать, как установить существующий пакет шрифтов, а эта процедура мало чем отличается от установки любого другого пакета системы LATЕX. Однако если обычный пакет состоит из файлов с расширением *.sty, то шрифтовой пакет включает еще много файлов других типов.

Как только пакет установлен, достаточно загрузить его в редактируемый документ с помощью “\usepackage”. Например, пакет TimesC загружается так: “\usepackage[math].

PSNFSS, PSNFSSx — пакеты коллекции PSNFSS применяются для подключения набора 35 стандартных шрифтов PostScript фирмы Adobe, содержащих только буквы латинского алфавита. Бесплатный клон этих шрифтов распространяется в составе программы Ghostscript. Коллекция PSNFSSx является усовершенствованной версией пакетов PSNFSS.

pxfonts, txfonts — пакеты pxfonts и txfonts подключают шрифты PostScript соответственно в гарнитурах Palatino и Times как в тексте, так и в математических формулах, создавая сбалансированный печатный документ. Необходимые шрифты распространяются в составе бесплатной программы Ghostscript, но в них отсутствуют русские буквы.

pscyr — пакеты коллекции pscyr подключают некоторые свободно распространяемые русские PostScript-шрифты.

FontsC — пакеты коллекции FontsC подключают шрифты TrueType и OpenType, входящие в состав русифицированных версий операционной системы Windows, a также некоторые свободно распространяемые русские PostScript-шрифты.

Шрифты METAFONT

Однако вернемся к шрифтам METAFONT. Для создания шрифтов совместно с TЕX’ом используется специально разработанная Д. Кнутом система METAFONT, в которой шрифты описываются программами на специализированном языке программирования Meta.

Кнут начал разработку METAFONT в 1977 году и выпустил первую версию в 1979-м. Применяемая ныне версия появилась еще в 1984 году.

METAFONT чаще всего запускается без непосредственного участия пользователя. Файлы DVI содержат лишь ссылки на соответствующие гарнитуры шрифтов, а не сами растровые или векторные шрифты, что возможно, например, в PostScript. Следовательно, когда требуется просмотреть, распечатать или сконвертировать файл DVI, необходим доступ непосредственно к изображениям символов в гарнитурах. Большинство дистрибутивов TЕX сконфигурировано таким образом, что недоступные шрифты с необходимым разрешением автоматически генерируются вызовами METAFONT. Гарнитуры затем сохраняются для последующего использования.

Шрифты METAFONT являются векторными в своей основе. Но всякий раз при создании публикации из векторных генерируются растровые изображения знаков. Процесс растеризации, то есть преобразования в растровое изображение с необходимым разрешением, занимает слишком много времени даже на самых мощных компьютерах. Поэтому шрифты приходится генерировать заранее и хранить в растровом виде на диске компьютера в файлах с расширением *.pk. Для принтера каждого типа требуется свой комплект pk-шрифтов.

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

Шрифты PostScript

Современные DVI-драйверы также могут работать со шрифтами PostScript. Некоторые программы используют эти шрифты напрямую. Другие же на лету генерируют из них pk-шрифты. Так, например, действует YAP из библиотеки MiKTЕX.

За пределами России PostScript-шрифты давно стали стандартом для большинства реализаций LATЕX’a, вытеснив pk-шрифты. Этому способствовало наличие множества хороших коммерческих шрифтов. Имеется также PostScript-версия шрифтов семейства Computer Modern. Однако среди этих шрифтов практически отсутствуют такие, где были бы русские буквы. Лишь фирма ParaType предоставила русским пользователям LATЕX’а в бесплатное пользование шрифты гарнитуры Literaturnaya. PostScript-версия mf-шрифтов семейства LH, где имеются буквы кириллицы, появилась в 2001 году в составе комплекта PostScript-шрифтов CM-Super.

Шрифты CM-Super относятся к типу композитных шрифтов, которые по классификации фирмы Adobe обозначаются как Туре 0. Каждый шрифт Туре 0 может содержать тысячи символов, упорядоченных в виде дерева, листья которого содержат шрифт Туре 1. Шрифт Туре 1 написан на языке PostScript и организован в виде набора именованных процедур, рисующих контуры изображения отдельного символа. Когда запрашивается символ с определенным кодом, программа-растеризатор сначала просматривает вектор кодировки, который устанавливает соответствие кода имени процедуры. Затем найденная процедура рисует растровое изображение для текущего разрешения выходного устройства.

Шрифты pk, будучи внедренными в ps-файл, относятся к Туре 3. Они внедряются в виде растра, поэтому качество документа может деградировать, если он будет напечатан на устройстве, разрешение которого отличается от заказанного при создании документа.

Шрифты TrueType

Шрифты TrueType на удивление мало применяются в системе LATЕX. Этому есть простое объяснение. Во-первых, они появились позже, чем шрифты PostScript. Во-вторых, шрифты TrueType невозможно внедрить в документ PostScript без потери качества, а без внедренных шрифтов документ может неправильно отображаться на другом компьютере. Шрифты TrueType (и OpenType) успешно внедряются в документы PDF, но эта возможность, как и формат PDF, появилась сравнительно недавно. Современные DVI-вьюеры обеспечивают работу со шрифтами TrueType, генерируя на лету pk-шрифты из исходных векторных изображений литер.

Использование шрифтов TrueType практически решает проблему дефицита хороших шрифтов для русских пользователей LATЕX’а.

Характеристики шрифтов

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

Итак, шрифты характеризуются следующими параметрами.

Настройка METAFONT и генерация шрифтов

Шрифты TЕX хранят размеры литер и их начертания порознь. Файлы начертаний символов шрифта имеют формат GF (Generic Font) и PK (PacKed font). По умолчанию GF-файлы обладают именами, совпадающими с именем tfm-файла, и расширением, указывающим разрешающую способность устройства, для которого сгенерирован шрифт (шрифты TЕX генерируются для конкретного разрешения на определенном устройстве).

В версии MS-DOS (из дистрибутива sbtex) при установке METAFONT получается такая структура каталогов:

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

У программы mf (основная утилита системы) также существуют загружаемые дампы памяти, называемые базами (например, у TЕX — plain.fmt, у METAFONT — plain.base).

Создание базы делается так:

inimf plain input local dump

Полученный plain.base переносится в MFBASES.

Сгенерировать шрифт, к примеру cmr12, можно следующей командой:

Расшифруем написанное. Первый параметр имеет то же назначение, что и для TЕX, — имя базы. Далее идет «имя устройства». Как уже было сказано, METAFONT учитывает в своей работе особенности конкретных физических устройств, для чего в файле modes.mf хранится множество их описаний. Устройство cdvi, по-видимому, нестандартно, оно определяется дополнительно в файле local.mf.

Следующий параметр задает масштабирование шрифта (в TЕX и METAFONT определены стандартные коэффициенты масштабирования, называемые magstep(0)—magstep(6) и образующие геометрическую прогрессию: 1; 1,2; 1,44 и т.д.; естественно, также имеется способ задания произвольного масштаба). Наконец, последний параметр определяет имя генерируемого шрифта.

Если программа отработает без ошибок, то она выведет на экран поочередно все символы шрифта (а в log-файл — текстовые сообщения об этом же). Для шрифта создается два файла: метрическая информация о шрифте (*.tfm) и графический образ символов — GF-файл, который имеет имя вида: cmr12.180, если ваше устройство вывода поддерживает 180 точек на дюйм. С помощью стандартной программы GFtoPK можно упаковать его: gftopk cmr12.180 и получить из него cmr12.180pk (в GNU/Linux) или cmr10.pk (в MS-DOS).

Обратите внимание: при генерации dvi-файла TЕX записывает в него контрольную сумму используемых шрифтов, а программы просмотра и печати DVI сравнивают ее со шрифтами, доступными в момент вывода. Таким образом гарантируется полное сходство результатов работы.

Кодировка

Кодировка устанавливает соответствие между кодом символа и литерой, то есть его изображением.

LATЕX имеет собственную схему кодирования, которую называют внутренней кодировкой, чтобы отличать ее от внешней кодировки, то есть кодовой страницы, используемой операционной системой. Примером внутренней кодировки являются T1, T2A и OML. Как правило, внешняя кодировка должна быть указана в исходном тексте документа LATЕX. Это особенно важно для языков, подобных русскому, которые исторически имели множество вариантов кодировки. Внутреннюю кодировку, применяемую по умолчанию, выбирает пакет babel в зависимости от указанного набора языков, используемых в документе.

Есть еще кодировка внутри файлов шрифтов, но о ней обычный пользователь LATЕX’a должен думать в последнюю очередь.

Шрифты METAFONT могут содержать не более 256 символов. Соответственно кодом служит число от 0 до 255. Шрифты OpenType могут содержать десятки тысяч символов, а следовательно, имеют более сложную схему кодирования.

Гарнитура

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

Контрастность

Соотношение толщины основных и соединительных штрихов. Шрифт может быть неконтрастным (monoweight), малоконтрастным (low contrast), контрастным (contrast) и сверхконтрастным (high contrast). Гарнитура Times более контрастная, чем гарнитура CM Roman, которая, в свою очередь, более контрастная, чем гарнитура Courier, и т.д.

Засечки

В антиквенных шрифтах — короткий, обычно перпендикулярный штрих, которым начинается и заканчивается основной штрих знака. В старой литературе иногда называется «отсечка». Один из основных признаков шрифтовой формы. Засечки бывают односторонними и двусторонними. Их форма может быть разнообразной: треугольной, прямоугольной, закругленной, декоративной, в виде тонкой горизонтальной линии и т.д. Засечки могут быть скругленными в месте соединения с основным штрихом (adnate serif), а могут присодиняться под углом без скругления (adrupt serif).

Насыщенность и пропорциональность

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

Насыщенность — это отношение толщины основных штрихов к высоте прямого знака. Встречаются такие наименования насыщенности (в порядке ее увеличения):

  • Ultra Light, Thin, Extra Light, Light — светлые и сверхсветлые шрифты;
  • Book, Regular, Plain, Normal, Medium — нормальные шрифты;
  • Demi, Demi Bold, Semi Bold, Bold — полужирные шрифты;
  • Extra Bold, Heavy, HeavyFace, Black, Flat, Extra Black, Ultra Black, Obese — жирные и сверхжирные шрифты.

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

  • Very Condensed, Condensed — сверхузкие и узкие шрифты;
  • Normal — нормальные шрифты;
  • Expanded, Very Expanded — широкие и сверхширокие шрифты.

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

В LATЕX’e насыщенность и пропорциональность шрифта характеризует его серия (series).

Начертание

В терминологии LATЕX почти все гарнитуры имеют так называемое прямое (upright) начертание (другой термин — shape (форма шрифта)). Большинство книг набраны прямым шрифтом, а курсивный (italic) и наклонный (slanted, oblique) шрифты используются для смыслового выделения текста. Иногда курсив одновременно является наклонным, но это необязательно. Курсивный шрифт может быть и прямым (upright italic). Еще одно распространенное начертание — капитель (small caps). Рукописные гарнитуры обычно поставляются только в одном начертании, которое формально классифицируют как курсивное.

Наклонный шрифт может быть получен путем трансформации прямого шрифта. Однако некоторые программы, в том числе pdflatex, не поддерживают трансформацию наклона шрифтов TrueType, а внедрение трансформированного шрифта в документ PDF в растровом виде сопряжено с потерей качества.

Кегль

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

Качество шрифтов

Существуют и другие характеристики.

В некоторых словах имеются комбинации символов, расстояние между которыми кажется непропорционально большим, как расстояние между буквами «Т» и «Д» или «A» и «V». Специальный метод изменения расстояния между символами называется кернингом. Кернинг может быть как положительный (когда знаки раздвигаются), так и отрицательный (когда знаки вдвигаются друг в друга).

Другой способ улучшения внешнего вида текста — изменение расстояния между символами в зависимости от кегля (размера) шрифта. При наборе основного текста обычно используются шрифты небольшого кегля (как правило, от 10 до 12 пунктов), и для улучшения читаемости расстояние между символами делают немного больше. С увеличением размера шрифта относительное расстояние между символами постепенно уменьшается. Это повышает компактность текста и позволяет воспринимать его как цельное графическое изображение. Трекинг шрифтов METAFONT обеспечивается наличием шрифтов, специально спроектированных для наиболее часто используемых размеров. В других шрифтах трекинг вычисляется по специальным формулам для любого размера.

Шрифты PostScript и TrueType содержат дополнительную информацию, называемую хинтами, которая позволяет улучшить растровое изображение при значительном уменьшении или увеличении размера шрифта. Особенно полезны хинты при печати документов на устройствах с малым разрешением, поскольку округление до целых значений координат контуров букв приводит к исчезновению одних линий и утолщению других. Хинты препятствуют этому, уравнивая толщину линий и сохраняя тем самым эстетическую привлекательность литер. Если быть точным, то, говоря о хинтах, надо подразумевать шрифты в формате PostScript Type 1, тогда как аналогичную информацию применительно к шрифтам в формате TrueType обычно называют инструкцией.

Стандартные кодировки

В LATЕX существуют два основных класса кодировок: текстовые и математические. Если не вдаваться в частности, то первые используются в обычном тексте, а вторые — только в математических формулах. Аббревиатура текстовых кодировок начинается с букв T или OT. Аббревиатуры математических кодировок должны начинаться с букв M или OM. Список стандартных кодировок приведен в табл. 1. Если не загружен пакет babel, то в текстовом режиме по умолчанию применяется кодировка OT1. Чтобы выбрать кодировку T1, во входной файл можно вставить “\font encoding\selectfont”.

Попытка тем же способом включить кодировку T2A закончится крахом, если не загружен пакет babel (с опцией russian, bulgarian или ukrainian), поскольку по умолчанию загружены только кодировки OT1, T1, OML, OMS и OMX.

Любую кодировку можно подготовить к использованию, загрузив пакет fontenc. Пакет babel с опцией russian, который надо всегда загружать при подготовке документов на русском языке, избавляет от забот по выбору требуемой кодировки. По умолчанию он применяет кодировку T2A.

Кодировка OT1

Внутренняя кодировка, введенная Д. Кнутом, создателем TЕX’a, содержит всего 128 символов. Она называется TЕX text encoding и в LATЕX2ε имеет обозначение OT1, причем буква «О», означающая old или obsolete, подчеркивает то, что она устаревшая. В основном она содержит буквы латинского алфавита, занимая первую (верхнюю) половину 256-местной таблицы с кодами от 0 до 127 (или от 00 до 7F в шестнадцатеричном исчислении).

Кодировки T1 и TS1

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

Кодировки T2A, T2B, T2C

Символы кириллицы содержатся в кодировках T2A, T2B и T2C, разработанных русским отделением пользователей TЕX’a (CyrTUG). Верхняя половина этих кодировок повторяет кодировку T1, поэтому они вполне пригодны для печати, например, английских текстов. Александр Ходулев и Ольга Лапко разработали шрифты для кодировок T2A, T2B и T2C. Буквы русского алфавита есть в любой из них.

Таблица 1. Стандартные кодировки

Кодировка Д. Кнута

TЕX extended text

Латиница и кириллица

Латиница и кириллица

Латиница и кириллица

A local encoding

TЕX math italic

TЕX math symbols

TЕX math large symbols

Математические большие символы

Вот список национальных языков, поддерживаемых каждой из этих кодировок:

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

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

T2C: абхазский, болгарский, гагаузский, карельский, коми, калмыкский, крымско-татарский, манси, молдавский, мордовский, нанайский, уйгурский, ногайский, русский, саамский, староболгарский, старорусский, крымско-татарский, тати, телеутский, ханты, эвенкский.

Другие кодировки

Кодировки OML, OMS и OMX используются в математических формулах. Кодировка OML содержит в основном буквы из математического курсива и некоторое количество математических символов, большая часть которых сосредоточена в шрифтах с кодировкой OMS. Шрифты с кодировкой OMX служат для построения математических символов переменного размера.

Кодировка U применяется в том случае, когда порядок символов не совпадает ни с одной известной кодировкой.

Кодировки, начинающиеся с буквы L, называются локальными. Локальные кодировки могут вводить национальные группы пользователей TЕX’a. Например, предшественницей нынешних T2A, T2B и T2C была кодировка LCY.

Стандартные гарнитуры

Первая буква в аббревиатуре гарнитуры обозначает производителя шрифта. Так, буква «р» закреплена за компанией Adobe; буквы «m», «t» и «j» обозначают соответственно Monotype, ParaType и Microsoft. Исключение сделано для шрифтов Computer Modern. Для них зарезервированы сразу две буквы — «cm».

Илон Маск рекомендует:  Что такое код imagesetpixel

Стандартные начертания

Типичные значения параметра начертания shape перечислены в табл. 2.

Большинство гарнитур имеют как минимум прямое и курсивное (или наклонное) начертания. Однако у рукописных шрифтов часто есть только курсивное начертание.

Стандартные насыщенности

Стандартные значения параметра series, который задает насыщенность и пропорциональность шрифта, перечислены в табл. 3.

Стандартные размеры

Размер шрифта size и межстрочное расстояние baselineskip в декларации “\fontsize” указываются в любых единицах длины (можно написать 10 pt или 3 mm).

Вместо явного задания размера шрифта с помощью “\fontsize” рекомендуется использовать декларации из ряда “\tiny” . “\Huge”. Они позволяют выбирать шрифты заданных размеров.

В профессиональных издательских системах обычно доступны кегли 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 24, 30 и 36. Отсутствующие размеры получают линейным масштабированием. Декларации переключения размера шрифта (от “\tiny” до “\Huge”) обычно оперируют размерами 5, 6, 7, 8, 9, 10, 10,95; 12, 14,4; 17,28; 20,74; 24,88 пунктов, которые приблизительно составляют геометрическую прогрессию с множителем 1,2. При этом шрифты спроектированы для размеров 5, 6, 7, 8, 9, 10, 12 и 17 пунктов, а отсутствующие размеры получают линейным масштабированием ближайшего из приведенных значений.

Пользовательские команды

Переключение гарнитуры, насыщенности и начертания шрифта выполняется простыми командами. Эти команды пользовательского уровня и соответствующие им атрибуты перечислены в табл. 4. Например, вместо
“\usefont обычно достаточно написать “\itshape”.

Соответствие пользовательских команд и деклараций очевидно. Команда “\textit<. >” эквивалентна конструкции “<\itshape . \/>”, причем \/ вставляет корректирующий пробел при переходе от наклонного или курсивного шрифта к прямому.

Таблица 2. Стандартные начертания

Caps and small caps

Прямой курсивный шрифт

Таблица 3. Стандартные насыщенности

Широкий полужирный шрифт

Декларация “\itshape” действует менее прямолинейно, а именно: она переключает атрибут начертания shape в состояние, которое хранится в команде “\itdefault”. Иными словами, она равнозначна комбинации “\fontshape<\itdefault>\selectfont”.

По умолчанию “\itdefault” определена как «it», но достаточно изменить ее на «ui», как наклонный курсив превратится в прямой (если тот имеется в используемой гарнитуре).

Таблица 4. Пользовательские команды переключения шрифта и соответствующие им атрибуты


Значение по умолчанию

Другие пользовательские команды переключения шрифтов также реализованы через промежуточные команды “\cmddefault”, как показано в табл. 4. В последней колонке этой таблицы в скобках указаны значения атрибутов, применяемые по умолчанию в стандартных классах печатных документов. В частности, команды
“\textrm”, “\textsf” и “\texttt” печатают текст шрифтом заданной гарнитуры. Им соответствуют декларации
“\rmfamily”, “\sffamily” и “\ttfamily”. Они инструктируют компилятор, что от текущей позиции до конца текущей группы фигурных или командных скобок нужно применять шрифт выбранной заранее гарнитуры, аббревиатура которой хранится соответственно в декларациях “\rmfamily”, “\sffamily” и “\ttfamily”. Команды рекомендуется применять для выделения отдельного слова или короткой фразы, а декларации лучше использовать при определении новых команд или процедур. Для выделения длинных абзацев удобнее использовать процедурную форму деклараций, причем имя процедуры получается удалением обратного слэша из имени декларации. Например, чтобы выделить несколько абзацев шрифтом без засечек, их нужно поместить между “\begin и “\end.

Чтобы напечатать документ шрифтами Adobe Bookman, AvantGarde и Courier, в преамбулу входного файла достаточно поместить декларации

Большинство шрифтов ограничено двумя вариантами насыщенности: нормальной и полужирной. Следуя этой традиции, LATЕX на уровне пользовательских команд также ограничивается этими двумя вариантами: “\textmd” и “\textbf”. Двум командам соответствуют две декларации: “\mdseries” и “\bfseries”. Используемые ими атрибуты хранятся в командах “\mddefault” и “\bfdefault”. Первая содержит атрибут нормальной насыщенности, вторая — полужирной. В стандартных классах “\bfdefault” имеет значение “bx”. Некоторые шрифты PostScript есть только в варианте “b”. Поэтому пакеты, спроектированные для работы с этими шрифтами, присваивают параметру
“\bfdefault” значение “b”. Впрочем, если компилятор не находит шрифт серии “b”, он автоматически подменяет его шрифтом серии “bx”, и наоборот.

Четыре команды: “\textup”, “\textit”, “\textsl” и
“\textsc” — изменяют форму шрифта, проводя выбор из четырех наиболее распространенных начертаний: прямого, курсивного, наклонного и капители соответственно. Им соответствуют четыре декларации: “\upshape”,
“\itshape”, “\slshape” и “\scshape”. Еще четыре команды: “\updefault”, “\itdefault”, “\sldefault” и “\scdefault” — хранят атрибуты начертаний.

Команда “\emph” и соответствующая ей декларация
“\em” используются для выделения текста. Они изменяют начертание шрифта так, чтобы он отличался от окружающего текста. Если до “\emph” применялся прямой шрифт (“\upshape” или “\scshape”), то выделенный текст печатается курсивом (“\itshape”). В остальных случаях “\emph” включает прямой шрифт (“\upshape”).

Гарнитуру, насыщенность и начертание шрифта можно изменять независимо, но из двух подряд деклараций переключения гарнитуры (или насыщенности, или начертания), разумеется, действует последняя.

Наконец, команда “\textnormal” и соответствующая ей декларация “\normalfont” выбирают основной шрифт документа, которым печатается его большая часть. Компилятор автоматически выбирает основной шрифт вне области действия любых деклараций переключения шрифтов. Поэтому команды “\textnormal” и “\normalfont” чаще всего используются при определении новых команд или процедур, когда важно, чтобы текст был напечатан одним и тем же шрифтом независимо от окружения.

Гарантированный результат достигается тем, что
“\normal” переключает все атрибуты шрифта, кроме его размера. Иными словами, ее действие эквивалентно команде
“\usefont<\encodingdefault><\familydefault><\seriesdefault><\shapedefault>”, где “\encodingdefault”, “\familydefault”, “\seriesdefault”, “\shapedefault” — команды, которые соответственно указывают на кодировку, гарнитуру, насыщенность и начертание шрифта, применяемого по умолчанию. Формат LATЕX содержит следующие определения этих команд:

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

Замена кодировки

LATЕX допускает применение нескольких кодировок в одном документе. Множественность внутренней кодировки — это норма. Например, в математических формулах обычно используются все имеющиеся математические кодировки, хотя процесс переключения кодировок там скрыт от пользователя.

Внутренняя кодировка

Команда “\symbol печатает символ с кодом code, соответствующим порядковому номеру позиции символа в текущей внутренней кодировке шрифта. Код может быть выражен десятичным числом от 0 до 255, его восьмеричным или шестнадцатеричным эквивалентом, которому должен предшествовать апостроф или соответственно.

«\symbol <130>\symbol <146>\symbol <150>\\» дает
« ЋЎЏ »

«\symbol <’202>\symbol <’222>\symbol <’226>\\»

«\symbol <«82>\symbol <«92>\symbol<«96>»

Для того чтобы какая-либо кодировка стала основной, достаточно загрузить пакет fontenc с опцией. Например:
“\usepackage[T2A].

Пакет fontenc уникален в том смысле, что его можно загружать несколько раз и каждый раз с новым значением необязательного аргумента, тогда как повторная загрузка других пакетов с различающимся набором опций считается ошибкой. Если в необязательном аргументе
“\usepackage” перечислены две, три или больше кодировок, то основной кодировкой будет объявлена последняя, но будут сделаны необходимые приготовления для применения всех кодировок. Например, “\usepackage[T2A,T1] подготавливает использование в одном входном файле кодировок T2A и T1. Подготовка заключается в том, что происходит определение команд, специфичных для кодировок T2A и T1. Пакет babel, в зависимости от выбранного языка, может самостоятельно выбрать подходящую кодировку. Например, для русского языка он выбирает кодировку T2A. Чтобы выбрать иную кодировку, ее нужно указать до загрузки пакета babel в явном виде:

При этом порядок перечисления кодировок при загрузке пакета fontenc уже не играет роли, потому что пакет babel сам разберется, какую кодировку выбрать для каждого языка.

Таблица 5. Внешние кодировки

BlackStrip-форум

Формат TTF - чтение и запись

Формат TTF - чтение и запись

Сообщение blackstrip » Сб дек 15, 2012 10:42 pm

Пришла в голову мысль сделать в PaintCAD 4Windows экспорт PCF шрифтов в TTF. Чтобы можно было использовать нарисованные шрифты не только в PCW, но и в других программах.

PCF - формат растровый, внутри него картинки букв, цифр и других символов. (кстати, недавно узнал что есть еще один формат шрифтов PCF - Portable Compiled Format, он тоже растровый, как ни странно).

А TTF - векторный. Внутри него опорные точки для прямых линий, кривых линий Безье и множество других вещей, даже можно внутрь запихнуть растр (вроде как).

Формат TTF придумал Apple. Потом он разошелся на разные подформаты, один для Mac-ов, другой для Винды, еще для OS/2 что то было. Вроде бы это все один и тот же формат, но для каждого направления там свои особенности что ли.

У майкрософта и у эппла есть спецификации по этому формату. Возьмем майкрософтские (PaintCAD 4Windows же, а не 4Mac): http://www.microsoft.com/typography/Spe . rview.mspx

Т.к. в инете почти нет информации про чтение TTF, и тем более про запись TTF, а тем более на русском - то буду потихоньку переводить этот файл спецификации. Переведенное в упрощенном виде буду выкладывать в эту тему. Основная задача - записать растр в векторный формат TTF. Кому то может быть будет интересно почитать (тем кто тоже захочет читать и писать TTFы). Заодно и сам разберусь.

Re: Формат TTF - чтение и запись

Сообщение blackstrip » Вс дек 16, 2012 12:11 pm

Значит то, что будет записываться у нас - это файл OpenType. Он может иметь расширение как TTF, так и OTF. Зависеть расширение файла должно от того, если ли в нашем шрифте TrueType outlines или нет. Но чтобы долго не думать - будем сохранять с расширением TTF, а что это за зверь "TrueType outlines", наверное, поймем позже.

Во всей этой документации используются следующие типы данных:
BYTE 1-байтовое беззнаковое целое
CHAR 1-байтовое знаковое целое
USHORT 2-байтовое беззнаковое целое
SHORT 2-байтовое знаковое целое
UINT24 3-байтовое беззнаковое целое
ULONG 4-байтовое беззнаковое целое
LONG 4-байтовое знаковое целое
Fixed 4-байтовое знаковое с фиксированной (неплавающей) точкой (а ля 16 бит до точки и 16 бит после)
FUNIT Минимальное измеряемое расстояние в пространстве "em"
FWORD 2-байтовое знаковое целое (SHORT), которое описывает количество в единицах FUNIT.
UFWORD 2-байтовое беззнаковое целое (USHORT), которое описывает количество в единицах FUNIT.
F2DOT14 2-байтовое знаковое с фиксированнной точкой, где 2 бита - число до точки, а 14 оставшихся - после точки (а ля 2.14).
LONGDATETIME Дата, описывающая количество секунд с полуночи 12:00 от 1 января 1904 года. Знаковое 64-битное целое.
Tag Массив из четырех uint8s (длина в общем - 32 бита) используется для идентификации скрипта, языковой системы, фичи или базовой линии
GlyphID Индекс глифа, такой же как uint16 (длина 16 бит)
Offset Смещение таблицы, такое же как uint16 (длина 16 бит), неустановленное смещение (NULL) должно быть равно 0x0000

Re: Формат TTF - чтение и запись

Сообщение blackstrip » Вт дек 18, 2012 8:05 am

Чтобы не просто читать документацию, а сравнивать ее с реальными шрифтами - возьмем несколько готовых TTF шрифтов и будем смотреть их внутреннюю структуру.

Я выбрал три шрифта из папки Windows/Fonts

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

Второй - шрифт для нотной грамоты, там всякие ноты, паузы и другие значки:

Третий - спецшрифт от Adobe, внутри почти нет символов, несколько хреновинок и точек:

Re: Формат TTF - чтение и запись

Сообщение blackstrip » Вс сен 01, 2013 2:45 pm

Почитав разные источники, понял что выбрал не те шрифты для разбора)

С этого http://www.dafont.com/bitmap.php сайта можно взять пиксельные мелкие шрифты. Хороший мелкий шрифт Wendy http://img.dafont.com/dl/?f=wendy

Смотрим его в хекс-редакторе, попутно читая документацию по TTF от Apple и от Microsoft

4 байта: 00 01 00 00 - это тип "масштабатора" (ну той штуки, которая видимо их отрисовывает с разными размерами). Как пишут тут https://developer.apple.com/fonts/TTRef . erTypeNote - это или 0x00010000 (или даже 0x74727565) как нормальный TTF, либо другие значения для других масштабирований. Причем подчеркнуто, что Fonts for Windows must use 0x00010000. А я как раз в PCW хочу сохранить шрифт для Windows, значит берем 00 01 00 00 как первые 4 байта любого сохраняемого TTF шрифта.

2 байта: 00 0С - "количество таблиц". 12 штук. Ну и хорошо.

2 байта: 00 80 - "диапазон поиска" - 16 умножить на максимальную степень двойки, меньшую или равную "количеству таблиц". В байтах у нас число 128. Поделим обратно на 16 - будет 8. Ну все правильно.
2^0 - это 1. И это меньше 12 таблиц.
2^1 - это 2. И это меньше 12 таблиц.
2^2 - это 4. И это меньше 12 таблиц.
2^3 - это 8. И это меньше 12 таблиц.
2^4 - это 16. И это больше 12 таблиц! Он уже не подходит, надо брать предыдущий. Значит 8 это максимальный результат возведения двойки в степень. Его и записали, причем умноженным на 16.

2 байта: 00 03 - "входной селектор". Логарифм по основанию 2 от (максимальной степени двойки, меньшей или равной "количеству таблиц"). Это в какую степень надо возвести 2, чтобы получить не большее число, чем количество таблиц. В предыдущих двух байтах нам подошло число 2^3, поэтому сюда надо эту самую степень, т.е. 3. Так оно и есть.

2 байта: 00 40 - "сдвиг диапазона". Это ("количество таблиц" * 16 - "диапазон поиска") = 12 * 16 - 128 = 12 * 16 - 8 * 16 = 4 * 16 = 64, т.е. 40 в шестнадцатиричной системе. Так оно и есть.

Вот такой основной заголовок TTF шрифта. Совсем несложный вроде бы. Ниже под ним идут структуры для каждой из 12 таблиц.

Re: Формат TTF - чтение и запись

Сообщение blackstrip » Вс сен 01, 2013 3:12 pm

Заголовок таблицы

4 байта - идентификатор, обычный текст. Например, cmap, glyf, head и т.д.
4 байта - контрольная сумма. О ней ниже.
4 байта - смещение в байтах от начала sfnt-файла (видимо в яблочных устройствах TTF-файлы именуются как SFNT).
4 байта - длина таблицы в байтах.

Apple приводит код для подсчета контрольной суммы:

uint32 CalcTableChecksum(uint32 *table, uint32 numberOfBytesInTable)
<
uint32 sum = 0;
uint32 nLongs = (numberOfBytesInTable + 3) / 4;

while (nLongs-- > 0)
sum += *table++;

Приходит в процедуру указатель на массив table и 32-битная длина таблицы в байтах (видимо, та самая из заголовка таблицы). Высчитывается длина таблицы в 4-байтных словах (1 байт = (1+3)/4 = 1 слово, 2 байта - 1 слово, 3 байта - 1 слово, 4 байта - 1 слово, 5 байт = (5+3)/4 = 2 слова, 6 байт - 2 слова и т.д., поэтому там +3). И потом в цикле по всем 4-байтным элементам таблицы идет сложение их беззнаковых значений в одну кучу (одно беззнаковое число). Беззнаковые 32-битные в дельфе это тип Longword или Cardinal (одно и тоже, но Longword это "фундаментальный", а Cardinal нет, в общем то разницы между ними нет).

Таким образом, в дельфе это будет нечто типа
checksum:=0;
leng:=(lenbytes+3) div 4;
for i:=0 to leng-1 do checksum := checksum + table; ,
достаточно простой подсчет. Я ожидал худшего.

Apple приводит обязательные таблицы в TTFе, а также необязательные.

Обязательные (9 штук, значит в шрифте Wendy из 12 таблиц еще есть 3 штуки необязательных):
'cmap' -связи между символами и их номерами
'glyf' - изображения символов
'head' - заголовок шрифта
'hhea' - горизонтальный заголовок
'hmtx' - горизонтальные метрики
'loca' - индекс положения
'maxp' - профиль максимума
'name' - обозначение
'post' - PostScript

Необязательные:
'cvt ' - контрольное значение
'fpgm' - программа шрифта
'hdmx' - горизонтальные метрики устройства
'kern' - кернинг
'OS/2' - OS/2
'prep' - программа контрольного значения

В хекс-редакторе сразу виды все названия таблиц в шрифте друг под другом (т.к. длина заголовка таблицы 16 байт и в хекс-редакторах обычно бывает по 16 байт на строку), это OS/2, cmap, fpgm, glyf, head, hhea, htmx, loca, maxp, name, post, prep.

Re: Формат TTF - чтение и запись

Сообщение blackstrip » Пн сен 02, 2013 4:55 pm

Придется посмотреть все таблицы по очереди, чтоб понять как устроен TTF.

Итак, расшифровываем заголовки таблиц и содержимое каждой таблицы.

Название
4F 53 2F 32
OS/2
Контрольная сумма
6E 3C 74 00
Смещение
00 00 01 48
С 328-го байта
Длина
00 00 00 4E
78 байт

Лезем на 328 байт и смотрим по документации, что такое таблица OS/2: https://developer.apple.com/fonts/TTRef . p6OS2.html
Написано, что таблица требуется для шрифтов Windows. И еще написано, что она в оригинале была 68 байт, но для майкрософтовских шрифтов были введены удлиненные версии 78 и даже 86 байт. Далее приведен пример 68-байтной таблицы. Нам это не подходит, у нас 78 байтная. Лезем в документацию майкрософта http://www.microsoft.com/typography/otspec/os2.htm . Оказывается бывает такая таблица версий 0, 1, 2, 3, 4. Страница с описанием нулевой версии для windows дается ниже по ссылке: http://www.microsoft.com/typography/otspec/os2ver0.htm

Отличия от Apple: после полей fsFirstCharIndex и fsLastCharIndex есть еще лишние 10 байт, превращающие таблицу из 68 байт в 78 байт.

Поехали по файлу:
2 байта 00 00 - версия таблицы, должна быть 0. Так и есть.
2 байта 01 68 - 360, среднее значение ширины символа в "пикселях" (pels). Видимо имеются ввиду какие то маленькие пиксели, типографские какие нибудь) Расчет этого числа предлагается проводить умножая реальную ширину в пикселях каждого из символов на его вес (дается таблица весов, где у буквы a вес 64, у пробела 166 и т.д.), а затем эту сумму надо еще поделить на 1000. В общем если лень это считать - то можно использовать любое число, видимо это число для тех, кто сидит в типографии и выбирает шрифт по "средней температуре по больнице" +) Например, использовать 360.
2 байта 01 90 - 400, класс веса (жирноты), бывает, судя по майкрософту, от 100 (ультратонкий) до 900 (ультражирный). 400 это нормальный (Regular).
2 байта 00 05 - 5, класс ширины, от 1 (ультрасжатый) до 9 (ультрарасширенный). У нас 5, это Нормальный.
2 байта 00 00 - 0, характеристики шрифта. Если равен нулю, то шрифт "устанавливаемый и встраиваемый", свободный. А иначе можно установить разные биты, и таким образом сказать, что он лицензионный, защищенный, только для печати и т.п. У нас это 0 - свободный шрифт.

Дальше идут 4 поля по 2 байта, они описывают, что надо сделать со шрифтом, если использовать его для нижнего индекса:
2 байта 00 64 - 100, горизонтальный размер при нижнем индексе
2 байта 00 64 - 100, вертикальный размер при нижнем индексе
2 байта 00 00 - 0, смещение по горизонтали при нижнем индексе
2 байта 00 8С - 140, смещение по вертикали при нижнем индексе

Дальше идут 4 поля по 2 байта, они описывают, что надо сделать со шрифтом, если использовать его для верхнего индекса (причем такие же, как и для нижнего индекса):
2 байта 00 64 - 100, горизонтальный размер при верхнем индексе
2 байта 00 64 - 100, вертикальный размер при верхнем индексе
2 байта 00 00 - 0, смещение по горизонтали при верхнем индексе
2 байта 00 8С - 140, смещение по вертикали при верхнем индексе

Дальше 2 поля по 2 байта, они описывают рекомендуемую толщину штриха и его вертикальное положение при отрисовке текста, зачеркнутого посередине горизонтальной линией:
2 байта 00 32 - 50, толщина штриха
2 байта 00 FA - 250, смещение

2 байта 00 00 - 0, класс семейства шрифтов. У Apple расписана таблица с классами, старший байт это класс, младший байт это подкласс. 0 - это "никакой" класс, т.е. пофиг какой. Отлично.

Далее 10-байтовая структура с говорящим названием "panose":
10 байт 00 00 00 00 00 00 00 00 00 00 - вообще в этой структуре задаются свойства шрифта, но если поставить все нули, это значит выставить "любой" (Any) во все свойства.

Далее 4 поля по 4 байта каждое, делятся на 96 и 32 бит. Рекомендуют ставить нули, т.к. еще не утвердили конкретно какие биты выставлять и что это будет значить =) Тут зачем-то стоит тройка в одном из полей.
4 байта 00 00 00 03 - 3
4 байта 00 00 00 00 - 0
4 байта 00 00 00 00 - 0
4 байта 00 00 00 00 - 0

4 байта 6D 69 65 70 - "miep", поле с названием вендора ("продавца, ответственного за маркетинг и распространение").

2 байта 00 40 - поле с битами, обозначающими какие же буквы в шрифте (наклонные, зачеркнутые, жирные, обведенные и т.п.). В двоичной системе это 01000000, т.е. 6 бит установлен, это обычный шрифт (REGULAR).

2 байта 00 20 - 0, минимальный код символа (в Unicode) в шрифте, то бишь первый символ "пробел" с 32 кодом.
2 байта 00 FC - 0, максимальный код символа (в Unicode) в шрифте, т.е. последний символ

Вот уже прошли 68 байт. Осталось 10 байт, которые Microsoft добавили в формат таблицы:
2 байта 02 BC - 700, типографский надстрочник, используется для расчета расположения пробелов между строк текста. Ну и пусть будет 700.
2 байта FF 38 - минус 200, типографский подстрочник, используется для расчета расположения пробелов между строк текста. Ну и пусть будет -200.
не забывайте смотреть в таблице, что поля SHORT - это знаковые, и тогда FF38 будет не 65336, а -(FFFF-(FF38-1)) = -(65535-(65336-1)) = -200

2 байта 00 1E - 30, расстояние между строками.
2 байта 03 BC - 956, виндовское расстояние над строкой, рассчитывается как Y максимальное для всех символов. Используется виндой для расчета расстояния между строками по умолчанию. Винда обрезает все куски символов, которые вылезут выше этого значения.
2 байта 01 64 - 356, виндовское расстояние под строкой, рассчитывается как минус Y минимальное для всех символов. Используется виндой для расчета расстояния между строками по умолчанию. Винда обрезает все куски символов, которые вылезут ниже этого значения.

Вот такая вот таблица OS/2, причем она обязательная для Windows шрифтов.

Осталось разобраться, что же это за "пиксели", которые называются то pels, то font design units. Некоторые опорные единицы, и видимо очень мелкие (равные одному пикселю при огромном размере шрифта, 1000, например). Или можно взять за основу то что есть в этом шрифте, а уже походу испытаний сохраненных шрифтов выискивать баги в расчете этих величин (когда винда начнет срезать куски букв при отрисовке и т.д.).

Шрифты в Linux

(НЕ является инструкцией по руссификации интерфейса.)

Что такое шрифт

Файл шрифта (font file) содержит наборы изображений (рисунков) символов и соответствующие символам коды. Технически шрифты могут быть растровыми (bitmap fonts) или векторными (outline/vector fonts).

Растровые шрифты обычно применяют для текстового интерфейса. Рисунок символа (глиф) здесь - прямоугольный набор точек. Например, если размер текстового экрана 640x480 пикселов, а терминал настроен в режиме 80x30 (80 символов в 30 строках), то подойдёт шрифт, в котором ширина глифа - 8 пикселов, а высота - 16 (16x8).

Пример того, как может выглядеть буква А в растровом шрифте с глифами размером 16x8 точек. Пустые/фоновые пикселы показаны символом

Пустое место сверху можно оставить, чтобы строки не сливались, снизу - чтобы уместить, например, буквы р или у.

Отрисовка растровых глифов на экране - относительно простая операция отображения уже готовых наборов точек на пикселы дисплея. Но растровые шрифты обычно содержат глифы только одного размера. В GUI нередко требуется отрисовывать символы разных размеров (разного кегля) одновременно, поэтому применяют векторные шрифты. Как и прочие векторные изображения, глифы таких шрифтов содержат наборы параметров для математических фигур; при использовании шрифта программа "растеризУет" глифы (создаёт набор точек). Готовые растеризованные глифы называют "кэшем шрифта" (font cache).

Высоту заглавных символов называют "кеглем" (font size). Есть несколько шкал кегля; можно условно считать, что одна единица высоты примерно равна 0,3-0,4 мм. Например, "сделать двенадцатым кеглем" означает, что высота заглавных символов будет примерно 3,6-4,8 мм; "шрифт высотой десять" - 3-4 мм. Предполагается, что на разных мониторах растровые шрифты одинакового размера (в текстовом интерфейсе) выглядят различно; но векторные шрифты одного кегля (в GUI) должны выглядеть одинаково.

На не очень новых мониторах с разрешением около 100 dpi кегль 5 и ниже - неразборчиво мал; для виджетов обычно выбирают кегль 10 или 12.

Шрифты бывают моноширинными (monospace) и пропорциональными (proportional или не указано). "Моноширинный" означает, что все глифы одинаковой ширины, занимают одинаковое место по горизонтали; хотя между соседними символами в линии может быть видно немного свободного пространства (не пробелы), но сдвинуть символы поближе друг к другу не получится. Текстовый интерфейс - традиционно моноширинный. То есть, например, 80 символов в линии (видимой строке); символы выровнены по вертикали (строго друг над другом). В пропорциональном шрифте, например, символы Щ и Л - разной ширины; в линиях одного виджета (например, текстовой области) может умещаться разное число символов.

Основную графическую идею (стиль) шрифта называют "гарнитУрой" (typeface, или font face). Символы одной гарнитуры схожи примерно так же, как инструменты из одного набора или предметы посуды из одного сервиза.

Есть несколько классификаций гарнитур. В простых случаях выделяют "рубленые" шрифты (без засечек, sans serif) - обычно для заголовков или надписей; и шрифты "с засечками" (serif) - обычно для основного текста. ЗасЕчка - небольшой декоративный поперечный штрих на конце черты некоторого символа. "Декоративные" шрифты (в названии может быть script) - имитация письма от руки. Есть шрифты, состоящие разных вспомогательных символов (symbols, dingbats), например, шахматных фигур, маркеров или орнаментов.

Внутри гарнитуры могут быть дополнительные стили - "начертания" (slants); обычно это нормальное начертание (Medium, Normal, Regular или Roman), курсИв[ное] (Italic, или Oblique), жирное/полужирное (Bold/Semibold). Начертания хранят в отдельных файлах; некоторые графические редакторы или офисные текстовые процессоры могут имитировать начертания, имея лишь один файл с нормальным начертанием.

Шрифты в текстовой консоли

Формат файлов шрифтов для текстового режима Linux - PC Screen Font (".psf" или ".psfu"). Здесь u означает Unicode. (Раньше для русского языка были кодировки KOI-8R и CP1251.) Документация по PC Screen Font есть в пакете kbd (/usr/share/doc/kbd/).

Сами файлы шрифтов обычно хранят в /usr/share/consolefonts, /usr/share/syscons/fonts/, /usr/share/kbd/consolefonts или в /usr/share/fonts. Обычно файлы дополнительно сжаты gzip. Размер - несколько КиБ. Файлы, включающие и глифы кириллицы, обычно имеют в имени Cyrillic или сокращённо cyr.

Традиционный шрифт - VGA или Fixed, более новый и приятный для глаз - Terminus. Пример файла шрифта гарнитуры Fixed:

$ file -z CyrSlav-Fixed16.psf.gz

CyrSlav-Fixed16.psf.gz: Linux/i386 PC Screen Font v1 data, 256 characters, Unicode directory, 8x16 (gzip compressed data, last modified: Wed Feb 1 12:35:37 2020, max compression, from Unix)

В настоящее время текстовая консоль Linux может использовать шрифты в кодировке Unicode (по умолчанию - кодировка CP437 и встроенный в ядро шрифт). В шрифте допустимо 512 глифов; возможно отображение 8 цветов. Или 256 глифов, но 16 цветов. Показать набор символов текущего шрифта (выполнять в текстовой консоли, не в эмуляторе терминала):

Для правильного соответствия глифов кодам Unicode - нужна вспомогательная таблица (translation map, unimap), которая раньше хранилась в отдельном файле, а сейчас может входить в основной файл шрифта (обычно, но не обязательно, с расширением ".psfu"). Таблицы unimaps (".acm" или ".acm.gz") хранят в /usr/share/consoletrans/, /usr/share/unimaps или /usr/share/syscons/scrnmaps/. Программа psfgettable служит для копирования таблицы unimap из шрифта; psfaddtable - для добавления.

Вспомогательные программы для правки шрифтов: nafe ( https://sourceforge.net/projects/nafe/ ), psftools ( https://tset.de/psftools/index.html ), rw-psf ( https://github.com/talamus/rw-psf ). Они конвертируют символы в ascii-art (вроде вышеуказанного примера буквы А) или растровые изображения. После правки в текстовом или графическом редакторе можно конвертировать файл обратно в шрифт.

Настройки применения шрифта - файл /etc/default/console-setup или

Применить настройки на текущей консоли:

Пакеты программ: kbd, console-setup. Документация: man-страницы console-setup, setfont, setupcon. В инсталляциях с systemd может быть файл настроек /etc/vconsole.conf и сервис systemd-vconsole-setup.service. Документация: man-страницы systemd-vconsole-setup.service, vconsole.conf.

Шрифты в графической консоли

Форматы шрифтов для GUI:

Portable Compiled Font (PCF, ".pcf" или сжатый ".pcf.gz"), растровый;

Bitmap Distribution Format (BDF, ".bdf" или сжатый ".bdf.gz"), растровый;

TrueType Font (TTF, ".ttf"), векторный;

OpenType Font (OTF, ".otf"), векторный;

Type 1 PostScript font ASCII (PFA, ".pfa"), векторный;

Type 1 PostScript font binary (PFB, ".pfb"), векторный;

и ещё несколько более редких.

Наиболее популярные форматы: TTF, OTF (и их контейнер для веб-страниц - Web Open Font Format, ".woff"/".woff2").

Размеры файлов - от сотен КиБ до нескольких МиБ или ещё больше; зависит от количества символов (которых могут быть тысячи). Обычно файлы, содержащие латиницу и кириллицу, специально не помечаются. Файлы, содержащие символы восточных языков, содержат в имени указание на язык, например: arabic, thai.

NotoSans-Regular.ttf: TrueType font data

$ ls -ks NotoSans-Regular.ttf

Графическая подсистема X Window System задействует шрифты сама или через библиотеки. X-программа (клиент сервера X Window) может запросить отрисовку шрифта по записи формата X Logical Font Description (XLFD). Запись состоит из 14 полей через дефисы. Пример:

Здесь cronyx - семейство шрифтов, times - гарнитура, medium и i (italic) - начертания, 14 - кегль, 100 - предполагаемые разрешения дисплея по горизонтали и вертикали, iso10646 и следующее поле - кодировка. Остальные поля менее важны; звёздочка является метасимволом и предлагает программе самой выбрать значение поля.

Значения можно подбирать GUI-программой xfontsel. Кнопка select копирует запись в буфер X, откуда её можно вставить в редактор средней кнопкой мыши (колёсиком).

Посмотреть список доступных серверу шрифтов - xlsfonts.

Посмотреть таблицу глифов - xfd (или вообще указать некоторой X-программе использовать заданный шрифт опцией -fn):

$ xfd -fn '-cronyx-times-medium-i-*-*-14-*-100-100-*-*-iso10646-1'

Кодировка iso10646 - одно из названий Unicode. Поддержка Unicode в самой X Window System работает плохо, поэтому сейчас юникодные шрифты обрабатываются отдельными библиотеками. Но желательно иметь хоть какой-то шрифт в одной из кодировок семейства iso8859 или иной - просто для начального запуска сервера X Window.

Настройки применения шрифтов в общем файле /etc/X11/xorg.conf:

# Прочие параметры этой секции.

В указанных каталогах следует запустить программы mkfontscale и mkfontdir. В результате должны появиться файлы encodings.dir, fonts.alias, fonts.dir.

Шрифт можно подключить временно, вручную:

xset +fp /usr/share/fonts/X11/misc

# Перечитать списки шрифтов.

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

К библиотеке прилагается семейство программ fc-*, в том числе:

fc-cache - создать/пересоздать кэш шрифтов;

fc-list - показать список установленных в системе шрифтов (выводится много информации, в том числе поддерживаемые языки). Возможно задать условие, например (вывод сокращён):

# Показать установленные шрифты, имеющие символы русской кириллицы.

DejaVu Sans,DejaVu Sans Light

Nimbus Roman No9 L

fc-validate - узнать, есть ли в шрифте символы алфавита для заданного языка, например:

$ fc-validate -l ru NotoSans-Regular.ttf

NotoSans-Regular.ttf:0 Satisfy the coverage for ru language

$ fc-validate -l en NotoSans-Regular.ttf


NotoSans-Regular.ttf:0 Satisfy the coverage for en language

$ fc-validate -l ru NotoKufiArabic-Regular.ttf

NotoKufiArabic-Regular.ttf:0 Missing 66 glyph(s) to satisfy the coverage for ru language

$ fc-validate -l en NotoKufiArabic-Regular.ttf

NotoKufiArabic-Regular.ttf:0 Missing 72 glyph(s) to satisfy the coverage for en language

$ fc-validate -l ar NotoKufiArabic-Regular.ttf

NotoKufiArabic-Regular.ttf:0 Satisfy the coverage for ar language

То есть в основном файле есть символы для русского, английского языков; в файле для арабского языка есть только арабица.

Документация: man-страницы; HTML-документация в /usr/share/doc/fontconfig. Обозначения языков - по RFC-3066/ISO 639.

Основной XML-файл настроек Fontconfig - /etc/fonts/fonts.conf. Документация: man fonts-conf. Там же указаны имена других файлов, например пользовательский

Каталоги для хранения шрифтов: общий /usr/share/fonts/, пользовательский

/.fonts/). В fonts.conf можно указать другие.

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

Семейства свободно доступных шрифтов, которые считают приятными для глаз: Cantarell, Droid, Noto, Ubuntu. Шрифты со вспомогательными символами: OpenSymbol, Symbola; или Dingbats и Wingdings из Windows.

Для установки шрифта, поддерживаемого Fontconfig, нужно скопировать его файлы в один из каталогов хранения (можно во вложенный каталог). Желательно правильно установить целевые права, например 444 для файлов и 555 для каталогов. Потом запустить fc-cache (может сработать автоматически).

Офисные документы, электронные книги и другие файлы документов/изображений нередко могут хранить внутри себя сами файлы шрифтов (полностью или частично), но часто - содержат только что-то вроде ссылки на имя шрифта. Если скопировать файл документа/изображения на другой компьютер, где нет подходящего шрифта - программа либо покажет пустые/неверные глифы, либо попробует (зависит от программистов) "подставить" хоть какой-то подходящий шрифт (substitute a font). Даже при подстановке вид документа/изображения может быть испорчен из-за того, что размеры глифов в разных шрифтах не совпадают.

Для офисных документов популярны семейства шрифты из Windows: Arial, Courier New, Times и другие (форматы TTF, OTF).

Их можно скопировать из инсталляции Windows (каталог Windows\Fonts\).

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

Можно скопировать их из Интернета самостоятельно и распаковать программой cabextract. Ищите в репозиториях сервиса SourceForge.net по выражению "Microsoft core fonts".

Для подстановки можно применять шрифты семейства Liberation (соответственно Sans, Mono, Serif). Они, насколько возможно, "метрически совместимы" (metrically compatible) со шрифтами из Windows, то есть глифы сходных размеров. Другие метрически совместимые шрифты:

семейство Croscore (соответственно Arimo, Cousine, Tinos);

[Astra] Sans, [Astra] Serif и Mono от фирмы Paratype;

семейство XO Fonts (Oriel, Courser, Thames, символьные шрифты Symbol и Windy).

В графической подсистеме X Window System растеризацией занимается своя библиотека Xft. В последние годы операции растеризации передаются внешним библиотекам: Cairo, FreeType, Pango. Графическая подсистема Wayland сама никак не взаимодействует со шрифтами, все программы обращаются к внешним библиотекам.

Растеризованные глифы малого кегля могут выглядеть грубо/нечётко. Чтобы улучшить вид, применяют методы отрисовки под общим названием "сглаживание" (anti-aliasing). Иногда сглаженные глифы выглядит отчасти цветными из-за "субпиксельного рендеринга" - то есть дорисованные пикселы не чёрные или серые, а других цветов. Эффект зависит от порядка расположения цветных элементов (субпикселов) в пикселах.

В шрифтах TrueType могут быть дополнительные встроенные данные (hints) по отрисовке; их применение называется "хИнтинг" (hinting). В библиотеке FreeType наилучший алгоритм отрисовки (TrueType Bytecode Interpreter) был запрещён патентами примерно до 2010 года/версии 2.4.

Ремонт компьютеров в Самаре

Во время работы на платформе Mac или Windows PC, вы постоянно используете шрифты. Начиная с графических дизайнеров, в чьих коллекциях насчитывается сотни, а то и тысячи шрифтов, и, заканчивая обычными пользователями, имеющими дело только со стандартным набором шрифтов операционной системы и приложений, все они их постоянно используют при создании документов, чтении материалов в Интернет и управлении интерфейсом пользователя. Понимание того, как отличаются основные форматы файлов шрифтов, поможет вам более широко их использовать и воспользоваться всем диапазоном типографских гарнитур.

TTF

Файлы формата TTF относятся к основному набору шрифтов Windows TrueType. С появлением последних версий Mac OS X, этот одноплатформенный формат шрифта стал общим и теперь присутствует на обеих доминирующих в мире операционных системах. Компания Apple немного видоизменила формат TrueType, подготовив его для замены устаревших растровых гарнитур на более гибкий стандарт и успешно ввела их в состав новой ОС.
Стандарт TrueType предусматривает использование единственного файла для описания шрифта, который содержит всю необходимую информацию для рендеринга (отрисовки) шрифта на экране дисплея и при его печати. Для сравнения с TrueType, скажем, что некоторые устаревшие типографические шрифты, такие как PostScript Type 1 (разработанный Adobe Systems), имеют намного более сложную и емкую для обработки компьютером конструкцию.

OTF

Стандарт OTF обозначает открытый тип шрифта (OpenType typeface) и основан на новейших технологиях построения шрифтов. Также как и TrueType, шрифты формата OpenType являются мультиплатформенными. Но, в отличие от предшественника, они позволяют поместить в одном файле сразу несколько стилей отображения и поддерживают набор символов на разных языках.

Более того, шрифты OpenType могут использовать разные стили гарнитур по выбору конкретных приложений, меняя их в зависимости от контекста. Этот новый стандарт дал в руки дизайнеров превосходную возможность конструирования шрифтов, похожих на рукописный стиль написания. В зависимости от конкретного шрифта OpenType, в основе его могут лежать алгоритмы построения кривых, взятые от TrueType или PostScript Type 1.

DFONT

Стандарт DFONT (файлы с расширением DFONT) расшифровывается, как шрифт Datafork TrueType. Формат этого файла являлся стандартом для системных шрифтов операционной системы Mac OS X. Но, вместе с выходом ОС Mac OS X 10.6 Snow Leopard компания Apple заменила этот стандарт на коллекцию шрифтов TTC или TrueType Collection. Формат DFONT поддерживается исключительно под Mac OS X и обречен на «забвение», так как стать кроссплатформенным ему уже не суждено.

Другие форматы

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

Шрифты формата PostScript Type 1 исключают подобный недостаток и прекрасно масштабируются при печати, но для этого принтер должен быть совместим с этим стандартом шрифта. Компания Adobe Systems, разработчик этого стандарта, впоследствии предложила использовать приложение Adobe Type Manager для снятия ограничений при выводе на печать.

Понятие форматов шрифтов, и как выжать из них максимум для веб

Дата публикации: 2020-03-12

От автора: Thierry Blancpain – бренд-дизайнер, работает в Informal Inquiry в Нью-Йорке, является сооснователем Grilli Type, семейсива шрифта Swiss. Статья применима ко всем веб-шрифтам, однако в качестве примеров концепций используются шрифты Grilli Type, в частности те, которые демонстрируют функции OpenType.

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

Форматы шрифтов

При покупке лицензии на шрифт вы получаете пакет файлов шрифтов, который обычно включает, как минимум, следующие форматы:

Embedded OpenType (EOT): EOT – старый формат, разработанный Microsoft. EOT необходим для рендера шрифтов в старых версиях IE. EOT часто предоставляют в несжатом виде, поэтому если вам не нужно поддерживать IE8 и ниже, то лучше отказаться от этого формата.

TrueType (TTF): TTF – формат шрифта, разработанный Microsoft и Apple в 1980-х. Современные файлы TTF также называют TrueType OpenType шрифты. TTF полезен для расширения поддержки старых браузеров, особенно мобильных при необходимости.

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

Web Open Font Format (WOFF): WOFF разработан в 2009 – это формат-обертка для шрифтов TrueType и OpenType. Формат сжимает файлы и поддерживается во всех современных браузерах.

Web Open Font Format 2 (WOFF2): WOFF2 – обновление оригинального формата WOFF. Разработан Google и считается лучшим форматом из предложенных, так как обеспечивает меньший размер файлов и лучшую производительность в современных браузерах с поддержкой.

Если ваша целевая аудитория использует современные браузеры, вы можете взять прогрессивный метод @font-face, который работает только с форматами WOFF и WOFF2. Форматы дают лучшее сжатие и позволяют работать с меньшим количеством файлов в коде. Если машина пользователя старая и не поддерживает ни один из них, возможно, лучше предоставить их в виде системного шрифта для улучшения производительности.

Если хотите максимально расширить поддержку, добавьте файлы EOT и TTF. Также для расширения поддержки браузеров обычно используют SVG шрифты, но на сайте Grilli Type мы больше не используем SVG шрифты, так как у них есть минусы. Google Chrome, например, полностью удалил их поддержку.

Вставляемые веб-шрифты

Подключение шрифтов в CSS осуществляется через @font-face. Ниже представлена максимальная поддержка, в том числе все форматы шрифтов, о которых мы говорили ранее:

Если необходимо поддерживать только современные браузеры, можно урезать код:

После объявления шрифтов их можно использовать на элементах. Например:

Хостинг веб-шрифтов

Один из самых гибких способов загружать веб-шрифты – это хранить их самому. То есть вы храните файлы на своем сервере, и шрифты всегда будут доступны пользователям на сайте без сторонних зависимостей. Для загрузки своих шрифтов не нужны трек-коды и JS. Множество небольших сайтов-производителей шрифтов дают прямую ссылку на загрузку, что позволяет самим хранить файлы. Мы в Grilli Type считаем это лучшим способом доставки шрифтов.

Пока некоторые производители шрифтов предлагают самостоятельный хостинг (как с большими ограничениями и требованиями, так и без), другие дают только свой хостинг. То есть они сами будут хостить файлы от вашего имени. Среди таких сайтов можно выделить Hoefler & Co., Font Bureau и Typotheque. Font Bureau и Typotheque предлагают свои шрифты в обоих вариантах по разным ценам.

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

Продвинутые функции типографики

Давайте рассмотрим парочку наиболее продвинутых функций веб-шрифтов.

Интервал и кернинг

В файлах есть 2 настройки, отвечающие за расстояние между символами:

letter-spacing: боковые отступы слева и справа от каждого символа

font-kerning: особая настройка между двумя символами

Интервал нельзя полностью отключить. В таком случае движок рендера текста (браузер) не будет знать, что делать с буквами. Кернинг же по умолчанию выключен и включается вручную в CSS.

Контролировать кернинг легче, чем вы думаете! Как активировать кернинг во всхе браузерах с поддержкой:

Если вы не используете Autoprefixer, то вам придется вручную писать вендорные префиксы для поддержки в старых версиях:

Продвинутые функции OpenType

Мы обсудили, как с помощью атрибута font-feature-settings контролировать кернинг, но с его помощью можно контролировать другие OpenType функции. Список поддерживаемых функций постоянно растет. Возможности OpenType удобно смотреть через CSS-Tricks almanac.

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

Для демонстрации соединения продвинутых функций OpenType представляю вам код ниже. Код включает числовые символы с поддержкой OpenType, старых цифр (onum) и пропорциональных цифр (pnum). Также шрифт включает кернинг и особый стилистический набор.

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

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

font-feature-settings используется для установки множества OpenType функций за раз. Поэтому невозможно определить одну настройку по-другому, так как другие варианты не будут наследоваться. Для изменения настроек дочерних элементов необходимо заново определять все функции.

Отступы между букв и слов

CSS уже давно поддерживает letter-spacing и word-spacing. При правильном использовании оба атрибута позволяют хорошо контролировать 2 важных аспекта внешнего вида шрифта.

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

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

Я выяснил, что letter-spacing и word-spacing лучше всего работают с em единицами. Это позволяет отступам гибко подстраиваться на основе размера шрифта на элементе, к которому он применен. Следующий пример даст тексту немного больше места на маленьких размерах шрифта:

Рендер шрифтов

Использование шрифтов на экране поднимает важные вопросы о том, как происходит их рендер. Обычно шрифты проектируют под сетку 1000 units tall или выше, но отображают в размере около 16px. При взаимодействии устройства, экрана и ПО такое сокращение разрешения и точности требует некоторых умений, чтобы улучшить читаемость маленького шрифта. Будьте наблюдательны, тестируйте лучшее решение в нескольких браузерах, чтобы использовать лучшие методы для улучшения читаемости.

Хинтинг

Все ОС по-разному видят шрифты. В MacOS смарты находятся в ОС (следовательно, могут развиваться со временем), в то время как сами шрифты могут быть тупыми. На Windows исторически так сложилось, что смарты включают в ПО шрифтов, и система должна использовать эти смарты, чтобы решить, как шрифт должен отображаться на разных размерах.

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

Хинтинг – очень сложная тема. Важно понять, что один и тот же шрифт на одном размере может рендериться по-разному, даже на том же ПК. Все зависит от множества факторов, в том числе экрана, браузера и даже шрифта и цвета фона.

У Microsoft на тему хинтинга есть руководство. Несмотря на то, что оно было выпущено в 1997, чтиво до сих пор актуально. В нем очень подробно раскрыта тема.

Сглаживание шрифтов

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

Файл формата OTF — что это?

Описание формата OTF

Файл OTF представляет из себя файл шрифта, разработанный совместными усилиями компаний Adobe, Microsoft. Данный формат файла, включает в себя внешний вид таких форматов, как TrueType, а также PostScript. Шрифты OpenType могут поддаваться масштабированию, без потери исходного качества текста.

OTF расширение поддерживается в операционных системах Mac OS, а также в системах Windows. Платформы от Майкрософт, стали поддерживать OTF файлы, начиная с версии Windows 2000. Стоит отметить, что такой тип файла, помимо своего основного назначения, может быть использован как файл шаблона, применяемый комплексом OpenOffice в целях формирования формул. В подобном случае, наличие файла .otf, несет пользу при автоматическом заполнении таблиц с применением формул. Расширение файла OTF, обладает обширным спектром распространения среди пользователей.

Специалисты считают, что данное расширение файла, представляет из себя так называемый контейнер, сформированный с учетом правил TrueType и способный содержать файлы данных PostScript и TrueType. Шрифт Open Type, может хранить новые типы данных, которые не присутствовали в форматах TrueType. Файлы расширением .otf, могут хранить данные о контурах, метриках, а также служебной информации.

Чтобы открыть файл, имеющий расширение OTF, как и другие файлы шрифтов, используется Font Viewer от Microsoft. Пользователи MacOS, могут открыть файл OTF благодаря комплексу Apple Font Book. Универсальной утилитой, способной открыть файл .otf в перечисленных выше системах, в том числе и на платформе Linux, является FontForge.

Подключение веб-шрифтов с помощью @font-face

February 24, 2014

Выжимка из замечательной книги “Большая книга CSS3 3-е издание” Дэвида Макфарланда о веб-шрифтах и способе их подключения с помощью директивы .

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

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

Подключение веб-шрифтов с помощью @font-face:

  • подключение нестандартного шрифта с помощью директивы
  • назначение подключенного шрифта с помощью свойства

Директива указывает (название говорит само за себя - директива!) браузеру сделать две вещи:

  • создать указываемое имя шрифта
  • загрузить глифы для шрифта из указанного ею места

Свойство указывает браузеру применить шрифт с указанным именем выбранным элементам страницы.

Существует несколько форматов веб-шрифтов. Наиболее распространенные из них: EOT, WOFF, OTF или TTF,

Формат EOT, который понимают браузеры IE вплоть до версии 8. Собственно, этот формат шрифта создан и существует только ради этого браузера и таких его версий. Чтобы получить шрифт формата EOT, необходимо специальное программное обеспечение для преобразования формата TTF в OET.

Формат WOFF (Web Open Font Format) является наилучшим на сегодняшний день для использования в Веб: самый маленький и легкий, поддерживается всеми современными браузерами (в том числе IE9 и выше); этот формат был создан специально для Веб. Фактически - это облегченная версия формата TTF или OTF.

Форматы OTF (Open Type Font) и TTF (True Type Font) - это самые обычные компьютерные шрифты, которые используются в большинстве операционных систем (Windows, Macintosh, Linux) и в приложениях под эти системы. Но, помимо этого, такие шрифты можно легко использовать и в Интернете.

Формат SVG - это даже не формат шрифта, а формат графики, графического изображения. Особенностью этого формата является то, что графика в этом формате создается исключительно с помощью векторов, то есть - математических формул.

Благодаря этому изображения в таком формате масштабируются без потери качества - при увеличении размера картинки компьютеру достаточно пересчитать векторные точки. Особенность этого формата графики позволила применить его для создания “шрифтов”. То есть, обычный шрифт преобразуется в формат SVG, где каждый шрифт - это фактически картинка в масштабируемом формате SVG.

Зачем потребовались такие трудности? Все дело в том, что браузеры под ОС Android (очень распространенная ОС под мобильные устройства) могут отображать веб-шрифты только в этом формате. Браузеры под iPhone (Safari 4.1 и ниже) также не умеют распознавать веб-шрифт. Вот этим “неумехам” и подсовывают картинки в виде шрифтов - “не умеешь кушать обычную пищу, так кушай хотя бы это!”.

Правовой вопрос использования шрифтов

Вопрос можно кратко cформулировать в следующих двух предложениях. Все шрифты делятся на платные или бесплатные.

Платные шрифты делятся на те, которые:

  • можно использовать в Веб
  • нельзя использовать в Веб

Чтобы не заморачиваться решением запутанного вопроса лицензии на шрифты, можно воспользоваться веб-службами Google Fonts или TypeKit, на которых собраны все шрифты, которые можно использовать в Веб. Шрифты на этих серверах либо бесплатные (Google Fonts), либо платные (TypeKit).

Краткий список источников бесплатных шрифтов, которые можно использовать в Веб:

Большинство веб-сервисов, которое предоставляет шрифты для Веб, “отдают” их в формате OTF или TTF. Поэтому нужно конвертировать этот шрифт в четыре формата, описанных выше, для того, чтобы максимальное число посетителей сайта смогло увидеть на своих устройствах содержимое данного сайта. Для конвертирования не нужно искать специальное программное обеспечение. Можно воспользоваться бесплатным генератором @font-face Generator, находящемся на сервере FontSquirrel (http://www.fontsquirrel.com/).

Единственное ограничение этого сервиса - он имеет свой собственный blacklist, в который помещены шрифты, запрещенные по лицензии для использования в Веб. Другими словам, если “подсунуть” этому генератору лицензионный шрифт, приобретенный пиратским способом, то он откажется от генерации последнего.

Генератор Generator - не единственный в Веб сервис подобного рода. Существуют подобные ему генераторы, которые, в тому же, обладают “неразборчивостью” по отношению к лицензии конвертируемого шрифта.

Порядок указания форматов шрифтов в директиве важен и должен быть следующим:

  • EOT - формат только для Internet Explorer 8 и ниже
  • WOFF - самый современный и маленький по размеру шрифт, который понимают большинство современных браузеров
  • TTF - сравнительно большой по размеру шрифт и достаточно устаревший
  • SVG - самый большой по размеру и объему шрифт, поэтому его необходимо размещать в самой последней строке. К тому же, этот формат шрифта используется только в браузерах ОС Android или в браузере Safari 4 (то есть, iPhone)

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

Правильное применение подключенного web-шрифта League Gothic. Здесь указывается на первом месте имя подключенного шрифта, а затем - резервные шрифты, которые заведомо установлены в системе пользователя (имя шрифта, гарантировано имеющегося в системе и семейство шрифтов).

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

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

Виды шрифтов

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

На самом деле это не так. Или не совсем так. Браузер действительно отрисовывает шрифт указанным ему способом, но вот с самим шрифтом он ничего сделать не может. Он просто берет указанное тегом начертание шрифта и выводит его на экран. Дело в том, что дизайнеры или компании, занимающиеся разработкой шрифтов, создают шрифты таким образом: художник рисует четыре набора одного и того же шрифта. То есть, рисуется набор символов в обычном начертании (regular), затем рисуется набор символов в курсивном начертании (italic), потом набор символов в полужирном начертании (bold), и наконец набор символов в полужирном курсивном начертании (bold italic). Все эти четыре набора символов фактически являются отдельными шрифтами, хотя и носят одно общее название (Georgia, Tahoma, Helvetica и так далее).

Когда браузеру указывается, какое начертание применить, он просто берет шрифт с указанным начертанием и отображает его. К примеру, шрифт Arial имеет четыре вида начертания. Если указывается, что нужно полужирное начертание, то браузер берет полужирное начертание Arial. Сам браузер преобразовать одно начертание в другое не может ни в коей мере. Он может выполнить только одну вещь - попытаться сделать и обычного начертания “курсивное”. Команда, говорящая браузеру выполнить такую задачу, имеет название . В этом случае браузер просто тупо выполняет наклон всех букв шрифта на 45 градусов, и все. Получившийся результат может быть просто ужасным, поэтому такая команда используется очень редко.

В случае с веб-шрифтами веб-дизайнеру нужно самому побеспокоиться от том, чтобы подключить все четыре вида начертания выбранного шрифта по отдельности. Из-за браузера IE8 подключение веб-шрифтов с помощью директивы значительно осложняется и может быть выполнено двумя способами: простым, который IE8 не понимает (но понимают все остальные браузеры) и сложным, который будет доступен и IE8 также.

Простой способ подключения веб-шрифта

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

Расскажу, как я понимаю данные CSS-правила. Директива является своего рода функцией наподобие функции в JavaScript (а может это и есть функция на самом деле, уж больно похожа по своему функционалу?). Эта функция (я буду называть так здесь эту директиву) объявляет имя переменной правилом . Эта переменная является массивом, который заполняется значениями с помощью последующих правил:

  • - местоположение шрифта;
  • - загрузить шрифт указанной жирности;
  • - загрузить шрифт указанного стиля.

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

И затем HTML-тегами или указать, какое начертание шрифта применить к указанным элементам:

Браузер “вытащит” из массива PTSans шрифт нужного начертания (bold или italic или bold italic) и применит его к указанным элементам страницы.

Преимуществом данного способа подключения веб-шрифта является его универсальность. Достаточно один раз объявить шрифт с помощью директивы и правила:


… чтобы потом управлять отображением этого шрифта посредством семантически верных тегов и .

Сложный способ подключения веб-шрифта

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

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

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

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

Оцените этого CSS -“крокодила” ниже. Какой он громоздкий и неуклюжий! А если учесть, что на HTML-странице нужно будет применить шрифт PTSans не только к элементу p, а еще к заголовкам , , ссылке ? Насколько же “раздуются” таблицы стилей в этом случае! А если вдруг (не дай Бог!) придется вносить изменения в такой код?

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

Шрифты Google Fonts

Чтобы не заморачиваться с поиском шрифта, скачиванием его в формате TTF или OTF, конвертации на генераторе типа FontSquirrel Generator, подключения полученных CSS-стилей в проект с помощью многочисленных директив , можно воспользоваться сервисом Google Fonts. Преимущество этого способа заключается в простоте способа и его надежности - достаточно получить на сервере Google одну строку ссылки и поместить ее в свой проект.

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

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

В тоже время, второй способ с помощью директивы более лаконичный - достаточно подключить ее в начало таблиц стилей, чтобы выбранные шрифты применялись ко всем HTML-страницам.

Третий способ с помощью JavaScript кроме сложности, никаких других преимуществ перед двумя другими не имеет.

В Google плотность шрифта обозначается не с помощью ключевых слов , или , а в числовой шкале - 100 до 900. Значение 400 соответствует , 700 - .

К примеру, код может выглядеть следующим образом. Зададим для элемента шрифт Gentium Book Basic нормальной плотности курсивного начертания:

На этом выжимка по веб-шрифтам заканчивается.

RxJs - map

Первый "серьезный" метод в моей RxJs-копилке знаний. На самом деле все просто - этот метод получает на вход поток, обрабатывает каждый ev. … Continue reading

Классификация компьютерных шрифтов

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

Roman – эта группа определяет шрифты с засечками (например, Таймс и Бодони);

Swiss – группа рубленных шрифтов с переменной толщиной штрихов (Гельветика, Футура и др.);

Modern – группа, в которую входят шрифты с постоянной толщиной штрихов (Курьер);

Script – группа рукописных шрифтов;

Decorative – группа декоративных шрифтов;

Типы шрифтов

По внутреннему устройству

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

В векторных (или контурных) шрифтах символы представляют собой криволинейные контуры, описываемые математическими формулами. Каждый знак описан с помощью векторов, определяющих координаты опорных точек, которые соединены прямыми или кривыми и образуют контур знака без привязки к абсолютному размеру или разрешению. Такое описание позволяет увеличить масштаб изображения без потери качества, что невозможно в случае с растровыми шрифтами. Векторные шрифты одинаково выглядят как на экране, так и на бумаге. Существует несколько различных форматов векторных шрифтов, различающихся способом хранения и представления информации о шрифте: PostScript Type1, TrueType, OpenType.

Типы шрифтов

По ширине символа

По ширине символов шрифты делят на моноширинные и пропорциональные.

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

Однако моноширинные шрифты имеют определённые недостатки: прежде всего, большую ширину набора, неравномерный рисунок, а также сложности с отображением «широких» букв, таких как «Ш» или «W»: при небольшом разрешении они могут и вовсе стать трудно узнаваемыми.

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

Литература

Типографские шрифты, материалы и принадлежности / Союзполиграфпром. — М.: [Главполиграфиздат], 1950. — 192 с.

Добкин С. Ф. Оформление книги. Редактору и автору. — М.: Книга, 1985.

Ровенский М. Г. Отдел наборных шрифтов НИИПолиграфМаша и отечественное шрифтовое дело // Полиграфист-издатель. 1995. №4.

Кернинг и трекинг

Кернинг– это увеличение или уменьшение интервала между определенными парами символов.

Трекинг – это расширение или сужение интервала между символами в выделенном тексте или во всем блоке текста.

Кернинг текста можно настраивать автоматически с использованием метрического или оптического кернинга. При метрическом кернинге(другое название – автокернинг) используются пары литер, которые включены в большинство шрифтов. Эти пары литер уже содержат сведения о расстояниях между конкретными парами букв. Например, некоторые из них: LA, P., To, Tr, Ta, Tu, Te, Ty, Wa, WA, We, Wo, Ya и Yo. Метрический кернинг применяется по умолчанию, поэтому к конкретным парам букв кернинг применяется автоматически во время импорта или ввода.

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

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰).

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого.

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

Описание фоpмата chr шpифтов

Использование шрифтов - один из ключевых моментов при поготовке полиграфических материалов в любой программе, за исключением разве что растровой графики. В настоящее время существует три основных формата шрифтов. PostScript Type 1, TrueType и OpenType.

PostScript Type 1

Шрифт формата Type 1 - специальная форма программы PostScript, разработанного компанией Adobe и особый формат файла, который ориентирован на описание шрифта. Шрифты PostScript могут содержать до 220 печатаемых символов, т.е. не поддерживают стандарт Unicode.

Шрифты PostScript для Windows и Macintosh отличаются.

Windows-версия шрифта может состоять из 2-х, 3-х или 4-х файлов. Набор из 3 файлов состоит из файла с расширением PFB (Print Font Binary), который содержит информацию о контурах; файла с расширением AFM (Adobe Font Metrics) , содержащего информацию о ширинах символов и кернинге; INF файла, содержащего дополнительную информацию, которая требуется для инсталляции. В процессе инсталляции Windows генерирует PFM файл (Print Font Metrics), в основе которого лежит информация из AFM и INF файлов. Далее используется только PFB и PFM файлы. Некоторые производители генерируют PFM файлы самостоятельно и поставляют своим клиентам только два этих файла. Этого достаточно для нормального использования. Некоторые так же добавляют AFM файлы, а некоторые поставляют все 4 файла.

Шрифт PostScript для Macintosh состоит из suitcase-файла и по одному принтерному файлу на каждое начертание гарнитуры.

Если Вы работаете в Windows 2000, XP или Mac OS X, шрифты инсталлируются с средствами операционной системы. В более старых версиях операционных систем нужно будет сначала установить утилиту Adobe Type Manager.

TrueType

Технология TrueType была разработана компанией Apple и сейчас используется компаниями Apple и Microsoft в своих операционных системах.

Шрифты TrueType могут содержать до 65000 символов, расположенных в порядке, определенном стандартом Unicode.

В операционной системе Windows шрифт TrueType ссостоит из файлов с раширением TTF, по одному файлу на каждое начертание.

В системе Mac OS X один сьюткейс-файл содержит все начертания шрифта. Кроме того в Mac OS X поддерживаются windows-версии шрифтов TrueType.

OpenType

Новый шрифтовой формат OpenType был разработан совместно компаниями Adobe и Microsoft.

Шрифт OpenType по существу является контейнером, построенным по правилам формата TrueType, который может содержать как PostScript, так и TrueType данные, а также новые типы данных. Шрифты, содержащие данные PostScript имеют расширение OTF, а шрифты на основе TrueType - расширение TTF.

Шрифт в формате OpenType состоит из одного файла на каждое начертание, и может использоваться в операционных системах Windows и Mac OS X.

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

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

Оптимизация шрифтов

Красивый и удобный шрифт - неотъемлемая составляющая хорошего сайта. Благодаря ему нам доступен привлекательный дизайн бренда, более простое чтение текста и удобный интерфейс. Но веб-шрифты дают нам дополнительные возможности! Они позволяют выбрать, найти и увеличить текст в любой момент. Кроме того, надписи не будут зависеть от разрешения экрана и останутся четкими на всех устройствах.

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

Анатомия шрифта

  • Шрифты Unicode могут содержать тысячи глифов.
  • Существует четыре формата шрифтов: WOFF2, WOFF, EOT и TTF.
  • Для некоторых форматов шрифтов необходимо GZIP-сжатие.

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

При выборе шрифта обратите внимание на то, какие символы в нем поддерживаются. Если вам нужно перевести контент страницы на разные языки, используйте шрифт, который выглядит одинаково для всех символов. Например, семейство шрифтов Noto от Google разрабатывается, чтобы поддерживать все языки мира. Однако его полный архив весит более 130 МБ!

Конечно, придется поработать над установкой соответствующих настроек, чтобы шрифт не ухудшил работу ресурса. Однако на веб-платформах вы найдете все необходимые инструменты. Далее мы подробно рассмотрим, как совместить красивое оформление и высокую производительность.

Форматы шрифтов

Сегодня в Интернете используются четыре формата контейнеров шрифтов: EOT, TTF, WOFF и WOFF2. К сожалению, несмотря на возможность выбора, не существует единого формата, который работает во всех браузерах. Например, EOT доступен только в IE, TTF поддерживается в этом браузере только частично. WOFF распространен шире всего, однако его нельзя использовать в некоторых старых браузерах, а над поддержкой WOFF 2.0 работают в настоящее время.

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

  • Используйте WOFF 2.0 в тех браузерах, которые его поддерживают.
  • Добавьте WOFF для большинства браузеров.
  • Применяйте TTF в устаревших браузерах Android (для версий до 4.4).
  • Добавьте EOT для поддержки устаревших версий IE (до IE9). ^

Note: Теоретически, существует ещё один формат контейнера шрифтов - SVG. Однако он никогда не поддерживался в IE и Firefox, и сейчас перестает использоваться в Chrome. Из-за ограниченной сферы применения мы специально не рассказываем о нем в этом руководстве.

Уменьшение размера шрифта с помощью сжатия

Шрифт - это набор глифов, каждый из которых состоит из контуров букв. Конечно, все глифы разные, но, тем не менее, они содержат много похожей информации, которую можно сжать с помощью GZIP или другого совместимого компрессора.

  • Форматы EOT и TTF не сжимаются по умолчанию. Убедитесь, что на ваших серверах настроено сжатие GZIP при передаче ресурсов в этих форматах.
  • К формату WOFF применяется встроенное сжатие. Убедитесь, что компрессор использует оптимальный вариант соответствующих настроек.
  • WOFF2 использует пользовательские алгоритмы предварительной обработки и сжатия для уменьшения размера файла на 30% по сравнению с другими форматами. Ознакомьтесь с отчетом.

Стоит отметить, что некоторые форматы шрифтов содержат дополнительные метаданные, например информацию о хинтинге и кернинге. Они не нужны не для всех платформ, поэтому мы можем сжать файл ещё больше. Узнайте о соответствующих функциях вашего компрессора шрифтов и убедитесь, что у вас есть подходящие ПО для тестирования ресурсов и предоставления их браузерам. Например, Google Fonts поддерживает более 30 оптимизированных вариантов каждого шрифта и автоматически определяет и применяет оптимальный вариант для каждой платформы и браузера.

Note: Используйте сжатие Zopfli для форматов EOT, TTF и WOFF. Этот совместимый с zlib компрессор сжимает файлы примерно на 5% сильнее, чем gzip.

Создание семейства шрифтов с помощью @font-face

  • Используйте подсказку format(), чтобы указать форматы шрифтов.
  • Чтобы ускорить работу сайта, разделяйте крупные Unicode-шрифты на поднаборы. Используйте субнастройки Unicode-диапазона и вручную добавьте запасной вариант для более старых браузеров.
  • Чтобы ускорить работу сайта и отрисовку страниц, сократите количество вариантов стиля для каждого шрифта.

С помощью CSS-правила @font-face можно определить расположение определенного шрифта, его свойства стиля и кодовые точки Unicode, для которых он должен использоваться. Используйте сочетание таких объявлений @font-face для создания семейства шрифтов. Браузер будет использовать его, что понять, какие шрифты нужно скачать и применить для текущей страницы. Рассмотрим подробнее, как это работает.

Выбор формата

В каждом объявлении @font-face указано название семейства шрифтов, которые действует как логическая группа из нескольких объявлений, характеристик шрифта, например стиля, толщины и интервала, и дескриптора src, который определяет список расположений шрифта в порядке важности.

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

  • Директива local() позволяет ссылаться на шрифт и загружать его, а также использовать шрифты, установленные на устройстве пользователя.
  • С помощью директивы url() можно загружать внешние шрифты. Она может содержать подсказку format(), указывающую формат шрифта по ссылке.

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

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

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

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

Субнастройки диапазона Unicode

Кроме таких характеристик шрифтов, как стиль, толщина и интервал, правило @font-face позволяет установить набор кодовых точек Unicode, поддерживаемых ресурсом. Благодаря этому мы можем разделить крупный Unicode-шрифт на несколько небольших поднаборов (например, латиницу, кириллицу и греческий алфавит) и скачивать только те глифы, которые нужны для отрисовки текста на конкретной странице.

С помощью дескриптора диапазона Unicode мы можем создать разделенный запятыми список значений диапазона. Каждое из них может быть указано в одной из трех форм:of three different forms:

  • Одна кодовая точка (например, U+416)
  • Диапазон интервала (например, U+400-4ff). Обозначает начанльную и конечную кодовые точки диапазона.
  • Диапазон Wildcard (например, U+4??): '?' Символы обозначают любое шестандцатиричное число.

Например, мы можем разделить семейство Awesome Font на латинский и японский поднаборы, которые браузер при необходимости может скачать:

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

Однако у этого метода есть маленький недостаток: не все браузеры пока поддерживают диапазон Unicode. Одни просто игнорируют соответствующую подсказку и скачивают все варианты, а другие могут вообще не обрабатывать объявление @font-face. Чтобы решить эту проблему, мы должны вручную установить субнастройки в более старых браузерах.

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

  1. Как определить нужные поднаборы?
    • Если субнастройки диапазона Unicode поддерживаются браузером, он автоматически выберет необходимый поднабор. Вам нужно только добавить соответствующие файлы на страницу и указать требуемые диапазоны в правилах @font-face.
    • Если диапазон Unicode недоступен, следует скрыть все ненужные поднаборы, то есть указать подходящий.
  2. Как создать поднабор шрифта?
    • Для оптимизации шрифтов и создания поднаборов используйте инструмент pyftsubset с открытым кодом.
    • Некоторые сервисы шрифтов позволяют вручную установить нужные субнастройки с помощью параметров запроса. Вы сами сможете выбрать требуемый поднабор для вашей страницы. Чтобы получить более подробную информацию, ознакомьтесь с документацией вашего поставщика шрифтов.

Выбор и синтез шрифта

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

Например, на картинке выше показано семейство шрифтов с тремя вариантами жирности для полужирного стиля: 400 (стандартный), 700 (полужирный) и 900 (жирный). Промежуточные варианты, выделенные серым, отображаются в виде ближайшего из указанных значений.

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

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

В примере выше указано семейство шрифтов Awesome Font, состоящее из двух ресурсов. Они содержат одинаковый набор глифов для латиницы (U+000-5FF), но в разных вариантах жирности: стандартном (400) и полужирном (700). Что произойдет, если в CSS-правиле будет указано другое значение жирность или стиль курсив ?

  • Если точное совпадение шрифта отсутствует, браузер выберет ближайший доступный вариант.
  • Если на найден версия стиля (например, в примере выше мы не указали версию для варианта для курсива), браузер сам синтезирует начертание.

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

В примере выше мы видим разницу между фактическими и синтезированными вариантами для Open-Sans. Все синтезированные варианты созданы на основе одного шрифта со стандартной жирностью (400). Как вы видите, они сильно отличаются. Поскольку информация для создания полужирной версии и курсива не указана, начертание символов будет зависеть от браузера и используемого шрифта.

Оптимизация загрузки и отрисовки

  • Запросы шрифтов отправляются только после создания модели визуализации, поэтому отображение текста может быть задержано.
  • Font Loading API позволяет изменить исходные настройки отложенной загрузки и использовать собственные стратегии загрузки и отображения шрифтов.
  • С помощью встраивания шрифтом можно изменить исходные настройки отложенной загрузки в более старых браузерах.

Полный веб-шрифт со всеми глифами и вариантами стиля, которые могут нам не понадобиться, может весить несколько мегабайт. Чтобы избежать этой проблемы, CSS-правило @font-face позволяет разделить семейство шрифтов на набор ресурсов: поднаборы Unicode, отдельные варианты стиля и т. д.

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

Веб-шрифты и процесс визуализации

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

  1. Браузер запрашивает HTML-документ.
  2. Браузер анализирует HTML-ответ и создает модель DOM.
  3. Браузер обнаруживает ресурсы CSS, JavaScript и т. д. и отправляет запросы.
  4. После получения CSS-контента браузер создает модель CSSOM и совмещает ее с моделью DOM для получения модели визуализации.
    • После того как модель визуализации определила необходимые варианты шрифтов, отправляются соответствующие запросы.
  5. Браузер отображает макет страницы и ресурсы на нем.
    • Если шрифт ещё не доступен, браузер может не показывать текст.
    • Как только шрифт становится доступен, браузер отображает текст.

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

  • Safari отображает текст только после того, как шрифт скачан.
  • Chrome и Firefox задерживают отрисовку шрифта до 3 секунд, после чего используют запасной вариант. После скачивания ресурса браузеры применяют его для повторной визуализации текста.
  • IE сразу показывает текст с помощью запасного шрифта, а потом заново отображает страницу после скачивания ресурса.

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

Оптимизации отрисовки шрифта с помощью Font Loading API

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

Мы можем проверить статус шрифта с помощью директивы check()) и отследить процесс его скачивания. Это позволяет задать собственные правила отрисовки текста на странице:

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

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

Note: В некоторых браузерах Font Loading API пока находится на стадии разработки. Чтобы вам были доступны его функции, используйте полизаполнение FontLoader или библиотеку webfontloader. Тем не менее, вам придется использовать дополнительные ресурсы - средства поддержки JavaScript.

Оптимизация отрисовки шрифта с помощью встраивания

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

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

Эта техника не очень гибка и не позволяет устанавливать время задержки или стратегии визуализации для разного контента. Однако это простое и надежное решение, которое работает во всех браузерах. Чтобы достичь лучшего результата, поместите все встроенные шрифты в отдельную таблицу стиля и установите для них максимальное значение max-age. Благодаря этому даже если вы обновите CSS, пользователям не придется заново скачивать шрифты.

Повторное использование шрифта с помощью HTTP-кеширования

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

Не сохраняйте шрифты в локальном хранилище localStorage или с помощью других способов - это может привести к ухудшения производительности. Используйте HTTP-кеш браузера в сочетании с Font Loading API или библиотекой webfontloader. Благодаря им вы можете быть уверены в правильной и надежной доставке шрифтов.

Список методов оптимизации

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

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

  1. Проверяйте использование шрифтов. Не добавляйте слишком много шрифтов и для каждого из них сокращайте число доступных вариантов. Тогда дизайн будет выглядеть однородно, а сайт - быстро реагировать на запросы пользователя.
  2. Разделяйте шрифты на поднаборы. Вы можете разделить ресурс на Unicode-диапазоны, чтобы отправлять только глифы, нужные на определенной страницу. Это уменьшает размер файла и ускоряет его скачивание. Однако при создании поднаборов не забудьте оптимизировать повторное использование шрифтов, чтобы не скачивать одни и те же символы для разных страниц. Мы советуем использовать поднаборы, основанные на видах письменности, например латинице, кириллице и т. д.
  3. Используйте оптимизированные форматы шрифтов для каждого браузера: WOFF2, WOFF, EOT и TTF. Убедитесь, что к форматам EOT и TTF применено сжатие GZIP, так как они не сжимаются по умолчанию.
  4. Укажите правила для кеша и проверки актуальности. Шрифты - это статичные ресурсы, которые редко обновляются. Убедитесь, что сервер отправляет маркер подтверждения и директиву max-age с максимально долгим периодом. Благодаря этому шрифт может использоваться повторно на разных страницах.
  5. Используйте Font Loading API для оптимизации процесса визуализации. Из-за отложенной загрузки отрисовка шрифтов может быть задержана. С помощью Font Loading API можно решить эту проблему для некоторых шрифтов и указать собственные правила отображения и задержки для контента на странице. Для более старых браузеров, которые не поддерживают Font Loading API используйте JavaScript-библиотеку webfontloader или CSS-встраивание.

Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL