aboutsummaryrefslogtreecommitdiff
path: root/content/go-fonts.article
blob: 89962374f75110497b43a28e8771916f754535cb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
Go fonts
16 Nov 2016

Nigel Tao

Chuck Bigelow

Rob Pike

* An Announcement

The experimental user interface toolkit being built at
[[https://godoc.org/golang.org/x/exp/shiny][`golang.org/x/exp/shiny`]]
includes several text elements, but there is a problem with testing them:
What font should be used?
Answering this question led us to today's announcement,
the release of a family of high-quality [[https://en.wikipedia.org/wiki/Windows_Glyph_List_4][WGL4]] TrueType fonts, 
created by the [[http://bigelowandholmes.typepad.com/][Bigelow & Holmes]] type foundry specifically for the Go project.

The font family, called Go (naturally), includes proportional- and fixed-width faces in normal,
bold, and italic renderings.
The fonts have been tested for technical uses, particularly programming.
Go source code looks particularly good when displayed in Go fonts, as its name implies, with things like
punctuation characters easily distinguishable and operators lined up and placed consistently:

.image go-fonts/go-font-code.png _ 519

Perhaps the most remarkable feature of the Go fonts is their license:
They are licensed under the same open source license as the rest of the Go project's software,
an unusually free arrangement for a high-quality font set.

Here are samples of the proportionally-spaced...

.image go-fonts/go-regular.png _ 600

and monospaced fonts:

.image go-fonts/go-mono.png _ 600

* How to use them

If you just want the TTF files, run

	git clone https://go.googlesource.com/image
	
and copy them from the subsequent `image/font/gofont/ttfs` directory.
If you want to use Go (the fonts) with Go (the software), each font is provided by a separate package.
To use the Go Regular font in a program, import `golang.org/x/image/font/gofont/goregular`, and write:


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


The [[https://godoc.org/github.com/golang/freetype/truetype][`github.com/golang/freetype/truetype`]]
package provides the [[https://godoc.org/github.com/golang/freetype/truetype#Parse][`truetype.Parse`]] function today.
There is also work underway to add a TrueType package under `golang.org/x`
again licensed under the same open source license as the rest of the Go project's software.


We leave it to you to find some of the other unusual properties the fonts have,
but for an overview of the fonts' design we asked Chuck Bigelow to provide some background.
The remainder of this blog post is his response.

* Notes on the fonts, by Chuck Bigelow

The Go fonts are divided into two sets, Go proportional, which is
sans-serif, and Go Mono, which is slab-serif.


* Go proportional fonts


** Sans-serif

Go proportional fonts are sans-serif, like several popular fonts
for screen displays. There is some evidence that some sans-serif 
faces at small sizes and low resolutions on screens are slightly 
more legible than their seriffed counterparts, while at large sizes, 
there is not a significant difference in legibility between sans and 
seriffed faces, at least in the pair tested. [1] (The bracketed numbers
refer to the references listed at the end of this article.)


** Style

Go sans-serif fonts are "humanist" rather than "grotesque" in
style. This is an historical distinction, not an aesthetic judgment. 
Widely used sans-serif fonts like Helvetica and Arial are called 
grotesque because an early 19th century sans-serif typeface 
was named "Grotesque," and the name became generic. 


The shapes of modern grotesque fonts like Helvetica are sculpted, 
with smooth, assimilated forms. 


Humanist sans-serifs are derived from Humanist handwriting 
and early fonts of the Italian Renaissance and still show subtle 
traces of pen-written calligraphy. There is some evidence that
humanist fonts are more legible than grotesque fonts. [2] 


** Italics

Go proportional italics have the same width metrics as the roman 
fonts. Go italics are oblique versions of the romans, with one
noticeable exception: the italic lowercase 'a' is redesigned as a 
cursive single-story form to harmonize with the bowl shapes of 
the b d g p q set, in which the upright forms also adapt well to
slanting, The addition of cursive 'a' makes the italics appear more 
lively than a simply slanted roman. Some typographers believe that 
slanted roman sans-serif italics are preferable to truly "cursive" sans
Italics, in part because of history and design. [3]

.image go-fonts/abdgpq-proportional.png

** The x-height

The x-height of a typeface is the height of the lowercase 'x' relative 
to the body size. The x-height of Go fonts is 53.0% of body size, a
bit larger than the x-heights of Helvetica (52.3%) or Arial (51.9%),
but the difference is usually unnoticeable at normal reading sizes. 
Typographers believe that larger x-heights contribute to greater 
legibility in small sizes and on screens. A study of "print size"
(particularly x-height) and reading noted that types for reading on 
screens and for small sizes tend to have large x-heights. [4]


** DIN Legibility Standard

The recent German DIN 1450 legibility standard recommends
several features for font legibility, including differentiation of
letter shapes to reduce confusion. The Go fonts conform to the 
1450 standard by carefully differentiating zero from capital O;
numeral 1 from capital I (eye) and lowercase l (ell); numeral 5 from 
capital S; and numeral 8 from capital B. The shapes of bowls of
b d p q follow the natural asymmetries of legible Renaissance 
handwriting, aiding differentiation to reduce confusion. [5]


** Weights

The Go proportional fonts come in three weights: Normal, Medium, 
and Bold. The Normal weight is strong enough that it maintains 
clarity on backlit screens, which often tend to erode letter features 
and thickness. The Medium weight has stem thickness 1.25 times 
the Normal, for greater sturdiness on bright screens or for users
who prefer a sturdy font. The Bold weight has stem thickness 
1.5 times the Normal, bold enough to be distinct from the normal
weight. These Go fonts have CSS numerical weights of 400, 500, 
and 600. Although CSS specifies "Bold" as a 700 weight and 600 
as Semibold or Demibold, the Go numerical weights match the 
actual progression of the ratios of stem thicknesses: 
Normal:Medium = 400:500; Normal:Bold = 400:600. The Bold
weight name matches the use of “Bold” as the usual corresponding
bold weight of a normal font. More discussion of the relationship of
stem thicknesses, weight names, and CSS numbering is in [6].


** WGL4 character set

The WGL4 character set, originally developed by Microsoft, is often
used as an informal standard character set. WGL4 includes Western 
and Eastern European Latin characters plus Modern Greek and 
Cyrillic, with additional symbols, signs, and graphical characters,
totalling more than 650 characters in all. The Go WGL4 fonts can 
be used to compose a wide range of languages. [7]


** Metric compatibility with Arial and Helvetica

The Go sans-serif fonts are nearly metrically compatible with 
standard Helvetica or Arial characters. Texts set in Go occupy
nearly the same space as texts in Helvetica or Arial (at the same 
size), but Go has a different look and texture because of its
humanist style. Some Go letters with DIN legibility features are 
wider than corresponding letters in Helvetica or Arial, so some 
texts set in Go may take slightly more space. 


* Go Mono fonts


** Monospaced

Go Mono fonts are monospaced—each letter has the same width as
the other letters. Monospaced fonts have been used in programming 
since the beginning of computing and are still widely used because the
typewriter regularity of their spacing makes text align in columns and 
rows, a style also found in Greek inscriptions of the 5th century BC. 
(The ancient Greeks didn't have typewriters or computer keyboards, 
but they did have great mathematicians and a great sense of symmetry
and pattern that shaped their alphabet.)


** Slab-serif

The Go Mono fonts have slab-shaped serifs, giving them a sturdy 
appearance. 


** Style

The underlying letter shapes of Go Mono are, like the Go sans-serif fonts, 
derived from humanist handwriting, but the monospacing and slab serifs 
tend to obscure the historical and stylistic connections. 


** Italics

Go Mono Italics are oblique versions of the romans, with the exception
that the italic lowercase 'a' is redesigned as a cursive single-story form 
to harmonize with the bowl shapes of the b d g p q. The cursive 'a' makes 
the italics appear more lively than a simply slanted roman. As with many
sans-serif fonts, it is believed that slanted roman slab-serifs fonts may
be more legible than truly "cursive" italics.

.image go-fonts/abdgpq-mono.png

** The x-height

Go Mono fonts have the same x-height as Go sans-serif fonts, 53% of
the body size. Go Mono looks almost 18% bigger than Courier, which 
has an x-height 45% of body size. Yet Go Mono has the same width
as Courier, so the bigger look is gained with no loss of economy in
characters per line. 


** DIN Legibility Standard

Go Mono fonts conform to the DIN 1450 standard by differentiating 
zero from capital O; numeral 1 from capital I (eye) and lowercase l (ell); 
numeral 5 from capital S; and numeral 8 from capital B. The shapes of 
bowls of b d p q follow the natural asymmetries of legible Renaissance 
handwriting, aiding differentiation and reducing confusion.  


** Weights

Go Mono fonts have two weights: Normal and Bold. The normal weight 
stem is the same as in Go Normal and thus maintains clarity on backlit 
screens, which tend to erode letter features and stem thickness. The
bold stem thickness is 1.5 times thicker than the normal weight, hence
the Bold Mono has the same stem thickness as Bold Go proportional. 
Because the letter width of monospaced bold is identical to the width of 
monospaced normal, the bold Mono appears slightly bolder than the 
proportional Go Bold, as more black pixels are put into the same area.)


** Metric compatibility with popular monospaced fonts

Go Mono is metrically compatible with Courier and other monospaced
fonts that match the "Pica" typewriter type widths of 10 characters per 
linear inch at 12 point. At 10 point, Go Mono fonts set 12 characters 
per inch. The TrueType fonts are scalable, of course, so Go Mono can
be set at any size. 


** WGL4 character set

The Go Mono fonts offer the WGL4 character set often used as an
informal standard character set. WGL4 includes Western and Eastern 
European Latin characters plus Modern Greek and Cyrillic, with 
additional symbols, signs, and graphical characters. The 650+ characters 
of the Go WGL4 sets can be used for a wide range of languages.




* References


[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 language coverage: Afrikaans, Albanian, Asu, Basque,
Belarusian, Bemba, Bena, Bosnian, Bulgarian, Catalan, Chiga,
Colognian, Cornish, Croatian, Czech, Danish, Embu, English, Esperanto,
Estonian, Faroese, Filipino, Finnish, French, Friulian, Galician,
Ganda, German, Greek, Gusii, Hungarian, Icelandic, Inari Sami,
Indonesian, Irish, Italian, Jola-Fonyi, Kabuverdianu, Kalaallisut,
Kalenjin, Kamba, Kikuyu, Kinyarwanda, Latvian, Lithuanian, Lower
Sorbian, Luo, Luxembourgish, Luyia, Macedonian, Machame, Makhuwa-Meetto,
Makonde, Malagasy, Malay, Maltese, Manx, Meru, Morisyen, North
Ndebele, Northern Sami, Norwegian Bokmål, Norwegian Nynorsk, Nyankole,
Oromo, Polish, Portuguese, Romanian, Romansh, Rombo, Rundi, Russian,
Rwa, Samburu, Sango, Sangu, Scottish Gaelic, Sena, Serbian, Shambala,
Shona, Slovak, Slovenian, Soga, Somali, Spanish, Swahili, Swedish,
Swiss German, Taita, Teso, Turkish, Turkmen, Upper Sorbian, Vunjo,
Walser, Welsh, Zulu

* Jabberwocky in Go Regular

From [[https://en.wikipedia.org/wiki/Jabberwocky]]:

.image go-fonts/go-font-jabberwocky.png _ 500

There is no Greek version listed. Instead, a pangram from [[http://clagnut.com/blog/2380/#Greek]]:

.image go-fonts/go-font-greek.png _ 530