Migliorare l'aspetto dei font: differenze tra le versioni

m
Riga 12: Riga 12:


= Fontconfig =
= Fontconfig =
Tra le varie funzioni di ''Fontconfig'' c'è anche quella di indicare a ''FreeType'' come disegnare i caratteri. Ad esempio può essere configurato per usare l'antialiasing su tutti i font tranne che su quelli di lingue orientali, oppure può disabilitare l'hinting su un determinato font quando questo è di dimensioni inferiori a 8 punti.
''Fontconfig'' è la libreria responsabile di fornire l'elenco dei caratteri disponibili nel sistema alle applicazioni e tra le varie funzioni c'è anche quella di indicare a ''FreeType'' come disegnare i caratteri. Ha un linguaggio di configurazione in XML che permette un'elevata personalizzazione, ma che ne limita la semplicità d'uso. Ad esempio può essere configurato per usare l'antialiasing su tutti i font tranne che su quelli di lingue orientali, oppure può disabilitare l'hinting su uno specifico font quando questo è di dimensioni inferiori a 8 punti.


La configurazione di ''Fontconfig'' si trova in <code>/etc/fonts/conf.d/</code> ed è composta da tanti file, ognuno con una sua funzione specifica, intuibile dal nome stesso del file. In realtà tutti i file di configurazione si trovano in <code>/usr/share/fontconfig/conf.avail/</code> e vengono creati (o rimossi) dei link simbolici in <code>/etc/fonts/conf.d/</code> in base alla caratteristica che si vuole abilitare (o disabilitare).<br>
La configurazione predefinita di ''Fontconfig'' si trova in <code>/etc/fonts/conf.d/</code> ed è composta da tanti file, ognuno con una sua funzione specifica, intuibile dal nome stesso del file. In realtà tutti i file di configurazione si trovano in <code>/usr/share/fontconfig/conf.avail/</code> e vengono creati (o rimossi) dei link simbolici in <code>/etc/fonts/conf.d/</code> in base alla caratteristica che si vuole abilitare (o disabilitare).<br>
Ad esempio se si esegue
Ad esempio se si esegue
<pre># dpkg-reconfigure fontconfig-config</pre>
<pre># dpkg-reconfigure fontconfig-config</pre>
in base alle risposte date nella procedura guidata verranno creati dei link in <code>conf.d/</code><br>
in base alle risposte date nella procedura guidata verranno creati o rimossi dei link in <code>conf.d/</code><br>
Però si sconsiglia di cambiare la configurazione in questo modo perché in <code>conf.avail/</code> non sono presenti tutte le opzioni che è possibile usare per migliorare l'aspetto del font (per esempio, grossa mancanza, non c'è un file per attivare l'antialiasing). Invece di creare i file mancanti in <code>conf.avail/</code> per poi linkarli in <code>conf.d/</code> diventa molto più pratico ricorrere ad un altro metodo, illustrato di seguito.
Però si sconsiglia di cambiare la configurazione in questo modo perché in <code>conf.avail/</code> non sono presenti tutte le opzioni che è possibile impostare con ''Fontconfig'' per migliorare l'aspetto del font. Invece di creare dei file con le configurazioni mancanti in <code>conf.d/</code> diventa molto più pratico ricorrere ad un altro metodo, illustrato di seguito.


Dopo aver letto la configurazione in <code>conf.d/</code>, ''Fontconfig'' cerca altre configurazioni nel file <code>/etc/fonts/local.conf</code> e poi in <code>~/.config/fontconfig/fonts.conf</code>. Entrambi i file servono proprio per personalizzare ''Fontconfig'' e non esistono inizialmente, a meno che non vengano creati dall'utente o da qualche software. Le impostazioni contenute in <code>/etc/fonts/local.conf</code> sono applicate a tutti gli utenti del sistema, mentre quelle in <code>~/.config/fontconfig/fonts.conf</code> risiedono nella home dell'utente e sono applicate solo a quel singolo utente. La sintassi dei due file è identica (come quella dei file in <code>conf.d/</code>) e possono convivere insieme.<br>
Dopo aver letto le configurazioni in <code>conf.d/</code>, ''Fontconfig'' ne cerca delle altre nel file <code>/etc/fonts/local.conf</code> e poi in <code>~/.config/fontconfig/fonts.conf</code>. Entrambi i file non esistono inizialmente, e sono creati dall'utente o da qualche applicazione. Le impostazioni contenute in <code>/etc/fonts/local.conf</code> sono applicate a tutti gli utenti del sistema, mentre quelle in <code>~/.config/fontconfig/fonts.conf</code> risiedono nella home dell'utente e sono applicate solo a quell'utente. La sintassi dei due file è identica (come quella dei file in <code>conf.d/</code>) e possono convivere insieme.<br>
In caso un'opzione fosse presente in più file di configurazione, ''Fontconfig'' dovrebbe usare quest'ordine di lettura, dove la priorità spetta all'ultima configurazione letta:
In caso un'opzione fosse presente in più file di configurazione, ''Fontconfig'' dovrebbe usare quest'ordine di lettura, dove la priorità spetta all'ultima configurazione letta:
# <code>/etc/fonts/conf.d/</code>
# <code>/etc/fonts/conf.d/</code>
Riga 26: Riga 26:
# <code>~/.config/fontconfig/fonts.conf</code>
# <code>~/.config/fontconfig/fonts.conf</code>
# impostazioni font degli ambienti desktop (che usano ''Xft'')
# impostazioni font degli ambienti desktop (che usano ''Xft'')
A seconda di come sono impostati i parametri all'interno delle configurazioni, ciò potrebbe rendere nulla la priorità dell'ordine di lettura. Per esempio usando <code>mode="assign"</code> per impostare un valore, questo rimarrà tale anche se ne verrà impostato uno diverso successivamente (ma alcune applicazioni potrebbero anche usare l'ultimo valore letto a prescindere[http://bugs.freedesktop.org/show_bug.cgi?id=17722 *]; per informazioni <code>man fonts-conf</code>).
A seconda di come sono impostati i parametri all'interno delle configurazioni, ciò potrebbe rendere nulla la priorità. Per esempio usando <code>mode="assign"</code> per impostare un valore, questo rimarrà tale anche se ne verrà impostato uno diverso successivamente; per informazioni [http://www.freedesktop.org/software/fontconfig/fontconfig-user.html <code>man fonts-conf</code>].


Ecco il modello di configurazione da usare nel file <code>/etc/fonts/local.conf</code>:
Ecco la configurazione suggerita da usare nel file <code>/etc/fonts/local.conf</code>:
<pre>
<pre>
<?xml version='1.0'?>
<?xml version='1.0'?>
Riga 143: Riga 143:
</fontconfig>
</fontconfig>
</pre>
</pre>
Se si usa il modello sopra per creare <code>~/.config/fontconfig/fonts.conf</code> bisogna sostituire tutti i <code>mode="append"</code> presenti con <code>mode="assign"</code> (quasi indispensabile per far convivere entrambe le configurazioni senza problemi di priorità).
Se si usa il modello sopra per creare <code>~/.config/fontconfig/fonts.conf</code> bisognerebbe sostituire tutti i <code>mode="append"</code> presenti con <code>mode="assign"</code> per far convivere configurazioni di sistema e dell'utente senza problemi di priorità.
Per creare il file basta usare il proprio editor preferito (es. ''nano''). Per la configurazione di sistema:
Per creare il file basta usare il proprio editor preferito (es. ''nano''). Per la configurazione di sistema:
<pre># nano /etc/fonts/local.conf</pre>
<pre># nano /etc/fonts/local.conf</pre>
Riga 149: Riga 149:
<pre>$ nano ~/.config/fontconfig/fonts.conf</pre>
<pre>$ nano ~/.config/fontconfig/fonts.conf</pre>
poi incollare il modello sopra, eventualmente modificarlo e salvare il file.<br>
poi incollare il modello sopra, eventualmente modificarlo e salvare il file.<br>
Dopo rigeneriamo la cache dei font con:
Dopo rigeneriamo le cache dei font (di sistema e dell'utente) con:
<pre># fc-cache -fv
<pre># fc-cache -fv
$ fc-cache -fv</pre>
$ fc-cache -fv</pre>
e infine riavviamo X facendo logout e login (oppure riavviando tutto il sistema) per abilitare il nuovo aspetto dei caratteri.
e infine riavviamo X facendo logout e login (o riavviando il sistema) per abilitare il nuovo aspetto dei caratteri.


La configurazione sopra riportata è una configurazione "standard" che cerca di fornire il miglior risultato possibile sulla maggior parte dei sistemi. Però ci sono tanti fattori da considerare se i font elaborati con questa configurazione non sono ancora soddisfacenti. Potrebbe essere ad esempio per via del monitor che usa uno schema [http://www.lagom.nl/lcd-test/subpixel.php subpixel BGR] (ma sono rari), differente dal comune RGB sul quale si basano le impostazioni predefinite; a volte è invece solo una questione di gusto personale.
La configurazione sopra riportata è uno "standard" che cerca di fornire il miglior risultato possibile sulla maggior parte dei sistemi. Però ci sono tanti fattori da considerare se l'aspetto dei font con questa configurazione non è ancora soddisfacente. Potrebbe essere ad esempio per via del monitor che usa uno schema [http://www.lagom.nl/lcd-test/subpixel.php subpixel BGR] (casi rari), differente dal comune RGB sul quale si basano le impostazioni predefinite; a volte è invece solo una questione di gusto personale.


Spesso i font hanno istruzioni di hinting codificate al loro interno e mentre alcuni possono dare un buon risultato con l'hinting "Slight", altri appariranno meglio con hinting "None", oppure con quello "Full". In ogni caso basta modificare i parametri nei file <code>.conf</code> aiutandosi con i commenti inclusi nel codice o con la documentazione (online e offline) per ottenere il risultato su schermo migliore per i vostri occhi.
Spesso i font hanno istruzioni di hinting codificate al loro interno e mentre alcuni possono dare un buon risultato con l'hinting "Slight", altri appariranno meglio con hinting "None", oppure con "Full" o abilitando "autohint". In ogni caso basta modificare i parametri nei file <code>.conf</code> aiutandosi con i commenti inclusi nel codice o con la documentazione (online e offline) per ottenere il risultato su schermo migliore per i vostri occhi.<br>
Meglio ancora, si possono specificare delle impostazioni specifiche per un determinato font, se questo appare meglio con impostazioni diverse da quelle generali. Nell'esempio seguente, vengono specificati alcuni parametri per il carattere Oxygen-Sans:
<pre>
  <match target="font">
    <test name="force_autohint">
      <bool>false</bool>
    </test>
    <test name="family">
      <string>Oxygen-Sans</string>
    </test>
    <edit name="antialias" mode="assign">
      <bool>true</bool>
    </edit>
    <edit name="hinting" mode="assign">
      <bool>true</bool>
    </edit>
    <edit name="hintstyle" mode="assign">
      <const>hintfull</const>
    </edit>
    <edit name="autohint" mode="assign">
      <bool>false</bool>
    </edit>
  </match>
</pre>


C'è da considerare anche che l'ambiente desktop in uso può cambiare questi parametri, modificando direttamente il file <code>~/.config/fontconfig/fonts.conf</code> (KDE) o passando direttamente a ''Xft'' i propri valori di hinting con una priorità maggiore (GNOME, Xfce, LXDE).
C'è da considerare anche che l'ambiente desktop in uso può cambiare questi parametri, modificando direttamente il file <code>~/.config/fontconfig/fonts.conf</code> (KDE) o passando direttamente a ''Xft'' i propri valori di hinting con una priorità maggiore (GNOME, Xfce, LXDE).
*In ''GNOME 3'' le impostazioni predefinite sono "Hinting: Full" e "Antialiasing: Greyscale" (Greyscale utilizza l'autohint al posto del subpixel hinting). Dato che GNOME sovrascrive le impostazioni di sistema con le sue, è meglio installare il pacchetto ''gnome-tweak-tool'', lanciare l'omonima utility e cambiare questi valori con quelli già usati nei vostri <code>/etc/fonts/local.conf</code> e/o <code>~/.config/fontconfig/fonts.conf</code>.<br>
*In ''GNOME 3'' le impostazioni predefinite sono "Hinting: Full" e "Antialiasing: Greyscale" (Greyscale utilizza l'autohint al posto del subpixel hinting). Dato che GNOME sovrascrive le impostazioni di sistema con le sue, è meglio installare il pacchetto ''gnome-tweak-tool'', lanciare l'omonima utility e cambiare questi valori con quelli già usati nei vostri <code>/etc/fonts/local.conf</code> e/o <code>~/.config/fontconfig/fonts.conf</code>.<br>
*In ''Xfce'' e ''LXDE'' non ci dovrebbero essere conflitti con la configurazione di Fontconfig se l'utente non modifica le impostazioni dell'ambiente desktop, altrimenti vale lo stesso discorso di ''GNOME 3'' (eccetto che questi ambienti già forniscono il pannello di configurazione dei font).<br>
*In ''Xfce'' e ''LXDE'' non ci dovrebbero essere conflitti con la configurazione di Fontconfig se l'utente non modifica le impostazioni dell'ambiente desktop, altrimenti vale lo stesso discorso di ''GNOME 3'' (eccetto che questi ambienti già forniscono il pannello di configurazione dei font).<br>
*''KDE'' invece utilizza solo Fontconfig, precisamente memorizza le opzioni dell'utente in <code>~/.config/fontconfig/fonts.conf</code>. In realtà anche KDE imposta i valori Xft ma gli servono solo per la compatibilità con alcune applicazioni (tipo quelle in GTK). [http://bugs.kde.org/show_bug.cgi?id=245664 Un bug] di KDE imposta sempre e comunque dei parametri di hinting predefiniti in <code>~/.config/fontconfig/fonts.conf</code> anche se l'utente sceglie di mantenere quelli di sistema; quindi l'unica soluzione al momento è impostare i parametri così come in GNOME3.
*''KDE'' invece utilizza solo Fontconfig, precisamente memorizza le opzioni dell'utente in <code>~/.config/fontconfig/fonts.conf</code>. In realtà anche KDE imposta i valori Xft ma gli servono solo per la compatibilità con alcune applicazioni (tipo quelle in GTK). Un [http://bugs.kde.org/show_bug.cgi?id=245664 bug] di KDE4 (non presente in KDE5) imposta sempre e comunque dei parametri di hinting predefiniti in <code>~/.config/fontconfig/fonts.conf</code> anche se l'utente sceglie di mantenere quelli di sistema; quindi l'unica soluzione al momento è impostare i parametri così come in GNOME3.


Alla fine del tuning potrete testare la vostra configurazione corrente [http://www.infinality.net/files/font.html in questa pagina].
Alla fine del tuning potrete testare la vostra configurazione corrente [http://www.infinality.net/files/font.html in questa pagina].
317

contributi