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 paket unicode
dapat membantu.