Go 博客

Go 字体

Nigel Tao, Chuck Bigelow, and Rob Pike
2016 年 11 月 16 日

公告

golang.org/x/exp/shiny 上构建的实验性用户界面工具包包含多个文本元素,但测试它们时存在一个问题:应该使用什么字体?回答这个问题促成了我们今天的公告,发布了一系列高质量的 WGL4 TrueType 字体,由 Bigelow & Holmes 类型铸造厂专门为 Go 项目创建。

该字体家族名为 Go(顾名思义),包括等宽和比例字体,有正常、粗体和斜体渲染。这些字体已针对技术用途进行了测试,尤其是编程。顾名思义,Go 源代码在 Go 字体中显示效果尤佳,例如标点符号易于区分,运算符对齐且放置一致。

Go 字体最显著的特点可能是其许可证:它们根据与 Go 项目其余软件相同的开源许可证授权,对于高质量字体来说,这是一种异常自由的安排。

以下是比例间隔字体的示例…

以及等宽字体

如何使用它们

如果您只需要 TTF 文件,请运行

git clone https://go.googlesource.com/image

然后从后续的 image/font/gofont/ttfs 目录中复制它们。如果您想将 Go(字体)与 Go(软件)一起使用,每种字体都由一个单独的包提供。要在程序中使用 Go Regular 字体,请导入 golang.org/x/image/font/gofont/goregular,然后编写

font, err := truetype.Parse(goregular.TTF)

github.com/golang/freetype/truetype 包今天提供了 truetype.Parse 函数。目前也在 github.com/golang/freetype/truetype 下添加一个 TrueType 包的工作正在进行中,该包也根据与 Go 项目其余软件相同的开源许可证授权。

我们希望您能发现这些字体的一些其他不同寻常的特性,但关于字体设计的概述,我们请 Chuck Bigelow 提供一些背景。这篇博文的其余部分是他的回复。

Chuck Bigelow 撰写的字体笔记

Go 字体分为两组:Go 比例字体(无衬线)和 Go Mono 字体(粗衬线)。

Go 比例字体

无衬线

Go 比例字体是无衬线的,与一些流行的屏幕显示字体类似。有证据表明,在屏幕上小尺寸和低分辨率下,某些无衬线字体比有衬线的字体略微易读,而在大尺寸下,无衬线和有衬线字体之间的易读性差异并不显著,至少在测试的成对字体中如此。[1](括号中的数字指的是本文末尾列出的参考文献。)

风格

Go 无衬线字体的风格是“人文主义”而非“怪诞”。这是一个历史区分,而不是审美判断。像 Helvetica 和 Arial 这样广泛使用的无衬线字体被称为怪诞字体,因为 19 世纪早期的一种无衬线字体名为“Grotesque”(怪诞),这个名字后来变得通用。

像 Helvetica 这样的现代怪诞字体的形状是经过雕琢的,具有光滑、融合的形态。

人文主义无衬线字体源自人文主义手写体和意大利文艺复兴时期的早期字体,至今仍带有笔写书法细微的痕迹。有证据表明,人文主义字体比怪诞字体更易读。[2]

斜体

Go 比例斜体与罗马体具有相同的宽度度量。Go 斜体是罗马体的倾斜版本,有一个明显的例外:斜体小写字母 'a' 被重新设计成草书单层形式,以与 b d g p q 的碗状结构协调一致,其中直立形式也很适合倾斜。添加草书 'a' 使斜体比单纯倾斜的罗马体更显活泼。一些排版师认为,倾斜的罗马无衬线斜体比真正的“草书”无衬线斜体更受欢迎,部分原因是历史和设计原因。[3]

x 字高

字体的 x 字高是小写字母 'x' 相对于字号的高度。Go 字体的 x 字高为字号的 53.0%,略大于 Helvetica(52.3%)或 Arial(51.9%)的 x 字高,但在正常阅读尺寸下,这种差异通常不明显。排版师认为,较大的 x 字高有助于在小尺寸和屏幕上提高易读性。一项关于“印刷尺寸”(尤其是 x 字高)和阅读的研究指出,用于屏幕阅读和小于尺寸的字体往往具有较大的 x 字高。[4]

DIN 易读性标准

最近的德国 DIN 1450 易读性标准推荐了多种字体易读性特征,包括区分字母形状以减少混淆。Go 字体通过仔细区分数字 0 和大写字母 O;数字 1 和大写字母 I(眼)及小写字母 l(埃尔);数字 5 和大写字母 S;以及数字 8 和大写字母 B,从而符合 1450 标准。b d p q 的碗状形状遵循可读的文艺复兴时期手写体的自然不对称性,有助于区分以减少混淆。[5]

字重

Go 比例字体有三种字重:Normal(正常)、Medium(中等)和 Bold(粗体)。正常字重足够清晰,即使在背光屏幕上也能保持清晰度,因为背光屏幕会侵蚀字母特征和粗细。中等字重的笔画粗细是正常字重的 1.25 倍,在明亮屏幕上或对于喜欢粗体字体的用户来说更显稳固。粗体字重的笔画粗细是正常字重的 1.5 倍,足够粗以与正常字重区分开。这些 Go 字体的 CSS 数值字重为 400、500 和 600。尽管 CSS 将“Bold”(粗体)指定为 700 字重,将 600 指定为 Semibold(半粗)或 Demibold(半粗),但 Go 的数值字重与实际笔画粗细比率的递进相符:Normal:Medium = 400:500;Normal:Bold = 400:600。粗体字重名称与“Bold”作为正常字体通常对应的粗体字重的使用相符。更多关于笔画粗细、字重名称和 CSS 编号之间关系的信息请参见 [6]。

WGL4 字符集

WGL4 字符集最初由微软开发,常被用作非正式的标准字符集。WGL4 包括西欧和东欧的拉丁字符,加上现代希腊语和西里尔语,以及额外的符号、标志和图形字符,总计超过 650 个字符。Go WGL4 字体可用于构成多种语言。[7]

与 Arial 和 Helvetica 的度量兼容性

Go 无衬线字体与标准的 Helvetica 或 Arial 字符在度量上几乎兼容。以 Go 字体排版的文本(在相同大小下)占据的空间与 Helvetica 或 Arial 文本几乎相同,但由于其人文主义风格,Go 字体具有不同的外观和质感。一些具有 DIN 易读性特征的 Go 字母比 Helvetica 或 Arial 中的相应字母更宽,因此一些以 Go 字体排版的文本可能占据稍多空间。

Go Mono 字体

等宽

Go Mono 字体是等宽的——每个字母的宽度与其他字母相同。自计算机诞生以来,等宽字体就一直被用于编程,并且仍然被广泛使用,因为它们的打字机式的规律性间距使文本在列和行中对齐,这种风格也出现在公元前 5 世纪的希腊铭文中。(古希腊人没有打字机或电脑键盘,但他们有伟大的数学家和塑造了他们字母的伟大的对称性和模式感。)

粗衬线

Go Mono 字体具有粗衬线,赋予它们稳固的外观。

风格

与 Go 无衬线字体一样,Go Mono 的底层字母形状也源自人文主义手写体,但等宽和粗衬线往往会模糊其历史和风格联系。

斜体

Go Mono 斜体是罗马体的倾斜版本,例外的是,斜体小写字母 'a' 被重新设计成草书单层形式,以与 b d g p q 的碗状结构协调一致。草书 'a' 使斜体比单纯倾斜的罗马体更显活泼。与许多无衬线字体一样,人们认为倾斜的罗马粗衬线字体可能比真正的“草书”斜体更易读。

x 字高

Go Mono 字体的 x 字高与 Go 无衬线字体相同,为字号的 53%。Go Mono 的外观几乎比 Courier(x 字高为字号的 45%)大 18%。然而,Go Mono 的宽度与 Courier 相同,因此在每行字符数量不变的情况下获得了更大的视觉效果。

DIN 易读性标准

Go Mono 字体符合 DIN 1450 标准,方法是区分数字 0 和大写字母 O;数字 1 和大写字母 I(眼)及小写字母 l(埃尔);数字 5 和大写字母 S;以及数字 8 和大写字母 B。b d p q 的碗状形状遵循可读的文艺复兴时期手写体的自然不对称性,有助于区分和减少混淆。

字重

Go Mono 字体有两种字重:Normal(正常)和 Bold(粗体)。正常字重的笔画与 Go Normal 相同,因此在背光屏幕上也能保持清晰度,而背光屏幕往往会侵蚀字母特征和笔画粗细。粗体笔画的粗细是正常字重的 1.5 倍,因此 Bold Mono 的笔画粗细与 Bold Go proportional 相同。由于等宽粗体的字母宽度与等宽正常体相同,Bold Mono 的外观比 proportional Go Bold 稍微更粗一些,因为在相同区域内放置了更多的黑色像素。

Go Mono 与 Courier 和其他等宽字体在度量上兼容,这些字体与“Pica”打字机类型宽度相匹配,即 10 个字符/线性英寸(12 点)。在 10 点时,Go Mono 字体每英寸排 12 个字符。TrueType 字体自然是可缩放的,因此 Go Mono 可以设置为任何尺寸。

WGL4 字符集

Go Mono 字体提供 WGL4 字符集,该字符集通常用作非正式标准字符集。WGL4 包括西欧和东欧的拉丁字符,以及现代希腊语和西里尔语,以及额外的符号、标志和图形字符。Go WGL4 集合中的 650 多个字符可用于多种语言。

参考

[1] Morris, R. A., Aquilante, K., Yager, D., & Bigelow, C. (2002, May). P‐13: Serifs Slow RSVP Reading at Very Small Sizes, but Don’t Matter at Larger Sizes. In SID Symposium Digest of Technical Papers (Vol. 33, No. 1, pp. 244-247). Blackwell Publishing Ltd.

[2] Bryan Reimer et al. (2014) “Assessing the impact of typeface design in a text-rich automotive user interface”, Ergonomics, 57:11, 1643-1658. http://www.tandfonline.com/doi/abs/10.1080/00140139.2014.940000

[3] Adrian Frutiger - Typefaces: The Complete Works. H. Osterer and P. Stamm, editors. Birkhäuser, Basel, 2009, page 257.

[4] Legge, G. E., & Bigelow, C. A. (2011). Does print size matter for reading? A review of findings from vision science and typography. Journal of Vision, 11(5), 8-8. http://jov.arvojournals.org/article.aspx?articleid=2191906

[5] Charles Bigelow. “Oh, oh, zero!” TUGboat, Volume 34 (2013), No. 2. https://tug.org/TUGboat/tb34-2/tb107bigelow-zero.pdf https://tug.org/TUGboat/tb34-2/tb107bigelow-wang.pdf

[6] “Lucida Basic Font Weights” Bigelow & Holmes. http://lucidafonts.com/pages/facts

[7] WGL4 语言覆盖:南非荷兰语、阿尔巴尼亚语、阿苏语、巴斯克语、白俄罗斯语、姆贝马语、贝纳语、波斯尼亚语、保加利亚语、加泰罗尼亚语、奇加语、科隆语、康沃尔语、克罗地亚语、捷克语、丹麦语、恩布语、英语、世界语、爱沙尼亚语、法罗语、菲律宾语、芬兰语、法语、弗留利语、加利西亚语、甘达语、德语、希腊语、古西语、匈牙利语、冰岛语、因加里萨米语、印度尼西亚语、爱尔兰语、意大利语、约拉-福尼语、卡布韦迪亚努语、格陵兰语、卡伦金语、坎巴语、基库尤语、基尼亚尔旺达语、拉脱维亚语、立陶宛语、下索布语、卢奥语、卢森堡语、卢伊亚语、马其顿语、马查梅语、马库瓦-梅托语、马孔德语、马达加斯加语、马来语、马耳他语、马恩语、梅鲁语、毛里求斯语、北部恩德贝莱语、北部萨米语、挪威语(博克马尔语)、挪威语(尼诺斯克语)、尼亚科尔语、奥罗莫语、波兰语、葡萄牙语、罗马尼亚语、罗曼什语、隆博语、伦迪语、俄语、瓦语、桑布鲁语、桑戈语、桑古语、苏格兰盖尔语、塞纳语、塞尔维亚语、尚巴拉语、绍纳语、斯洛伐克语、斯洛文尼亚语、索加语、索马里语、西班牙语、斯瓦希里语、瑞典语、瑞士德语、泰塔语、特索语、土耳其语、土库曼语、上索布语、武尼奥语、瓦尔瑟语、威尔士语、祖鲁语

Go Regular 字体下的《 Jabberwocky 》

来自 en.wikipedia.org/wiki/Jabberwocky

未列出希腊语版本。取而代之的是,来自 clagnut.com/blog/2380/#Greek 的全字母短句

下一篇文章: 参与 2016 年 Go 用户调查和公司问卷
上一篇文章: Go 的七年
博客索引