思源黑体是一套著名的开源免费字体,并且现代 Windows 系统也已经内置了这套字体家族。当我不想使用微软雅黑时,通常都会优先考虑用它来代替。今天我使用时遇到了问题,于是花了些时间进行了一些了解。
思源黑体是一个开源项目,可以查看 它的 GitHub 主页。
思源黑体(Source Han Sans)这个词有多个含义。如果指的是它的整个概念,那么此时它包含多套字体。
这是因为思源黑体的家族里包含了多个语种的字体,有日语、简中、繁中、香港、韩语。而且根据粗细不同,又有细分。所以它里面其实有多个具体的字体。
比如这是它里面的一部分字体:
每个字体都有单独的名称,如 Source Han Sans SC ExtraLight。
如果你说“思源黑体”时,指的是叫这个名字的字体,那么它就只表示这套家族里的简体中文这一种字体(其实也包括了不同粗细度的细分字体)。
同理,如果 Source Han Sans 指的是叫这个名字的字体,那么它就只表示这套家族里的日语这一种字体。
为什么默认是日语?因为规范就是这样定的。
如果我把某个地方的字体设置为 Source Han Sans,会如何?
因为此时指的是具体的字体名称,所以它应该会显示为日语的字形。
但是也有一些软件的逻辑不一样,比如 Chrome 浏览器。当字体设置为 Source Han Sans 时,它会根据 html 标签的 lang 属性,自动显示对应语言的字体。例如本站的页面语言是简中 zh-cn,那么当字体设置为 Source Han Sans 时,它并不会显示日语,而是会显示简体中文。如果把页面语言改为繁中 zh-tw,就会显示繁体中文。
不仅如此,有时 Chrome 还会拒绝显示指定的字体。
当页面语言为简中时,就算我强制指定使用其他字体,如繁中字体:Source Han Sans TC,Chrome 也不会理会,它依然会显示为简体中文。
当页面语言为繁中时,如果我设置简中字体 思源黑体,那么也是无效的,Chrome 依然会显示繁体中文。
不过实际情况还会更复杂。
当页面语言为简中时,不管我设置该家族里的任何字体,Chrome 都只会显示简体中文这一种。
当页面语言为繁中时,除了繁体中文外,日语也可以生效。
当页面语言为日语时,简中、繁中、日语都可以显示。(至于会不会显示香港、韩语,我没详细测试)
当页面语言为英语时,我们设置什么它就显示什么。
这可能是 Chrome 考虑到不同语言的人们平常很少会使用某些特地语言,所以做了些优化措施。
为了确保显示的字体符合预期,通常不应该使用较为笼统的 Source Han Sans,而是应该明确指定具体的字体名称。
主要方式就是在 Source Han Sans 后面添加特定的语言标志,不过这可不是乱加的,要跟字体的名称保持一致。
Source Han Sans SCSource Han Sans TCSource Han Sans HCSource Han SansSource Han Sans K另外也可以使用本地化名称,比如简中可以使用 思源黑体 指定,繁中可以使用 思源黑體 指定,香港可以使用 思源黑體 香港 指定。日语和韩语也有对应的本地化名称,但是在我的系统里没有。可见本地化名称并不能保证在所有人的电脑上都有效,所以最好还是使用上面的英文缩写。
思源黑体里面有多个具体的字体,不过它的字体文件并不一定是每个字体单独一份的。有时会把多种字体放在同一个字体文件里,便于一次安装多种字体。这也是有规范的。
在思源字体的 下载页面 里,可以看到一些目录,这就是不同的分类。
每个分类的含义在该页面的 readme 里有说明,我简单概括下。
所有字体全部放在一个文件里,这是一个大而全的字体文件。Windows 里自带的思源黑体的字体文件就是这种。
按照粗细来区分的字体文件,里面的每个文件里都含有多个语言,并且每个语言只有一个字体,就是符合这种粗细的字体。示例:
截图里的字体是思源宋体,请不要在意这些细节
这是最细的分类,每种语言都单独分了一个文件夹,里面是不同粗细度的字体文件。
这里面的每个字体文件里只含有这一种字体。
它的分类和 OTF 一样是最细的,但文件夹使用的不是语言名字,而是国家/地区的代号。这些字体专注于当地使用的文字,不关心其他地区使用的文字。
前面的 SuperOTC、OTC、OTF 里的字体都是相同的,只是分类方式不同。但 SubsetOTF 里是不同的字体。
这些字体的名称:
Source Han Sans CNSource Han Sans TWSource Han Sans HKSource Han Sans JPSource Han Sans KRSubsetOTF 里的字体的文字数量比前面的少。在 CN 分类的字体里,只包含了中国大陆的汉字写法,没有包含其他地区的汉字写法。比如说,有些汉字在日语里有独特的写法,但中国大陆的规范里没有这种写法,所以 CN 分类的字体里就不收录这些汉字。其他地区的字体文件也是同理。
SubsetOTF 存在隐患,如果使用场景不对,就有可能会出现缺字的情况,因为要输入/显示的文字在这个字体里可能不存在。
Variable fonts 是粗细度可变的字体(它们的字体名称里有 VF 字样)。
以往不同粗细的字体都是单独设计的,例如:
每款字体的粗细度都是固定的,用户使用时无法调整。而可变字体的粗细度没有固定,用户可以在使用场景里自行调整粗细。
CSS 有个属性 font-weight 可以调整字体粗细,但以往你会发现只有少数几个值有用,这是因为字体只预设了这几种粗细度。使用可变字体的话,粗细度就真的可以自由设定了。
Windows 11 系统默认安装了全套思源黑体,其对应的字体文件是 C:\Windows\Fonts\SourceHanSans.ttc。它是一个大合集(SuperOTC 分类的字体),包含了所有语种和所有粗细的字体(但是不包含只针对特定地区的 SubsetOTF 字体)。
打开它进行预览,是这样的:
可以注意到,标题栏里显示了复数个字体名称。点击右上角的“下一页”按钮可以查看里面的每一个字体。
这里面的 Source Han Sans 字体(后面没有语言代号)就是日语的字形。
有些字在简中和日语里是有区别的,比如“葫芦娃”的“芦”:
第一张图片里是简中,第二张图片里是日语。
再来一组对比图,从上到下依次是简中、繁中、日语。
它们是同样的字(我输入的是简中的字),只是在不同字体里显示的不一样。
需要注意:有些字在不同字体里确实是不同的字,比如很多繁体字。我输入的简体字并不会因为我把字体改为繁体,就自动变成繁体(除非有的字体特意这么做)。
前面讲的都是思源黑体 Source Han Sans,其实还有个思源宋体 Source Han Serif,也是开源的:
https://github.com/adobe-fonts/source-han-serif
最大的区别就是黑体是无衬线字体,宋体是有衬线字体。
Windows 没有内置思源宋体,看来它的使用率没有思源黑体高。
Google Chrome 129
Windows 10/11
Google Chrome 129
Android 10 Google 的那个 Note 字体怎么样?
很好看的字体~
在Windows有办法全局使用吗?