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 比例字体,它是无衬线字体,以及 Go Mono,它是衬线字体。

Go 比例字体

无衬线

Go 比例字体是无衬线的,就像屏幕显示的几种流行字体一样。有一些证据表明,在屏幕上,某些无衬线字体在小尺寸和低分辨率下比它们的衬线对应字体略微易读,而在大尺寸下,衬线和无衬线字体在易读性方面没有显著差异,至少在测试的配对中是如此。[1](方括号中的数字指的是本文末尾列出的参考资料。)

风格

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

像 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 字体符合 1450 标准,通过仔细区分零和大写 O;数字 1 和大写 I(眼)和小写 l(埃尔);数字 5 和大写 S;以及数字 8 和大写 B。b d p q 的碗形遵循清晰的文艺复兴时期手写体的自然不对称,有助于区分以减少混淆。[5]

重量

Go 比例字体有三种粗细:普通、中等和粗体。普通粗细足够强,可以在背光屏幕上保持清晰,背光屏幕往往会侵蚀字母特征和厚度。中等粗细的笔画厚度是普通的 1.25 倍,在明亮的屏幕上或对粗字体有偏好的用户来说更坚固。粗体粗细的笔画厚度是普通的 1.5 倍,足够粗以与普通粗细区分开来。这些 Go 字体具有 400、500 和 600 的 CSS 数字粗细。尽管 CSS 将“粗体”指定为 700 粗细,并将 600 指定为半粗体或粗体,但 Go 数字粗细与笔画厚度比例的实际进展相匹配:普通:中等 = 400:500;普通:粗体 = 400:600。粗体名称与将“粗体”用作普通字体的常规对应粗体名称相匹配。有关笔画厚度、粗细名称和 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 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 字体符合 DIN 1450 标准,通过区分零和大写 O;数字 1 和大写 I(眼)和小写 l(埃尔);数字 5 和大写 S;以及数字 8 和大写 B。b d p q 的碗形遵循清晰的文艺复兴时期手写体的自然不对称,有助于区分并减少混淆。

重量

Go Mono 字体有两种粗细:普通和粗体。普通粗细的笔画与 Go 普通粗细相同,因此在背光屏幕上保持清晰,背光屏幕往往会侵蚀字母特征和笔画厚度。粗体笔画厚度是普通粗细的 1.5 倍,因此粗体 Mono 的笔画厚度与粗体 Go 比例相同。因为等宽粗体的字母宽度与等宽普通的宽度相同,所以粗体 Mono 看起来比 Go 比例粗体略粗,因为在相同区域内放置了更多黑色像素。

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 年 5 月)。P‐13:衬线在非常小的尺寸下会减慢 RSVP 阅读速度,但在更大的尺寸下则无关紧要。在 SID 技术论文集摘要中(第 33 卷,第 1 号,第 244-247 页)。Blackwell Publishing Ltd.

[2] Bryan Reimer 等人(2014 年)“评估字体设计对文本丰富的汽车用户界面影响”,人体工程学,57:11,1643-1658。http://www.tandfonline.com/doi/abs/10.1080/00140139.2014.940000

[3] Adrian Frutiger - 字体:完整作品。H. Osterer 和 P. Stamm,编辑。Birkhäuser,巴塞尔,2009 年,第 257 页。

[4] Legge, G. E. & Bigelow, C. A. (2011). 打印尺寸对阅读重要吗?视觉科学和排版研究结果综述。视觉期刊,11(5),8-8。 http://jov.arvojournals.org/article.aspx?articleid=2191906

[5] Charles Bigelow。“哦,哦,零!”TUGboat,第 34 卷 (2013 年),第 2 期。 https://tug.org/TUGboat/tb34-2/tb107bigelow-zero.pdf https://tug.org/TUGboat/tb34-2/tb107bigelow-wang.pdf

[6] “Lucida Basic 字体重”Bigelow & Holmes。 http://lucidafonts.com/pages/facts

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

Jabberwocky 在 Go Regular 中

来自 en.wikipedia.org/wiki/Jabberwocky

没有列出希腊语版本。相反,来自 clagnut.com/blog/2380/#Greek 的一个字母全拼

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