TL; DR: Какой простой способ надежно сказать: использовать Consolas в качестве шрифта по умолчанию, FreeMono для символов, не поддерживаемых Consolas, и Symbola для символов, не поддерживаемых обоими?
Поскольку мой основной программный шрифт не охватывает все математические символы, которые мне нужны, я изначально настроил откат шрифта, как показано ниже:
(set-fontset-font t 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font t 'unicode (font-spec :name "Symbola") nil 'append)
К сожалению, это также изменило шрифт для некоторых символов, которые поддерживает мой основной шрифт, поэтому я изменил его на
(set-fontset-font t 'unicode (font-spec :name "Consolas") nil)
(set-fontset-font t 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font t 'unicode (font-spec :name "Symbola") nil 'append)
Если мое понимание верно, это должно гарантировать, что символы, которые Consolas не может обработать, обрабатываются FreeMono, если только у FreeMono их нет, и в этом случае они должны отображаться с помощью Symbola. Это также мое понимание, что t
делает то же самое, что и "fontset-default"
выше.
К сожалению, все еще были случаи, когда правильный шрифт не был выбран; Я обнаружил, что меняется на
(set-fontset-font t 'unicode (font-spec :name "Consolas") nil)
(set-fontset-font t 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font t 'unicode (font-spec :name "Symbola") nil 'append)
(set-fontset-font "fontset-startup" 'unicode (font-spec :name "Consolas") nil)
(set-fontset-font "fontset-startup" 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font "fontset-startup" 'unicode (font-spec :name "Symbola") nil 'append)
работал лучше, но не всегда: изменение размера шрифта с помощью
(set-face-attribute 'default nil :height some-size)
вызвал игнорирование аварийных откликов из-за создания новых наборов шрифтов.
Мое текущее решение состоит в том, чтобы сделать
(set-fontset-font fontset 'unicode (font-spec :name "Consolas") nil)
(set-fontset-font fontset 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font fontset 'unicode (font-spec :name "Symbola") nil 'append)
на каждом наборе шрифтов ( fontset-list
), после каждого изменения размера шрифта.
Как правильно установить резервный шрифт?
Примечание : в целях тестирования, здесь есть несколько математических символов: ℕ𝓟⧺×≠≥≤±¬∨∧∃∀λ⟿⟹⊥⊤⊢
Ссылки : Руководство Emacs по наборам шрифтов и по изменению наборов шрифтов.
fontset
неправильном пути. Emacs на самом деле не проверяет каждый отображаемый символ, знает ли шрифт, как его отобразить, или нет. Это было бы слишком интенсивно в вычислительном отношении. Таким образом, не существует «запасного» механизма как такового. Вам следует установить шрифт по умолчанию, а затем вручную изменить набор шрифтов по умолчанию в определенных диапазонах для отображения с использованием разных шрифтов. Эта процедура является ручной или, возможно, пакетunicode
может помочь.Ответы:
Для тех, кто не умеет читать документацию Emacs.
Выбор шрифта
face-font-family-alternatives
Специально проверено использование символов в вопросе, проверка символов с
describe-character
. Каждый персонаж использует один из бесплатных шрифтов: Consolas, FreeMono, Symbola. Установка шрифта рамки на Consolaset-frame-font
.До сих пор 14 голосов, ответ отрицателен, и наука ЕС до сих пор не может решить эту загадку.
источник
(setq face-font-family-alternatives '(("Consolas" "FreeMono" "Symbola")))
, а затемM-x set-frame-font RET Consolas RET
, персонажи используют сочетание Consolas и Segoe UI Symbol)emacs -Q
.M-x customize-variable
face-font-family-alternatives
Есть список, который выглядит примерно так:
Добавьте вашу последовательность в
customize
буферный интерфейс:Как использовать
face-font-family-alternatives
:В вашем буфере: M-x set-frame-font
Выберите шрифт из списка. Выбранный шрифт будет определять, какую последовательность поиска шрифтов
face-font-family-alternatives
использовать. В этом примере Консолас .Чтобы проверить, какое семейство шрифтов использовалось для отображения символа: M-x describe-char
источник