TL; DR: Was ist eine einfache Möglichkeit, zuverlässig zu sagen: Verwenden Sie Consolas als Standardschriftart, FreeMono für Zeichen, die von Consolas nicht unterstützt werden, und Symbola für Zeichen, die von beiden nicht unterstützt werden?
Da meine Hauptprogrammierungsschrift nicht alle mathematischen Symbole abdeckt, die ich benötige, habe ich zunächst den Schrift-Fallback wie folgt eingerichtet:
(set-fontset-font t 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font t 'unicode (font-spec :name "Symbola") nil 'append)
Leider hat sich dadurch auch die Schriftart für einige der Zeichen geändert, die von meiner Hauptschriftart unterstützt werden, sodass ich sie in geändert habe
(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)
Nach meinem Verständnis sollte dies sicherstellen, dass Zeichen, mit denen Consolas nicht umgehen kann, von FreeMono verarbeitet werden, es sei denn, FreeMono verfügt nicht über diese Zeichen. In diesem Fall sollten sie mit Symbola angezeigt werden. Es ist auch mein Verständnis, t
das dasselbe wie "fontset-default"
oben tut .
Leider gab es immer noch Fälle, in denen die richtige Schriftart nicht ausgewählt wurde. Das änderte sich zu
(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)
funktionierte besser, aber nicht immer: ändere die schriftgröße mit
(set-face-attribute 'default nil :height some-size)
führten dazu, dass die Fallbacks ignoriert wurden, da neue Zeichensätze erstellt wurden.
Meine aktuelle Lösung ist zu tun
(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)
bei jedem Fontset ( fontset-list
) nach jeder Änderung der Schriftgröße.
Was ist der richtige Weg, um Font Fallback einzustellen?
Hinweis : Zu Testzwecken finden Sie hier einige mathematische Zeichen: ℕ𝓟⧺×≠≥≤±¬∨∧∃∀λ⟿⟹⊥⊤⊢
Verweise : Emacs-Handbuch zu Schriftarten und zum Ändern von Schriftarten
fontset
falsch. Emacs prüft nicht für jedes angezeigte Zeichen, ob eine Schrift weiß, wie sie angezeigt wird oder nicht. Das wäre zu rechenintensiv. Es gibt also keinen "Fallback" -Mechanismus an sich. Sie sollten Ihre Standardschriftart festlegen und dann die Standardschriftart in bestimmten Bereichen manuell ändern, um sie mit anderen Schriftarten anzuzeigen. Diese Prozedur ist manuell oder möglicherweise kann das Paket unicode
helfen.