Ya tuve este problema en una pregunta diferente sin respuesta aquí . Esperaría que las diferentes fuentes del mismo tamaño tengan las mismas alturas, pero este no parece ser el caso, por lo que mostraré mi enfoque ad-hoc para solucionar esto.
Dejando a un lado los acentos y enfocándose solo en caracteres simples, se necesitan diferentes fuentes para mostrar todos los diferentes caracteres simplemente porque algunas fuentes omiten bloques enteros de caracteres que están presentes en otras fuentes. Para asegurarse de que los caracteres poco comunes (como "𝚫") tengan al menos una fuente para ellos, instale una fuente como Symbola y vea la lista de fuentes en el archivo Léame del paquete de fuentes Unicode .
Si instala el paquete unicode-fonts
y varias fuentes buenas, todos los caracteres deberían ser compatibles, pero algunos tendrán alturas mostradas incorrectamente en emacs.
Suponga que Mónaco tiene alturas incorrectas, pero Symbola parece tener alturas correctas para símbolos matemáticos (como SUBSET OF OR IGUAL TO ⊆; use C-x 8 RETo insert-char
para probar diferentes caracteres). En mi caso, no usar Monaco, Noto Sans Symbols y Apple Symbols fue suficiente; Una buena fuente para mí fue DejaVu Sans Mono.
Lo primero es que puede prohibir el unicode-fonts
uso de Mónaco agregándolo a unicode-fonts-skip-fonts
; cualquier fuente que seleccione a continuación podría tener la altura correcta. Alternativamente, puede indicar unicode-fonts
que use una fuente específica para un bloque Unicode (como operadores matemáticos; aquí hay una lista de todos los bloques ) modificando una entrada de unicode-fonts-block-font-mapping
.
El segundo es que puede hacerlo fácilmente manualmente para un conjunto de caracteres muy preciso mediante el uso set-fontset-font
. Si Symbola es una buena fuente para símbolos matemáticos (en este caso, el rango 0x2100..0x23ff
), lo siguiente debería funcionar:
(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"))))
Otros rangos que necesitaba para modificar mí eran 2000..206f
, 27c0..27ff
, 2900..2bff
, 1d400..1d7ff
.
Finalmente, no es necesario buscar a mano caracteres mal configurados. Suponiendo que unicode-fonts
esté instalado, la siguiente función generará una lista de todos los caracteres con alturas incorrectas:
(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))))
Por ejemplo:
M-: (debug-unicode-heights 'all-math)
y entonces
M-: (debug-unicode-heights 'all-greek)
mostraría todos los malos símbolos matemáticos. Luego puede examinar con qué fuente se muestran y cambiarla.
Tengo OS X 10.9.5, por lo que la configuración de mi fuente probablemente sea diferente a la tuya. No es necesario instalarlo unicode-fonts
; es posible especificar manualmente sus opciones de fuente preferidas completamente set-fontset-font
cuando encuentre que las opciones predeterminadas de emacs no funcionan bien.
PD Hay una alternativa: cuando una fuente es demasiado grande / pequeña, puede agregar una entrada face-font-rescale-alist
para decirle a emacs que siempre multiplique el tamaño de esa fuente por un factor de, digamos, 0.95, así:
(add-to-list 'face-font-rescale-alist (cons (font-spec :family "STIXGeneral") 0.95) t)
Cuando intenté esto, no funcionó bien (mi informe de error está aquí ), pero este también es un enfoque posible.