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

mba*_*off 10 fonts

我有一个等宽字体 ( 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)。仍然需要对 emboldening 进行微调(通过配置文件或freetype2补丁。

在此处输入图片说明

zet*_*tah 9

mbaitoff,我将此发布为您更新的补充,而不是作为答案

如果用户创建名为 的文件~/.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>
Run Code Online (Sandbox Code Playgroud)

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

这只是另一种选择,方法略有不同,结果不同