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
