groff: Font Families
5.17.2 Font Families
--------------------
Due to the variety of fonts available, 'gtroff' has added the concept of
"font families" and "font styles". The fonts are specified as the
concatenation of the font family and style. Specifying a font without
the family part causes 'gtroff' to use that style of the current family.
Currently, fonts for the devices '-Tps', '-Tpdf', '-Tdvi', '-Tlj4',
'-Tlbp', and the X11 fonts are set up to this mechanism. By default,
'gtroff' uses the Times family with the four styles 'R', 'I', 'B', and
'BI'.
This way, it is possible to use the basic four fonts and to select a
different font family on the command line (⇒Groff Options).
-- Request: .fam [family]
-- Register: \n[.fam]
-- Escape: \Ff
-- Escape: \F(fm
-- Escape: \F[family]
-- Register: \n[.fn]
Switch font family to FAMILY (one-character name F, two-character
name FM). If no argument is given, switch back to the previous
font family. Use '\F[]' to do this with the escape. Note that
'\FP' doesn't work; it selects font family 'P' instead.
The value at start-up is 'T'. The current font family is available
in the read-only number register '.fam' (this is a string-valued
register); it is associated with the current environment.
spam,
.fam H \" helvetica family
spam, \" used font is family H + style R = HR
.ft B \" family H + style B = font HB
spam,
.fam T \" times family
spam, \" used font is family T + style B = TB
.ft AR \" font AR (not a style)
baked beans,
.ft R \" family T + style R = font TR
and spam.
Note that '\F' doesn't produce an input token in 'gtroff'. As a
consequence, it can be used in requests like 'mc' (which expects a
single character as an argument) to change the font family on the
fly:
.mc \F[P]x\F[]
The '.fn' register contains the current "real font name" of the
current font. This is a string-valued register. If the current
font is a style, the value of '\n[.fn]' is the proper concatenation
of family and style name.
-- Request: .sty n style
Associate STYLE with font position N. A font position can be
associated either with a font or with a style. The current font is
the index of a font position and so is also either a font or a
style. If it is a style, the font that is actually used is the
font which name is the concatenation of the name of the current
family and the name of the current style. For example, if the
current font is 1 and font position 1 is associated with style 'R'
and the current font family is 'T', then font 'TR' is used. If the
current font is not a style, then the current family is ignored.
If the requests 'cs', 'bd', 'tkf', 'uf', or 'fspecial' are applied
to a style, they are instead applied to the member of the current
family corresponding to that style.
N must be a non-negative integer value.
The default family can be set with the '-f' option (⇒Groff
Options). The 'styles' command in the 'DESC' file controls which
font positions (if any) are initially associated with styles rather
than fonts. For example, the default setting for POSTSCRIPT fonts
styles R I B BI
is equivalent to
.sty 1 R
.sty 2 I
.sty 3 B
.sty 4 BI
'fam' and '\F' always check whether the current font position is
valid; this can give surprising results if the current font
position is associated with a style.
In the following example, we want to access the POSTSCRIPT font
'FooBar' from the font family 'Foo':
.sty \n[.fp] Bar
.fam Foo
=> warning: can't find font `FooR'
The default font position at start-up is 1; for the POSTSCRIPT
device, this is associated with style 'R', so 'gtroff' tries to
open 'FooR'.
A solution to this problem is to use a dummy font like the
following:
.fp 0 dummy TR \" set up dummy font at position 0
.sty \n[.fp] Bar \" register style `Bar'
.ft 0 \" switch to font at position 0
.fam Foo \" activate family `Foo'
.ft Bar \" switch to font `FooBar'
⇒Font Positions.