% maman.tex -- Top level of Malvern documentation % Copyright 1994 P. Damian Cugley %%% @TeX-document { %%% filename = "maman.tex", %%% version = "X", %%% date = "pdc 1994.07.20", %%% package = "Malvern 1.2", %%% author = "P. Damian Cugley", %%% email = "damian.cugley@comlab.ox.ac.uk", %%% address = "Oxford University Computing Laboratory, %%% Parks Road, Oxford OX1 3QD, UK", %%% codetable = "USASCII", %%% keywords = "Malvern, METAFONT, font, typefont, TeX", %%% supported = "Maybe", %%% abstract = "Character programs for the Malvern %%% font family.", %%% dependencies = "ma55doc.tex, pdc*.tex, maamac.tex, texnical.tex, %%% mabib.tex, and many Malvern fonts", %%% } % This software is available freely but without warranty. % See the file 0copying.txt for details. %{{{ maman.tex %{{{ Preamble %**start of header \input ma55doc \input pdcidx \input pdcdcap %{{{ fonts \twosidedfalse % change to TRUE for book-style printing, FALSE for 1-sided \newif\ifPS \PSfalse % change to TRUE iff have PostScript fonts \newif\iflong \longfalse % chnage to TRUE if you want as longer manual \newfam\cpfam \newfam\xpfam \newfam\rmbfam \newfam\rmcfam \newfam\grfam \newfam\rmxfam \newfam\rmsfam \newfam\cyfam \def\extrafontsmap{\f{rmb}{ma55b}\f{rmc}{ma55c}% \@\f{rmx}{fmvmq10}\@\f{rms}{fmvm10}% \f{cp}{ma57a}\f{xp}{ma53a}\f{gr}{ma55g}\f{cy}{ma55c}} \xfontset{tiny}\extrafontsmap{7} \xfontset{small}\extrafontsmap{9} \xfontset{note}\extrafontsmap{10} \xfontset{body}\extrafontsmap{12} \def\\{\macappend\BODYtemplate} \expandafter\\\expandafter{\extrafontsmap} \bodyfonts %}}} fonts %{{{ customize footnotes & environments \def\footnotetextmark#1{{\rmb#1}} \def\footnotenotemark#1{{\rmb#1}} \def\TOCentrysubsubsec#1#2#3{} \def\n#1{$ \textfont0=\font #1 $} \mathcode`\.="70AE % make "." in maths mode centred dot % In the index, references are enclosed in $...$, so % we have to change the "encapsulation" macros: \def\idxunderline#1{\underline{#1}} \def\see#1#2{$ {\rmb \char1 } #1 $} %%%% \everylines={\smallfonts} \everybnf={\def\>{{\rmb\char1 }}\def\\{{\rmb\char124 }}} \def\notepar { \smallskip \index{note} \begingroup \it \setbox\parbox=\hbox{\it note} } \def\endnotepar { \smallbreak \endgroup } \def\example { \penalty\predisplaypenalty \smallskip \parskip=0pt \obeylines % every line is indented; blank lines ignored \the\everylines \let\end=\linesend } \def\endexample { \smallbreak \global\noindenttrue } %}}} environment tweaking %{{{ full-page Part headings % if in long mode, part headings omitted. \def\BIGmap{\f{rm}{ma55a}\@\f{mf}{logo10}} \fontset{big}\BIGmap{48}{56pt}{big}{big} \ldfont\hugerm{ma75a72} \def\part#1% {% \iflong \advance\partno1 \mark{{\thesecno}{\thesecno}} \vfill\eject \iflong \line{} \vfill \fi \begingroup \parskip=0pt \parindent=0pt \hyphenpenalty=10000 \bigfonts \rightskip=0pt plus 2em \iflong {\hugerm \thepartno}\bigskip \else \noindent\llap{\thepartno\enspace}% \fi #1 \par \TOCwrite\TOCentrypart{\thepartno}{#1} \counta=\secno \advance\counta1 \mark{{\n{\the\counta}}{\n{\the\counta}}} \iflong \headline={\hfil} \footline={\hfil} \eject \fi \endgroup \fi } %}}} full-page part headings %{{{ symbol tables \def\symtabrule#1% {% \nointerlineskip \moveleft\leftmargin \hbox {% \vrule height #1 width \dimen0 depth 0pt }% \nointerlineskip } \def\symtab {% \noindent$$ % matching $$ is in endsymtab \def\dag{{\rm\char170 }} \let\\=\symtabentry \counta=0 \openup1\jot \dimen0\hsize \advance\dimen0\leftmargin \halign to \hsize\bgroup\hskip-\leftmargin \hfil##\unskip\hfil \tabskip=0pt plus 1em minus 0.5em &\quad\tt##\unskip\hfil &&\qquad\hfil##\unskip\hfil&\quad\tt##\unskip\hfil\cr \noalign{\symtabrule{1pt}\medskip}% } \def\endsymtab {% \crcr \noalign{\nobreak\medskip \symtabrule{0.5pt}}% \egroup$$ %% matches $$ in above } \def\symtabentry#1|#2|% {% #1& \def\tmp{#2}\expandafter\stripMacro\meaning\tmp \global\advance\counta1 \ifnum\counta=3 \global\counta=0 \def\next{\cr}% \else \def\next{&}% \fi \next } \def\stripMacro#1:->{} %}}} symbol tables %{{{ font tables %% Code to typeset a font table -- lifted from my testfont.tex \newcount\tableN \newcount\hexcount \def\hexdigit#1{\ifcase#1\relax 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or 8\or 9\or A\or B\or C\or D\or E\or F\fi} \def\ntablecr {% \cr \noalign{\nointerlineskip} \multispan2\hfill &\multispan{33}\hrulefill } \def\ntable { \medskip \begingroup \openup1\jot \def\\{\char\tableN \global\advance\tableN 1} \def\0##1{&\omit&\sevenrm##1} \halign to \hsize {% \chartstrut\hss##\tabskip=0pt plus 10pt & &\hss##\hss&##\vrule\cr \lower 6.5pt\null &\00\01\02\03\04\05\06\07\08\09\0A\0B\0C\0D\0E\0F \ntablecr \global\tableN=0 \ntablelines \crcr } \medbreak \endgroup } \def\ntablelines {% \ifnum\tableN<256 \let\next\ntablecontinuation \else \let\next\relax \fi \next } \newcount\ntabtmp \def\ntablecontinuation {% % Find out if none of this row are defined by making a horizontal % list of all of them preceeded by a penalty of 1; if any of them % are defined then \lastpenalty will be something other than 1: \setbox0=\hbox{\penalty1 \def~{\char\tableN \advance\tableN 1}% ~~~~~~~~~~~~~~~~\global\ntabtmp=\lastpenalty}% % Now set the row in the table iff ntabtmp # 1: \ifnum\ntabtmp=1 \global\advance\tableN 16 \let\next=\ntablelines \else \let\next=\ntablecontinuationcontinuation \fi \next } \def\ntablecontinuationcontinuation {% \cr \noalign{\nointerlineskip \penalty5000 } & \hexcount=\tableN \divide\hexcount16 \sevenrm\hexdigit\hexcount &&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\&&\\& \ntablecr \ntablelines } \def\chartstrut{\lower 0.25\baselineskip \vbox to \baselineskip{}} %}}} font tables %{{{ aux file %% %% Hacks using the ".aux" file to store information between runs %% %% This allows cross-references and per-page footnotes. %% Normally I don't bother if a document is short enough not to need %% cross-references or an index. %% %% Often TeX must be run twice to get the Xrefs sorted out :-( %% %{{{ xrefs % Cross-refernces require two passes; one to write the xref % to the .aux file with \xreflabel, and one to use the resulting \def. % A footnote to the effect that a ref has been omitted is generated. % Perhaps this is not a great idea. \def\xref#1% {% \expcs\ifx{xref-#1}\relax \message{Warning: xref (#1) not known; you will need to TeX this file again}% <<{#1}>>% \footnote{{\rm\dag}}{Cross-references in this document are produced automatically. The values of Xrefs are written into a file called \jobname.aux, which is read at the start of the next run of \TeX\ on this file. Unknown Xrefs are replaced with the tag name used within the document, enclosed in guillemets.}% \gdef\xref##1{\expcs\ifx{xref-##1}\relax <<{##1}>>% \else\csname xref-##1\endcsname\fi}% \else \csname xref-#1\endcsname \fi } % #1 -- string of characters -- internal label for this xref % #2 -- TeX text -- what is produced by \xref{#1} on subsequent runs. \def\xreflabel#1#2% {% \edef\tmp{\string\expcs\def{xref-#1}{#2\ on page~\n{\noexpand\folio}}}% \write\auxfile\expandafter{\tmp}% } \def\rcite#1{{\xref{#1}}} % direct reference \def\cite#1{[{\xref{#1}\/}]} % parenthetically \def\ncite#1#2{[{\xref{#1}\/}, #2]} % with a note \def\lcite#1% #1 is \\-list macro of cites! {% \def\tmplist{#1}% \lop\tmp\tmplist [{\xref\tmp\def\\##1{, \xref{##1}}\tmplist}]% } %}}} %{{{ footnotes -- numbered within pages! % Data accumulated during the previous TeX run is used to % number footnotes consecutively within pages. (Obviously % this fails when footnotes changed -- but the same applies to % xrefs anyway.) % This is done by keeping two numbers per footnote -- the reference % number (increases throughout the document, and is used internally) % and the mark number (used in the completed document). % Before the first footnote on a given page, the mark number is reset to 0. % This can't be done by simply assigning it during the output routine % because TeX might have set the footnote on the next page just before % shipping out the current one. Therefore I keep a list -- call it xs % -- of footnotes that were the 1st note on a page during the previous % run. Thus xs will be an increasing list starting with 1 (because the % 1st footnote in a file is automatically the first on a page!) % Then the algorithm for each note is to increment the reference % number, and check it against head(xs); if it is equal then set the % mark number to 1 and xs := tail(xs). Otherwise, it is less than head(xs) % hence on the same page as previously, so increment the mark number. % For efficiency (ha!) xs is represented by \notelisthead (a countdef % name, set to head(xs)), and \notelist (a list macro, set to tail(xs)). \def\notelist{} % set by reading .aux file \newcount\notelisthead \newcount\notemarkcount \newcount\noterefcount \def\note % start a footnote {% \global\advance\noterefcount1 \ifnum\noterefcount=\notelisthead \ifx\notelist\empty \global\notelisthead=10000 \else \glop\tmp\notelist \global\notelisthead=\tmp \fi \notemarkcount=0 \fi \global\advance\notemarkcount1 \edef\tmp{\string\notedatum{\the\noterefcount}{\noexpand\folio}}% \write\auxfile\expandafter{\tmp}% \footnote{\number\notemarkcount}% } % The data in the .aux file is (reference number, folio) pairs % This is converted into a list of reference numbers for which % the folio is different from the preceeding one, stored in macro % \notedatumlastpage. \def\notedatumlastpage{--!--} \def\notedatum#1#2% { \def\tmp{#2} \ifx\notedatumlastpage\tmp \else \gappend\notelist{#1} \gdef\notedatumlastpage{#2} \fi } %}}} footnotes \catcode`@=11 \inputifexists{\jobname.aux} \catcode`@=12 \newwrite\auxfile \openout\auxfile=\jobname.aux \ifx\notelist\empty \notelisthead=10000 % No footnote data \else \lop\tmp\notelist \notelisthead=\tmp % set up notelisthead \fi %}}} aux file %{{{ abbrevs \def\url#1#2#3#4{(\urlnoparens{#1}{#2}{#3}{#4})} \def\urlnoparens#1#2#3#4% {% URL {\tt#1:\allowbreak //#2/\allowbreak #3/\allowbreak #4}% } \newif\ifkbnames % Captions for \topins items \newcount\tablecount \def\caption#1{\global\advance\tablecount1 \medskip\noindent {\bf Table~\n{\the\tablecount}}\quad #1\par} \def\cmrname#1{{\tt\lowercase{#1}}} \def\ISO#1{ISO~\n{#1}} % Use \vn{N} for version number after `\LaTeX' or `NFSS': \LaTeX\vn2e % This is because they prefer no space between name and version ID % whereas I think there ought to be one. \def\vn{~\n} \def\LaTeXe{\LaTeX\vn2e\note{Note that `\LaTeX\thinspace\n2\lower0.5ex\hbox{\gr e}' and `\LaTeX\vn2e' are the same thing. The lowered `{\gr e}' is merely an excessively fancy way of saying `e'.}\global\def\LaTeXe{\LaTeX\vn2e}} \def\texchar#1{\hbox{`{\tt#1}'}} \def\oct#1{\hbox{\showmark\'$\it#1$}} \def\hex#1{\hbox{\showmark\H\tt#1}} \def\TUGboat{{\it TUGboat}} \def\frac#1/#2% {% {\rmb\lowercase{#1}/\uppercase{#2}}% } \def\showmark#1% #1 is an \accent command {\hbox to 0.5em{% \def\typeImark##1{\char##1\relax}% \def\typeIImark##1{\char##1\relax}% \hss #1{}\hss }} \def\marginchar#1% {% \vadjust { \moveleft\leftmargin \vbox to 0pt { \vss \hbox to \leftmargin{\bigrm \hss#1\hss\hskip1pc}% } }% } %% Put this LAST!! \active\" \append\verbatimplains\" \def"#1"{\hbox{\it#1\/}} %}}} abbrevs \def\package{Malvern~\n{1.2}} \def\ttpackage{Malvern-1.2} %**end of header %}}} preamble %{{{ Introduction %{{{ demo \vfill\eject \begingroup \def\line#1{\hbox to \hsize{\kern-\leftmargin #1}} \bigrm \baselineskip=52pt plus 1pt \line{A\A\AE BCD\DH E\E FG\hfil.,:;`',,``''} \line{HIJKL\L MN\NG O\O\OE\hfil?`!`!?} \line{PQRST\TH UV\hfil a\a\ae bcd\dh\vd} \line{WXYZ\hfil e\e f\/ff\/fi\/fl\/ffi\/fflgh\h i\i} \line{-\/-->>\hfil j\j kl\l\vl mn\ng o\o\oe pqrs\ss} \line{\copyright\registered\hfil <<--- t\vt\th uvwxy\&z} \line{\rbrace\rbrack\char41 \rangle\hfil >\degrees\char42 \trademark\Box \careof \char152\char153 \char155 < \hfil \langle\char40 \lbrack\lbrace} \line{\spaceskip=0pt plus 1fil \dag\ \ddag\ \P{}\ \S{}\ @\ \#\ \$\ \%\ \&\ \cents\ \pounds\ \currency\ \permille\ \yen\ \florin} \line{123456\hfil\cdot/+=\times\char175\bullet\hfil\uppercase{1234}} \line{7890 \hfil\uppercase{567890}} \vskip-\prevdepth \nointerlineskip \vbox to 0pt { \vss \centerline{\headingrm 48-pt Malvern 55} } \headline={\hfil} \eject \endgroup %}}} demo.tex \part{Introduction} \iflong %{{{ about TeX and LaTeX \section{About \TeX\ and \LaTeX} \subsec{How to pronounce `\TeX'} The "X" in "\TeX" is intended to stand for a Greek letter chi ({\gr Qq}), which is like the "ch" in Scottish "loch" or German "ach", and is usually pronounced `k' by people whose languages do not include that sound. Therefore `\TeX' should be pronounced either `te"ch"' or simply `teck'. It is *not* pronounced `tecks'. Moreover, the lowering of the "E" in "\TeX" is intended to remind us that it stands for epsilon ({\gr Ee}). When it is not possible to print the "E" lowered, \TeX\ should be referred to as `TeX' (but not `Tex' or `TEX'). ^^{Lamport, Leslie} Lamport suggests that "\LaTeX" might be pronounced `lay-\TeX', `lah-\TeX', or even `lay-teks'! On systems without the capability to exactly reproduce his logo you might try `L\kern-0.2em\raise 0.5ex\hbox{a}\TeX', `La\TeX', or `LaTeX'. \subsec{\TeX} \TeX\ is a powerful and flexible typestting program. It was devised by ^^{Knuth, Donald E.} Donald~E.\ Knuth with the intention of producing with a computer typeset text (including mathematics and complex tables) as good as that of a professionally-produced book. \TeX\ goes to extraordinary lengths to produce optimal line-breaks and correctly aligned and spaced mathematics, in a way in which no DTP program currently does. Because \TeX\ is a free program---that is, anyone can get a copy of the |WEB| code and create a version that runs on their computer---and uses plain text files, it is very widely used for producing documents and exchanging them between different computer systems, especially those containing a lot of mathematical notation. Knuth describes \TeX\ in {\it The \TeX book}~\cite{TeXbook}. While this manual lacks the three-level section numbering that computer users are accustomed to, it does describe everything there is to know about \TeX, from writing simple manuscripts to designing macros and producing new formats. \TeX\ was designed to be used on a variety of different systems, at a time when the pictorial user-interfaces popular today were still rare. Therefore \TeX\ is entirely text-based: the user feeds \TeX\ a manuscript with typesetting commands embedded in it, produced with a normal text editor. \TeX\ operates in a manner similar to a compiler, converting the textual representation of the document into a compact format called DVI (from `device-independent'), analogous to machine code. The file of DVI information is printed using a separate printer-driver program. \subsec{\LaTeX} \LaTeX\ is a front-end to \TeX, written in \TeX's own macro language. It is often used in an attempt to evade the full complexity of operating with \TeX. Strictly speaking, \LaTeX\ is a \TeX\ \dfn{format}, that is, a package of \TeX\ macros compiled into a compact form. As the first macro package to offer facilities for automated sectioning, bibliography, and table-of-contents generation, \LaTeX\ has become a very popular way of producing technical documents. The standard introduction to \LaTeX\ is {\it\LaTeX: A Document Preparation System}~\cite{LaTeX} by the designer of \LaTeX, ^^{Lamport, Leslie} Leslie Lamport. This book includes a summary of the \LaTeX\ macros, but stops short of describing how to go about augmenting \LaTeX's facilities with new styles and style options. At the time of writing, two new versions of \LaTeX\ are under development. \LaTeX\vn3 will be a complete rewrite; in the meantime, \LaTeXe\ will be released as a new standard \LaTeX. \subsec{Fonts for \TeX} The fonts used with \TeX\ documents are described in two parts. The first part, the font metrics (called the TFM file), is used by \TeX\ itself when generating the DVI file. The second describes how the characters are drawn by the printer; it is in a format that depends on the particular font, driver and printer. Common formats for the second part of a font description are GF (`generic fonts' produced by \MF), PK (produced from GF files and used by many printer drivers), VF (composite fonts, that is, fonts formed by combining several other fonts), and \PS\ types~$1$ or $3$ (used on \PS\ printers). Normally, computer fonts are created from designs drawn on paper at a large size (a cap-height of $100\,\rm mm$, say) and then the outlines of the letters are scanned in by locating points along the curves with a probe (or by scanning the shapes and having a program calculate the outlines from the resulting bitmaps). Normally by the time the font is being scanned, all the design decisions have been taken and the role of the computer operators is merely to produce a faithful rendering in the correct format. \MF\ is a program which converts outlines to bitmaps and creates GF files (which contain a bitmap for each glyph). The outlines are described using \MF's own programming language, with a \dfn{character program} for each letter. Traditionally \MF\ font design delays some aesthetic decisions until well into the programming stage---in Knuth's example ("\MF\/book", Ch.~$5$), sixteen trial letters "I" are generated with different stem widths so that they can be compared against a sample letter "O". \MF\ programs can be arbitrarily complex (although the peverse nature of the \MF\ language ensures that any attempt to be too clever is severely punished). A given program can be used to generate different fonts---light and boldface, for example. Because \MF\ programs know what device the font is being generated for, they can include code intended to make the font digitize well (that is, ensure that the bitmaps resemble the original intention of the designer even on low-resolution devices). The practical upshot of this is that the facilities of the latest fancy formats for other systems (`multiple masters', `intelligent scaling', `hints') were available in \MF\ systems years ago, but the programming skill required to use them prevented them from being widely used. %}}} about TeX and LaTeX \fi %{{{ Nomenclature \section{Conventions used in this handbook} A distinctive font will be used for examples of literal text such as commands to the computer and the contents and names of text files: \begin example |ABCDEFGHIJKLMNOPQRSTUVWXYZ| |abcdefghijklmnopqrstuvwxyz| |0123456789"#$%&@*+-=,.;:?!| |()<>[]{}`'\||/_^~| \end example Italic letters are used for the names of some \MF\ variables, for metasyntactic variables, for words mentioned in sentences (such as the word "word" here), and for the titles of books and so on. Boldface is sometimes used for \MF\ `sparks'. A bold italic face is used for the first occurence of technical terms. \subsec{Citations and references} Numbers appearing in square brackets (for example, [$1$]) refer the reader to other sources for more information; they are listed in \xref{bib}. \subsec{Syntax descriptions} Occasional syntax descriptions will be given in the usual ^^{Backus--Naur formalism}^{extended Backus--Naur Formalism} (extended BNF, or EBNF): in other words, an extension of the notation described at the start of Chapter~$24$ of the {\it\TeX book} \cite{TeXbook}, `Summary of Vertical Mode'. Syntactic entities are written with angle brackets, thusly: \langle{\it dimen\/}\rangle. The arrow `{\rmb\char1}' is read as `is defined as', and the vertical bar `{\rmb\char124}' as `or'. Literal text is enclosed in quotation marks. Square brackets on the RHS of the arrow enclose optional text. \iflong As an example, take this definition from Chapter~$24$: \begin bnf \ \> \ \ \\~\ \. \ \> |true| \\ \. \ \> \ \hfil\break \\ \ \. \end bnf Using brackets the first two rules can be replaced by just one: \begin bnf \ \> \ \ \hfil\break \\~[ |true| ] \. \end bnf \fi Braces enclose text that may repeated, or rather text which may appear any number of times including zero. \iflong For example, \ can be defined as: \begin bnf \ \> \{ \ \}. \end bnf Or we could rewrite the whole of the above definition of \ as follows: \begin bnf \ \> \{ \ \} \ \hfil\break \\~[ |true| ] \. \end bnf \fi There is no conflict with the use of brace tokens in the {\it\TeX book}\/: all such tokens will be written in quotation marks in syntax rules (`|{|' and `|}|' rather then \lbrace\ and \rbrace), and besides, I~will not be referring to brace tokens. \iflong \subsec{Typefaces, founts and fonts} In traditional English usage, a \dfn{typeface} (or \dfn{face}) is the design of a set of letters, figures and symbols at any size: an abstract concept. A \dfn{fount} is an implementation of a typeface at a particular size; normally this refers to a phyiscal object, such as a set of punches or a phototypesetter film strip. By analogy with "program", I will use "font" for an analagous computer resource, whether it describes a typeface at any size (as a \PS\ scalable font does) or at a particular design size (as \TeX\ fonts do). \subsec{Italic, slanted, oblique, latin, roman and upright} The term \dfn{italic} used to refer to a cursive variation of a typeface. In phototypesetting days, sanserif faces with no italic could have an obliqued form produced using prisms. Generally \dfn{slanted} was used to mean either italic (if available) or obliqued. Nowadays almost all faces are supplied with a slanted form; for sanserif fonts these are inconsistently referred to as "italic" or "oblique". So far as I~know, Computer Modern is the only type family to include three different slanted alphabets---italic, obliqued and so-called `math italic'. The word "roman" is used to mean ordinary upright letters, as distinct from italic or bold and the like. I~shall generally distinguish between this use of "roman" and the use of "latin" to refer to the alphabets derived from the alphabet devised for writing the Latin language in classical times, as compared with the Greek and Cyrillic alphabets, for example. \iffalse \subsec{Families and super-families} A family is a collection of typefaces, intended to be compatible with each other. For example, the ITC Avant-Garde Gothic family has members such as ITC Avant-Garde Gothic Demi and ITC Avant-Garde Gothic Light Oblique, and Univers has family members (also called variants) like Univers~$55$ and Univers~$48$. Most families consist of a few different weights of italic and upright faces. There are a few `super-families', such as ITC Stone, Lucida and Computer Modern, which contain many different variants such as sanserif, typewriter, informal. ITC Stone Sans, ITC Stone Serif and ITC Stone Informal may be viewed as three separate families that were designed together (collectively a `super-family'); or, ITC Stone can be viewed as is a family with Sans Semibold Italic, Informal Italic and so on as faces within it. I~personally prefer the `splitter' approach; it keeps the number of names of font variants a document manager needs to know about relatively small, and does not greatly increase the number of family names, because there are very few super-families compared with the enormous number of normal-sized families. It also makes the design of menu-based font-selectors more straightforward. (The names Adobe uses for its fonts indicate that they are `splitters' too.) Unfortunately, \LaTeX\ was designed on the implicit assumption that `sans serif', `slanted' and `caps and small caps' are variants present in *any* family. Super-families are an intuitively pleasant concept for classifying fonts, but they are not relevant to any document-processing program I~can think of off the top of my head. That is, given document~$A$ with ITC Stone Serif and Sans and document~$B$ with Palatino and Univers, there's nothing useful that a computer can do with the information that $A$ takes all its faces from one super-family and $B$ does not. \fi % end of iffalse \fi % end if iflong \subsec{Composite letters} I will use the phrase \dfn{composite letter} to refer to letters which, regardless of their meaning in their respective languages, are *written* (not necessarily typeset) as one of the letters {\it A}--{\it Z} (called a \dfn{base glyph}) with that addition of some sort \dfn{mark}. Thus composite letters include German umlauts ({\it\"a}, {\it\"o}, {\it\"u}), accented letters in languages like Spanish ({\it\'a}, {\it\'e}, etc.), and special letters like {\it\aa}, {\it\"a} and {\it\"o} in Scandinavian languages. As well as marks that go above letters, there are some that go below ({\it\c c}, {\it\a}) and through letters ({\it\l}, {\it\o}). Normally it will be useful to distinguish between composite letters with the mark above them and the latter two categories. For example, "\A" is the same height as the letter "A", but if the letter "\AA" is to have the same height as "A" then the base glyph must be shrunk slightly. \subsec{Hyphens and dashes} To prevent confusion, I~shall use the word "dash" to refer only to the en- and em-dash symbols (`--' and `---'), and I~will use the word "hyphen" for hyphens (`-'). \iflong Hyphens (produced with one ASCII minus sign) are used in English for joining words ("ear-ring", "get-at-able"), to disambiguate a few odd compounds ("re-cover", "co-operate"), and when dividing words at the ends of lines. Short (en) dashes (|--|) are used in joining pairs where there is movement or tension between them ("London--Oxford route", "\n{1980}--\n{85}"). Long (em) dashes (|---|) are used in a similar way to parentheses or a colon. \fi \subsec{Sundry quotation marks} In English printing, the ^{quotation marks} are an ^{apostrophe} (') and an ^{inverted comma}---with hot metal typesetting this was a literally a ^{comma} that had been put in place upside-down. In German, a rather more sensible arrangement is used where two commas start quotations, and two inverted commas close them: ,,so``. To prevent confusion, I~shall consistently refer to the character `\,`\,' as an inverted comma rather than `^{left quote}', because it is not always a *left* quotation mark: \begin display , & comma & ,, & double comma\cr ` & inverted comma & `` & double inverted comma\cr ' & apostrophe & '' & double apostrophe\cr \end display There is some potential for confusion with regards to the ASCII characters `|`|'and `|'|', used by \TeX\ to stand for an inverted comma and apostrophe respectively. ASCII was designed with typewriter-like devices in mind, and |'| was intended as a combined neutral single quotation mark, acute accent and apostrophe, which is not quite the same as \TeX's use for it. Traditional UNIX names for these two characters are \dfn{quote} and \dfn{backquote}. When I~am referring to French ^{guillemets}, I~shall use `left guillemet' to refer to the one that points to the left (<<). In French and many other languages, this is used as an opening quotation mark <<\,thus\,>>; in German it is sometimes used as a closing quotation mark >>so<<. \subsec{How to refer to Malvern fonts} The name `Malvern' is spelled as a normal proper noun (no fancy typography is necessary). In English it is pronounced with the accent on the first syllable, with the "a" pronounced as in either "pal" or "pall" (natives of the town it is named after say `*mawl*-v{\rmb\char116 }n', I~tend to pronounce it `*mal*-v{\rmb\char116 }n'). In other languages it may as well be pronounced and declined according to the orthography of the language. When describing a particular version of Malvern, convention favours an unbreakable space between name and number: Malvern~$1.1$ is `|Malvern~1.1|' (like Henry~VIII, Occam~$2$, Fortran~$9$X). The same applies to naming members of the Malvern font family (Malvern~$55$, Malvern~$76$) and Malvern font encoding family (Malvern~A, Malvern~B). In the latter case the letters need not be italicized. %}}} Nomenclature %{{{ Numeric style suffixes \section{Malvern's font names} %{{{ Univers \subsec{Numeric style codes} The first font family designed as a unit was ^{Univers}. The designer, Adrien Frutiger\index{Frutiger, Adrien}, introduced two-figure codes to describe the different variations, instead of a names like `bold italic' and `light condensed'. For example, the `roman' face is called Univers~$55$, italic Univers~$56$, boldface Univers~$75$ and lightweight condensed italic Univers~$38$. Frutiger has used his system in all his subsequent font families. ^{Malvern} and other new fonts I~make use a similar system. %}}} univers %{{{ Malvern suffixes \subsec{The style codes used with Malvern} \xreflabel{s-stylecodes}{\S\thesecno} Just as with Frutiger's system, the first digit gives the weight of the font and the second digit gives the width (in the sense of `{\cp compressed}' vs.\ `{\xp expanded}'), as in the following table: \begin table \strut$#$\hfil\quad&#\hfil\qquad&$#$\hfil\quad&#\hfil\cr & \it first digit & & \it second digit\cr \noalign{\smallskip}% 1 & ultra-light (hairline) & 1, 2 & extra expanded \cr 2 & extra-light (thin) \cr 3 & light & 3, 4 & expanded/extended \cr 4 & book (semi-light) \cr 5 & medium & 5, 6 & normal width \cr 6 & demi (semi-bold) \cr 7 & bold & 7, 8 & condensed/compressed \cr 8 & extra-bold \cr 9 & ultra-bold & 9, 0 & extra compressed \cr %%%% 0 & black \cr \end table The second digit is even for a slanted face, odd for an upright face---so that the italic version of Malvern~$55$ is $56$, and of $19$ is~$10$. This in theory gives $90$ styles. The middle odd-numbered weights ($3$, $5$, and $7$) are expected to be the more commonly used ones. Similarly, the three middle widths are expected to be used more often than $1$ and~$9$. The practical upshot of this is (a)~they are more likely to be available as \mc{PK} files and (b)~they are more likely to have had their \MF\ programs tested and debugged. This system of names only allows one slanted form and cannot distinguish `compressed' from `condensed'. Normally this fine---before Knuth's Computer Modern came along, it was only heretics with \PS\ or phototypesetters without italics available who would resort to obliqued fonts. The \MF\ programs that describe Malvern have the capacity to produce `vertical italic' and obliqued forms, but these are not part of the standard Malvern pantheon. They are *not* intended to be used in normal bookwork. %}}} Malvern suffixes %{{{ TeX fonts names \subsec{\TeX\ font names} \xreflabel{s-font-names}{\S\thesecno} The question now is how to represent these fonts using reasonably portable \TeX\ font names. Recall that only lowercase letters and digits can be used, and that names must be limited to a length that even stupid filesystems like ^{MS-DOS} can handle. I~have my own system of external font names of the following form: \begin bnf ^\ \> \ \