| 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 |