我可以覆盖 ttf-mscorefonts-installer 安装的字体,而选择 Liberation 字体吗?

我可以覆盖 ttf-mscorefonts-installer 安装的字体,而选择 Liberation 字体吗?

我必须在 Ubuntu 12.04/12.10 上使用 apt-get install ttf-mscorefonts-installer。简而言之,我需要将 PDF 文件从需要这些字体来显示某些字形的应用程序中传输出来。

运行此命令后,问题是我的 Web 浏览器(和一些 Java 应用程序)中的字体现在变得“丑陋”。显然,这是一个主观意见,但我持有这种观点。

在大多数情况下,我希望恢复旧字体(Liberation、DejaVu、Ubuntu 等)。我不确定如何最好地描述这一点,但这里有一个例子:

Web浏览器中的CSS示例

font-family: Verdana,Arial,sans-serif;

没有 ttf-mscorefonts-installer(情况 1):

    $ fc-match Verdana
    LiberationSans-Regular.ttf: "Liberation Sans" "Regular"

    $ fc-match Arial
    LiberationSans-Regular.ttf: "Liberation Sans" "Regular"

    $ fc-match sans-serif
    LiberationSans-Regular.ttf: "Liberation Sans" "Regular"`

使用 ttf-mscorefonts-installer (案例 2):

    $ fc-match Verdana
    Verdana.ttf: "Verdana" "Normal"

    $ fc-match Arial
    Arial.ttf: "Arial" "Normal"

    $ fc-match sans-serif
    LiberationSans-Regular.ttf: "Liberation Sans" "Regular"`

我想要(案例 1)。或者,我想要(案例 2)中的字体在 IE 中看起来不那么“丑陋”。在我的网络浏览器中,它们比免费替代品更加参差不齐,不够流畅。

这可能吗?

答案1

fontconfig 采用了一套完整的字体替换系统。字体定义分为不同层次:字体名称和字体系列。给定一个特定的字体,fontconfig 将使用同名的字体(如果可用),否则寻找同名的字体系列如果仍然不匹配,则使用标准字体系列定义作为替代,即 Sans、Sans-serif 和 Mono。

Ubuntu 在“/etc/fonts/conf.d/45-latin.conf”中定义了字体系列“Verdana”,其中“Verdana”默认设置为“Sans-serif”,这意味着默认情况下,'Verdana' 采用 Sans-serif。但如果安装了 'Verdana.ttf',则会改用 'Verdana.ttf'。

在您的系统中,Sans-serif 系列中的首选字体是“Liberation Sans”,因此fontconfig 使用“Liberation Sans”替代“Verdana”如果没有同名的字体,而如果在搜索路径中则使用“Verdana.ttf”。这解释了您所发布的内容。

所以你的问题的解决方案是,你必须重新映射字体“Verdana”更改为其他字体,或者一组字体将“Liberation Sans”指定为最高优先级.(建议采用后一种情况)

打开或创建文件 ~/.config/fontconfig/fonts.conf,附加以下内容:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>

<match>
    <test name="family"><string>Verdana</string></test>
    <edit name="family" mode="prepend" binding="strong">
        <string>Liberation Sans</string>
        <string>Verdana</string>
    </edit>
</match>

</fontconfig>

请注意,~/.fonts.conf 现已弃用,如果您已经有用户定义的 fonts.conf,请删除页眉和页脚,只保留“匹配”部分。而且,在“Arial”上演示相同的解决方法会太冗长。我相信您可以自己找到它。

相关内容