Warum ändert sich die Schrifthöhe, wenn sie fett gedruckt ist?

9

Es ist so nervig...

Wenn die Fläche eines Textes in einer Zeile so geändert wird, dass der Text fett ist, erhöht sich die Höhe der Zeile um (ich nehme an) ein einzelnes Pixel. Es wird am besten mit einem Bild gezeigt:

Geben Sie hier die Bildbeschreibung ein

Warum ist das? Wie verhindere ich das?


Wie gewünscht, Infos auf der Plattform:

  • Debian GNU / Linux sid (instabil) auf amd64
  • Emacs verwendet libgtk-3.so.0 (gtk 3.14.5) unter XFCE 4.12

Ich habe die folgenden Schriftarten bei 8pt, 9pt, 10pt und 11pt ausprobiert:

  • DejaVu Sans Mono
  • DejaVu Sans
  • DejaVu Serif
  • Droid Sans Mono
  • Befreiung Mono

Das Problem tritt nur bei DejaVu Sans Mono und DejaVu Sans auf und nur bei 9pt und 10pt. (Bild oben zeigt DejaVu Sans Mono-9.)

Edamer
quelle
2
Sie sollten sich die Gesichtsattribute von defunexample ansehen, bevor Sie ein Leerzeichen setzen, und dann jedes Wort erneut, nachdem Sie ein Leerzeichen zwischen defun und example gesetzt haben . Dazu platzieren Sie den Cursor an der gewünschten Stelle und geben dann ein C-u C-x =. Sie werden wahrscheinlich feststellen, dass entweder das Gesicht, das den Defun beeinflusst, oder das Gesicht, das das Beispiel beeinflusst , unterschiedliche Attribute haben, die für das Verhalten verantwortlich sind, das Sie sehen - z. B. nicht nur die Grundfarbe des Vordergrunds. Die Gesichtsattribute können vom Benutzer angepasst werden.
Lawlist
Könnten Sie Ihrer Frage Ihr Betriebssystem und Ihren Fenstermanager hinzufügen und einige Informationen darüber, welche Benutzeroberfläche Ihr Emacs verwendet (z. B. Gtk2, Gtk3 usw.)?
Mondhorn
@lawlist: danke Mann. Mit dem Leerzeichen wird die Schriftart-Funktionsfunktion Name-Gesicht angewendet, die eine nicht spezifizierte Höhe hat (also nehme ich die Standardeinstellung an?). Ohne das Leerzeichen wird kein Gesicht angewendet (also :height 90nehme ich wieder die Standardeinstellung an?). Die Standardeinstellung ist in meinem Thema auf (9pt) festgelegt.
Edam
@lawlist: weitere Nachforschungen .... Wenn ich im Thema das :weight boldvon entferne / hinzufüge / entferne / hinzufüge font-lock-function-name-face(und den custom-theme-set-facesBefehl des Themas erneut ausführe ), kann ich sehen, dass sich die Höhe der defunZeile um 1 Pixel ändert! Es ist definitiv das kühne Attribut, das es verursacht, denke ich.
Edam
Aufgrund Ihrer Kommentare würde ich davon ausgehen, dass die von Ihnen ausgewählte Schriftfamilie eine andere Höhe für fette Attribute hat, sodass sie nur geändert werden kann, wenn Sie sie manuell reduzieren - Versuch und Irrtum durch langsames Reduzieren der Punktgröße. Alternativ können Sie eine Familie auswählen, deren Höhe sich nicht ändert, wenn Fettdruck angewendet wird. Ich persönlich verwende aus verschiedenen Gründen, die sich auf visuelle Effekte im Puffer beziehen, in keinem meiner benutzerdefinierten Designs Fett oder Unterstreichung mehr. Wenn ich eine Unterstreichung für die aktuelle Zeile erstelle, erfolgt dies mit einer Überlagerung. Für Fettdruck verwende ich einfach kräftige Farben - z. B. Magenta, Gelb, ...
Lawlist

Antworten:

2

Die Schrifthöhe ändert sich in DejaVu an dieser Punktgröße, da die Informationen zur Schrifthöhe zwischen den beiden normalen und der fett gedruckten Schrift unterschiedlich sind, wenn sie gleich sein sollten.

Die von mir verwendete DejaVu Sans Mono 10-Schriftart ändert die Schrifthöhe nicht zwischen normalem und fettem Gewicht. Ich habe das in meinen .emacs mit eingestellt(set-frame-font "DejaVu Sans Mono-10")

Sie haben also etwas zu vergleichen, die Informationen für die Schriftart "DejaVu Sans 10" über (Schriftinfo zu 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 ...) )))]

BEARBEITEN basierend auf nachfolgenden Informationen:

In den obigen Schriftinformationen zeige ich eine Schrifthöhe von 17 und Sie geben eine Höhe von 15 (normal) oder 16 (fett) an. In Emacs 25 gibt es nach diesen 3 Nullen zusätzliche Schriftinformationen, insbesondere ist der Schriftabstieg 4.

Obwohl ich mit DejaVu Sans Mono und der Bold-Variante kein Problem mit Emacs 24 oder 25 habe, ist es am einfachsten, eine Schriftart und -größe zu verwenden, bei der die Breite (wie in den Schriftinformationen angegeben) nicht zwischen normal und fett geändert wird oder etwas anderes als DejaVu.

Was dies verursacht, könnte eine Ihrer Bibliotheken sein (mein GTK ist libgtk-x11-2.0.so.0), aber ich bezweifle, dass es sich um diese bestimmte Bibliothek handelt. Zweifle auch daran, dass es sich um die ttf-Datei oder das Paket handelt. Wahrscheinlicher ist das Freetype-Rendering (ich habe libfreetype.so.6). Da DejaVu wie die anderen Schriftarten, die für Sie funktionieren, skaliert sind, würde ein Rechenfehler, der durch die Art und Weise, wie DejaVu geschrieben wurde, gekitzelt wird, erklären, warum diese bei einigen Größen funktionieren, bei anderen jedoch nicht.

Um zu überprüfen, ob das Problem Emacs-spezifisch ist oder nicht, können Sie möglicherweise zwei Terminalfenster aufrufen, eines mit einer fettgedruckten und eines ohne, und den Zeilenabstand vergleichen. Wenn es anders ist als Emacs, hat dies mit dem Rendern und / oder der Schriftart zu tun.

Wenn Sie Emacs kompiliert haben, ist dort möglicherweise etwas los.

felsig
quelle
Das hat nicht funktioniert ... (Ich habe DejaVu Sans Mono-9BTW verwendet). Ich werde die Beschreibung oben aktualisieren ...
Edam
Die Schriftart der Moduszeile ist dieselbe. Mono 10 zeigt das gleiche Verhalten, 8 und 11pr jedoch nicht! Es muss etwas mit dem Rendern von Schriftarten und einer anderen Zeilenhöhe zu tun haben, die für normal und fett zurückgegeben wird. Verwendet Emacs fontconfig?
Edam
1
Emacs verwendet keine fontconfig und ist im Allgemeinen ziemlich einzigartig, wenn es um die Auswahl von Glyphen geht.
Wasamasa
(font-info "DejaVu Sans Mono-10")gibt mir ["-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]. Ich habe auch fonts-dejavu-coreinstalliert, und auch ttf-dejavu-core. Sie bieten beide ein DejaVuSansMono.ttf(in verschiedenen Verzeichnissen, aber sie sind identische Dateien, daher sehe ich nicht, dass dies wichtig ist). Ich bekomme auch Height: 98vom Gesicht (bei Verwendung von DajaVu Sans Mono-10, das das oben genannte Problem aufweist). Ich bin offen für weitere Vorschläge! :)
Edam
Beachten Sie, dass einige Ihrer Parameter für Schriftinformationen unterschiedlich sind. Ich habe "13 17 ...", während Sie "13 15 .." haben. Und wenn Sie Hilfe-für-Funktion-Schriftinformationen erhalten, werden Sie sehen, dass der erste Unterschied 17 (ich) gegenüber 15 (Sie) die Höhe ist. Versuchen Sie also, die Höhe auf 17 zu ändern.
Rocky