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 pakietunicode
może pomóc.Odpowiedzi:
Dla tych, którzy nie są w stanie przeczytać dokumentacji Emacsa.
Wybór czcionki
face-font-family-alternatives
Specjalnie przetestowany przy użyciu znaków w pytaniu, sprawdzając znaki przy pomocy
describe-character
. Każda postać używa jednej z bezpłatnych czcionek: Consolas, FreeMono, Symbola. Ustawienie czcionki ramki na Consola przezset-frame-font
.Jak dotąd 14 głosów pozytywnych, odpowiedź odrzucona, a nauka UE wciąż nie jest w stanie rozwiązać tej tajemnicy.
źródło
(setq face-font-family-alternatives '(("Consolas" "FreeMono" "Symbola")))
wtedy użyłemM-x set-frame-font RET Consolas RET
; postacie używają mieszanki Consolas i Segoe UI Symbol)emacs -Q
.M-x customize-variable
face-font-family-alternatives
Istnieje lista, która wygląda mniej więcej tak:
Dodaj swoją sekwencję do
customize
interfejsu bufora:Jak korzystać
face-font-family-alternatives
:W twoim buforze: M-x set-frame-font
Wybierz czcionkę z listy. Wybrana czcionka określi, z jakiej sekwencji wyszukiwania czcionek
face-font-family-alternatives
ma korzystać. W tym przykładzie Consolas .Aby sprawdzić, jakiej rodziny czcionek użyto do wyświetlenia znaku: M-x describe-char
źródło