TL; DR: Comment dire de manière fiable: utiliser Consolas comme police par défaut, FreeMono pour les caractères non pris en charge par Consolas et Symbola pour les caractères non pris en charge par les deux?
Étant donné que ma police de programmation principale ne couvre pas tous les symboles mathématiques dont j'ai besoin, j'ai d'abord configuré le remplacement de police comme indiqué ci-dessous:
(set-fontset-font t 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font t 'unicode (font-spec :name "Symbola") nil 'append)
Malheureusement, cela a également changé la police de certains caractères pris en charge par ma police principale, donc je l'ai changé en
(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)
Si ma compréhension est correcte, cela devrait garantir que les caractères que Consolas ne peut pas gérer sont gérés par FreeMono, à moins que FreeMono ne les ait pas, auquel cas ils doivent être affichés à l'aide de Symbola. C'est aussi ma compréhension qui t
fait la même chose que "fontset-default"
ci-dessus.
Malheureusement, il y avait encore des cas où la bonne police n'était pas sélectionnée; J'ai trouvé que changer pour
(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)
fonctionnait mieux, mais pas toujours: changer la taille de la police à l'aide
(set-face-attribute 'default nil :height some-size)
a entraîné l'ignorance des solutions de repli, en raison de la création de nouveaux jeux de polices.
Ma solution actuelle est de faire
(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)
sur chaque jeu de polices ( fontset-list
), après chaque changement de taille de police.
Quelle est la bonne façon de définir le remplacement des polices?
Remarque : à des fins de test, voici quelques caractères mathématiques: ℕ𝓟⧺×≠≥≤±¬∨∧∃∀λ⟿⟹⊥⊤⊢
Références : Manuel Emacs sur les jeux de polices et sur la modification des jeux de polices
fontset
la mauvaise façon. Emacs ne vérifie pas réellement pour chaque caractère affiché si une police sait comment l'afficher ou non. Ce serait trop de calculs. Il n'y a donc pas de mécanisme de «repli» en soi. Vous devez définir votre police par défaut, puis modifier manuellement le jeu de polices par défaut dans certaines plages pour l'afficher à l'aide de polices différentes. Cette procédure est manuelle ou peut-être que le package unicode
peut vous aider.