Наборы шрифтов
Набор шрифтов — это список шрифтов, каждому из которых назначен диапазон кодов символов. Отдельный шрифт не может отображать весь диапазон символов, поддерживаемых Emacs, а набор шрифтов может. У наборов шрифтов есть имена, как и у шрифтов, и при указании шрифта для фрейма или начертания можно использовать имя набора шрифтов вместо имени шрифта. Ниже приведена информация о создании наборов шрифтов с помощью программ на Lisp.
- Функция: create-fontset-from-fontset-spec fontset-spec &optional style-variant-p noerror
-
Эта функция определяет новый набор шрифтов согласно строке спецификации fontset-spec. Строка должна иметь следующий формат:
fontpattern, [charset:font]...
Пробельные символы перед запятыми и после них игнорируются.
Первая часть строки, fontpattern, должна иметь формат стандартного имени шрифта X, за исключением того, что последние два поля должны быть ‘fontset-alias’.
У нового набора шрифтов есть два имени: длинное и короткое. Длинное имя — это fontpattern целиком. Короткое имя — ‘fontset-alias’. На набор шрифтов можно ссылаться по любому из этих имён. Если набор шрифтов с таким именем уже существует, возникает ошибка, если только noerror не равно
nil; в этом случае функция ничего не делает.Если необязательный аргумент style-variant-p не равен
nil, это означает, что также следует создать полужирный, курсивный и полужирный курсивный варианты набора шрифтов. У этих вариантов нет короткого имени, только длинное, образованное изменением fontpattern для указания полужирного и/или курсивного начертания.В строке спецификации также указывается, какие шрифты использовать в наборе шрифтов. Подробности приведены ниже.
Конструкция ‘charset:font’ задаёт шрифт, который следует использовать в этом наборе шрифтов для определённого набора символов. Здесь charset — имя набора символов, а font — шрифт, используемый для этого набора символов. Эту конструкцию можно использовать в строке спецификации любое количество раз.
Для остальных наборов символов, которые не указаны явно, Emacs выбирает шрифт на основе fontpattern: вместо ‘fontset-alias’ подставляется значение, обозначающее один набор символов. Для набора символов ASCII вместо ‘fontset-alias’ подставляется ‘ISO8859-1’.
Кроме того, если несколько соседних полей являются подстановочными символами, Emacs объединяет их в один подстановочный символ. Это предотвращает использование автоматически масштабируемых шрифтов. Шрифты, полученные масштабированием более крупных шрифтов, непригодны для редактирования, а масштабирование меньшего шрифта бесполезно, поскольку лучше использовать меньший шрифт в его собственном размере, что и делает Emacs.
Таким образом, если fontpattern имеет следующий вид,
-*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24
спецификация шрифта для символов ASCII будет такой:
-*-fixed-medium-r-normal-*-24-*-ISO8859-1
а спецификация шрифта для китайских символов GB2312 будет такой:
-*-fixed-medium-r-normal-*-24-*-gb2312*-*
Возможно, у вас нет китайского шрифта, соответствующего приведённой выше спецификации. Большинство дистрибутивов X включают только китайские шрифты, у которых в поле family указано ‘song ti’ или ‘fangsong ti’. В таком случае ‘Fontset-n’ можно указать следующим образом:
Emacs.Fontset-0: -*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24,\
chinese-gb2312:-*-*-medium-r-normal-*-24-*-gb2312*-*
Тогда в спецификациях шрифтов для всех символов, кроме китайских символов GB2312, в поле family будет указано ‘fixed’, а в спецификации шрифта для китайских символов GB2312 в поле family будет использоваться подстановочный символ ‘*’.
- Функция: set-fontset-font fontset characters font-spec &optional frame add
-
Эта функция изменяет существующий набор шрифтов fontset, чтобы указанный шрифт font-spec использовался для отображения указанных символов characters.
Если fontset равен
nil, эта функция изменяет набор шрифтов выбранного фрейма или фрейма frame, если frame не равенnil.Если fontset равен
t, эта функция изменяет набор шрифтов по умолчанию, короткое имя которого в виде строки — ‘fontset-default’.Аргумент characters может быть отдельным символом, который должен отображаться с помощью font-spec. Он также может быть конс-ячейкой
(from . to), где from и to — символы. В этом случае font-spec используется для всех символов в диапазоне от from до to включительно.characters может быть символом набора символов (см. Наборы символов). В этом случае font-spec используется для всех символов этого набора.
characters может быть символом скрипта (см. char-script-table). В этом случае font-spec используется для всех символов, принадлежащих этому скрипту. См. также
use-default-font-for-symbols, влияющий на выбор шрифта, когда characters указывает на скриптsymbolили включает символы этого скрипта (к которому относятся символы и знаки препинания).characters может быть равен
nil, что означает, что font-spec следует использовать для любого символа в fontset, для которого не задана спецификация шрифта.font-spec может быть объектом font-spec, созданным функцией
font-spec(см. Представление шрифта низкого уровня).font-spec может быть конс-ячейкой
(family . registry), где family — название семейства шрифта (в начале может указываться название производителя), а registry — название реестра шрифта (в конце может указываться название кодировки).font-spec может быть именем шрифта, представленным строкой.
font-spec может быть равен
nil, что явно указывает на отсутствие шрифта для заданных символов characters. Это полезно, например, чтобы избежать дорогостоящего общесистемного поиска шрифтов для символов, у которых нет глифов, например для символов из области частного использования Unicode (PUA).Необязательный аргумент add, если он не равен
nil, задаёт способ добавления font-spec к спецификациям шрифтов, ранее заданным для characters. Если он равенprepend, font-spec добавляется в начало существующего списка спецификаций. Если он равенappend, font-spec добавляется в конец. По умолчанию font-spec заменяет ранее заданные спецификации шрифтов.Например, следующий код изменяет набор шрифтов по умолчанию так, чтобы для всех символов набора символов
japanese-jisx0208использовался шрифт с названием семейства ‘Kochi Gothic’:(set-fontset-font t 'japanese-jisx0208 (font-spec :family "Kochi Gothic"))Обратите внимание: эту функцию, как правило, следует вызывать из пользовательских файлов инициализации и, в более общем случае, до отображения любых символов characters в текущем сеансе Emacs. Дело в том, что для некоторых скриптов Emacs кэширует способ их отображения, и кэшированная информация включает используемый для них шрифт. После однократного отображения этих символов кэшированный шрифт продолжит использоваться независимо от изменений наборов шрифтов.
- Функция: char-displayable-p char
-
Эта функция возвращает значение, не равное
nil, если Emacs должен быть способен отображать char. Точнее, если в наборе шрифтов выбранного фрейма есть шрифт для отображения набора символов, к которому принадлежит char.В наборах шрифтов можно задавать шрифт для каждого символа отдельно; если в наборе шрифтов это сделано, значение этой функции может быть неточным.
Эта функция может возвращать значение, не равное
nil, даже если доступного шрифта нет, поскольку она также проверяет, может ли система кодирования текстового терминала кодировать этот символ (см. Кодировка ввода-вывода терминала).
- Функция: char-displayable-on-frame-p char frame
Эта функция работает так же, как
char-displayable-p(относительно frame), но в графическом режиме не выполняет заключительную проверку того, может ли нижележащий текстовый терминал кодировать символ. Таким образом, она позволяет проверить возможность отображения char с учётом особенностей frame.
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Fontsets.html