diff options
Diffstat (limited to 'doc/expert/pre_font')
-rw-r--r-- | doc/expert/pre_font | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/doc/expert/pre_font b/doc/expert/pre_font new file mode 100644 index 0000000..f014e73 --- /dev/null +++ b/doc/expert/pre_font @@ -0,0 +1,146 @@ +@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 |