Telegram 的 CJK 字体设置

最近,Telegram 更新到了 2.1 版本,其中一项有关 CJK 字体的改动,催生出了这篇博文。

注意事项

本文发布于 2020 年,其中的信息可能已经过时。

  • 2020/05/05:建议使用更纱黑体 v0.10.2 版本
  • 2022/11/30:更新了包含 Cascadia Code 的配置
  • 2022/11/30:官方版 TDesktop 可能不再能加载 FontMod;第三方客户端 64Gram 可正常加载 FontMod,需重命名为 winmm.dll
  • 前言

    自从游记写完之后,算算已经好久没有更新 Blog 了;虽然确实是懒没写出什么东西来,但也不知道有什么值得记一记的。

    最近,Telegram Desktop 更新到了 2.1 版本。除了又增加了一个可以欧皇测试的 🎯 :dart: 以外,还有一项对于 Windows CJK 用户来说比较有意义的更新。本文的内容,就和这次更新,以及之前中文 Telegram 用户的字体体验相关。

    What happened?

    简单的来说,Telegram Desktop 的字体默认 fallback 不那么弱智了(指跳到中易宋体 SimSun),而这个默认的字体一度是绝大多数中文 Telegram 用户的噩梦:

    因为它无缩放的显示效果简直 震 撼 我 妈(让我联想到了 Minecraft 的字体 Mojangles)。

    (当然,对于有一定界面缩放的用户,宋体还算可以接受)

    那么,现在改成什么样子了呢?详细信息请参阅 desktop-app/lib_ui#7 里的代码更改,最主要的是这里,写明了在 Windows 下选择的几种字体。其中首选就是微软雅黑,紧接其后的是微软正黑体(适用于繁体中文)、Yu Gothic UI(适用于日文)和 맑은 고딕(适用于韩文)。

    这个顺序是从 FontMod 那边抄过来的,有关内容马上介绍。

    那 FontMod 是什么?

    ysc3839/FontMod 是由 @ysc3839 开发的一个小玩意,可以注入一些 Win32 程序(主要是 Telegram)用以替换掉默认的字体 fallback。通过把原本的 SimSun 替换为微软雅黑,Telegram 的观感一下子提升了不少,对于使用界面缩放的用户也有用。

    在这个 Telegram 版本更新以前,喜欢折腾和讨厌难看宋体的用户就是用它来改善 Telegram 的中文观感。FontMod 默认配置使用起来也很简单,下载后放入 Telegram Desktop 目录,把 dll 改名为 winmm.dll 就可以了。

    此时,字体规则和刚才所述一致,宋体被替换为微软雅黑等。也就是说,如果你更新到了 Telegram Desktop 2.1 版本,且你对于现在的字体感到满意,你可以拿走 FontMod 也不影响字体显示了。

    但是?

    但是,由于 Telegram 中文支持依然很渣,仅仅一个微软雅黑是满足不了我们的。

    那么,本文的主题来了:通过配置 FontMod 配置文件,修正 Telegram Desktop 2.1 版本显示中文时可能出现的各种问题:

    • 增加 CJK 粗体支持

      原因:Telegram 的 Chat title 和 Username 都使用了粗体,但是中文粗体不能正常显示,英文粗中文细很奇怪;此外,消息中的中文粗体也不能显示为粗体。

    • 增加 CJK 等宽支持

      原因:微软雅黑并不是等宽字体,消息中使用等宽格式时,使用微软雅黑的中文会使整段格式出现对齐问题。

    用什么字体呢?

    这里就得推荐一手 更纱黑体 (Sarasa Gothic) 了。写代码的朋友们肯定会被中文不能等宽的问题所困扰,而更纱黑体则是一款基于 Iosevka(老前辈)和 Source Han Sans(思源黑体)修改而来的 CJK 等宽字体。当然,等宽仅限于 Sarasa Mono 家族,并不会丧心病狂地全系等宽。同时,这个字体的多字重支持也十分完善。

    更纱黑体在代码编辑器 / shell 里用都很合适,也是我测试比较了之后个人认为用在 Telegram 上效果也很好的一款字体。

    具体配置

    这是我的 FontMod.yaml 配置。

    (已于 2022 年 11 月更新,添加了 Cascadia Code 的替换)

    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
    40
    41
    42
    43
    44
    45
    46
    style: &style
    # Remove '#' to override font style
    # size: 0
    # width: 0
    # weight: 0
    # italic: false
    # underLine: false
    # strikeOut: false
    # charSet: 0
    # outPrecision: 0
    # clipPrecision: 0
    # quality: 0
    # pitchAndFamily: 0

    fonts:
    microsoft yahei: &zh-cn-font # Chinese (Simplified) fallback font
    replace: 更纱黑体 SC
    <<: *style
    microsoft jhenghei ui: # Chinese (Traditional) fallback font
    replace: Sarasa Gothic TC
    <<: *style
    # MS UI Gothic: # Japanese fallback font
    # replace: Yu Gothic UI
    # <<: *style
    # Gulim: # Korean fallback font
    # replace: 맑은 고딕
    # <<: *style
    Arial: &monospace-font
    replace: 等距更纱黑体 SC
    <<: *style
    Consolas: *monospace-font # English Monospace default font
    Cascadia Mono: *monospace-font # English Monospace default font (Since v4.2.x)
    SimSun: *zh-cn-font # Chinese Monospace fallback font
    Segoe UI: *zh-cn-font
    Segoe UI Semibold: &zh-cn-bold
    replace: 更纱黑体 SC Bold
    <<: *style
    Microsoft YaHei UI: *zh-cn-bold
    DAOpenSansRegular: *zh-cn-font
    DAOpenSansRegularItalic: *zh-cn-font
    DAOpenSansSemiboldItalic: *zh-cn-font
    DAOpenSansSemibold: *zh-cn-bold

    fixGSOFont: true # true is to use system UI font
    #fixGSOFont: *zh-cn-font # Or replace with user defined font
    debug: false

    此处直接抄作业即可,仅有一些注意事项:

    1. 我使用了字体的中文名称,因为简体中文系统下可以正常显示和正常使用。如果你的系统语言非简体中文 / 有其他魔法,你可能需要使用字体真实名称,如 "Sarasa Gothic SC"
    2. 如果你对粗体的字重有要求,可以自行更改(e.g. ~ Bold -> ~ Semibold
    3. Telegram 故意不支持又粗又斜的文本格式化,别试了 😃
    4. 重要)不要改 microsoft yahei 的大小写,这玩意 Case sensitive,我也觉得很神奇
    5. 重重重要)更纱黑体的新版对英文进行了一些 xjb 改动,请使用旧版 v0.10.2

    提示

    根据我的测试结果,更纱黑体在 100% 缩放 ~ 200% 缩放都能获得比较不错的显示效果,能覆盖 CJK 全系字符,粗体字重也比较合适。

    而参测的另外两个字体就有一点问题了:

    微软雅黑

    如果不考虑等距字体的问题,微软雅黑本身也是支持粗体的。那么,我也可以通过修改 FontMod 来提供中文的粗体支持。只是,我测试了一下,微软雅黑的粗体表现在 Telegram 的字号下简直惨不忍睹:

    100% 缩放,微软雅黑粗体

    这已经可以说是粗得不成样子了,糊到一片很难看。

    另外,图上还有一个严重的问题:微软雅黑没有韩文的覆盖(至少我的参测版本 Windows 1909 字体 v6.25 没有),韩文实际上 fallback 到了另外一个字体,显示效果炸裂。

    思源黑体

    那么,同样是 CJK 字体且名声在外的思源黑体呢?思源黑体同样有等宽家族,可以全部解决问题。但是我的测试结论是:如果你有界面缩放,那么还可以用;如果没有,即 100%,那还是算了吧。看图:

    100% 缩放,思源黑体 Medium

    可以看到 100% 缩放时字体很「虚」,笔画已经模糊不清,严重影响了观感。而 100% 缩放的更纱黑体起码还能看(可能比微软雅黑差一点点)。

    100% 缩放,更纱黑体 Semibold

    这样一对比,高下自判。

    但是,说到底,建议买块更好的屏幕(4K + 200% 缩放真香!)。200% 下的显示效果图我就不贴了,你们知道很爽就行了,和林檎的 Retina 一样爽。

    测试文本在我的 Telegram 频道,点这就可以跳转过去了。有兴趣不妨给个关注?

    另外还有几张测试图:100% 思源黑体粗体100% 更纱黑体粗体125% 更纱黑体中粗

    总结

    • Telegram Desktop 更新了字体选择,至少你不用再面对难看的中易宋体了
    • 但是它对于中文粗体和等宽的支持依然很烂,所以我们用以前用过的魔法来改造它
    • 本次参测选手中,最推荐更纱黑体。如果你有界面缩放,那这些「黑体」显示效果都还挺不错的;但如果你是 1080p 不缩放用户,想要改造出中文粗体和等宽,建议选用更纱黑体。
    • 微软雅黑甚至没有韩文,大吃一丼(误
    • 其实要想字体真正地好看细腻起来,还是买块好点的屏幕吧,4K 它可香了呢
    • 本文在 Telegram Desktop 2.1 下撰写,内容可能随软件更新而失效

    那么,下次再见~

    作者

    星野 みなと

    发布于

    2020-04-25

    更新于

    2022-11-30

    许可协议

    评论

    Your browser is out-of-date!

    Update your browser to view this website correctly.&npsb;Update my browser now

    ×