在 Windows 看习惯 MacType 渲染之后的字体之后再看 Linux 下的字体总感觉细得发虚,很不习惯。字体的 Semibold 样式看着粗细正好,就想把它设为默认的粗细。搜了搜在 openSUSE 论坛 看到了一个同样需求的人,可是他也没找到解决办法,下面还有人回复说:“Linux 的默认字体都是为 4k 显示器准备的。拥有 4k 显示器你才配使用它。

  这真是个悲伤的故事……

  后来自己慢慢摸索到一个勉强能用的办法,就是在 fontconfig scan 的时候,把 Semibold 的字体的 fullname style weight 都换成 Regular 的,再把 Regular 的换成 Light 的,Light 的 的再换成 EXLight 的或者直接删掉。这样一般的程序默认的字重就是 Semibold 了。

获取字体文件 fullnameweight

1
2
3
4
5
❯ fc-query --format="%{fullname} %{weight}\\n" /usr/local/share/fonts/s/sarasa_term_sc_nerd_regular.ttf
Sarasa Term SC Nerd Regular,终端更纱黑体-简 Nerd Regular 80

❯ fc-query --format="%{fullname} %{weight}\\n" /usr/local/share/fonts/s/sarasa_term_sc_nerd_semibold.ttf
Sarasa Term SC Nerd Semibold,终端更纱黑体-简 Nerd Semibold 180

fontconfig 配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
<match target="scan">
<test name="fullname"><string>Sarasa Term SC Nerd Regular</string></test>
<edit name="fullname"><string>Sarasa Term SC Nerd Light</string></edit>
<edit name="style"><string>Light</string></edit>
<edit name="weight"><int>50</int></edit>
</match>

<match target="scan">
<test name="fullname"><string>Sarasa Term SC Nerd Semibold</string></test>
<edit name="fullname"><string>Sarasa Term SC Nerd Regular</string></edit>
<edit name="style"><string>Regular</string></edit>
<edit name="weight"><int>80</int></edit>
</match>

  改完 fc-cache -f 就可以了,但 Telegram 不吃系统的 fontconfig,主要就是他的字体不好看,那就只能改用 telegram-desktop-userfonts 了。

  Chromium 系及 Electron 的应用还是会默认使用 Regular ,这点在这个回答中找到了解决办法。

1
2
3
4
<match target="pattern">
<test compare="eq" name="family"><string>Sarasa Term SC Nerd</string></test>
<edit mode="prepend" name="style"><string>Semibold</string></edit>
</match>

  但是自带字体的网页或 Electron 应用就没办法了,只能继续用 fontconfig 改字重/替换字体或是直接修改 CSS。比如 Discord 就可以用 BeautifulDiscord 修改 CSS。

discord-custom.css
1
2
3
4
5
6
:root:lang(zh-CN) {
--font-primary: "Sarasa UI SC", "Noto Color Emoji", sans-serif !important;
--font-display: "Sarasa UI SC", "Noto Color Emoji", sans-serif !important;
--font-headline: "Sarasa UI SC", "Noto Color Emoji" sans-serif !important;
--font-code: "Sarasa Term SC Nerd", "Noto Color Emoji", monospace !important;
}

下面是我的配置,用的是 Sarasa UI SCSarasa Term SC Nerd

~/.config/fontconfig/conf.d/20-replace-regular.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>

<match target="scan">
<test name="fullname"><string>Sarasa Term SC Nerd Regular</string></test>
<edit name="fullname"><string>Sarasa Term SC Nerd Light</string></edit>
<edit name="style"><string>Light</string></edit>
<edit name="weight"><int>50</int></edit>
</match>
<match target="scan">
<test name="fullname"><string>Sarasa Term SC Nerd Semibold</string></test>
<edit name="fullname"><string>Sarasa Term SC Nerd Regular</string></edit>
<edit name="style"><string>Regular</string></edit>
<edit name="weight"><int>80</int></edit>
</match>
<match target="scan">
<test name="fullname"><string>Sarasa UI SC</string></test>
<edit name="fullname"><string>Sarasa UI SC Light</string></edit>
<edit name="style"><string>Light</string></edit>
<edit name="weight"><int>50</int></edit>
</match>
<match target="scan">
<test name="fullname"><string>Sarasa UI SC Semibold</string></test>
<edit name="fullname"><string>Sarasa UI SC</string></edit>
<edit name="style"><string>Regular</string></edit>
<edit name="weight"><int>80</int></edit>
</match>

<match target="pattern">
<test compare="eq" name="family"><string>Sarasa UI SC</string></test>
<edit mode="prepend" name="style"><string>Semibold</string></edit>
</match>
<match target="pattern">
<test compare="eq" name="family"><string>Sarasa Term SC Nerd</string></test>
<edit mode="prepend" name="style"><string>Semibold</string></edit>
</match>

</fontconfig>

  对了,还要在 fonts.conf 里面把 hinting 关掉。

~/.config/fontconfig/fonts.conf
1
2
3
4
5
6
7
8
9
10
<match target="font">
<edit mode="assign" name="hinting">
<bool>false</bool>
</edit>
</match>
<match target="font">
<edit mode="assign" name="hintstyle">
<const>hintnone</const>
</edit>
</match>


参考链接:

  1. https://forum.suse.org.cn/t/c/14990
  2. https://unix.stackexchange.com/a/685529
  3. https://www.freedesktop.org/software/fontconfig/fontconfig-user.html