Go 博客

Go 字体

Nigel Tao、Chuck Bigelow 和 Rob Pike
2016 年 11 月 16 日

一个公告

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

这个字体家族被命名为 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 函数。目前也在进行一项工作,以在 golang.org/x 下添加一个 TrueType 包,该包再次采用与 Go 项目其余软件相同的开源许可证授权。

关于这些字体的其他一些不寻常的属性,我们留待您自己去发现,但为了概览字体的设计,我们请 Chuck Bigelow 提供了一些背景信息。本博客文章的其余部分是他的回复。

Chuck Bigelow 关于字体的说明

Go 字体分为两组:Go Proportional(比例宽度字体),它是无衬线体;以及 Go Mono(等宽字体),它是粗衬线体。

Go 比例宽度字体

无衬线体

Go 比例宽度字体是无衬线体,就像许多流行的屏幕显示字体一样。有证据表明,一些无衬线字体在小尺寸和低分辨率屏幕上比有衬线字体更易读,而在大尺寸时,无衬线字体和有衬线字体在易读性上没有显著差异,至少在测试的一对字体中是这样。[1](方括号中的数字指本文末尾列出的参考文献。)

风格

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

像 Helvetica 这样的现代怪诞体字体形状是雕塑式的,形式光滑、融合。

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

斜体

Go 比例宽度斜体与正常体(roman)具有相同的宽度度量。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(eye)和小写字母 l(ell);数字五(5)与大写字母 S;以及数字八(8)与大写字母 B 来符合 1450 标准。b d p q 的碗形遵循易读的文艺复兴手写体的自然不对称性,有助于区分并减少混淆。[5]

字重

Go 比例宽度字体有三种字重:Normal(常规)、Medium(中等)和 Bold(粗体)。Normal 字重足够强壮,可以在背光屏幕上保持清晰度,背光屏幕通常容易模糊字母特征和笔画粗细。Medium 字重的笔画粗细是 Normal 的 1.25 倍,以便在明亮的屏幕上或对于喜欢粗壮字体的用户来说更坚固。Bold 字重的笔画粗细是 Normal 的 1.5 倍,足够粗以区别于常规字重。这些 Go 字体的 CSS 数字字重为 400、500 和 600。尽管 CSS 将“Bold”指定为 700 字重,将 600 指定为 Semibold 或 Demibold,但 Go 的数字字重与笔画粗细的实际比例进展相匹配:Normal:Medium = 400:500;Normal:Bold = 400:600。“Bold”字重名称与将“Bold”用作常规字体的通常对应粗体字重的用法相符。关于笔画粗细、字重名称和 CSS 编号之间关系的更多讨论见 [6]。

WGL4 字符集

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

与 Arial 和 Helvetica 的度量兼容性

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

Go Mono 字体

等宽体

Go Mono 字体是等宽的——每个字母的宽度与其他字母相同。等宽字体自计算机诞生以来就一直用于编程,至今仍被广泛使用,因为其打字机般的规则间距使得文本能够按列和行对齐,这种风格也见于公元前 5 世纪的希腊铭文。(古希腊人没有打字机或电脑键盘,但他们有伟大的数学家以及对对称和模式的强烈感知,这些塑造了他们的字母表。)

粗衬线体

Go Mono 字体具有板状衬线,赋予其坚固的外观。

风格

Go Mono 的底层字母形状与 Go 无衬线字体一样,源自人文主义手写体,但等宽和板状衬线往往掩盖了历史和风格上的联系。

斜体

Go Mono 斜体是正常体的倾斜版本,但有一个例外,斜体小写字母“a”被重新设计成草书的单层形式,以便与 b d g p q 的碗形协调。草书“a”使得斜体看起来比简单的倾斜正常体更生动。与许多无衬线字体一样,人们认为倾斜的正常体粗衬线字体可能比真正的“草书”斜体更易读。

x 高度

Go Mono 字体的 x 高度与 Go 无衬线字体相同,为字号的 53%。Go Mono 看起来比 Courier 大近 18%,而 Courier 的 x 高度是字号的 45%。然而 Go Mono 与 Courier 的宽度相同,因此在每行字符经济性上没有损失的情况下获得了更大的外观。

DIN 易读性标准

Go Mono 字体通过区分数字零(0)与大写字母 O;数字一(1)与大写字母 I(eye)和小写字母 l(ell);数字五(5)与大写字母 S;以及数字八(8)与大写字母 B 来符合 DIN 1450 标准。b d p q 的碗形遵循易读的文艺复兴手写体的自然不对称性,有助于区分并减少混淆。

字重

Go Mono 字体有两种字重:Normal(常规)和 Bold(粗体)。常规字重的笔画粗细与 Go Normal 相同,因此在背光屏幕上保持清晰度,背光屏幕容易模糊字母特征和笔画粗细。粗体字重的笔画粗细是常规字重的 1.5 倍,因此 Bold Mono 的笔画粗细与 Bold Go proportional 相同。由于等宽粗体的字母宽度与等宽常规体的宽度相同,Bold Mono 看起来比比例宽度 Go Bold 略粗,因为在相同区域内填充了更多的黑色像素。

Go Mono 在度量上兼容 Courier 和其他与 12 点字号下每线性英寸 10 个字符的“Pica”打字机类型宽度相匹配的等宽字体。在 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 等人 (2014) “评估字体设计在富文本车载用户界面中的影响”,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). 字号对阅读重要吗?一项来自视觉科学和排版学的研究综述。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 基本字重” Bigelow & Holmes。http://lucidafonts.com/pages/facts

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

Go Regular 中的 Jabberwocky

来自 en.wikipedia.org/wiki/Jabberwocky

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

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