Pourquoi la hauteur de police change-t-elle en gras?


9

C'est tellement ennuyeux...

Lorsqu'un texte sur une ligne a son visage changé pour que le texte soit en gras, la hauteur de la ligne augmente (je suppose) d'un seul pixel. Il est préférable de le montrer avec une image:

entrez la description de l'image ici

Pourquoi est-ce? Comment puis-je l'empêcher?


Comme demandé, infos sur la plateforme:

  • Sid Debian GNU / Linux (instable) sur amd64
  • Emacs utilise libgtk-3.so.0 (gtk 3.14.5), sur XFCE 4.12

J'ai essayé les polices suivantes à 8 pt, 9 pt, 10 pt et 11 pt:

  • DejaVu Sans Mono
  • DejaVu Sans
  • DejaVu Serif
  • Droid Sans Mono
  • Libération Mono

Le problème se produit uniquement avec DejaVu Sans Mono et DejaVu Sans, et uniquement à 9 pt et 10 pt. (L'image ci-dessus montre DejaVu Sans Mono-9.)


2
Vous devriez regarder les attributs de visage de defunexample avant de mettre un espace, puis à nouveau sur chaque mot après avoir mis un espace entre defun et example . Pour ce faire, placez le curseur au point souhaité, puis tapez C-u C-x =. Vous constaterez probablement que le visage affectant le défun ou l' exemple affectant le visage ont des attributs différents qui sont responsables du comportement que vous voyez - par exemple, autre que la couleur de base du premier plan. Les attributs de visage peuvent être personnalisés par l'utilisateur.
lawlist

Pourriez-vous ajouter votre système d'exploitation et votre gestionnaire de fenêtres à votre question, ainsi que des informations sur l'interface utilisateur que votre Emacs utilise (par exemple Gtk2, Gtk3, etc.)?
lunaryorn

@lawlist: merci mec. Avec l'espace, il a la police font-lock-function-name-face appliquée, qui a une hauteur non spécifiée (donc je suppose que la valeur par défaut?). Sans l'espace, aucun visage n'est appliqué (donc, encore une fois, je suppose que la valeur par défaut?) La valeur par défaut est définie dans mon thème sur :height 90(9 pt).
edam

@lawlist: un peu plus d'investigation .... dans le thème, si je supprime / ajoute / supprime / ajoute le :weight bolddepuis font-lock-function-name-face(et réexécute la custom-theme-set-facescommande du thème ), je peux voir la hauteur de la defunligne changer de 1px! C'est certainement l'attribut audacieux qui le cause, je pense.
edam

Je suppose, sur la base de vos commentaires, que la famille de polices que vous avez choisie a une hauteur différente pour les attributs en gras, de sorte qu'elle ne peut être modifiée que si vous la réduisez manuellement - essais et erreurs en réduisant lentement la taille des points. Vous pouvez également choisir une famille qui ne change pas de hauteur lorsque le gras est appliqué. Personnellement, je n'utilise plus de gras ou de soulignement dans aucun de mes thèmes personnalisés pour diverses raisons liées aux effets visuels dans le tampon - lorsque je crée un soulignement pour la ligne actuelle, cela se fait avec une superposition. Pour le gras, j'utilise simplement des couleurs fortes - par exemple, magenta, jaune, ...
lawlist

Réponses:


2

La hauteur de police change dans DejaVu à cette taille de point car les informations de hauteur de police entre les deux polices normale et en gras sont différentes alors qu'elles devraient être identiques.

La police DejaVu Sans Mono 10 que j'utilise ne change pas la hauteur de police entre le poids normal et gras. Je l'ai mis dans mon .emacs avec(set-frame-font "DejaVu Sans Mono-10")

Vous avez donc quelque chose à comparer, les informations pour la police "DejaVu Sans 10" via (font-info sur 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 ...) )))]

EDIT basé sur les informations suivantes:

Dans les informations de police ci-dessus, je montre une hauteur de police de 17 et vous signalez une hauteur de 15 (normal) ou 16 (gras). Dans emacs 25, il y a des informations de police supplémentaires après ces 3 0, en particulier la descente de police est 4.

Bien que je n'ai pas de problème sur Emacs 24 ou 25 avec DejaVu Sans Mono et la variante Bold, la chose la plus simple est d'utiliser une police et une taille qui ne changent pas la largeur (comme indiqué par font-info) entre normal et gras ou autre chose que DejaVu.

Quant à ce qui est à l'origine de cela, il pourrait s'agir de l'une de vos bibliothèques (mon gtk est libgtk-x11-2.0.so.0), mais je doute que ce soit cette bibliothèque particulière. Doutez également qu'il s'agit du fichier ou du package ttf. Le rendu freetype est plus probable (j'ai libfreetype.so.6). Étant donné que DejaVu est mis à l'échelle comme le sont les autres polices qui fonctionnent pour vous, une erreur de calcul chatouillée par la façon dont DejaVu a été écrite expliquerait pourquoi ces polices fonctionnent à certaines tailles mais pas à d'autres.

Pour vérifier si le problème est spécifique à Emacs ou non, vous pourrez peut-être afficher deux fenêtres de terminal, une avec une invite en gras et une sans et comparer l'espacement des lignes sur elles. Si c'est différent comme Emacs, cela a à voir avec le rendu et / ou la police.

Si vous avez compilé emacs, il se peut qu'il se passe quelque chose.


Cela n'a pas fonctionné ... (J'utilisais DejaVu Sans Mono-9BTW). Je mettrai à jour la description ci-dessus ...
edam

La police de la ligne de mode est la même. Mono 10 présente le même comportement, mais pas 8 et 11pr! Cela doit avoir quelque chose à voir avec le rendu de la police et une hauteur de ligne différente renvoyée pour normal et gras. Emacs utilise-t-il fontconfig?
edam

1
Emacs n'utilise pas fontconfig et est généralement plutôt unique en ce qui concerne la sélection des glyphes.
wasamasa

(font-info "DejaVu Sans Mono-10")me donne ["-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]. J'ai également fonts-dejavu-coreinstallé, et aussi ttf-dejavu-core. Ils fournissent tous les deux un DejaVuSansMono.ttf(dans des répertoires différents, mais ce sont des fichiers identiques, donc je ne vois pas que cela importe). Je reçois également Height: 98du visage (lors de l'utilisation de DajaVu Sans Mono-10, qui présente le problème ci-dessus). Je suis ouvert à d'autres suggestions! :)
edam

Notez que certains de vos paramètres d'informations sur les polices sont différents. J'ai "13 17 ..." tandis que vous avez "13 15 ..". Et si vous obtenez des informations sur les polices d'aide pour la fonction, vous verrez que la première différence 17 (moi) vs 15 (vous) est la hauteur. Alors essayez de changer la hauteur à 17
rocheux
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.