TL; DR: Apa cara sederhana untuk mengatakan: gunakan Consolas sebagai font default, FreeMono untuk karakter yang tidak didukung oleh Consolas, dan Symbola untuk karakter yang tidak didukung oleh keduanya?
Karena font pemrograman utama saya tidak mencakup semua simbol matematika yang saya butuhkan, saya awalnya mengatur font fallback seperti yang ditunjukkan di bawah ini:
(set-fontset-font t 'unicode (font-spec :name "FreeMono") nil 'append)
(set-fontset-font t 'unicode (font-spec :name "Symbola") nil 'append)
Sayangnya ini juga mengubah font untuk beberapa karakter yang didukung font utama saya, jadi saya mengubahnya menjadi
(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)
Jika pemahaman saya benar, ini harus memastikan bahwa karakter yang tidak bisa ditangani oleh Consolas ditangani oleh FreeMono, kecuali FreeMono tidak memilikinya, dalam hal ini mereka harus ditampilkan menggunakan Symbola. Juga pemahaman saya yang t
melakukan hal yang sama seperti di "fontset-default"
atas.
Sayangnya, masih ada kasus-kasus di mana font yang tepat tidak dipilih; Saya menemukan bahwa berubah menjadi
(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)
bekerja lebih baik, tetapi tidak selalu: mengubah ukuran font menggunakan
(set-face-attribute 'default nil :height some-size)
menyebabkan fallback diabaikan, karena font baru dibuat.
Solusi saya saat ini adalah melakukan
(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)
pada setiap fontset ( fontset-list
), setelah setiap perubahan ukuran font.
Apa cara yang tepat untuk mengatur font fallback?
Catatan : untuk tujuan pengujian, berikut adalah beberapa karakter matematika: ℕ𝓟⧺×≠≥≤±¬∨∧∃∀λ⟿⟹⊥⊤⊢
Referensi : Manual Emacs pada fontsets dan pada memodifikasi fontsets
fontset
dengan cara yang salah. Emacs sebenarnya tidak memeriksa setiap karakter yang ditampilkan apakah font tahu cara menampilkannya atau tidak. Itu akan terlalu intensif secara komputasi. Jadi tidak ada mekanisme "fallback" per se. Anda harus mengatur font default Anda dan kemudian memodifikasi font default secara manual dalam rentang tertentu untuk ditampilkan menggunakan font yang berbeda. Prosedur ini manual atau mungkin paketunicode
dapat membantu.Jawaban:
Bagi mereka yang tidak dapat membaca dokumentasi Emacs.
Pemilihan Font
face-font-family-alternatives
Diuji secara khusus menggunakan karakter dalam pertanyaan, memeriksa karakter dengan
describe-character
. Setiap karakter menggunakan salah satu font gratis: Consolas, FreeMono, Symbola. Mengatur font bingkai ke Consola olehset-frame-font
.14 peningkatan sejauh ini, jawaban diturunkan, dan sains UE masih belum dapat menyelesaikan misteri itu.
sumber
(setq face-font-family-alternatives '(("Consolas" "FreeMono" "Symbola")))
, kemudianM-x set-frame-font RET Consolas RET
; karakter menggunakan campuran Consolas dan Simbol Segoe UI)emacs -Q
.M-x customize-variable
face-font-family-alternatives
Ada daftar yang terlihat seperti:
Tambahkan urutan Anda di
customize
antarmuka penyangga:Cara menggunakan
face-font-family-alternatives
:Di dalam buffer Anda: M-x set-frame-font
Pilih font dari daftar. Font yang dipilih akan menentukan urutan pencarian font apa yang
face-font-family-alternatives
akan digunakan. Dalam contoh ini Consolas .Untuk memeriksa jenis font apa yang digunakan untuk menampilkan karakter: M-x describe-char
sumber