Introduction

<TeX> has a very general model of using different typefaces; all it needs is to have a set of metric information for each font, and it leaves the actual setting up to the dvi driver. Within the <TeX> input file, the user associates a name with a given font at a particular size, and uses that name when she wishes to set in the font. In Knuth's descriptive `plain' macros, this is easy to work with; in <LaTeX>, however, the user works at a higher level of commands like \bf or \huge, and the system is supposed to work out which particular font is meant. In the early 1980s when <LaTeX> was being developed, there was not much choice in typefaces (everyone used Computer Modern Roman) or sizes, so Lamport simply `hard-wired' all the allowed combinations of size and style, and assigned them to specific external fonts.

Unfortunately, <LaTeX>'s font selection is not as general as it sometimes seems. The commands do not add together to produce an intuitive effect; thus the commands \it and \bf which separately produce italic and bold, do not produce bold italic when used together, but have the effect of whichever command comes last. Similarly, a size change always reverts to a normal weight font, so that \bf\Large does not produce large bold, whereas \Large\bf does. What is much worse is that if one wishes to use a different typeface throughout a document wherever (say) sans-serif is used, it requires major surgery to the innards of <LaTeX>; the font assignments are made in the file lfonts.tex which is only read when one is building the format file for <LaTeX>, something which most users never do.

The average user who simply uses the fonts which come with a typical <TeX> installation is not usually aware of the underlying lack of flexibility; however, now that many more fonts are available for use (a greater choice of <Metafont> sources, and the ubiquitous <PS> fonts), this area has been a bottleneck in the use of <LaTeX> in general typesetting. The user who wanted Times Roman as the default typeface in a document had three choices:

  1. To load many new fonts with the newfont command, and use them explicitly;
  2. To heavily edit the file lfonts.tex and build a new version of <LaTeX>; or
  3. To take large chunks out of lfonts.tex and replicate their effect in a style file.
Other style files were written to specifically implement features like bold sans-serif; but an altogether more general solution was needed, and this was met in 1989 with the New Font Selection Scheme, which was subsequently also used in AMS<LaTeX>. The NFSS is a complete replacement for lfonts.tex which contains a generic concept for varying font attributes individually and integrating new font families easily into <LaTeX>.

Since the first NFSS, considerable progress has been made towards a completely new version of <LaTeX> itself, and a new version of NFSS is one of the first useable results; this is what we will now learn about.