月度归档:2021年12月

用 FontForge 改造文泉驿等宽字体

之前,在 Burp Suite 中一直使用 Consolas 字体。自从某次所需的 JRE 版本升级后,字体 fallback 出现问题,汉字都变成了豆腐块,Char Sets 设置也不能解决。于是便不得不寻找新的字体方案。

在网上搜索到了一款 DIY 字体叫做 “Microsoft Yahei Mono”,是 “雅黑的中文部分” 和 “Consolas 的英文部分” 拼起来的缝合怪,虽然可以解决上述问题,但是非高分屏下看起来还是不太舒服。但发现,在 cmd 里替换 simsun 倒是挺合适的,无论高分、低分屏。

然后想到了著名的开源字体——文泉驿微米黑。

该字体包含了所有常用简体中文、繁体中文所需要的汉字 (最新版本包含超过 20932 个汉字,完整覆盖 GB2312/Big5 以及 GBK 标准字符集) 。该字体同时还包含了日文、韩文和其他几十种语言符号。以外,该字体还包含了高质量的 Droid Sans 拉丁符号和 Droid Sans Mono 等宽字体。

——文泉驿微米黑

在 Burp Suite 里使用文泉驿等宽微米黑,觉得舒服了很多,字体比较方正。但是很快发现了一个痛点——数字 0 和大写字母 O 实在是太像了。

于是想着能不能改造一下,把 0 的肚子里用斜杠撑起来以示区分呢?很快找到了利器 FontForge 。

FontForge 里,可以看出 0 和 O 确实太像了,小号字体下更是难区分

双击 “0” 进入单个字体编辑,先新建一个矩形,再用拖动工具拖动矩形的四个顶点,原字体中的四个定位锚点正合适落脚,如图。

保存以后,生成新的 ttf 文件,就可以投入使用了。

还有一个发现是,大概是由于 JDK 字体绘制系统不同的原因,不同 JDK(如 openJDK 和 oracleJDK)打开同一个 jar 应用程序,所能用的已安装字体也不同,比如 oracleJDK 就无法显示文泉驿等一些开源字体。

2024.8.22 更新:在笔记本 1080p 屏幕更换为 2.5K 高分屏后,找到了更好的字体方案:中文部分使用文泉驿和英文符号部分使用 JuliaMono 的糅合版,兼顾了英文字符优美、英文等宽、中文宽度=2 英文宽度等特点。此外发现 Maple 字体霞鹜字体也是很不错的,前者已经在各种命令行界面中使用。