42.12.9 Выбор шрифта

Прежде чем Emacs сможет отобразить символ на графическом дисплее, он должен выбрать шрифт для этого символа31. См. Шрифты в Руководстве GNU Emacs. Обычно Emacs автоматически выбирает шрифт на основе лиц (faces), назначенных этому символу — в частности, атрибутов лица :family, :weight, :slant и :width (см. Атрибуты лица). Выбор шрифта также зависит от отображаемого символа; некоторые шрифты могут отображать только ограниченный набор символов. Если ни один из доступных шрифтов не соответствует требованиям в точности, Emacs ищет наиболее близкий по соответствию шрифт. Переменные в этом разделе контролируют, как Emacs выполняет этот выбор.

Пользовательская опция: face-font-family-alternatives

Если указана определенная семья, но она не существует, эта переменная указывает альтернативные семейства шрифтов для thử. Каждый элемент должен иметь такую форму:

(family alternate-families…)

Если family указана, но недоступна, Emacs попытается использовать другие семейства, указанные в alternate-families, по одному, пока не найдет существующее семейство.

Пользовательская опция: face-font-selection-order

Если не существует шрифта, который точно соответствует всем желаемым атрибутам лица (:width, :height, :weight и :slant), эта переменная указывает порядок, в котором эти атрибуты следует рассматривать при выборе наиболее близкого по соответствию шрифта. Значение должно быть списком, содержащим эти четыре символа атрибутов в порядке убывающей важности. По умолчанию используется (:width :height :weight :slant).

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

Атрибуты :weight и :width имеют символьные значения в диапазоне, центрированном вокруг normal. Совпадения, которые более экстремальны (дальше от normal), несколько предпочтительнее совпадений, которые менее экстремальны (ближе к normal); это сделано для того, чтобы обеспечить контраст между ненормальными и нормальными шрифтами, когда это возможно.

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

Пользовательская опция: face-font-registry-alternatives

Эта переменная позволяет указать альтернативные реестры шрифтов для попытки, если указанный реестр не существует. Каждый элемент должен иметь такую форму:

(registry alternate-registries…)

Если registry указан, но недоступен, Emacs попытается использовать другие реестры, указанные в alternate-registries, по одному, пока не найдет существующий реестр.

Emacs может использовать масштабируемые шрифты, но по умолчанию он не использует их.

Пользовательская опция: scalable-fonts-allowed

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

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

(setq scalable-fonts-allowed '("iso10646-1"))

позволяет использовать масштабируемые шрифты с реестром iso10646-1.

Переменная: face-font-rescale-alist

Эта переменная определяет масштабирование для определенных лиц. Ее значение должно быть списком элементов вида

(fontname-regexp . scale-factor)

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


Примечания

(31)

В данном контексте термин шрифт не имеет отношения к Font Lock (см. Режим блокировки шрифта).