TL; DR: Jaki jest prosty sposób rzetelnego powiedzenia: użyć Consolas jako domyślnej czcionki, FreeMono dla znaków nieobsługiwanych przez Consolas i Symbola dla znaków nieobsługiwanych przez oba?
Ponieważ moja główna czcionka programistyczna nie obejmuje wszystkich potrzebnych mi symboli matematycznych, początkowo skonfigurowałem zastępowanie czcionek, jak pokazano poniżej:
(set-fontset-font t 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font t 'unicode (font-spec :name "Symbola") nil 'append)
Niestety zmieniło to również czcionkę niektórych znaków obsługiwanych przez moją główną czcionkę, więc zmieniłem ją na
(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)
Jeśli moje rozumowanie jest prawidłowe, powinno to zapewnić, że znaki, których konsole nie są w stanie obsłużyć, są obsługiwane przez FreeMono, chyba że FreeMono ich nie ma, w takim przypadku powinny być wyświetlane przy użyciu Symbola. To też rozumiem, że t
robi to samo co "fontset-default"
powyżej.
Niestety wciąż były przypadki, w których nie wybrano właściwej czcionki; Znalazłem to zmieniające się na
(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)
działało lepiej, ale nie zawsze: zmiana rozmiaru czcionki za pomocą
(set-face-attribute 'default nil :height some-size)
spowodowało, że awarie zostały zignorowane z powodu tworzenia nowych zestawów czcionek.
Moje obecne rozwiązanie to zrobić
(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)
na każdym zestawie czcionek ( fontset-list
), po każdej zmianie rozmiaru czcionki.
Jaki jest właściwy sposób ustawienia zastępowania czcionek?
Uwaga : do celów testowych oto kilka znaków matematycznych: ℕ𝓟⧺×≠≥≤±¬∨∧∃∀λ⟿⟹⊥⊤⊢
Odnośniki : Podręcznik Emacsa na temat zestawów czcionek i modyfikacji zestawów czcionek
fontset
w niewłaściwy sposób. Emacs nie sprawdza właściwie każdego wyświetlanego znaku, czy czcionka wie, jak go wyświetlić, czy nie. To byłoby zbyt intensywne obliczeniowo. Zatem nie ma mechanizmu „rezerwowego” jako takiego. Powinieneś ustawić domyślną czcionkę, a następnie ręcznie zmodyfikować domyślny zestaw czcionek w określonych zakresach, aby wyświetlał się przy użyciu różnych czcionek. Ta procedura jest ręczna, a może pakiet unicode
może pomóc.