¿Por qué cambia la altura de la fuente cuando está en negrita?


9

Es tan molesto...

Cuando cualquier texto en una línea tiene su cara cambiada para que el texto esté en negrita, la altura de la línea aumenta en (supongo) un solo píxel. Se muestra mejor con una imagen:

ingrese la descripción de la imagen aquí

¿Por qué es esto? ¿Cómo lo evito?


Según lo solicitado, información sobre la plataforma:

  • Debian GNU / Linux sid (inestable) en amd64
  • Emacs usa libgtk-3.so.0 (gtk 3.14.5), en XFCE 4.12

He probado las siguientes fuentes en 8pt, 9pt, 10pt y 11pt:

  • DejaVu Sans Mono
  • DejaVu Sans
  • DejaVu Serif
  • Droid Sans Mono
  • Mono de liberación

El problema ocurre solo con DejaVu Sans Mono y DejaVu Sans, y solo a 9pt y 10pt. (La imagen de arriba muestra DejaVu Sans Mono-9).


2
Debe observar los atributos de cara de defunexample antes de poner un espacio y luego nuevamente en cada palabra después de poner un espacio entre defun y ejemplo . Esto se hace colocando el cursor en el punto deseado y luego escribiendo C-u C-x =. Probablemente encontrará que la cara que afecta a defun o el ejemplo que afecta a la cara tienen diferentes atributos que son responsables del comportamiento que ve, por ejemplo, además del color básico del primer plano. Los atributos faciales pueden ser personalizados por el usuario.
ley

¿Podría agregar su sistema operativo y administrador de ventanas a su pregunta, y alguna información sobre qué GUI usa su Emacs (por ejemplo, Gtk2, Gtk3, etc.)?
Lunaryorn

@lawlist: gracias hombre. Con el espacio, se ha aplicado font-lock-function-name-face, que tiene una altura no especificada (¿así que supongo que es la predeterminada?). Sin el espacio, no se aplica ninguna cara (por lo tanto, de nuevo, ¿presumo el valor predeterminado?) El valor predeterminado se establece en mi tema en :height 90(9pt).
Edam

@lawlist: un poco más de investigación ... en el tema, si elimino / agrego / elimino / agrego :weight bolddesde font-lock-function-name-face(y custom-theme-set-facesvuelvo a ejecutar el comando del tema ), ¡puedo ver el cambio de altura de la defunlínea en 1px! Definitivamente es el atributo audaz lo que lo está causando, creo.
Edam

Supongo que según sus comentarios sería que la familia de fuentes que eligió tiene una altura diferente para los atributos en negrita, por lo que no se puede cambiar a menos que la reduzca manualmente: prueba y error al reducir lentamente el tamaño del punto. Alternativamente, elija una familia que no cambie la altura cuando se aplica negrita. Personalmente, ya no uso negrita o subrayado en ninguno de mis temas personalizados por una variedad de razones relacionadas con los efectos visuales en el búfer: cuando creo un subrayado para la línea actual, se hace con una superposición. Para negrita, simplemente uso de colores fuertes - por ejemplo, magenta, amarillo, ...
lawlist

Respuestas:


2

La altura de la fuente cambia en DejaVu en ese tamaño de punto porque la información de altura de la fuente entre las dos fuentes normal y negrita es diferente cuando debería ser la misma.

La fuente DejaVu Sans Mono 10 que uso no cambia la altura de la fuente entre el peso normal y el negrita. Lo configuré en mis .emacs con(set-frame-font "DejaVu Sans Mono-10")

Entonces, tiene algo con lo que comparar, la información para la fuente "DejaVu Sans 10" a través de (información de fuente en Emacs 25):

(font-info "DejaVu Sans Mono-10")
["-unknown-DejaVu Sans Mono-normal-normal-normal-*-13-*-*-*-m-0-iso10646-1" 
"DejaVu Sans Mono:pixelsize=13:foundry=unknown:weight=normal:slant=normal:
width=normal:spacing=100:scalable=true" 13 17 0 0 0 8 13 4 8 8 
"/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf" (opentype ((DFLT ...) )))]

EDITAR según la información posterior:

En la información de fuente anterior, muestro una altura de fuente de 17 y usted informa una altura de 15 (normal) o 16 (negrita). En emacs 25 hay información de fuente adicional después de esos 3 0's, en particular el descenso de la fuente es 4.

Aunque no tengo ningún problema en Emacs 24 o 25 con DejaVu Sans Mono y la variante Bold, lo más simple es usar una fuente y un tamaño que no cambien el ancho (como se muestra en font-info) entre normal y negrita o algo diferente a DejaVu.

En cuanto a lo que está causando esto, podría ser una de sus bibliotecas (mi gtk es libgtk-x11-2.0.so.0), pero dudo que sea esta biblioteca en particular. También dudo que sea el archivo o paquete ttf. Lo más probable es la representación de tipo libre (tengo libfreetype.so.6). Dado que DejaVu está escalado, al igual que las otras fuentes que funcionan para usted, un error de cálculo que se hizo cosquillas por la forma en que se escribió DejaVu explicaría por qué funcionan en algunos tamaños pero no en otros.

Para verificar si el problema es específico de Emacs o no, es posible que pueda abrir dos ventanas de terminal, una con un mensaje en negrita y otra sin y comparar el espaciado de línea en ellas. Si es diferente como Emacs, entonces esto tiene que ver con el renderizado y / o la fuente.

Si compiló emacs, podría haber algo allí.


Esto no funcionó ... (Estaba usando DejaVu Sans Mono-9BTW). Actualizaré la descripción anterior ...
Edam

La fuente de la línea de modo es la misma. ¡Mono 10 exhibe el mismo comportamiento, pero 8 y 11pr no! Tiene que tener algo que ver con la representación de la fuente y devolver una altura de línea diferente para normal y negrita. ¿Emacs usa fontconfig?
Edam

1
Emacs no hace uso de fontconfig y generalmente es bastante único cuando se trata de la selección de glifos.
wasamasa

(font-info "DejaVu Sans Mono-10")me da ["-unknown-DejaVu Sans Mono-normal-normal-normal-*-13-*-*-*-m-0-iso10646-1" "DejaVu Sans Mono:pixelsize=13:foundry=unknown:weight=normal:slant=normal:width=normal:spacing=100:scalable=true" 13 15 0 0 0]. También he fonts-dejavu-coreinstalado, y también ttf-dejavu-core. Ambos proporcionan un DejaVuSansMono.ttf(en diferentes directorios, pero son archivos idénticos, así que no veo que esto importe). También me sale Height: 98de la cara (cuando uso DajaVu Sans Mono-10, que exhibe el problema anterior). Estoy abierto a más sugerencias! :)
Edam

Tenga en cuenta que algunos de sus parámetros de información de fuente son diferentes. Tengo "13 17 ..." mientras que tienes "13 15 ..". Y si obtiene información de fuente de ayuda para la función, verá que la primera diferencia 17 (yo) frente a 15 (usted) es la altura. Así que intenta cambiar la altura a 17.
rocoso
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.