如何防止“自动”粗体字体比具有相同 pt 大小的常规字体更宽?

如何防止“自动”粗体字体比具有相同 pt 大小的常规字体更宽?

我有一种等宽字体 ( PT Mono),我更喜欢在编程 IDE 中使用。该字体只有Regular,其他所有BoldItalic都是通过倾斜和“加粗” 得到的Regular。问题是“加粗”字符比普通字符更宽,因此 IDE 窗口中的源代码字符串现在由非等宽字符组成。

我如何控制字体的“粗体”以使其不会变得比常规字体更宽?

下面的屏幕截图说明了这个问题(PT Mono,没有专用粗体)。看看“unsigned char”和“sizeof”字是如何从其正确位置移出的。

自动加粗改变宽度

这是另一个例子,Droid Sans Mono(没有专门的粗体)。 在此处输入图片描述

下面是字体有专用粗体版本( )的示例Liberation Mono。粗体和常规体完美对齐。 在此处输入图片描述

所以,问题肯定是在没有提供粗体的情况下,粗体渲染不当。字体引擎是罪魁祸首。

UPD:有一个文件/etc/fonts/conf.avail/90-synthetic.conf,如果从中引用,则会/etc/fonts/conf.d/调整字体引擎以对没有粗体版本的字体执行合成加粗。如果从中删除指向此文件的符号链接,则/etc/fonts/conf.d/加粗将消失。这不是真正想要的,但至少这解决了等宽字体不是等宽字体的情况(见下文PT Mono)。仍然需要对加粗进行微调(通过配置文件或freetype2补丁)。

在此处输入图片描述

答案1

姆拜托夫,我发布此内容作为您更新的补充,而不是答案

如果用户创建名为的文件~/.fonts.conf

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <match target="font">
        <test name="spacing" compare="eq">
            <const>mono</const>
        </test>
        <edit name="embolden" mode="assign">
            <bool>false</bool>
        </edit>
    </match>
</fontconfig>

然后,应用程序可以使用粗体等宽字体(如果可用),并且如果使用的字体没有粗体字体,则禁用“合成粗体”。

这只是替代方案,方法略有不同,结果也不同

相关内容