解决三星系统上中文字重缺失的问题

最近更换到三星设备,发现 Obsidian 不能正确渲染中文粗体,而英文却没问题。社区里已经有一些针对此问题的解决方案:

这些都是通过修改 CSS 来增加粗体的字重以迫使系统使用更粗的字体。本质上讲,这个问题的根源在于 OneUI 上中文字重较少[1],我推测中文应该只配置了三个字重:

font-weight: 100-300; // 细体
font-weight: 400-600; // 正常字体
font-weight: 700-900; // 粗体

而默认情况下,Obsidian 中标题和粗体的字重是 600,因此显示为正常字体,而英文字体的字重更多,能够正常显示为粗体。要从根源上解决问题,最好的办法自然是修改系统字体配置或者安装字重更丰富的中文字体,然而前者需要 root 权限[2][3],后者 OneUI 只允许安装应用商店中的大多是付费的字体。故只能退而求其次,修改 Obsidian 的字体,一个较简单的方案如下:

  1. 安装 Fontsource[4][5] 插件
  2. 在「Select fonts」中导入 Noto Sans SC 字体[6]注:OneUI 默认的中文字体应该和它同源,它支持 9 个字重
  3. 在「Text font」添加 Noto Sans SC
  4. 现在粗体应该能正常显示了

  1. Others 之间的大厂较量:从 Galaxy S23 换回 Google Pixel,我都想了些什么? - 少数派 ↩︎

  2. 为Android的CJK加上多字重之拾遗 - 回音的博客 ↩︎

  3. https://zhuanlan.zhihu.com/p/25027320 ↩︎

  4. GitHub - fontsource/obsidian-fontsource: A plugin to load custom fonts from Fontsource into Obsidian. ↩︎

  5. Plugins - Obsidian ↩︎

  6. Noto Sans SC | Fontsource ↩︎

新用户限制只能使用 2 个超链接,在这里补充一下
我升级了 :relieved:

[^1]: https://sspai.com/post/78919
[^2]: https://echo.moe/review-multi-font-weight-for-android-cjk
[^3]: https://zhuanlan.zhihu.com/p/25027320
[^4]: https://github.com/fontsource/obsidian-fontsource
[^5]: https://obsidian.md/plugins?id=fontsource
[^6]: https://fontsource.org/fonts/noto-sans-sc 

之前默认中文字重有问题是因为 Obsidian 默认是微软雅黑 Light。但是 1.8.0 可能修那个日文字符显示问题,把这个默认设置给拔了,说不定之后出正式版升上去之后就可以了?

image

已经没有默认设置微软雅黑 Light 了。

不太行:

左图中能观察到比较明显的字重差别;而右图中,二级标题中的「世界」之所以显示为粗体,是因为标题默认字重 600,再加上 --bold-modifier: 100,得到字重 700,然后系统就选择了粗体字。

啊,那应该和你说的一样,三星设备本身的字体也是有问题的,所以去了微软雅黑 Light 也不行。可能三星设备就都得自己换字体了。