Simplefonts - Old Content
Contents
Warning
The information on this page is outdated. See \definefontfamily for details on a simpler font mechanism defined for ConTeXt MKIV. This remainder of this page is historical in nature and the examples may no longer work with recent ConTeXt distributions.
History
Wolfgang Schuster wrote a third–party module named simplefonts
, which held a few advantages over standard ConTeXt font handling:
- the user doesn’t need to write typescripts; and
- the interface is much easier to use.
Major changes were released in October, 2013. As such, this page typically documents the earlier version of simplefonts distributed with TeX Live 2013, unless otherwise noted.
Installing simplefonts
Before October, 2013, installation of simplefonts
forConTeXt Standalone could be installed like any third-party module:
first-setup.sh --modules="t-simplefonts"
For newer release of ConTeXt (or LuaTeX with TeX Live), simplefonts
is installed by default, no additional installation steps are necessary.
Setting the system font directory
If you want to use system font within ConTeXt, the path to these fonts must be known to ConTeXt.
You have to set the OSFONTDIR
variable to the path where your system font are located. If you use ConTeXt Standalone, please follow these instructions.
In Linux, the standard value is:
OSFONTDIR= /usr/share/fonts//;$HOME/.fonts
In Windows, the following line is to be added (slashes are fine, no need for backslashes):
OSFONTDIR= c:/{windows,winnt,winnt35}/fonts//
On Mac, here is a value:
OSFONTDIR = /Library/Fonts//;/System/Library/Fonts;$HOME/Library/Fonts
(If you have font in non–standard locations or use another operating system, all you have to do is to add the path to the OSFONTDIR
variable.)
In TeX Live, you have to add this variable (or update it) in texmf.cnf
(find it with kpsewhich texmf.cnf
).
Basic usage
Here is the most basic sample:
\setupbodyfontenvironment[default][em=italic] \usemodule[simplefonts][size=10pt] \setmainfont[TeX Gyre Termes] \setsansfont[TeX Gyre Heros] \setmonofont[TeX Gyre Cursor] \starttext Serif typeface: regular, {\em italic}, {\bf bold} and {\bf\em bold italic} fonts. {\ss Sans--serif typeface: regular, {\em italic}, {\bf bold} and {\bf\em bold italic} fonts.} {\tt Monospace typeface: regular, {\em italic}, {\bf bold} and {\bf\em bold italic} fonts.} \stoptext
internal error: copy error YjCNEe/cropped.pdf
It isn’t required to define size for 12pt, since it is the default value.
Mixing fonts
In some cases, you might want to mix fonts (it is up to you whether they really match or not).
Here is the way to do it (I know that fonts don’t match):
\setupbodyfontenvironment[default][em=italic] \usemodule[simplefonts] \setmainfont[TeX Gyre Termes][italicfont=TeX Gyre Bonum-Italic, boldfont=TeX Gyre Adventor-Bold, bolditalicfont=TeX Gyre Pagella-Bold Italic] \starttext Serif typeface: regular, {\em italic}, {\bf bold} and {\bf\em bold italic} fonts. \stoptext
internal error: copy error PhklbO/cropped.pdf
Font fallback mechanism
We can have documents in which we use typefaces that lack some characters or a whole character range. In that case, font fallbacks can be defined.
The example shows how to get Greek characters for TeX Gyre Pagella (I know they don’t fit well together, but I rely on system fonts):
\setupbodyfontenvironment[default][em=italic] \usemodule[simplefonts] \setmainfontfallback[DejaVu Serif][range={greekandcoptic, greekextended}, force=yes, rscale=auto] \setmainfont[TeX Gyre Pagella] \starttext English text. δύσκολα τὰ καλά. {\em English text. δύσκολα τὰ καλά.} {\bf English text. δύσκολα τὰ καλά.} {\bf\em English text. δύσκολα τὰ καλά.} \stoptext
internal error: copy error 6f7Idi/cropped.pdf
Two things to be considered:
range
can assume the following values: any of the block names in char-ini.lua, or a manual range such as0x003B1-0x003B6
.
force=yes
should be enabled, unless you want the characters to have their glyphs from the original font replaced with the ones from the fallback font.
Defining other typefaces and fonts
simplefonts
has two commands to define fonts and two commands to define typefaces (Times Regular, Times Italics, Times Bold and Times Bold Italic are four different fonts, but a single typeface):
\definesimplefont
, defines a font for the use in headers or other style elements.\simplefont
, defines a font for inline use.\definesimplefonttypeface
, defines a single typeface.\simplefonttypeface
, can define a typeface set (such as serif, sans–serif, monospaced, caligraphy and others).
The \definesimplefont command can be used when you want a certain font for the heading of a chapter, section etc. E.g.
\definesimplefont[ChapterFont][Gentium Basic][size=24pt] \setuphead[chapter][style=ChapterFont]
but Wolfgang doesn’t recommend this command anymore (and removed it from the new, Oct. 2013 version) because you can get the same result with a custom typeface, e.g.
\definesimplefonttypeface[chapterfont][TeX Gyre Termes] \definefont[ChapterFont][\classfont{chapterfont}{Serif} at 24pt] \setuphead[chapter][style=ChapterFont]
When you want to change only the global font for your document you
need the \definesimplefonttypeface
command, e.g.
\definesimplefonttypeface[documentfont][TeX Gyre Termes] \setupbodyfont[documentfont]
Handling special cases
If the font in question has an unusual naming scheme (or wrong names) and/or it is missing some features, it may be necessary to specify the names to look for and the font features to implement.
Faking italics and bold fonts
As a general rule, it is not a good idea to use faked italics and bold fonts. A slanted font is by no means an italic one (at least, in the vast majority of typefaces). And faked bold fonts don’t look the same as real bold fonts (a similar consideration could be made about small caps).
Again, it would be the exception, rather than the rule, where this suggested method outputs a reasonable result. If you use ConTeXt for its high–quality typographical performance, using faked fonts can ruin that performance.
Wolfgang Schuster proposed the following code to get slanted and fake bold fonts:
\setupbodyfontenvironment[default][em=italic] \usemodule[simplefonts] \definefontfeature[fakeitalic][default][slant=.25] \definefontfeature[fakebold][default][extend=2] \definefontfeature[fakebolditalic][default][slant=.25, extend=2] \setmainfont[TeX Gyre Pagella] \definesimplefonttypeface[fakingall][TeX Gyre Pagella][italicfont={* Regular}, boldfont={* Regular}, bolditalicfont={* Regular}, italicfeatures=fakeitalic, boldfeatures=fakebold, bolditalicfeatures=fakebolditalic] \starttext Compare: Four fonts, real typeface: regular, {\em italic}, {\bf bold} and {\bf\em bold italic} fonts. {\fakingall One font, faked typeface: regular, {\em italic (actually slanted)} , {\bf bold (actually stretched)} and {\bf\em bold italic (actually slanted and stretched)} fonts.} \stoptext
internal error: copy error IcgSTn/cropped.pdf
Legacy
As of December 2013, the Simplefonts module is included with ConTeXt. No longer is loading an external module necessary use simplified font commands. However, the commands have changed slightly:
\setmainfont
is now:
\definefontfamily [myfamily] [serif] [DejaVu]
which also applies to sans, mono, math fonts.
Use the font family as follows:
\setupbodyfont [myfamily]
Note: Monospace fonts may have undesired ligatures when using the \type
command. Disable the ligature font features to avoid the issue as follows:
\definefontfamily [myfamily] [mono] [TeX Gyre Cursor] [features=none]
See font-sel.mkvi in the distribution for more examples and in depth explanation.