改造 Microsoft YaHei Mono

上一篇文提到了可以用 Microsoft YaHei Mono 做等宽字体,装上乍一看效果很不错,cjk 字符以外用的是 consolas,也和我个人习惯一致。但仔细看有问题,主要有俩:

  1. 相同字号下,字符比 consalas 字体要小,比如 consolas 用 16 号字,这个等宽雅黑要用 18 号字才能差不多大;
  2. 中英文混排时,字符对不齐。

这第二点很要命,本来用等宽字体就为了码代码能字符对齐。用 FontCreator 打开看,发现 consolas 部分的字体被缩小了,但依然在宽度上不是雅黑 cjk 字符的 1/2,不知道做这个等宽雅黑字体的人是如何考虑的。

那就自己改吧。

首先拿下载的这个等宽雅黑来改,把英文部分改成 cjk 字符的一半。虽然这个等宽字体减小了 consolas 字符大小,但依然需要再压瘦一点才能达到雅黑 cjk 字符的一半。但是很奇怪的失败了,生成的字体安装后居然在控制台的字体选择里看不到,咦?

在没有搞明白失败原因的情况下,又开始了新的尝试,自己组装一个等宽雅黑。之前把下载的等宽雅黑 consolas 字体压瘦显然不是个好办法,看起来不舒服,所以自己组装时保留了原始 consolas 字体的尺寸,而是采用把雅黑 cjk 字符宽度扩大的办法。注意不是把字符拉宽,而是把字符两边的空白变大。然后把雅黑的字符度量尺寸都改成 consolas 的,把字体类型改成等宽,完工。但是安装后依然在控制台字体列表里看不到,咦?

失败两次发现事情不简单,里头有玄机,用于控制台的字体如果是TrueType,需要是等宽的,FF_MODERN 的,且包含 Windows 语言对应 code page。微软雅黑本身就有 cp936,这么看貌似我就漏了那个 FF_MODERN。FF_MODERN 要求字体笔画等宽度,奇怪的要求…不过这不是个事,字体长啥样和这些设置无关。不过把字体改成 MODERN 类型后依然没法用于控制台,咦?

仔细看了下生成字体的 code page ,发现不知为啥变成了 932(日语),难怪安装过后字体查看器会在字体图标上用假名而不是汉字。仿照雅黑的设置改掉,导出,安装,但还是失败了,咦?

再仔细看了一遍字体设置对话框,发现 code page 下面有一个复选框“导出时自动计算”…顿时很无语,不知为啥自动计算会算成 932,明明大量字符都是 936 的。这应该就是第一次尝试即失败的原因了。把复选框去掉,导出,安装,然后没有悬念的成功了。

总结一下,用 FontCreator(版本 9.1)导出字体时默认会自动计算 code page,会把中文的算成日语的,有谁用这个工具改字体,要留意这个坑。

不知为啥,我自己折腾时并不需要照之前知乎链接里说的要修改注册表,反而是能够像上篇文里那个 Microsoft YaHei Mono 一样即装即用。前面知乎链接里提供了另外一种等宽雅黑下载,不过那个虽然字符倒是能对齐了(用的是压缩 Consolas 字符间距的办法,个人觉得太紧凑不好看),但是依然没有解决在控制台里比其他字体小一圈的问题。

无图无真相。

自制雅黑等款在 PowerShell 中的效果

后记

合并字体我用的是 FontForge。FontCreator 咋批量合并我没摸索出来,只能先把需要的代码点加上排好序,然后复制粘贴,过于麻烦。至于为啥不用 FontForge 改字体,主要是我用 FontForge 改会把字符撑的特别宽,不知为啥…可能 FontForge 我用的不对。相比之下 FontCreator 的字形变换功能也要好用不少,特别是本文里头用来给字形左右加空白的工作,FontCreator 能够自动将宽度增量平分到字形两边,FontForge 貌似要自己算。是否一定要平分没试过,我觉得还是平分的好。

是否一定要把字体类型设成 MODERN 没有广泛验证过,好像设不设都行?

谢谢评论里 chen 的提醒:调整宽度时会把 hinting 数据给删掉。我不知道为啥,也不知道用什么软件能避免这个问题,所以改出来的字体只在 Win10 系统以及不需要 hinting 的系统上才能保证有比较好的效果。

聊一聊吧

42条评论

  1. 大佬, 你做出的这个等宽字体能放出来给大家用用吗? 这个mono不等宽真的是有点烦人. 可以的话能发我一份么.

  2. 不知道还在不在,这个字体真不错,能发一份给我么?谢谢~

    1. 老哥,微软雅黑+Mono的等宽字体分享一下呗

  3. 不知道还在不在,这个字体真不错,能发一份给我么?谢谢~

  4. 楼主,希望能分享一下你的字体,最近一直在找微软雅黑结合等宽英文的字体,敲代码看着舒服,万分感谢

  5. 最近在找好用的编程字体,翻到了您这篇,感觉很不错啊,可以分享一下吗,先谢啦。

  6. 看了很多个等宽字体了,非常中意这个
    求一份,谢谢你

  7. 正好也在头疼win10的命令行字体,通过百度找过来的,请问是否可以分享一份?

  8. 大佬, 不知道还在不在, 希望能发一份 yahei mono 看看. 谢谢
    博客的字体看着真舒服. 赞

  9. 博主字体能发一份吗,不能对齐的问题确实有点烦

  10. 这种字体看着比系统自带的舒服多了,能分享一下吗,多谢多谢~~

  11. 大佬可以分享一个百度网盘之类的啊,就不用一个个发邮件了,同求!

      1. 回来给大佬点赞, 这个中文跟英文等宽对齐碉堡了, 好用!

    1. 大佬,请问下。。我要怎么搜到这个字体啊。。
      非常想要这个字体 QAQ,或者能发我一下吗

  12. 您好,我用的就是Microsoft_YaHei_Mono,但感觉出其有些小问题。看到文章很期待新字体效果,方便的话可以分享一下吗,仅个人使用,非常感谢!

  13. 你好,我用了ConsolasHybird显示模糊,MonoHybird英文纵向太窄,是否能伸手向你要一份这个字体,感激不尽!

    1. 我把 Gasp table 去掉了,也意外把 hinting 去掉了,可能就剩字体自身的形状了吧,但些这个改动一般不会带来锐利的效果,所以可能达不到你要的清晰度。自测 Win10 和 Ubuntu 下效果都挺好,但其他操作可能会很差。

  14. 博主做的字体真的太棒了!一直想找一个这样的字体,可以发一下吗?非常感谢!

  15. 这个字体真好看,能分享一下您做的字体吗?自用,谢谢~~

  16. 你好,我想要一份字体用于编程,十分感谢!

  17. 原字体中英混排太难受了,特此求字体,仅编程学习使用,先谢过博主

说点啥呗

电子邮件地址不会被公开。 必填项已用*标注