Saya sudah memiliki masalah ini dalam pertanyaan yang belum terjawab berbeda di sini . Saya akan mengharapkan font yang berbeda pada ukuran yang sama memiliki ketinggian yang sama, tetapi sepertinya tidak demikian, jadi saya akan menunjukkan pendekatan ad-hoc saya untuk memperbaikinya.
Mengesampingkan aksen, dan hanya berfokus pada karakter biasa, font yang berbeda diperlukan untuk menampilkan semua karakter yang berbeda hanya karena beberapa font menghilangkan seluruh blok karakter yang ada pada font lain. Untuk memastikan bahwa karakter yang tidak umum (seperti "𝚫") memiliki setidaknya satu font untuk mereka, instal font seperti Symbola, dan lihat daftar font di readme dari paket unicode-fonts .
Jika Anda menginstal paket unicode-fonts
dan sejumlah font yang bagus, semua karakter harus didukung, tetapi beberapa akan menampilkan ketinggian yang salah di emacs.
Misalkan Monaco memiliki ketinggian yang tidak tepat, tetapi Symbola tampaknya memiliki ketinggian yang tepat untuk simbol matematika (seperti SUBSET OF ATAU SAMA DENGAN UAL; gunakan C-x 8 RETatau insert-char
untuk menguji karakter yang berbeda.). Dalam kasus saya, tidak menggunakan Monako, Simbol Noto Sans dan Simbol Apple sudah cukup; satu font yang bagus untuk saya adalah DejaVu Sans Mono.
Hal pertama adalah Anda bisa melarang unicode-fonts
menggunakan Monako dengan menambahkannya ke unicode-fonts-skip-fonts
; font apa pun yang dipilih selanjutnya mungkin memiliki ketinggian yang tepat. Atau, Anda dapat meminta unicode-fonts
untuk menggunakan font tertentu untuk blok Unicode (seperti Operator Matematika; di sini adalah daftar semua blok ) dengan memodifikasi entri unicode-fonts-block-font-mapping
.
Yang kedua adalah Anda dapat dengan mudah melakukan ini secara manual untuk serangkaian karakter yang sangat tepat dengan menggunakan set-fontset-font
. Jika Symbola adalah font yang bagus untuk simbol matematika (dalam hal ini jangkauan 0x2100..0x23ff
), yang berikut ini akan berfungsi:
(set-fontset-font t '(#x2100 . #x23ff)
;; this should throw an error if there is no such font
(font-xlfd-name (find-font (font-spec :family "Symbola"))))
Rentang lainnya yang saya butuhkan untuk memodifikasi sendiri adalah 2000..206f
, 27c0..27ff
, 2900..2bff
, 1d400..1d7ff
.
Akhirnya, tidak perlu mencari karakter yang salah konfigurasi dengan tangan. Dengan asumsi unicode-fonts
diinstal, fungsi berikut akan menghasilkan daftar semua karakter dengan ketinggian yang salah:
(defun debug-unicode-heights (&optional block-name)
"Find all characters in a given block that have incorrect heights.
BLOCK-NAME can be anything that
`unicode-fonts-debug-insert-block' accepts, such as `'all-math',
or a string naming a Unicode block."
(interactive "sBlock name:")
(unless block-name (setq block-name 'all-math))
(let ((buffer (generate-new-buffer (format "debug-unicode-heights:%s" block-name)))
expected-height
bad-characters)
(pop-to-buffer buffer)
(with-current-buffer buffer
(unicode-fonts-debug-insert-block block-name)
(goto-char (point-min))
(setq expected-height (line-pixel-height))
;; (message "Expected height %d" expected-height)
(while (< (point) (point-max))
(if (or (= (line-pixel-height) expected-height)
;; Some characters are invalid, they have no name
;; (their name is just their hex code), and their
;; heights do not matter to us.
(looking-at-p "^.[^\"]*\"#"))
(delete-region (line-beginning-position)
(1+ (line-end-position)))
(push (char-after (line-beginning-position)) bad-characters)
(forward-line))))
;; (display-message-or-buffer buffer)
(apply #'string (reverse bad-characters))))
Sebagai contoh:
M-: (debug-unicode-heights 'all-math)
lalu
M-: (debug-unicode-heights 'all-greek)
akan menunjukkan semua simbol matematika yang buruk. Anda kemudian dapat memeriksa dengan font mana mereka ditampilkan, dan mengubahnya.
Saya memiliki OS X 10.9.5, jadi pengaturan font saya kemungkinan akan berbeda dari milik Anda. Tidak perlu menginstal unicode-fonts
; adalah mungkin untuk secara manual menentukan pilihan font pilihan Anda sepenuhnya melalui set-fontset-font
setiap kali Anda menemukan bahwa pilihan default emacs tidak berfungsi dengan baik.
PS Ada alternatif: ketika font secara konsisten terlalu besar / kecil, Anda dapat menambahkan entri face-font-rescale-alist
untuk memberitahu emacs untuk selalu mengalikan ukuran font itu dengan faktor, katakanlah, 0,95, seperti:
(add-to-list 'face-font-rescale-alist (cons (font-spec :family "STIXGeneral") 0.95) t)
Ketika saya mencoba ini, itu tidak berfungsi dengan baik (laporan bug saya ada di sini ), tetapi ini juga merupakan pendekatan yang mungkin.