思源黑体是一套著名的开源免费字体,并且现代 Windows 系统也已经内置了这套字体家族。当我不想使用微软雅黑时,通常都会优先考虑用它来代替。今天我使用时遇到了问题,于是花了些时间进行了一些了解。
思源黑体是一个开源项目,可以查看 它的 GitHub 主页。
第一种含义:字体家族
思源黑体(Source Han Sans
)这个词有多个含义。如果指的是它的整个概念,那么此时它包含多套字体。
这是因为思源黑体的家族里包含了多个语种的字体,有日语、简中、繁中、香港、韩语。而且根据粗细不同,又有细分。所以它里面其实有多个具体的字体。
比如这是它里面的一部分字体:
每个字体都有单独的名称,如 Source Han Sans SC ExtraLight
。
第二种含义:具体名称
如果你说“思源黑体”时,指的是叫这个名字的字体,那么它就只表示这套家族里的简体中文这一种字体(其实也包括了不同粗细度的细分字体)。
同理,如果 Source Han Sans
指的是叫这个名字的字体,那么它就只表示这套家族里的日语这一种字体。
为什么默认是日语?因为规范就是这样定的。
实际使用
如果我把某个地方的字体设置为 Source Han Sans
,会如何?
因为此时指的是具体的字体名称,所以它应该会显示为日语的字形。
Chrome 的逻辑
但是也有一些软件的逻辑不一样,比如 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 SC
- 繁中
Source Han Sans TC
- 香港
Source Han Sans HC
- 日语
Source Han Sans
- 韩语
Source Han Sans K
另外也可以使用本地化名称,比如简中可以使用 思源黑体
指定,繁中可以使用 思源黑體
指定,香港可以使用 思源黑體 香港
指定。日语和韩语据我搜索看到底的,也有对应的本地化名称,但是在我的系统里没有。可见这种方式并不能保证在所有人的电脑上都有效,所以最好还是使用上面的英文缩写。
字体安装包的层级分类
思源黑体里面有多个具体的字体,不过它的字体文件并不一定是每个字体单独一份的。有时会把多种字体放在同一个字体文件里,便于一次安装多种字体。这也是有规范的。
在思源字体的 下载页面 里,可以看到一些目录,这就是不同的分类。
每个分类的含义在该页面的 readme 里有说明,我简单概括下。
SuperOTC
所有字体全部放在一个文件里,这是一个大而全的字体文件。Windows 里自带的思源黑体的字体文件就是这种。
OTC
按照粗细来区分的字体文件,里面的每个文件里都含有多个语言,并且每个语言只有一个字体,就是符合这种粗细的字体。示例:
截图里的字体是思源宋体,请不要在意这些细节
OTF
这是最细的分类,每种语言都单独分了一个文件夹,里面是不同粗细度的字体文件。
这里面的每个字体文件里只含有这一种字体。
SubsetOTF
它的分类和 OTF 一样是最细的,但文件夹使用的不是语言名字,而是国家/地区的代号。这些字体专注于当地使用的文字,不关心其他地区使用的文字。
前面的 SuperOTC、OTC、OTF 里的字体都是相同的,只是分类方式不同。但 SubsetOTF 里是不同的字体。
这些字体的名称:
- 简中
Source Han Sans CN
- 繁中
Source Han Sans TW
- 香港
Source Han Sans HK
- 日语
Source Han Sans JP
- 韩语
Source Han Sans KR
SubsetOTF 里的字体的文字数量比前面的少。在 CN 分类的字体里,只包含了中国大陆的汉字写法,没有包含其他地区的汉字写法。比如说,有些汉字在日语里有独特的写法,但中国大陆的规范里没有这种写法,所以 CN 分类的字体里就不收录这些汉字。其他地区的字体文件也是同理。
SubsetOTF 存在隐患,如果使用场景不对,就有可能会出现缺字的情况,因为要输入/显示的文字在这个字体里可能不存在。
Variable
Variable fonts 是粗细度可变的字体(它们的字体名称里有 VF 字样)。
以往不同粗细的字体都是单独设计的,例如:
每款字体的粗细度都是固定的,用户使用时无法调整。而可变字体的粗细度没有固定,用户可以在使用场景里自行调整粗细。
CSS 有个属性 font-weight
可以调整字体粗细,但以往你会发现只有少数几个值有用,这是因为字体只预设了这几种粗细度。使用可变字体的话,粗细度就真的可以自由设定了。
Windows 里的思源黑体
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 129Windows -
Google Chrome 129Android 10 Google 的那个 Note 字体怎么样?
很好看的字体~
在Windows有办法全局使用吗?