TTF and OTF fonts

#### Beyond Linux® From Scratch - Version 2019-02-27

### Chapter 24. X Window System Environment

- Prev

  Tuning Fontconfig

- Next

  Xorg Legacy

- Up
- Home

# TTF and OTF fonts

## About TTF and OTF fonts

Originally, Xorg provided only bitmap fonts. Later, some scalable Type1 fonts were added, but the desktop world moved on to using TrueType and Open Type fonts. To support these, Xorg uses Xft, the X FreeType interface library.

These fonts can provide hints, which fontconfig uses to adjust them for maximum readability on computer monitors. On linux you should always prefer the hinted versions, if available (in general the latin, cyrillic and greek alphabets can use hints, most other writing systems do not use hinting).

A few fonts are provided as collections (TTC or OTC) where font data is shared between different fonts, thus saving disk space. Treat these in exactly the same way as individual TTF or OTF files.

If a font provides both TTF and OTF forms, prefer the OTF form in linux, it may provide more features for programs which know how to use them (such as xelatex).

For some scripts pango is required to render things correctly, either by selecting different glyph forms, or by combining glyphs - in both cases, according to the context. This applies particularly to arabic and indic scripts.

Standard scalable fonts that come with X provide very poor Unicode coverage. You may notice in applications that use Xft that some characters appear as a box with four binary digits inside. In this case, a font with the required glyphs has not been found. Other times, applications that don't use other font families by default and don't accept substitutions from Fontconfig will display blank lines when the default font doesn't cover the orthography of the user's language.

The fonts available to a program are those which were present when it was started, so if you add an extra font and wish to use it in a program which is currently running, then you will have to close and restart that program.

Some people are happy to have dozens, or even hundreds, of font files available, but if you ever wish to select a specific font in a desktop application (for example in a word processor) then scrolling through a lot of fonts to find the right one is slow and awkward - fewer is better. So, for some font packages you might decide to install only one of the fonts - but nevertheless install the different variants (italic, bold, etc) as these are all variations for the same font name.

In the past, everybody recommended running fc-cache as the `root` user after installing or removing fonts, but this is no-longer necessary on linux, fontconfig will do it automatically if needed and if its caches are more than 30 seconds old. But if you add a font and want to immediately use it then you can run that command (as a normal user).

There are several references below to CJK characters. This stands for Chinese, Japanese and Korean, although modern Korean is now almost all written using the phonetic Hangul glyphs (it used to sometimes use Hanja glyphs which are similar to Chinese and Japanese). Unicode decided to go for Han Unification and to map some Chinese and Japanese glyphs to the same codepoints. This was very unpopular in Japan, and the result is that different fonts will render some codepoints in quite different shapes. In addition, Simplified Chinese will sometimes use the same codepoint as Traditional Chinese but will show it differently, somewhat analogous to the different shapes used for the letters 'a' and 'g' in English (single-storey and two-storey), except that in a language context one will look "wrong" rather than just "different".

Unlike most other packages in this book, the BLFS editors do not monitor the versions of the fonts on this page - once a font is good enough for general use, the typical additions in a new version are minor (e.g. new currency symbols, or glyphs not for a modern language, such as emojis or playing cards). Therefore, none of these fonts show version or md5 information.

The list below will not provide complete Unicode coverage. Unicode is updated every year, and most additions are now for historic writing systems. For almost-complete coverage you can install Noto fonts (about 180 fonts when last checked) but that number of fonts makes it much less convenient to select a specific font in a document, and most people will regard many of them as a waste of space. We used to recommend the Unicode Font Guide, but that has not been updated since 2008 and many of its links are dead.

Rendered examples of most of these fonts, and many others, with details of what languages they cover, some examples of latin fonts with the same metrics (listed as "Substitute latin fonts") and various files of dummy text to compare fonts of similar types, can be found at this font comparison page. That site also covers other current writing systems.

Fonts are often supplied in zip files, requiring UnZip-6.0 to list and extract them, but even if the current release is a tarball you should still check to see if it will create a directory (scatterring the contents of a zipfile or tarball across the current directory can be very messy, and a few fonts create odd __MACOSX/ directories. In addition, many fonts are supplied with permissions which do not let 'other' read them - if a font is to be installed for system-wide use, any directories must be mode 755 and all the files mode 644, so change them if necessary. If you forget, the root user may be able to see a particular font in fc-list but a normal user will not.

As a font installation example, consider the installation of the Dejavu fonts. In this particular package, the TTF files are in a subdirectory. From the unpacked source directory, run the following commands as the `root` user:

    install -v -d -m755 /usr/share/fonts/dejavu &&
    install -v -m644 ttf/*.ttf /usr/share/fonts/dejavu &&
    fc-cache -v /usr/share/fonts/dejavu

If you wish, you can also install any licenses or other documentation, either alongside the font or in a corresponding directory under `/usr/share/doc/`.

A few fonts ship with source as well as with the completed TTF or OTF file(s). Unless you intend to modify the font, and have the correct tools (sometimes FontForge-20170731, but often commercial tools), the source will provide no benefit, so do not install it. One or two fonts even ship with Web Open Font Format (WOFF) files - useful if you run a webserver and want to use that font on it, but not useful for desktops.

To provide greater Unicode coverage, you are recommended to install some of the following fonts, depending on what webistes and languages you wish to read. The next part of this page details some fonts which cover at least latin alphabets, the final part deals with come CJK issues.

### Note

You are strongly recommended to install the Dejavu fonts.

### Caladea

Caladea (created as a Chrome OS extra font, hence the 'crosextrafonts' tarball name) is metrically compatible with MS Cambria and can be used if you have to edit a document which somebody started in Microsoft Office using Cambria and then return it to them.

### Cantarell fonts

Cantarell fonts - The Cantarell typeface family provides a contemporary Humanist sans serif. It is particularly optimised for legibility at small sizes and is the preferred font family for the GNOME-3 user interface.

### Carlito

Carlito (created as another Chrome OS extra font, again the 'crosextrafonts-' prefix in the tarball name) is metrically compatible with MS Calibri and can be used if you have to edit a document which somebody started in Microsoft Office using Calibri and then return it to them.

### DejaVu fonts

DejaVu fonts - These fonts are an extension of, and replacement for, the Bitstream Vera fonts and provide Latin-based scripts with accents and punctuation such as "smart-quotes" and variant spacing characters, as well as Cyrillic, Greek, Arabic, Hebrew, Armenian, Georgian and some other glyphs. In the absence of the Bitstream Vera fonts (which had much less coverage), these are the default fallback fonts.

### GNU FreeFont

GNU FreeFont - This set of fonts covers many non-CJK characters, in particular some of the variants of latin and cyrillic letters used in minority languages, but the glyphs are comparatively small (unlike DejaVu fonts which are comparatively large) and rather light weight ("less black" when black on white is used) which means that in some contexts such as terminals they are not visually pleasing, for example when most other glyphs are provided by another font. On the other hand, some fonts used primarily for printed output, and many CJK fonts, are also light weight.

### Gelasio

Gelasio is metrically compatible with MS Georgia and fontconfig will use it if ever Georgia is requested but not installed.

### Liberation fonts

The Liberation fonts provide libre substitutes for Arial, Courier New, and Times New Roman. Fontconfig will use them as substitutes for those fonts, and also for the similar Helvetica, Courier, Times Roman although for these latter it can prefer a different font (see the examples in the 'Substitutes' PDFs at zarniwhoop.uk).

Many people will find the Liberation fonts useful for pages where one of those fonts is requested.

### Microsoft Core Fonts

The Microsoft Core fonts date from 2002. They were supplied with old versions of Microsoft Windows and were apparently made available for general use. You can extract them from the 'exe' files using bsd-tar from libarchive-3.3.3. Be sure to read the license before using them. At one time some of these fonts (particularly Arial, Times New Roman, and to a lesser extent Courier New) were widely specified on web pages. The full set contains Andale Mono, Arial, Arial Black, Comic Sans MS, Courier New, Georgia, Impact, Times New Roman, Trebuchet MS, Verdana and Webdings.

Please note that if you only want to use a font with the same metrics (character size, etc) as Arial, Courier New, or Times New Roman you can use the libre Liberation Fonts (above), and similarly you can replace Georgia with Gelasio.

Although many old posts recommend installing these fonts for better-looking output, there are more recent posts that these are ugly or 'broken'. One suggestion is that they do not support anti-aliasing.

The newer fonts which Microsoft made their defaults in later releases of MS Windows or MS Office (Calibri and Cambria) have never been freely available. But if you do not have them installed you can find metric equivalents (Carlito, Caladea) above.

### Noto fonts

The Noto fonts ('No Tofu', i.e. avoiding boxes with dots [hex digits] when a glyph cannot be found) is a set of fonts which aim to cover every glyph in unicode, no matter how obscure. These fonts, or at least the Sans Serif fonts, are used by KF5 (initially only for gtk applications). If you want to cover historic languages, you can download all the fonts by clicking on the link at the top of that page.

People using languages written in Latin, Greek or Cyrillic alphabets need only install Noto Sans itself, and perhaps Noto Sans Symbols for currency symbols. For more details on the CJK fonts see Noto Sans CJK below. There are also separate fonts for every other current writing system, but these too will also require Noto Sans (or Noto Serif) and perhaps Noto Symbols.

However, you should be aware that fontconfig knows nothing about Noto fonts. The 'Noto Sans Something' fonts are each treated as separate fonts (and for Arabic there is not a specifically Sans name), so if you have other fonts installed then the choice of which font to use for missing glyphs where 'Noto Sans' is specified will be random, except that Sans fonts will be preferred over known Serif and Monospace fonts because Sans is the fallback for unknown fonts.

### Oxygen fonts

When KDE Frameworks 5 was first released, it used the Oxygen fonts which were designed for integrated use with the KDE desktop. Those fonts are no-longer actively maintained, so KDE made a decision to switch to Noto fonts, but for the moment they are still required by 'startkde'.

Originally these fonts were only supplied as source, needing CMake-3.13.4 and FontForge-20170731 to create the TTF files. But for a while the source has also included the prepared TTF. The only unusual feature is that each TTF file is in its own subdirectory (`oxygen-fonts/{*-?00}/`) with the source in further subdirectories. You could just install the whole tarball if you prefer, although that will waste space.

### CJK fonts:

As indicated earlier, usage of a combination of Chinese, Japanese and Korean can be tricky - each font only covers a subset of the available codepoints, the preferred shapes of the glyphs can differ between the languages, and many of the CJK fonts do not actually support modern Korean.

Also, by default fontconfig prefers Chinese to Japanese. Tuning that is covered at Prefer chosen CJK fonts.

Although Unicode has been extended to allow a very large number of CJK codepoints, those outside the Base Plane (greater than U+0xFFFF) are not commonly used in Mandarin (the normal form of written Chinese, whether Simplified (PRC) or Traditional (Taiwan)), or Japanese.

For Hong Kong, which uses Traditional Chinese and where Cantonese is the dominant language, the Hong Kong Supplementary Character Set was added to Unicode in 2005 and revised in 2009 (it is part of CJK Extension B and contains more than 1900 characters). Earlier fonts will not be able to support either Cantonese or use of these characters where local names are written in Mandarin. The UMing HK, Noto Sans CJK HK and WenQuanYi Zen Hei fonts all seem to cover Hong Kong usage (fontconfig disagrees about Noto Sans CJK HK).

The Han glyphs are double-width, other glyphs in the same font may be narrower. For their CJK content, all of these fonts can be regarded as monospaced (i.e. fixed width).

If all you wish to do is to be able to render CJK glyphs, installing WenQuanYi ZenHei may be a good place to start if you do not already have a preference.

### Chinese fonts:

In Chinese, there are three font styles in common use: Sung (also known as Song or Ming) which is the most-common ornamented ("serif") form, Kai ("brush strokes") which is an earlier ornamented style that looks quite different, and modern Hei ("sans"). Unless you appreciate the differences, you probably do not want to install Kai fonts.

#### Noto Sans CJK

Noto Sans CJK - Sans-Serif sets of all CJK fonts in a ttc - as the link says, you can choose to install the TTC and cover all the languages in all weights in a 110MB file, or you can download subsets. There are also Monospace versions.

#### Opendesktop fonts

A copy of version 1.4.2 of the opendesktop-fonts is preserved at Arch. This was a later development of fireflysung which BLFS used to recommend, adding Kai and Mono fonts. The name of the Sung font remains 'AR PL New Sung' so they cannot both be installed together.

At one time there was a 1.6 release, and more recently some versions at github, which also included a Sans font (Odohei), but those have dropped off the web and it is unclear if there was a problem. Fontconfig does not know anything about the later fonts (AR PL New Kai, AR PL New Sung Mono) and will default to treating them as Sans.

#### UMing

UMing fonts - sets of Chinese Ming fonts (from Debian, use the '.orig' tarball) in a ttc which contain variations of Simplified and Traditional Chinese (Taiwanese, with second variant for different bopomofo, and Cantonese for Hong Kong). This ships with old-syntax files which you can install to `/etc/fonts/conf.d/` but see Editing Old-Style conf files.

#### WenQuanYi Zen Hei

WenQuanYi Zen Hei provides a Sans-Serif font which covers all CJK scripts including Korean. Although it includes old-style conf files, these are not required: fontconfig will already treat these fonts (the 'sharp' contains bitmaps, the monospace appears not to be Mono in its ASCII part) as Sans, Serif, and Monospace. If all you wish to do is to be able to render Han and Korean text without worrying about the niceties of the shapes used, the main font from this package is a good font to use.

### Japanese fonts:

In Japanese, Gothic fonts are Sans, Mincho are Serif. BLFS used to only mention the Kochi fonts, but those appear to now be the least-preferred of the Japanese fonts.

Apart from the fonts detailed below, also consider Noto Sans CJK.

#### IPAex fonts

The IPAex fonts are the current version of the IPA fonts. Click on 'English' at the link and then click on the Download icon to find IPAex Font Ver.003.01. Unfortunately, fontconfig only knows about the older IPAfonts and the forked IPA Mona font (which is not easily available and which apparently does not meet Debian's Free Software guidelines). Therefore if you install the IPAex fonts you may wish to make it known to fontconfig, see Prefer chosen CJK fonts for one possible way to do this.

#### Kochi fonts

The Kochi Substitute fonts were the first truly libre Japanese fonts (the earlier Kochi fonts were allegedly plagiarized from a commercial font).

#### VL Gothic

The VL Gothic font is a modern Japanese font in two variants with monotonic or proportional spacing for the non-Japanese characters.

### Korean fonts:

In Korean, Batang or Myeongjo (the older name) are Serif, Dotum or Gothic are the main Sans fonts. BLFS previously recommended the Baekmuk fonts, but the Nanum and Un fonts are now preferred to Baekmuk by fontconfig because of user requests.

A convenient place to see examples of these and many other Korean fonts is Free Korean Fonts. Click on 'Gothic Fonts' or 'All Categories -> Myeongjo Fonts', then click on the font example to see more details including the License, and click on the link to download it. For Nanum, you will need to be able to read Korean to find the download link on the page you get to. For Un there are direct links and you can find the un-fonts-core tarball in the `releases/` directory.

Alternatively, consider Noto Sans CJK (all of the variants cover Hangul) or WenQuanYi ZenHei.

Last updated on 2018-10-05 16:27:17 -0500

- Prev

  Tuning Fontconfig

- Next

  Xorg Legacy

- Up
- Home