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.

Anuncios