Algunos caracteres Unicode hacen que la línea en la que se muestran sea bastante grande. Por ejemplo, un acento grave "̀" agrega alrededor de 2.5 líneas de espacio arriba y abajo. Otros caracteres que causan este comportamiento incluyen la letra griega "ϕ" (phi) o el subconjunto igual a "⫅". Otros caracteres como mapas a "⤇" agregan solo alrededor de 0.5 líneas a cada lado.
Me encontré con este problema al leer la fuente de la julia-mode.el
cual contiene una gran cantidad de tales caracteres para la sustitución de LaTeX.
¿Por qué ocurre esto y se puede solucionar?
Editar: estoy usando Ubuntu 14.04 LTS con Emacs 24.3.1. De manera predeterminada, uso la fuente "Ubuntu Mono 13", pero a veces se usan otras fuentes para mostrar caracteres. No he instalado ningún paquete para administrar explícitamente Unicode, y este problema es reproducible usando el comando emacs -Q
.
Respuestas:
Esto ocurre porque Emacs usa diferentes fuentes para diferentes partes del juego de caracteres Unicode. Puede verificar qué fuente se está utilizando colocando el cursor sobre un carácter y presionando C-u C-x =. Por ejemplo, con mi configuración sobre un carácter ASCII obtengo
nil:-apple-Consolas-medium-normal-normal-*-14-*-*-*-m-0-iso10646-1 (#x88)
, pero sobre un ⧺ obtengonil:-apple-Symbola-medium-normal-normal-*-14-*-*-*-p-0-iso10646-1 (#xCE1)
(en otras palabras, está usando Consolas para ASCII y Symbola para algunos caracteres especiales). Las diferentes fuentes tienen diferentes alturas, y Emacs siempre dará suficiente espacio en la altura de la línea para mostrar la fuente más alta. Por defecto, Emacs intentará usar fuentes dependientes del sistema que funcionen, pero esto a menudo conduce a resultados feos.La solución que he encontrado al problema de la altura de la línea es desafortunadamente bastante molesta: reviso los caracteres problemáticos que encuentro y uso
set-fontset-font
para establecerlos en una fuente / tamaño que no afecte la altura de la línea. El código para hacer esto está disponible en mi configuración , pero es feo y todavía no es perfecto. Si alguien tiene una mejor solución, me interesaría escucharla.fuente
Uso el modo agda con muchos símbolos matemáticos y he tenido el mismo problema. Solía ser la única solución real, como sugiere @shosti: personalizar las asignaciones de fuentes. En mi caso, tuve que deshabilitar varias fuentes porque, aunque tenía las fuentes instaladas con glifos particulares definidos, emacs a menudo elegía la incorrecta (mostrando cuadros). Parecía ser peor en OSX pero también lo he visto en Linux. Así que tener las fuentes correctas instaladas no fue suficiente.
Lo que hago ahora es usar el excelente paquete de fuentes unicode de Roland Walker . (Recomendaría instalarlo a través de MELPA). Esto prácticamente ha eliminado el problema por completo.
Puse esto en mi archivo de inicio:
Uso PragmataPro de manera predeterminada, pero cualquier otra fuente con buena cobertura también funcionará y puede personalizar aún más las cosas con el paquete si es necesario.
fuente
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 aunicode-fonts-skip-fonts
; cualquier fuente que seleccione a continuación podría tener la altura correcta. Alternativamente, puede indicarunicode-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 deunicode-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 rango0x2100..0x23ff
), lo siguiente debería funcionar: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:Por ejemplo:
y entonces
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 completamenteset-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í:Cuando intenté esto, no funcionó bien (mi informe de error está aquí ), pero este también es un enfoque posible.
fuente
set-fontset-font
parece ser el único requerido en realidad. Solo tuve que evaluar, por ejemplo,(set-fontset-font t '(#x1d400 . #x1d7ff) "Symbola")
en la creación de marcos (window-setup-hook
; para que funcioneemacs --daemon
), e instalar el paquetettf-ancient-fonts
con Symbola en Debian .Esto es un error Se fija en el maletero. El problema es causado por información incorrecta de altura de línea en las fuentes TeX, que resultan ser las que Emacs recurre si no puede encontrar un carácter.
El hilo de errores en emacs-bug tiene mucha más información.
fuente