Archivos para las entradas con etiqueta: fontconfig

Desde hace un tiempo atrás que estoy usando la fuente Inconsolata para visualizar los códigos fuentes de mis programas y scripts. Es una fuente muy bien lograda y hace que el texto sea agradable de leer, pero tiene el problema de no venir con las negritas. Por suerte, Ubuntu las crea “sintéticamente” mediante la biblioteca Fontconfig (Ver archivo /etc/fonts/conf.d/90-synthetic.conf, donde se activa la propiedad “embolden“), pero el resultado es que las fuentes negritas quedan más anchas que la fuente normal, haciendo que se pierda la característica monoespaciada que tiene esta fuente.

Después de varios fines de semana tratando de corregir esto mediante las configuraciones de Fontconfig (en /etc/fonts/conf-avail), por fin hoy pude dar con el código XML que me arregla este problema. La solución se basa en usar una matriz para aplicar una transformación fina a la fuente, pero restringiéndose sólo a la fuente en negrita. El siguiente listado se debe agregar en ~/.fonts.conf o como un archivo dentro de /etc/fonts/conf.d.

<match target="font">
    <test name="family" qual="any"><string>Inconsolata</string></test>
    <test target="pattern" name="weight" compare="more"><const>medium</const></test>
    <edit name="matrix" mode="assign">
        <times>
            <name>matrix</name>
            <matrix><double>0.951</double><double>0</double>
                <double>0</double><double>1</double>
            </matrix>
        </times>
    </edit>
</match>

El valor destacado en negritas en el listado anterior lo obtuve empíricamente, por lo que pueden modificarlo en caso que no consigan el efecto deseado en otros sistemas.

También yo desactivo el hinting para algunas fuentes y lo recomendaría para la fuente Inconsolata. Se hace así:

<match target="font">
    <test name="family" qual="any"><string>Inconsolata</string></test>
    <edit name="hinting" mode="assign"><bool>false</bool></edit>
</match>

Bonus: La fuente Droid Sans Mono, disponible también en Ubuntu, sufre este mismo problema, pero se puede corregir con el siguiente código XML:

<match target="font">
    <test name="family" qual="any"><string>Droid Sans Mono</string></test>
    <test target="pattern" name="weight" compare="more"><const>medium</const></test>
    <edit name="matrix" mode="assign">
        <times>
            <name>matrix</name>
            <matrix><double>0.9679</double><double>0</double>
                <double>0</double><double>1</double>
            </matrix>
        </times>
    </edit>
</match>

Nuevamente, el valor 0.9679 es puramente empírico.

Debo reconocer que soy un fan de las tipografías simples ya que me gusta que las aplicaciones se lean fácilmente. Con Ubuntu me he encontrado con bastantes fuentes que cumplen mis requerimientos y la que más me gusta de ellas es la FreeSans (perteneciente al paquete ttf-freefont), la cual es bastante similar a la fuente comercial Helvetica.

El problema es que como Ubuntu no viene con fuentes libres para la web que sean compatibles con las de Microsoft, uno se ve en la necesidad de instalar el paquete ttf-mscorefonts-installer, el cual descarga e instala las típicas fuentes de Windows como Arial, Times New Roman y Courier New. Esto hace que la mayoría de los sitios de Internet se vean de mejor forma, pero el renderizado que tienen estas fuentes no es de mi gusto, así que me decidí reemplazar Arial por mi querida FreeSans.

El reemplazo se tiene que hacer vía fontconfig usando el archivo XML llamado ~/.fonts.conf, ubicado en el directorio /home del usuario actual. En él tenemos que agregar los siguientes tags <match> marcados en negrita:

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
    <!-- remplazar Arial con FreeSans -->
    <match target="pattern" name="family">
        <test name="family" qual="any">
            <string>Arial</string>
        </test>
        <edit binding="strong" mode="prepend" name="family">
            <string>FreeSans</string>
        </edit>
    </match>
    <match target="font">
        <test name="family" qual="any">
            <string>Arial</string>
        </test>
        <edit mode="assign" name="family">
            <string>FreeSans</string>
        </edit>
    </match>
</fontconfig>

El cambio es casi inmediato en el sistema al guardar el archivo, pero puede ser necesario reiniciar Firefox para ver los cambios en las páginas.

Como bonus se puede hacer que el sistema reemplace la fuente Helvetica (que probablemente no exista en nuestro sistema Ubuntu) con FreeSans. En este caso se utiliza un bloque XML similar al anterior.

    <!-- remplazar Helvetica con FreeSans -->
    <match target="pattern" name="family">
        <test name="family" qual="any">
            <string>Helvetica</string>
        </test>
        <edit binding="strong" mode="prepend" name="family">
            <string>FreeSans</string>
        </edit>
    </match>
    <match target="font">
        <test name="family" qual="any">
            <string>Helvetica</string>
        </test>
        <edit mode="assign" name="family">
            <string>FreeSans</string>
        </edit>
    </match>

Ahora los sitios de Google, que usan por defecto la fuente Arial, se ven mejor con FreeSans.