Perché l'altezza del carattere cambia in grassetto?


9

È così noioso...

Quando un testo su una linea ha la faccia modificata in modo che il testo sia in grassetto, l'altezza della linea aumenta di (presumo) un singolo pixel. È meglio mostrato con un'immagine:

inserisci qui la descrizione dell'immagine

Perchè è questo? Come lo prevengo?


Come richiesto, informazioni sulla piattaforma:

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

Ho provato i seguenti caratteri a 8pt, 9pt, 10pt e 11pt:

  • DejaVu Sans Mono
  • DejaVu Sans
  • DejaVu Serif
  • Droid Sans Mono
  • Liberation Mono

Il problema si verifica solo con DejaVu Sans Mono e DejaVu Sans e solo a 9pt e 10pt. (L'immagine sopra mostra DejaVu Sans Mono-9.)


2
Dovresti guardare gli attributi facciali di defunexample prima di mettere uno spazio e poi di nuovo su ogni parola dopo aver inserito uno spazio tra defun ed esempio . Questo viene fatto posizionando il cursore nel punto desiderato e digitando C-u C-x =. Probabilmente scoprirai che o la faccia che influenza defun o la faccia che influenza l' esempio hanno attributi diversi che sono responsabili del comportamento che vedi - ad esempio, diverso dal solo colore di base del primo piano. Gli attributi del viso possono essere personalizzati dall'utente.
elenco delle leggi del

Potresti aggiungere il tuo sistema operativo e il gestore delle finestre alla tua domanda e alcune informazioni su quale interfaccia grafica viene utilizzata da Emacs (ad es. Gtk2, Gtk3, ecc.)?
lunaryorn,

@lawlist: grazie amico. Con lo spazio, ha applicato font-lock-function-name-face, che ha un'altezza non specificata (quindi presumo il valore predefinito?). Senza lo spazio, non viene applicato alcun volto (quindi, presumo ancora il valore predefinito?) Il valore predefinito è impostato nel mio tema su :height 90(9pt).
edam,

@lawlist: qualche altra indagine .... nel tema, se rimuovo / aggiungi / rimuovo / aggiungo il :weight boldda font-lock-function-name-face(ed eseguo nuovamente il custom-theme-set-facescomando del tema ), posso vedere l'altezza della defunlinea cambiare di 1px! È sicuramente l'attributo audace che lo sta causando, penso.
edam,

La mia ipotesi sulla base dei tuoi commenti sarebbe che la famiglia di caratteri che hai scelto ha un'altezza diversa per gli attributi in grassetto, quindi non può essere modificata se non la riduci manualmente - tentativi ed errori riducendo lentamente la dimensione dei punti. In alternativa, scegli una famiglia che non cambia altezza quando viene applicato il grassetto. Personalmente non uso più il grassetto o la sottolineatura in nessuno dei miei temi personalizzati per una serie di motivi relativi agli effetti visivi nel buffer: quando creo una sottolineatura per la riga corrente, viene eseguita con una sovrapposizione. Per audace, uso semplicemente colori forti - ad es. Magenta, giallo, ...
elenco delle leggi

Risposte:


2

L'altezza del carattere cambia in DejaVu a quella dimensione del punto perché le informazioni sull'altezza del carattere tra i due caratteri normale e grassetto sono diverse quando dovrebbero essere le stesse.

Il carattere DejaVu Sans Mono 10 che uso non cambia l'altezza del carattere tra peso normale e grassetto. L'ho impostato nel mio .emacs con(set-frame-font "DejaVu Sans Mono-10")

Quindi hai qualcosa a cui confrontare, le informazioni per il font "DejaVu Sans 10" via (font-info su 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 basato sulle informazioni successive:

Nelle informazioni sul carattere sopra, mostro un'altezza del carattere di 17 e si segnala un'altezza di 15 (normale) o 16 (grassetto). In emacs 25 ci sono ulteriori informazioni sui caratteri dopo quei 3 0, in particolare la discesa dei caratteri è 4.

Anche se non ho problemi con Emacs 24 o 25 con DejaVu Sans Mono e la variante Bold, la cosa più semplice è usare un carattere e una dimensione che non cambiano la larghezza (come mostrato da font-info) tra normale e grassetto o qualcosa di diverso da DejaVu.

Per quanto riguarda ciò che sta causando questo, potrebbe essere una delle tue librerie (il mio GTK è libgtk-x11-2.0.so.0), ma dubito che sarebbe questa libreria particolare. Inoltre dubita che sia il file o il pacchetto ttf. Più probabilmente è il rendering freetype (ho libfreetype.so.6). Poiché DejaVu è ridimensionato come gli altri caratteri che funzionano per te, un errore di calcolo solleticato dal modo in cui è stato scritto DejaVu spiegherebbe perché funzionano in alcune dimensioni ma non in altre.

Per verificare se il problema è specifico di Emacs o meno, potresti essere in grado di far apparire due finestre di terminale, una con un prompt in grassetto e una senza e confrontare la spaziatura tra di esse. Se è diverso come Emacs, ciò ha a che fare con il rendering e / o il carattere.

Se hai compilato emacs potrebbe esserci qualcosa che sta succedendo lì.


Questo non ha funzionato ... (Stavo usando DejaVu Sans Mono-9BTW). Aggiornerò la descrizione sopra ...
edam

Il carattere della linea di modalità è lo stesso. Mono 10 mostra lo stesso comportamento, ma 8 e 11pr no! Deve avere qualcosa a che fare con il rendering del carattere e la restituzione di un'altezza della linea diversa per normale e grassetto. Emacs utilizza fontconfig?
edam,

1
Emacs non utilizza fontconfig ed è generalmente piuttosto unico quando si tratta di selezione dei glifi.
wasamasa,

(font-info "DejaVu Sans Mono-10")mi dà ["-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]. Ho anche fonts-dejavu-coreinstallato, e anche ttf-dejavu-core. Entrambi forniscono un DejaVuSansMono.ttf(in directory diverse, ma sono file identici, quindi non vedo che questo sia importante). Mi viene anche Height: 98dalla faccia (quando uso DajaVu Sans Mono-10, che presenta il problema sopra). Sono aperto a qualsiasi altro suggerimento! :)
edam,

Si noti che alcuni dei parametri delle informazioni sui caratteri sono diversi. Ho "13 17 ..." mentre tu hai "13 15 ..". E se ricevi informazioni sui caratteri help-for-function, vedrai che la prima differenza tra 17 (me) e 15 (tu) è l'altezza. Quindi prova a cambiare l'altezza in 17.
roccioso
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.