aboutsummaryrefslogtreecommitdiffstats
path: root/doc/expert/pre_font
diff options
context:
space:
mode:
Diffstat (limited to 'doc/expert/pre_font')
-rw-r--r--doc/expert/pre_font146
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