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
может помочь.