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 Paketunicode
helfen.Antworten:
Für diejenigen, die die Emacs-Dokumentation nicht lesen können.
Schriftauswahl
face-font-family-alternatives
Speziell getestet mit Zeichen in der Frage, überprüfen Sie die Zeichen mit
describe-character
. Jeder Buchstabe benutzt eine der freien Schriftarten: Consolas, FreeMono, Symbola. Festlegen der Frame-Schriftart auf Consola vonset-frame-font
.Bisher 14 positive Stimmen, eine negative Antwort, und die EU-Wissenschaft kann dieses Rätsel immer noch nicht lösen.
quelle
(setq face-font-family-alternatives '(("Consolas" "FreeMono" "Symbola")))
dann verwendetM-x set-frame-font RET Consolas RET
; die Charaktere verwenden eine Mischung aus Consolas und Segoe UI Symbol)emacs -Q
.M-x customize-variable
face-font-family-alternatives
Es gibt eine Liste, die ungefähr so aussieht:
Fügen Sie Ihre Sequenz in die
customize
Pufferschnittstelle ein:Wie benutzt man
face-font-family-alternatives
:In deinem Puffer: M-x set-frame-font
Wählen Sie eine Schriftart aus der Liste. Die gewählte Schriftart definiert die zu verwendende Schriftsuchsequenz
face-font-family-alternatives
. In diesem Beispiel Consolas .So überprüfen Sie, welche Schriftfamilie zum Anzeigen eines Zeichens verwendet wurde: M-x describe-char
quelle