在 Windows 看习惯 MacType 渲染之后的字体之后再看 Linux 下的字体总感觉细得发虚,很不习惯。字体的 Semibold 样式看着粗细正好,就想把它设为默认的粗细。搜了搜在 openSUSE 论坛 看到了一个同样需求的人,可是他也没找到解决办法,下面还有人回复说:“Linux 的默认字体都是为 4k 显示器准备的。拥有 4k 显示器你才配使用它。”
这真是个悲伤的故事……
后来自己慢慢摸索到一个勉强能用的办法,就是在 fontconfig scan 的时候,把 Semibold 的字体的 fullname
style
weight
都换成 Regular 的,再把 Regular 的换成 Light 的,Light 的 的再换成 EXLight 的或者直接删掉。这样一般的程序默认的字重就是 Semibold 了。
获取字体文件 fullname
和 weight
:
❯ 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 配置:
<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 ,这点在这个回答中找到了解决办法。
<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: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 SC
和 Sarasa Term SC Nerd
。
~/.config/fontconfig/conf.d/20-replace-regular.conf<?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<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>
|
参考链接:
- https://forum.suse.org.cn/t/c/14990
- https://unix.stackexchange.com/a/685529
- https://www.freedesktop.org/software/fontconfig/fontconfig-user.html