Windows10系统下Ricty字族部分已安装字体样式不生效问题咨询
问题原因
这是Windows平台GDI字体渲染框架的经典兼容问题,核心是Ricty字体生成时的元数据配置不规范,导致老接口无法正确识别同字族下的不同样式:
head表macStyle字段配置错误:四款字体的该值均为0x0000,按规范,粗体、倾斜、粗斜字体需要分别设置对应标记位,Windows传统控制面板的字体管理器依靠该字段+字体族名做分组,同字重下两款字体属性标记一致时,先安装的会覆盖后安装的条目。OS/2表fsSelection字段配置不规范:常规和粗体的字段值保留了「常规样式」标记,倾斜样式的属性标记和常规样式冲突,依赖GDI接口的软件(比如Emacs)无法正确区分同字重下的常规/倾斜样式,只会调用第一个匹配到的字体。- 缺少
name表ID16/ID17字段:这两个字段是字体族优先识别字段,缺失状态下老渲染接口无法正确把四款字体归到同一字族下,导致样式调用异常。
Win10设置界面和VSCode使用了新的字体识别框架,直接读取字体完整名称做展示和调用,所以不会出现异常。
解决方案
方案1:修改Emacs配置(操作最简单,无需改动字体文件)
不要直接指定字族名Ricty,分别为不同样式绑定完整字体名即可,在Spacemacs配置文件中添加如下代码:
; 基础常规样式,height可按自己的显示需求调整数值 (set-face-attribute 'default nil :font "Ricty Regular" :height 120) ; 斜体样式 (set-face-attribute 'italic nil :font "Ricty Oblique" :slant 'italic) ; 粗体样式 (set-face-attribute 'bold nil :font "Ricty Bold" :weight 'bold) ; 粗斜样式 (set-face-attribute 'bold-italic nil :font "Ricty Bold Oblique" :weight 'bold :slant 'italic)
方案2:修复字体元数据(永久解决全平台全软件兼容问题)
你可以用已经下载的OT Master Light工具修改四款字体的对应字段,修改规则如下:
| 字体文件 | 修改项 | 修改后的值 |
|---|---|---|
| Ricty-Regular.ttf | 新增name ID16 | Ricty |
| 新增name ID17 | Regular | |
| Ricty-Bold.ttf | head.macStyle | 0x0001 |
| OS/2.fsSelection | 0x0020 | |
| 新增name ID16 | Ricty | |
| 新增name ID17 | Bold | |
| Ricty-Oblique.ttf | head.macStyle | 0x0002 |
| OS/2.fsSelection | 0x0001 | |
| 新增name ID16 | Ricty | |
| 新增name ID17 | Oblique | |
| Ricty-BoldOblique.ttf | head.macStyle | 0x0003 |
| OS/2.fsSelection | 0x0021 | |
| 新增name ID16 | Ricty | |
| 新增name ID17 | Bold Oblique |
修改完成后保存字体,先卸载系统中所有已安装的Ricty字体,重启后再安装修改后的四款字体即可。
内容的提问来源于stack exchange,提问作者aruku7230
相关产品推荐
相关产品推荐

