@Section @Title { "@Font" and "@Char" } @Tag { font } @Begin @PP A @I font font. @Index { Fonts } is a collection of characters which may be printed. Many fonts come in {@I families}, family @Index { Family of a font } face @Index { Face of a font } which are groups of fonts that have been designed to go together. For example, the Times family includes the following fonts: @ID { Times Base } @Font { Base @Font { Times Base } //1vx Slope @Font { Times Slope } //1vx Bold @Font { Times Bold } //1vx BoldSlope @Font { Times BoldSlope } } Thus, each font has two names: its @I { family name } (Times, Helvetica, etc.) and its @I { face name } (Base, Slope, etc.). Times Base is more commonly called Times Roman, and Times Slope is more commonly called Times Italic. Lout avoids these names in favour of generic names which can be applied to many font families. @PP Ligatures, ligatures @Index Ligatures kerning @Index Kerning such as fl for {@OneCol f}l and fi for {@OneCol f}i, are considered by Basser Lout to be an integral part of the font: if the font definition (see below) mentions them, they will be used. Similarly, kerning (fine adjustment of the space between adjacent characters to improve the appearance) is done whenever indicated in the font definition. Enclosing one of the letters in @@OneCol is one sure way to disable a ligature or kern. @PP The @@Font symbol font.sym @Index { @@Font symbol } returns its right parameter in a font and size specified by its left: @ID { @Code "{ Times Base 12p } @Font" @I object } The family and face names must have appeared together in a {@Code fontdef}; the size is arbitrary and may be given in any one of the {@Code "c"}, {@Code "i"}, {@Code "p"}, {@Code "m"}, {@Code "f"}, {@Code "s"}, and {@Code "v"} units of measurement (Section {@NumberOf concatenation}), although @Code 10p and @Code 12p are the most common sizes for text. There may be empty objects and @@Null objects in the left parameter of @@Font; these are ignored. @PP When a @@Font symbol is nested inside the right parameter of another @@Font symbol, the inner one determines the font of its own right parameter. However, it may be abbreviated so as to inherit part of the outer symbol: @ID @Code { "{ Times Base 12p } @Font" "{ hello, Slope @Font hello, 15p @Font hello }" } has result @ID { { Times Base 12p } @Font { hello, Slope @Font hello, 15p @Font hello } } The first inner @@Font inherits the outer family and size, changing only the face; the second inherits the outer family and face. When a family name is given, it must be followed immediately by a face name. A size change may appear first or last. @PP Sizes of the form +{@I length} and --{@I length} may also be used, meaning that the font size is to be @I length larger or smaller than the inherited value. For example, --{@Code "2p"} is often used for superscripts and subscripts. These forms are highly recommended, since they don't need to be changed if a decision is made to alter the font size of the document as a whole. @PP The @@Font symbol also switches to and from small capitals: "smallcaps" @Index { small capitals } @ID @Code { "smallcaps @Font ..." "nosmallcaps @Font ..." } These may be nested, and they cooperate with other font changes. The precise effect depends on the font (see below). There is a default value (@Code {"nosmallcaps"}), so it is not necessary to mention this attribute when giving an initial font. @PP There are two predefined symbols, @@CurrFamily and @@CurrFace, which respectively return the family and face names of the current font. For example, right now @@CurrFamily is @CurrFamily and @@CurrFace is @CurrFace. @PP When Lout runs, the first thing it reads is a list of font definitions, font.def @Index { @Code fontdef } like these: @ID { @Code "fontdef Times Base {" @I implementation-dependent @Code "}" //1vx @Code "fontdef Times Slope {" @I implementation-dependent @Code "}" } Each line tells Lout of the existence of a font, and assigns it a family name and a face name. There are a few fonts which are the only members of their families; even though these fonts do not need a face name, they must be given one by their {@Code fontdef}. The part between braces may vary with different implementations of Lout; it is supposed to contain the information Lout needs to work with the font. @PP In Basser Lout Version 3, this implementation-dependent part consists of a PostScript font name, an adobe @Index { Adobe Systems, Inc. } Adobe font metrics (formerly AFM) file whose FontName entry must agree with the PostScript font name just mentioned, the name of a Lout Character Mapping (LCM) file, and the word @Code Recode or {@Code NoRecode}: @ID @Code "fontdef Times Base { Times-Roman Ti-Ro LtLatin1.LCM Recode }" It seems to have become an invariable rule at Adobe Systems that the font name and the file name should be the same, but some operating systems do not permit such long file names, so Lout does not use them. The files are searched for in standard places. Consult the PostScript Reference Manual @Cite { $adobe1990ps } for general information about fonts and encoding vectors; briefly, an 8-bit lcm. @Index { LCM file } character code @I c in Lout's input is mapped to the character in the Adobe font metrics file whose name appears on the line labelled @I c in the LCM file. The LCM file also defines various character-to-character mappings, such as upper-case to lower-case, which are used for various purposes, such as the production of small capitals. If the word @Code NoRecode appears, Lout assumes that the given encoding vector is already associated with this font in the PostScript interpreter, and optimizes its output accordingly. @PP If there are two font definitions with the same family and face name, it is an error unless the second one has the same font name and file name as the first, in which case it is silently ignored. A PostScript font name and file may appear in two or more font definitions, allowing one PostScript font to have two or more equally valid Lout names, and different LCM files. @PP The @@Char symbol char @Index { @@Char symbol } allows a character to be specified by its name (its PostScript name in Basser Lout) rather than by its code: @ID @Code "@Char nine" is equivalent to @Code "9" in most fonts. This is useful as a documentation aid and to be sure of getting the right character even if the encoding vector of the font is changed. However @@Char will fail if the character named is not in the encoding vector of the current font. @End @Section