Bu problemi daha önce cevaplanmamış bir soruda burada yaşadım . Aynı büyüklükte farklı yazı tiplerinin aynı yükseklikte olmasını beklerdim, ancak durum böyle görünmüyor, bu yüzden geçici olarak bu yaklaşımı düzeltmeye yönelik yaklaşımımı göstereceğim.
Vurguları bir kenara bırakmak ve sadece düz karakterlere odaklanmak için, farklı yazı tiplerini görüntülemek için farklı yazı tipleri gerekir çünkü bazı yazı tipleri diğer yazı tiplerinde bulunan tüm karakter bloklarını çıkarır. Yaygın olmayan karakterlerin ("𝚫" gibi) onlar için en az bir yazı tipine sahip olduğundan emin olmak için, Symbola gibi bir yazı tipi yükleyin ve yazı tipi listesini unicode-yazı tipi paketinin benioku bölümüne bakın .
Paketi unicode-fonts
ve çok sayıda iyi yazı tipini yüklerseniz , tüm karakterlerin desteklenmesi gerekir, ancak bazılarında emacs'de yanlış görüntülenen yükseklikler olacaktır.
Monako'nun yanlış yüksekliklere sahip olduğunu varsayalım, ancak Symbola matematiksel semboller için doğru yüksekliklere sahip görünüyor (örneğin, farklı karakterleri test etmek C-x 8 RETveya kullanmak insert-char
için SUBSET OF OR EŞİT; ). Benim durumumda Monaco kullanmamak, Noto Sans Sembolleri ve Elma Sembolleri yeterliydi; Benim için iyi bir yazı tipi DejaVu Sans Mono oldu.
İlk olarak, unicode-fonts
Monaco'yu ekleyerek kullanmayı yasaklayabilirsiniz unicode-fonts-skip-fonts
; Bir sonraki seçtiği yazı tipinden hangisi doğru yüksekliğe sahip olabilir. Alternatif olarak, bir girişini değiştirerek bir unicode-fonts
Unicode bloğu (örneğin, Matematiksel Operatörler; burada tüm blokların bir listesidir ) için belirli bir font kullanmayı söyleyebilirsiniz unicode-fonts-block-font-mapping
.
İkincisi, bunu kullanarak çok hassas bir karakter kümesi için bunu el ile kolayca yapabilmenizdir set-fontset-font
. Symbola matematiksel semboller için iyi bir font ise (bu durumda aralık 0x2100..0x23ff
), aşağıdakiler çalışmalıdır:
(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"))))
Kendimi değiştirmek için gerekli diğer aralıkları vardı 2000..206f
, 27c0..27ff
, 2900..2bff
, 1d400..1d7ff
.
Son olarak, yanlış yapılandırılmış karakterleri elle aramak gerekli değildir. unicode-fonts
Yüklü farz edersek , aşağıdaki fonksiyon yanlış yüksekliğe sahip tüm karakterlerin bir listesini oluşturur:
(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))))
Örneğin:
M-: (debug-unicode-heights 'all-math)
ve sonra
M-: (debug-unicode-heights 'all-greek)
tüm kötü matematiksel sembolleri gösterirdi. Daha sonra hangi yazı tipiyle görüntülendiklerini inceleyebilir ve değiştirebilirsiniz.
Ben OS X 10.9.5 var, bu yüzden yazı tipi ayarları benimkinden farklı olurdu. Yüklemek gerekli değildir unicode-fonts
; set-fontset-font
Emacs'in varsayılan seçeneklerinin işe yaramadığını tespit ettiğinizde tercih ettiğiniz yazı tipi seçeneklerini tamamen belirtmek mümkündür .
PS Bir alternatif var: bir font sürekli olarak çok büyük / küçük olduğunda, face-font-rescale-alist
emacs'a, o fontun boyutunu daima 0.95 gibi bir faktörle çarpmasını söylemek için bir giriş ekleyebilirsiniz :
(add-to-list 'face-font-rescale-alist (cons (font-spec :family "STIXGeneral") 0.95) t)
Bunu denediğimde pek işe yaramadı (hata raporum burada ), ama bu da olası bir yaklaşım.