summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/fontinst/base/fisource.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/fontinst/base/fisource.tex')
-rw-r--r--Master/texmf-dist/source/fontinst/base/fisource.tex2985
1 files changed, 2985 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/fontinst/base/fisource.tex b/Master/texmf-dist/source/fontinst/base/fisource.tex
new file mode 100644
index 00000000000..b5a5cab7e76
--- /dev/null
+++ b/Master/texmf-dist/source/fontinst/base/fisource.tex
@@ -0,0 +1,2985 @@
+%
+% Copyright 1998, 1999, 2000 the fontinst maintenance team and any
+% individual authors listed elsewhere in this file. All rights reserved.
+%
+% This file is part of the fontinst system version 1.9.
+% -----------------------------------------------------
+%
+% It may be distributed under the terms of the LaTeX Project Public
+% License, as described in lppl.txt in the base LaTeX distribution.
+% Either version 1.0 or, at your option, any later version.
+%
+\documentclass{ltxdoc}
+\usepackage[dolayout,fileispart]{fisource}
+
+\usepackage{longtable}
+
+\RecordChanges
+\EnableCrossrefs
+
+\IndexPrologue{%
+ \section*{Index}%
+ \addcontentsline{toc}{section}{Index}%
+ \markboth{Index}{Index}%
+ Compound numbers (numbers with a hyphen) refer to a code line, and
+ the letter that is the first part of such a number specifies the
+ source file the code line is in, as explained by the file key below.
+ Simple numbers refer to pages. Numbers written in italics refer to
+ places where the corresponding entry is described, the ones
+ underlined to where it is defined, and the rest to where it is used.
+}
+\GlossaryPrologue{%
+ \section*{Change History}%
+ \addcontentsline{toc}{section}{Change History}%
+ \markboth{Change History}{Change History}%
+}
+
+
+\makeatletter
+\newcommand{\offindex}{\let\index\@gobble}
+
+\newcommand{\consumption}{%
+ \begingroup
+ \endlinechar=`\&\relax
+ \expandafter\endgroup\consumption@i
+}
+\def\consumption@i#1#2{%
+ \ifhmode{\parskip=\z@\@plus\p@\relax\par}\fi
+ Time elapsed: #1\,s\par
+ \tabskip=\leftmargin \advance \tabskip 1em\relax
+ \halign{&\hfil##\ \tabskip=\z@skip&##\hfil\tabskip=1em\cr
+ \omit\span \textbf{Stacks}&\omit\span \textbf{Others}\cr
+ \consumption@ii#2\@nil
+ }%
+}
+% #1 = number of strings used
+% #3 = string characters used
+% #5 = words of memory used
+% #7 = number of multiletter control sequences used
+% Other parameters are garbage.
+\def\consumption@ii#1 #2&#3 #4&#5 #6&#7 #8&#9&{%
+ \consumption@iii{{#1}{#3}}{{#5}{#7}}%
+}
+\def\consumption@iii#1#2#3&#4i,#5n,#6p,#7b,#8s#9\@nil{%
+ #4& input sources& \@secondoftwo#2& multiletter control
+ sequences\cr
+ #6& parameters& \@firstoftwo#1& strings\cr
+ #7& buffer characters& \@secondoftwo#1& string characters\cr
+ #8& saved values& \@firstoftwo#2& main memory words\cr
+}
+\makeatother
+
+\newenvironment{smalldes}{%
+ \list{}{%
+ \setlength\labelwidth{0pt}%
+ \setlength\itemindent{-\leftmargin}%
+ \setlength\listparindent{1em}%
+ \setlength\parsep{0pt}%
+ \setlength\itemsep{0pt plus 1pt}%
+ \setlength\topsep{\itemsep}%
+ \let\makelabel\descriptionlabel
+ }%
+}{\endlist}
+
+% \includeonly{}
+\iffalse
+\MakeShortVerb{\|}
+\fi
+
+\title{The \package{fontinst} utility}
+\author{Alan Jeffrey, Sebastian Rahtz, Ulrik Vieth, Lars Hellstr\"om}
+
+\begin{document}
+\maketitle
+\tableofcontents
+\clearpage
+
+\part*{About the \package{fontinst} package}
+\addcontentsline{toc}{part}{The \package{fontinst} documentation}
+
+This document implements and describes version~1.9 of
+\package{fontinst}.
+
+
+
+\section{Files}
+
+\subsection{Source files}
+
+The source for \package{fontinst} is currently split on the six
+source files \texttt{fibasics.dtx}, \texttt{ficommon.dtx},
+\texttt{fimain.dtx}, \texttt{ficonv.dtx}, \texttt{filtfam.dtx}, and
+\texttt{fimapgen.dtx}.
+
+
+\subsection{Generated files}
+
+By running the \package{docstrip} installation script
+\texttt{fontinst.ins}, the following files are generated:
+\begin{description}
+ \item[\texttt{fontinst.sty}] This is the executable file that
+ contains all the commands that set up the \package{fontinst}
+ utility for use.
+ \item[\texttt{xfntinst.sty}] This is a variant of
+ \texttt{fontinst.sty} in which the |\latin|\-|family| command
+ behaves differently with respect to from which fonts the digits
+ are picked (see below).
+ \item[\texttt{cfntinst.sty}] This is a variant of
+ \texttt{fontinst.sty} which supports the old way of selecting
+ boundarychar for fonts (i.e., by setting the integer
+ |boundarychar|). It requires a bit more memory than
+ \texttt{fontinst.sty} does.
+ \item[\texttt{fontinst.ini}] This file contains some very basic
+ initialization code. It is used in case \package{fontinst} is used
+ under ini\TeX\ without a preloaded format.
+ \item[\texttt{finstmsc.sty}] This file contains the routines for
+ automatic map file generation, which can now generate map files
+ for the \package{dvips} and \package{dvipdfm} drivers. The system
+ is extendable, so users interested in generating map files for
+ other drivers can extend the mapfile writer's capabilities by
+ adding code to their \texttt{finstmsc.rc} files. \emph{Contributions
+ of such code is welcome}. This file also contains some seldom-used
+ code (the ENC to ETX conversion) that has been broken off from
+ the main \package{fontinst} utility, as it almost always just sat
+ there and used up space for no good reason.
+ \item[\texttt{fontdoc.sty}] This file contains the \package{fontdoc}
+ package, which can be used to typeset encoding and metric files.
+ \item[\texttt{csc2x.tex}] This file contains the reglyphing commands
+ that set up the common caps-and-small-caps to expert names
+ conversion. See Subsections~\ref{Ssec:Des:Reglyph}
+ and~\ref{Ssec:Reglyph} for details.
+ \item[\texttt{csckrn2x.tex}] This file is a variant of
+ \texttt{csc2x.tex}, which doesn't copy the commands that actually
+ set glyphs.
+ \item[\texttt{osf2x.tex}] This file is a variant of
+ \texttt{csc2x.tex}, which only changes the names of digits.
+\end{description}
+
+\texttt{fontinst.ins} also generates the file \texttt{trig.sty}, which
+contains \index{Carlisle, David} David Carlisle's
+\SortIndex{trig package}{\package{trig} package} \package{trig}
+package, and puts it in the same place as \texttt{fontinst.sty}.
+\changes{1.914}{2000/05/14}{Generating \texttt{trig.sty} from
+ source. (LH)}
+
+
+\subsection{Modules}
+
+The source is split up on the following \package{docstrip} modules:
+\begin{description}
+ \item[\Module{boundaryCompability}, \texttt{fimain}]
+ Guards code that is needed for \package{fontinst} to be compatible
+ with the old interface for boundary ligatures and kerns.
+ \item[\Module{!boundaryCompability}, \texttt{fimain}]
+ Guards code that is used when \package{fontinst} is not to be
+ compatible with the old interface for boundary ligatures and kerns.
+ \item[\Module{debug}, \texttt{filtfam}]
+ Guards code in the |\latinfamily| section that writes \texttt{INFO>}
+ messages.
+ \item[\Module{doc}, \texttt{fibasics}, \texttt{ficommon}, and
+ \texttt{fimain}]
+ Guards code that is to go into \texttt{fontdoc.sty}.
+ \item[\Module{driver}, all files]
+ Guards the driver code---the short piece of \LaTeX\ code in the
+ beginning of each file that makes it possible to typeset as a
+ \LaTeX\ document. \texttt{docstrip.ins} doesn't extract this
+ code, but it is possible to write a script that makes
+ \package{docstrip} extract this code if one wants to write a
+ modified driver. It's not usual, though.
+ \item[\Module{everyjob}, \texttt{fibasics}]
+ Guards the code setting |\everyjob| for fontinst formats (by
+ default not used).
+ \item[\Module{!glyphs}, \texttt{ficonv}]
+ Guards reglyphing setup code that is relevant when commands that
+ set glyphs are not to be copied.
+ \item[\Module{glyphs}, \texttt{ficonv}]
+ Guards reglyphing setup code that is relevant when commands that
+ set glyphs are to be copied.
+ \item[\Module{ini}, \texttt{fibasics}]
+ Guards the code for \texttt{fontinst.ini}.
+ \item[\Module{map}, \texttt{fimapgen}]
+ Guards the code for the automatic map file generation.
+ \item[\Module{misc}, \texttt{fibasics}, \texttt{fimain}, and
+ \texttt{ficonv}]
+ Guards code that is only to go into \texttt{finstmsc.sty}.
+ \item[\Module{!misc}, \texttt{fibasics}]
+ Guards code that is not to go into \texttt{finstmsc.sty}.
+ \item[\Module{obsolete}, \texttt{ficommon} and \texttt{fimain}]
+ Guards miscellaneous pieces of code that are considered obsolete.
+ \item[\Module{oldstyle}, \texttt{filtfam}]
+ Guards code in the |\latinfamily| section. The purpose of that
+ code is described in more detail in Section~\ref{Sec:NotesOnUsing}.
+ \item[\Module{oldTeX}, \texttt{fibasics}]
+ Guards code that copes with a bug in \TeX\ versions before 3.141.
+ \item[\Module{!oldTeX}, \texttt{fibasics}]
+ Guards normal code that wouldn't work satisfactory for
+ \TeX\ versions before 3.141 due to a bug in those \TeX s.
+ \item[\Module{pkg}, all files]
+ Guards code that is to go into \texttt{fontinst.sty} (and its
+ variants).
+ \item[\Module{pkg2}, \texttt{fibasics}]
+ A special variant of \Module{pkg} that is used for code that is
+ to end up at the very end of \texttt{fontinst.sty}.
+ \item[\Module{reglyphletters}, \texttt{ficonv}]
+ Guards code that sets up for changing lower case letter names to
+ corresponding smallcaps names. Used for \texttt{csc2x.tex} and
+ \texttt{csckrn2x.tex}.
+ \item[\Module{reglyphfigures}, \texttt{ficonv}]
+ Guards code that sets up for changing ordinary figure names to
+ corresponding \texttt{oldstyle} names. Used for
+ \texttt{osf2x.tex}, \texttt{csc2x.tex}, and
+ \texttt{csckrn2x.tex}.
+ \item[\Module{reglyph}, \texttt{ficonv}]
+ Guards code that is to go to the reglyphing setup files
+ \texttt{csc2x.tex} and \texttt{csckrn2x.tex}.
+ \item[\Module{textcomp}, \texttt{filtfam}]
+ Guards code in the |\latinfamily| section that generates text symbol
+ (\texttt{TS1}\slash ``text companion'') fonts.
+ \item[\Module{underconstruction}, \texttt{main}]
+ Guards some code that is ``under construction''.
+\end{description}
+
+
+
+\section{About previous \package{fontinst} releases}
+
+\subsection{Pre-\package{doc} fontinst releases}
+
+The following is a choice of some \package{fontinst} versions and some
+comments about them. The complete list of versions in the range
+v\,0.01--1.7 can be found in the file \texttt{CHANGES}.
+\begin{description}
+\item[v\,0.01]
+ was begun by Alan Jeffrey in February 1993. This was the
+ very first version recorded in the \texttt{CHANGES} file.
+%
+\item[v\,0.19]
+ was completed in April 1993 and presented at the TUG~'93
+ conference in July 1993. It is described in the proceedings
+ in \emph{TUGboat}~14\#3 and represents one of the earliest
+ release versions, in which the user interface was still
+ subject to change.
+%
+\item[v\,1.0]
+ was begun in August 1993 right after the conference and
+ represents the beginning of a complete re-write from scratch.
+%
+\item[v\,1.333]
+ was presented one year later at the TUG~'94 conference and
+ is described in the proceedings in \emph{TUGboat}~15\#3.
+ It uses a different user interface, which is largely the same
+ as in the present version, although the internals of the
+ implementation have subsequently changed quite a bit.
+%
+\item[v\,1.335]
+ was released in September 1994 and was the last ``official''
+ release version by Alan Jeffrey. Until the summer of 1998 this was
+ still the version to be found in the \texttt{fonts}\slash
+ \texttt{utilities}\slash\texttt{fontinst} directory on CTAN.
+ It is considered obsolete and should not be used any longer.
+%
+\item[v\,1.400]
+ was prepared in November 1994 and was the first version which
+ used |8r|-encoded raw fonts as a basis for virtual fonts.
+%
+\item[v\,1.500]
+ appeared on CTAN in \texttt{fonts}\slash\texttt{psfonts}\slash
+ \texttt{tools} in September~1995 together with Sebastian Rahtz's
+ Unix shell scripts to automate the installation. This version
+ included a completely revised implementation of |\latinfamily| and
+ added the |\installrawfont| command to install ligful raw fonts.
+%
+\item[v\,1.504]
+ appeared on CTAN in \texttt{fonts}\slash\texttt{psfonts}\slash
+ \texttt{tools} in January~1996. It added code to install (real or
+ faked) small caps fonts and to fake narrow fonts, if they don't
+ exist.
+%
+\item[v\,1.511]
+ was one of the last beta versions by Alan Jeffrey which dates back
+ to June~1996, but for some reason was never released. It uses
+ the encodings |9o| and~|9d| instead of |9t| and~|9e| to install
+ expertized oldstyle fonts, but this change never found its way
+ into subsequent ``unofficial'' releases until v\,1.8.
+%
+\item[v\,1.6]
+ appeared on CTAN in \texttt{fonts}\slash\texttt{psfonts}\slash
+ \texttt{tools} in February~1997 and was the first ``unofficial''
+ version of \package{fontinst} maintained by Sebastian Rahtz. It
+ contains only minor changes compared to v\,1.504, such as switching
+ to lowercase file names, searching for |.pl| files before |.afm|
+ files, and adding the \texttt{textcomp} installation to the
+ distribution.
+%
+\item[v\,1.6]
+ was re-issued on CTAN in September~1997, when the Unix shell
+ scripts were replaced by Perl scripts. The \package{fontinst}
+ package itself didn't change apart from minor changes of the
+ debugging messages.
+%
+\item[v\,1.7]
+ is the latest ``unofficial version'', which was released on CTAN
+ in May~1998. It includes some changes to the mapping between
+ \texttt{fontname} and \LaTeX{} weight codes proposed by Ulrik
+ Vieth, as well as some code to support the use of |8r|-encoded
+ |.afm| files generated by |ttf2afm|.
+%
+\end{description}
+%
+
+\subsection{About fontinst v\,1.8}
+
+Version~1.8 of the \package{fontinst} utility was the first to have
+been converted to \package{docstrip} format (this was made by Ulrik
+Vieth) and it was first released in June~1998. It is based on
+Sebastian Rahtz's ``unofficial'' \package{fontinst} releases v\,1.6
+and~1.7 as of February~1997 and May~1998, which, in turn, are based
+on Alan Jeffrey's versions v\,1.500 and~1.504 of September~1995
+and January~1996. In addition, version v\,1.8 also incorporated
+some code from Alan Jeffrey's last beta version, v\,1.511,
+which dates back to June~1996, but was never released to the
+general public for some reason.
+
+% It should be noted that all these versions differ significantly
+% from the previous ``official'' version v\,1.335 as of September~1994,
+% which was the only one to be found in the \texttt{fontinst} directory
+% on CTAN until the summer of 1998. Version v\,1.335 is now obsolete.
+
+Version~1.8 was agreed upon by the \package{fontinst} hacker community,
+as represented on the \package{fontinst} mailing list, as the new
+officially endorsed version, on which all further additions and
+enhancements can be based.
+
+
+\section{About this \package{fontinst} release}
+
+Several improvements, some of which fixes old bugs and some of which
+introduces new features, have been made to in particular the generation
+of fonts. The most important are:
+\begin{itemize}
+ \item The old multiple |\setkern| bug, which resulted in pointless
+ |KRN| instructions being written to (V)PL files have been fixed.
+ In addition, it is now possible to reset kerns (using
+ |\resetkern|) and unset kerns (using |\unsetkerns|,
+ |\noleftkerning|, |\norightkerning|, or |\noleftrightkerning|).
+ \item A bug which resulted in too few kerns being written to a font
+ if the same glyph is used in more than one slot (this occurs if
+ you make an all-caps font from an encoding definition file which
+ sets |\lc|, |\lctop|, and |\lclig| to the same to their
+ |\uc|\textellipsis\ counterparts) has been fixed. A consequence of
+ this fix is that you cannot access the number of the slot that
+ glyph \meta{glyph} has been assigned to as |\int|\marg{glyph}
+ (unless you are using \texttt{cfntinst.sty}), but there really is
+ no need for you to do so either.
+ \item There is now a proper interface for using left and right
+ boundaries which, in contrast to the old setting of the integer
+ \texttt{boundarychar}, can make use of the full generality of the
+ PL format. (The old interface is still available if you use
+ \texttt{cfntinst.sty}.)
+ \item \package{fontinst} can now interpret AFM files which contain
+ non-integer dimensions. There is also a user-level interface for
+ changing the formula according to which the italic corrections of
+ glyphs are computed.
+ \item The PL to MTX converter can now cope with the VPL-unique
+ property lists |VTITLE|, |MAP|, and |MAPFONT|, which means that it
+ can now convert VPL files as well. In addition to this, there are
+ a couple of minor bugfixes and improvements in the PL to MTX
+ conversion.
+ \item There is now a way of overriding the PL to MTX converter's
+ automatic choice of encoding definition file made based on the
+ |CODINGSCHEME| property of a PL file. The command |\generalpltomtx|
+ lets you select which encoding definition file you want to use, as
+ does the new |\fromplgivenetx| transformed font command.
+ \item Several \package{fontinst} commands that were previously
+ missing have been added to the \package{fontdoc} package. The
+ most significant are probably |\inputmtx| and |\inputetx|.
+ \item There is now a simple way of changing the names of glyphs in
+ metric files generated from AFM files.
+ % See Subsection~\ref{Ssec:Reglyph} for further details.
+ \item The implementation of font metrics transformations, as done by
+ |\transformfont|, has been rewritten and \package{fontinst} now
+ handles uniform scaling internally; the driver only needs to do
+ $x$-scaling and slanting. This can result in different font metrics,
+ but we think only in that it comes out more like one would expect.
+ The user interface is the same.
+ \item There is now a new transformed font command |\fromany| which
+ searches for a font metric file in any of the four formats MTX,
+ PL, AFM, and VPL; converting it to MTX format and possibly
+ generating a PL as well if necessary. This command is also used by
+ |\installfont|, |\installrawfont|, and |\reglyphfont| to search
+ for font metric files, so these can now take VPL files as a
+ source for font metric data.
+ \item There is now a mechanism for generating the necessary map files
+ automatically. So far it knows how to generate map files for the
+ \package{dvips} and \package{dvipdfm} drivers, but the system can
+ easily be extended by adding code in the \texttt{finstmsc.rc} file.
+ \item There are two new commands |\setscaled|\-|rawglyph| and
+ |\setscaled|\-|notglyph| which generalize the |\setraw|\-|glyph|
+ and |\setnot|\-|glyph| commands. These commands are described in
+ Subsection~\ref{Ssec:Glyph-info}.
+ \item The routines for converting metrics to (V)PL format has
+ changed. As a result of this the metrics of fonts are likely to
+ change (slightly), but the conversion is now more accurate than it
+ used to be. A side-effect is that VPL files generated by
+ \package{fontinst} can now be used directly as a base for other
+ fonts (it used to be necessary to convert them to binary format and
+ back to get the metrics right).
+ \item \texttt{finstmsc.sty} now contains a new command which
+ generates a Postscript encoding (\texttt{.enc}) file from an ETX
+ file. The syntax of this command is
+ \begin{quote}
+ |\etxtoenc|\marg{etxfile}\marg{encfile}
+ \end{quote}
+ Usually you don't need to use this command, since the routines
+ which generate map files will call it when the encoding used in a
+ |\reencodefont| isn't known.
+ \item The new command
+ \begin{isyntax}
+ |\installfontas|\marg{font}\marg{encoding}\marg{family}%
+ \penalty0\marg{series}\penalty0\marg{shape}\penalty0\marg{size}
+ \end{isyntax}
+ adds an entry for \meta{font} with the given NFSS parameters to
+ the corresponding FD file.
+ \item The |\set|\textellipsis, |\reset|\textellipsis, and
+ |\unset|\textellipsis\ commands now behaves as one would expect
+ even when they occur between |\install|\-|fonts| and |\end|\-%
+ |install|\-|fonts|---the assignments they make are no longer
+ subject to the grouping around the metrics of individual fonts.
+ Assignments made by these commands when they occur in MTX and ETX
+ files \emph{are} however still subject to this grouping, so that
+ behaves as usual.
+ \item There are two control flow commands |\for| and |\foreach|
+ which repeatedly execute a given sequence of commands---just like
+ a normal programming language \texttt{for} loop. With |\for| the
+ loop variable is an integer that is incremented or decremented by
+ an amount that is specified in the beginning of the loop. With
+ |\foreach| the loop variable is a string which assumes all the
+ values given in a comma-separated list.
+ \item The command |\offcommand| turns a command `off', i.e., makes
+ it gobble its arguments and do nothing. The command |\oncommand|
+ turns a command back on, i.e., restores the original definition of
+ a command that had been turned off. Turning a command off or on
+ when it is already off or on respectively has no effect.
+ \item If you begin an item in the file-list argument (\#2) of
+ |\install|\-|font| or |\install|\-|raw|\-|font| with the command
+ |\metrics|, then that item (everything up till the next comma
+ that is not inside a group) will be interpreted as explicit metric
+ commands that are executed after the previous font was loaded and
+ before the next is. Thus you can do e.g.
+ \begin{quote}
+ |\installfont{|\textellipsis|}{a,\metrics\unsetint{xheight},b,|%
+ \textellipsis
+ \end{quote}
+ if you want font \texttt{a} to be loaded before font \texttt{b},
+ but want to use the \texttt{xheight} value of font \texttt{b},
+ and you don't want to bother writing an MTX file that simply
+ contains the command |\unsetint{xheight}|.
+ \item There is now a command |\fontinstcc| which switches to the
+ catcodes that are in force for most of the time that
+ \texttt{fontinst.sty} is read (|@| and |_| are letters, |~| is a
+ space, and spaces and newlines are ignored). This makes it simpler
+ to redefine internal control sequences. To switch back to the
+ normal catcodes, there is the |\normalcc| command. Neither
+ command has any arguments.
+ \item The |\Unicode| command may be used to specify what
+ ISO\,10646\slash Unicode character a slot corresponds to. See
+ page~\pageref{Unicode} for details.
+ \item The third arguments of the |\installfont| and
+ |\install|\-|raw|\-|font| commands can now be a comma-separated
+ list of ETX files.
+ \item File names in the second and third arguments of
+ |\install|\-|font| and |\install|\-|raw|\-|font| may now be
+ suffixed by zero or more \emph{modifier clauses} that can change
+ the interpretation of a file by e.g.~assigning special values to
+ some variables while the file is read in. This is described in
+ Subsection~\ref{Ssec:FontInstCmds} below.
+ \item The |\setfontdimen| command allows an ETX file to declare
+ which integer variables correspond to font dimensions in a (V)PL
+ file. This correspondence is used both when generating a ligful
+ (V)PL file and when a (V)PL file is converted to an MTX file.
+\end{itemize}
+
+
+\subsection{Metric packages}
+
+\package{fontinst} has traditionally come with a collection of MTX
+files that complement the MTX files generated from base font metrics,
+in that they build glyphs that may be missing from the base fonts or
+in some other way needs to be improved. The most well-known of these
+is the \texttt{latin.mtx} file; other examples include
+\texttt{textcomp.mtx}, \texttt{mathit.mtx}, and \texttt{latinsc.mtx}.
+A problem with these is however that they cannot produce optimal
+results for all fonts simply because there are irregular differences
+in how fonts are set up by the foundries. Most glyphs come out alright,
+but there are usually a few for which the parameters used are more or
+less wrong. Therefore most high quality font installations are made
+with modified versions of these files, where the parameters have been
+tuned to the specific font design.
+
+Modifying in particular \texttt{latin.mtx} is however not an entirely
+easy task, because this is a rather large file (with plenty of
+archaic pieces of code in curious places). Doing it once is no big
+problem, but if one has to do it several times (maybe because some
+errors are discovered in the original \texttt{latin.mtx}) then it is
+probably no fun anymore. Furthermore, if one has two or three
+modified copies of this file because one has made high quality
+installations of that many different fonts then even a trivial bugfix
+might start to feel like entirely too much work.
+
+If one has to make modifications then it is usually easier to deal
+with several small files (many of which can be used unchanged) than
+one big file. Thus it would be better if these big files were split up
+into several smaller ones.
+The main problem with splitting up something like \texttt{latin.mtx}
+is that there are some commands which are defined at the top and
+which are then used in almost all sections of the file. One must make
+certain that these commands are always loaded, which makes the metric
+files somewhat harder to use (especially if the one who tries to use
+them is not the one who wrote them).
+
+One strategy is to include all definitions needed for a metric file in
+it. This has the slight disadvantage that the commands will have to be
+defined several times. What is worse however, is that the command
+definitions will appear in several files, so if one finds a bug in one
+of them, one cannot simply correct this bug in one place. As the number
+of files can soon become quite large, correcting such bugs can become
+a boring procedure indeed.
+
+Another strategy is to put all the command definitions in one file
+and then explicitly include it in the \meta{file-list} argument of
+|\installfont|. This eliminates the repeated bug fixing problem, but
+requires the user to do something that the computer can actually do
+just as well.
+
+A third strategy is to put the command definitions in one or several
+files and then in each metric file the user explicitly mentions load
+the command definitions needed for that particular file. Metric
+packages uses an improved version of this strategy, since they also
+make it possible for fontinst to remember which packages (i.e., sets
+of command definitions) that have already been loaded, so that they
+are not unnecessarily loaded again. The \texttt{newlatin.mtx} file is
+an alternative to \texttt{latin.mtx} that implements this strategy.
+Most of the actual code is located in the following metric packages:
+\begin{longtable}{l p{0.7\linewidth}}
+ \texttt{ltcmds.mtx}& Defines some common commands used by the other
+ files.\\
+ \texttt{llbuild.mtx}& Builds the latin lower case alphabet
+ (unaccented letters are `unfakable', the rest are constructed if
+ not present in the base fonts).\\
+ \texttt{lubuild.mtx}& Builds the latin upper case alphabet.\\
+ \texttt{lsbuild.mtx}& Builds accented letters in the latin
+ smallcaps alphabet, but only if there are unaccented letters to
+ build them from in the base fonts.\\
+ \texttt{lsfake.mtx}& Fakes a latin smallcaps alphabet by shrinking
+ the upper case alphabet, but only if the glyph had not already
+ been manufactured.\\
+ \texttt{lsmisc.mtx}& Make some miscellaneous smallcaps glyphs
+ (mostly ``smallcaps f-ligatures'').\\
+ \texttt{ltpunct.mtx}& Makes digits, punctuation marks, and other
+ symbols (mostly by marking as ``unfakable'').
+\end{longtable}
+\noindent All of these are easy to use as components of equivalents
+of a modified \texttt{latin.mtx} files, and all dependencies of one
+package upon another are handled via explicit |\usemtxpackage|
+commands.
+
+For information on the syntax etcetera of commands related to metric
+packages, see Section~\ref{Sec:Metric files}.
+
+
+\subsection{Word boundary ligatures and kerns}
+
+One of the new features added in \TeX~3 was that of ligatures and
+kerns with word boundaries. \package{fontinst} has had an interface
+for making such ligatures and kerns, but it has been completely
+redesigned in v\,1.9 and the old interface (setting the integer
+|boundarychar|) is no longer recognized by \package{fontinst}. Files
+which use the old interface can still be processed with
+\texttt{cfntinst.sty}, though.
+
+Before considering the new commands, it is suitable to make a
+distinction between proper glyphs and pseudoglyphs. A proper glyph has
+been set using one of the commands |\setrawglyph|, |\setglyph|, and
+|\resetglyph|. A pseudoglyph is any name used in the context of a
+glyph name which does not denote a proper glyph. If a pseudoglyph
+|g-not| was set using the |\setnotglyph| command, then
+|\ifisglyph{g-not}\then| will evaluate to true, but something can be
+a pseudoglyph even if an |\ifisglyph| test evaluates to false. The
+interesting point about pseudoglyphs when considering word boundaries
+however, is that a pseudoglyph can have ligatures and kerns.
+
+Kerns and ligatures at the left word boundary (beginning of word) are
+specified using the commands |\setleftboundary| and
+|\endsetleftboundary|, which are syntactically identical to
+|\setslot| and |\endsetslot| respectively. One important difference is
+however that the argument to |\setslot| must be a proper glyph, while
+the argument to |\setleftboundary| may be any glyph, hence any
+pseudoglyph will do just fine.
+
+|\ligature| commands between |\setleftboundary| and
+|\endsetleftboundary| will generate beginning of word ligatures. Kerns
+on the right of the glyph specified in |\setleftboundary| will become
+beginning of word kerns.
+
+Kerns and ligatures at the right word boundary (end of word) are
+trickier, due to the asymmetrical nature of the ligkern table in a PL
+file. What a font can do is to specify that the right word boundary,
+for purposes of kerning and ligatures, should be interpreted as
+character $n$. By including a kern or ligature with character $n$ on
+the right, that kern or ligature will be used at the end of a word,
+but it will also be used each time the next character is character
+$n$. Because of this, one usually wants the slot $n$, which the right
+word boundary is interpreted as being, to be empty whenever the
+encoding allows this.
+
+The command
+\begin{quote}
+ |\setrightboundary|\marg{glyph}
+\end{quote}
+will mark the current slot as used to denote the right word boundary,
+and leave the slot empty, increasing the current slot number by one
+just like a |\setslot| \textellipsis\ |\endsetslot| block does. Kerns on
+the left of \meta{glyph} will be end of word kerns and |\ligature|
+commands with \meta{glyph} as the second argument will be for the end
+of a word.
+
+The command
+\begin{quote}
+ |\makerightboundary|\marg{glyph}
+\end{quote}
+is similar to |\setrightboundary|, but it is a slot command which may
+only be used between a |\setslot| and the matching |\endsetslot|. Like
+|\setrightboundary|, it marks the current slot as used to denote the
+right word boundary, but the glyph specified in the enclosing |\setslot|
+will be written to that slot. Ligatures for the glyph specified by the
+|\setslot| and ligatures for the glyph specified by the
+|\makerightboundary| will both be for this single slot. Kerns on the
+right of the |\setslot| glyph and the |\makerightboundary| glyph will
+similarly both be for this single slot. The idea is that the |\setslot|
+glyph should be used when making a kern or ligature for that glyph,
+while the |\makerightboundary| glyph should be used when making a kern
+or ligature for the end of a word. \package{fontinst} will warn you if
+these two uses of the slot directly contradict each other.
+
+
+\subsection{Changing the names of glyphs}
+\label{Ssec:Des:Reglyph}
+
+Sometimes, primarily when making a virtual font from more than one raw
+font and two of the raw fonts contain different glyphs with the same
+name, it becomes necessary to change the names of some glyphs to make
+some sense out of it. The main source of this kind of trouble is the
+``caps and small caps'' (SC) and ``oldstyle figures'' (OsF) fonts
+within many commercial font families. The typical problem is that what
+is typographically different glyphs---such as the lowercase `a'
+(\texttt{a}, for \package{fontinst}) and the smallcaps `\textsc{a}'
+(\texttt{Asmall}, for \package{fontinst})---are given the same name by
+the foundry.
+
+One way to get round this is to say for example
+\begin{quote}
+ |\setglyph{Asmall} \glyph{a}{1000} \endsetglyph|\\
+ |\setleftrightkerning{Asmall}{a}{1000}|\\
+ |\unsetglyph{a}|\\
+ |\noleftrightkerning{a}|
+\end{quote}
+and continuing like that for all the duplicate glyph names. This is
+however a rather prolix method and if the number of glyphs is large
+then it is usually simpler to use the |\reglyphfont| command.
+
+To reglyph one or several fonts, one writes
+\begin{quote}
+ |\reglyphfonts|\\
+ \vadjust{}\quad \meta{reglyphing commands}\\
+ |\endreglyphfonts|
+\end{quote}
+There are two types of reglyphing commands: the |\reglyphfont|
+command, and the commands that modify what |\reglyphfont| will do to
+the fonts it operates on. The syntax of |\reglyphfont| is
+\begin{quote}
+ |\reglyphfont|\marg{destination font}\marg{source font}
+\end{quote}
+The \meta{source font} font here is the name (suffix not included, of
+course) of the font metric file one wants to change the glyph names in.
+This font metric file can be in any of the formats MTX, PL, AFM, and
+VPL, and it will be converted to MTX format if it isn't already in
+that format (this happens just as for files listed in the second
+argument of |\installfont|). \meta{destination font} (which must be
+different from \meta{source font}) will be taken as the name for a
+new \texttt{.mtx} file that will be generated. The destination font
+can differ from the source font only in two ways: the names of some
+glyphs in the source font might be changed, and some of the commands
+from the source font might not have been copied to the destination
+font. To what extent the fonts are different is determined by what
+modifying commands have been executed; when no modifying commands
+have been executed, the source and destination font are equal.
+
+The modifying reglyphing commands are
+\begin{quote}
+ |\renameglyph|\marg{to}\marg{from}\\
+ |\renameglyphweighted|\marg{to}\marg{from}\marg{weight}\\
+ |\killglyph|\marg{glyph}\\
+ |\killglyphweighted|\marg{glyph}\marg{weight}\\
+ |\offmtxcommand|\marg{command}\\
+ |\onmtxcommand|\marg{command}
+\end{quote}
+|\renameglyph| simply declares that occurrences of the glyph name
+\meta{from} should be replaced by the glyph name \meta{to}. To each
+glyph name is also assigned a \emph{weight}, which is used by a
+mechanism which conditions copying of commands from the source font to
+the destination font by the set of glyphs that command mentions. The
+details of this mechanism are however somewhat tricky, so those
+interested in the full generality should go to Subsection~\ref
+{Ssec:Reglyph}. Here it needs only be noted that if one applies
+|\killglyph| to a glyph name, then (under most circumstances) commands
+that refer to that glyph name will not be copied to the destination
+font.
+
+|\offmtxcommand| and |\onmtxcommand| also control whether commands are
+copied to the destination font, but they look at the actual command
+rather than the glyphs it refers to. For example, after the command
+\begin{quote}
+ |\offmtxcommand{\setkern}|
+\end{quote}
+no |\setkern| commands will be copied. By using |\offmtxcommand|, it
+is possible to achieve effects similar to those of the files
+\texttt{kernoff.mtx} and \texttt{glyphoff.mtx}---the difference is
+that with |\offmtxcommand|, it happens at an earlier stage of the font
+generation. As expected, |\onmtxcommand| undoes the effect of
+|\offmtxcommand|.
+
+A special rule pertains to the |\set|\-|raw|\-|glyph|,
+|\set|\-|not|\-|glyph|, |\set|\-|scaled|\-|raw|\-|glyph|, and
+|\set|\-|scaled|\-|not|\-|glyph| commands, since |\transformfont|
+doesn't care what something was in the source font when it generates
+the transformed font. To turn these commands off while reglyphing,
+you use |\offmtx|\-|command| on |\set|\-|scaled|\-|raw|\-|glyph|.
+
+The effects of modifying reglyphing commands are delimited by
+|\reglyphfonts| and |\endreglyphfonts|, which starts and ends a group
+respectively.
+
+As we expect the most common reglyphing operation will be to go from SC
+glyph names to expert glyph names, there is a file \texttt{csc2x.tex}
+in the \package{fontinst} distribution which contains the modifying
+reglyphing commands needed for setting up that conversion. Thus you
+can write for example
+\begin{quote}
+ |\reglyphfonts|\\
+ | \input csc2x|\\
+ | \reglyphfont{padrcx8r}{padrc8r}|\\
+ | \reglyphfont{padscx8r}{padsc8r}|\\
+ |\endreglyphfonts|
+\end{quote}
+to alter the glyph names in the SC fonts in the Adobe Garamond
+(\texttt{pad}) family.
+Note that the names of the destination fonts here really are rather
+arbitrary, since they will only exist as \texttt{.mtx} files, and
+thus only need to work within your local file system. In particular,
+all the |\setrawglyph| commands in the destination font files still
+refer to the source font, so it is that font which the drivers need
+to know about.
+
+
+\subsection{Making map file fragments}
+
+A \emph{map file fragment} is the lines\footnote{Not in general an
+entire map file, hence the word \emph{fragment}.} of a map file that
+the corresponding driver would need for handling some set of fonts.
+When told to, \package{fontinst} can (in a fairly automatic way) create
+the map file fragment which is needed for the set of raw fonts
+\package{fontinst} has (i) installed directly (using |\installrawfont|)
+or (ii) used as a base font for some installed virtual font (generated
+by |\installfont|). \package{fontinst} does not support the map file
+syntaxes of every existing driver, but the system is designed to be
+extendable and contributions that extend its capabilities are welcome.
+Nor can \package{fontinst} examine your \TeX\ system and
+determine every piece of information needed to make the correct map
+file fragments, but you can tell it roughly how your installation
+looks, it can make guesses which work most of the time, and you can
+specify most things explicitly if the guesses turn out to be wrong.
+Should the available options for configuring the process turn out to
+be inadequate for your needs, then please write to the
+\package{fontinst} mailing list about this---there is probably a way
+to improve the system so that your needs can be met.
+
+Now what does one have to do to use this map file fragment writer,
+then? First you need to tell \package{fontinst} to record the
+information the map file fragment writer needs. You do this by giving
+the command
+\begin{quote}
+ |\recordtransforms{whatever.tex}|
+\end{quote}
+at the beginning of the run. Here \texttt{whatever.tex} is the name of
+a file that will be created, so you can use some other name if you
+like. After that you do all the calls to |\transform|\-|font|,
+|\install|\-|font|, |\install|\-|raw|\-|font|, |\latin|\-|family|,
+etc.\ you need to make the fonts you want. When you're done, you give
+the command
+\begin{quote}
+ |\endrecordtransforms|
+\end{quote}
+and end the run (say |\bye|). The file \texttt{whatever.tex} will now
+contain the information about which fonts were used and what needs to
+be done with them.
+
+The second step is to actually run the map file fragment writer.
+Observe that it is located in the file \texttt{finstmsc.sty}, not
+\texttt{fontinst.sty}! The commands you need to give it can be so few
+that you can type them in at \TeX's \texttt{*} prompt, but if you are
+writing a command file then it should typically have the following
+structure (comments not necessary, of course):
+\begin{quote}
+ \begin{tabular}{ll}
+ |\input finstmsc.sty|& |%| Input command definitions\\
+ \meta{general settings} & |%| See below\\
+ |\adddriver|\marg{driver name}\marg{output file}&
+ |%| Open output file\\
+ |\input whatever.tex|& |%| Write to output file\\
+ |\donedrivers|& |%| Close output file(s), tidy up\\
+ |\bye|& |%| Quit
+ \end{tabular}
+\end{quote}
+The |\adddriver| command gives the order ``write map file entries for
+the \meta{driver name} DVI driver to the file \meta{output file}.'' The
+plan is that it should be possible to use the name of just about any
+major driver (\texttt{dvips}, \texttt{xdvi},\footnote{Or
+does that use the same map file as \texttt{dvips}? I heard somewhere
+that it did. /LH} \texttt{pdftex},\footnote{pdf\TeX\ can read
+the map files generated for \texttt{dvips}, but a separate driver is
+desirable because the formats are not completely identical.}
+\texttt{OzTeX}, etc.) here and get suitable map file entries for that
+driver as output, but for the moment only the \texttt{dvips} and
+\texttt{dvipdfm}\footnote{Whose support I made very much to illustrate
+that you \emph{don't} have to be a big and ancient driver like
+\texttt{dvips} to have supporting code put into \package{fontinst}.
+(The fact that I just happened to have printed out the documentation and
+that is was easy to read also helped, of course.) Note, however, that
+there won't be any support for a driver unless someone sits down and
+writes the code for it! Don't assume I will. /LH} drivers are supported.
+You may also use \texttt{debug} for \meta{driver name}; the entries in
+the file for that ``DVI driver'' simply contain all the available
+information about each font (hence it should come handy for debugging
+code writing entries for real drivers) in a format that should be easy
+to interpret for a human. It could be the right choice if you're going
+to write the map file manually.
+
+The file \texttt{whatever.tex} in the above example contains the
+commands (|\makemapentry| commands) that actually cause entries to be
+written to the output file. It also contains a number of |\storemapdata|
+commands---these describe how some given font was made. If some
+metric file you have used contains |\setrawglyph| commands that were
+not automatically generated by \package{fontinst}, then there might
+not be a |\storemapdata| for the font they refer to in
+\texttt{whatever.tex}, so you will have to include such a command
+yourself somewhere. This can for example be done in the \meta{general
+settings} part of the above example file. The syntax of the
+|\storemapdata| command is described in Subsection~\ref{Ssec:interface}.
+
+Another class of things that will typically appear in the
+\meta{general settings} part above is commands that will inform the
+routines actually writing output about your \TeX\ system, about the set
+of fonts you are using on this run, or about something else that might
+be useful. Some such commands are of a general nature and affect what
+assumptions \package{fontinst} will make in certain conditions when no
+specific information is available. For the moment there commands are:
+\begin{description}
+ \item[\cs{AssumeMetafont}] Assume all fonts with PL metrics are
+ bitmaps generated by Metafont, and therefore make no entries for
+ them.
+ \item[\cs{AssumeAMSBSYY}] Assume all fonts with PL metrics have their
+ \TeX\ names in all upper case as postscript names---just like the
+ Computer Modern fonts in the AMS\slash Blue~Sky\slash Y\&Y
+ distribution.
+ \item[\cs{AssumeBaKoMa}] Assume all fonts with PL metrics have their
+ \TeX\ names in all lower case as postscript names---just like the
+ Computer Modern fonts in the BaKoMa distribution.
+\end{description}
+Otherwise the default action of the routine for finding out the
+postscript name of a font simply is to observe that it hasn't got a clue
+about what the right value is when the metrics were taken from a PL
+file, and therefore it writes `\texttt{??????}' for the postscript name.
+\begin{description}
+ \item[\cs{AssumeLWFN}] Assume postscript fonts for which nothing
+ else has been specified are stored in files which are named
+ according to the \mbox{MacOS} scheme for
+ \texttt{LWFN}s.%\footnote{LaserWriter FoNt}
+\end{description}
+Otherwise the default action is to use the name of the AFM or PL from
+which the metrics was originally taken, and add the file suffix stored
+in the string \texttt{PSfontsuffix}. The default value of this string
+is \texttt{.pfa}, but it can be changed using |\resetstr|.
+
+If neither the default nor the LWFN scheme produce correct results
+then you may use the more specific \DescribeMacro\specifypsfont
+|\specifypsfont| command, which describes exactly which file (or files,
+if any) a given font is stored in. For syntax and examples of usage,
+see Subsubsection~\ref{Sssec:Config-interface}. (I consider the
+semantics of this command to still be under development, but in order
+to know how to develop it further I need to know in which cases it is
+insufficient.)
+
+Finally, there is the |\declarepsencoding| command which is used to
+link ETX files to postscript encodings. If no postscript encoding has
+been linked to a given ETX file then \package{fontinst} will
+automatically create a postscript encoding (\texttt{.enc}) file for
+that encoding, and use this file for all reencoding commands. Again,
+see Subsubsection~\ref{Sssec:Config-interface} for syntax and examples
+of usage. The \texttt{8r} encoding is predeclared, and it doesn't
+matter if an encoding is undeclared if you never use it to reencode
+fonts, but there is potentially a problem with not having declared
+encodings you have installed and use for reencoding, as you may then
+find yourself having two files with identical names that define
+encodings that do not have the same name (as far as postscript is
+concerned).
+
+
+\subsection{On verbatim, typewriter, and monowidth fonts}
+
+The verbatim, typewriter, and monowidth concepts are common sources
+of confusion for those who use \package{fontinst} to install fonts
+with \AllTeX;\footnote{Myself \emph{not} excepted. /LH} in particular
+there are many misconceptions about the relation between them. The
+official view (of which not much has actually been brought forward)
+is that these concepts are really about three quite different things.
+
+A font is a \emph{monowidth} (monospaced, fixed-pitch) font if all
+glyphs in it have exactly the same width. Some font formats make
+special provisions for such fonts; the most notable example is the
+AFM format, where a single \texttt{CharWidth} keyword specifies the
+width for all glyphs in the font. \package{fontinst} responds to this
+by including the command
+\begin{quote}
+ |\setint{monowidth}{1}|
+\end{quote}
+in the MTX file generated from an AFM, but that is everything that is
+hard-wired into the program. That a font is monowidth is however
+something that one should take note of when installing it for \TeX,
+as it means many of the glyphs in it have such a strange appearance
+that they are (pretty much) useless. The \texttt{endash} is for
+example usually only half as long as the \texttt{hyphen} and the
+letters in ligature glyphs are only half as wide as normal letters.
+Many of the ETX and MTX files that come with \package{fontinst}
+contain special commands to avoid making use of such degenerate
+glyphs.
+
+That a font is a \emph{typewriter} font really only means that it has
+a typewriterish look about it. The two most familiar typewriter fonts
+are probably Computer Modern Typewriter (\texttt{cmtt}) and Courier.
+Both of these fonts are monowidth, but there is no absolute rule about
+this. One of the standard \TeX\ fonts is for example Computer Modern
+Variable-width Typewriter (\texttt{cmvtt}), which is not a monowidth
+font, as Figure~\ref{Fig:TTvsVTT} shows.
+\begin{figure}
+ \begin{tabular}{ll}
+ \texttt{cmtt}:& \fontfamily{cmtt}\selectfont
+ The quick brown fox jumps over the lazy dog.\\
+ \texttt{cmvtt}:& \fontfamily{cmvtt}\selectfont
+ The quick brown fox jumps over the lazy dog.
+ \end{tabular}
+ \caption{Two typewriter fonts}
+ \label{Fig:TTvsVTT}
+\end{figure}
+
+The verbatim concept has very little to do with fonts at all; in
+\LaTeX\ it is considered to be a property of the environment
+(\texttt{verbatim}, \texttt{macrocode}, etc.) rather than a property
+of the font. The connection there is with fonts is that the encoding
+of the font must contain visible ASCII (as defined in Appendix~C
+of \emph{The \TeX book}~\cite{TeXbook}) as a subset for the text to
+be rendered correctly. The \texttt{cmtt} family is the only one amongst
+the original Computer Modern fonts which meets this criterium and
+that is the primary grounds for the idea that these three concepts
+should be connected. Today that reason is at best a very weak one, as
+all \texttt{T1}-encoded fonts also meet the criterium of containing
+visible ASCII as a subset.
+
+A circumstance which has probably added to the confusion is that
+\texttt{OT1} is usually claimed to be an encoding. In reality the
+Computer Modern fonts that are declared in \LaTeX\ as being
+\texttt{OT1} display as many as five different encodings, as shown in
+Table~\ref{Tab:OT1-fonts}.
+\begin{table}
+ \begin{tabular}{lccc}
+ & \texttt{TEX TEXT}&
+ \begin{tabular}[b]{c}\texttt{TEX TEXT WITHOUT}\\
+ \texttt{F-LIGATURES}\end{tabular}&
+ \texttt{TEX TYPEWRITER TEXT}\\
+ \noalign{\medskip}
+ non-italic&
+ \begin{tabular}{l}
+ \texttt{cmb10}\\
+ \texttt{cmbx5}--\texttt{12}\\
+ \texttt{cmbxsl10}\\
+ \texttt{cmdunh10}\\
+ \texttt{cmff10}\\
+ \texttt{cmfib8}\\
+ \texttt{cmr6}--\texttt{17}\\
+ \texttt{cmsl8}--\texttt{12}\\
+ \texttt{cmss8}--\texttt{17}\\
+ \texttt{cmssbx10}\\
+ \texttt{cmssdc10}\\
+ \texttt{cmssi8}--\texttt{17}\\
+ \texttt{cmssq8}\\
+ \texttt{cmssqi8}\\
+ \texttt{cmvtt10}
+ \end{tabular}&
+ \begin{tabular}{l}
+ \texttt{cmcsc8}--\texttt{10}\\
+ \texttt{cmr5}
+ \end{tabular}&
+ \begin{tabular}{l}
+ \texttt{cmsltt10}\\
+ \texttt{cmtcsc10}\\
+ \texttt{cmtt8}--\texttt{12}
+ \end{tabular}\\
+ \noalign{\medskip}
+ italic&
+ \begin{tabular}{l}
+ \texttt{cmbxti10}\\
+ \texttt{cmfi10}\\
+ \texttt{cmti7}--\texttt{12}\\
+ \texttt{cmu10}
+ \end{tabular}&&
+ \begin{tabular}{l}
+ \texttt{cmitt10}
+ \end{tabular}
+ \end{tabular}
+ \caption{``\texttt{OT1}-encoded'' Computer Modern fonts, collected
+ according to the actual font encoding}
+ \label{Tab:OT1-fonts}
+\end{table}
+Since most monowidth fonts are only used for setting verbatim text,
+there is some code in \texttt{ot1.etx} which automatically chooses a
+\texttt{TEX TYPEWRITER TEXT} encoding for the font when the
+\texttt{monowidth} integer is set. The only reason for this is the
+guess that this is what the user wanted.
+
+
+\subsection{Tuning accent positions---an application of loops}
+
+The accent placements made by \texttt{latin.mtx} certainly aren't
+perfect for all fonts, and the only way to find out where they should
+be put is through trying in text the accented letters you get for a
+couple of values for the position parameter and deciding which one
+works best. Since to try one parameter value you need to (i) edit it
+into an MTX file, (ii) run \package{fontinst}, (iii) run
+\package{VPtoVF}, (iv) run \TeX\ on some test text, and (v) print that
+text, trying one parameter value can take annoyingly much time.
+Repeating the same procedure ten times to test ten values is not
+something one does without being bored (unless one scripts it, of
+course), but it is possible to try ten parameter values in a single
+virtual font, and without doing very much typing.
+
+Say you're not too happy with how \texttt{latin.mtx} positions the
+accent in the \texttt{ohungarumlaut} glyph:
+\begin{quote}
+ |\setglyph{ohungarumlaut}|\\
+ | \topaccent{o}{hungarumlaut}{500}|\\
+ |\endsetglyph|
+\end{quote}
+The |500| is the horizontal position (in thousandths of the width of
+the \texttt{o}) that the center of \texttt{hungarumlaut} in the glyph
+constructed will have, so that is the position parameter value that
+you want to change. Create an MTX file containing the code
+\begin{quote}
+ |\for(pos){250}{750}{50}|\\
+ | \setglyph{ohungarumlaut\strint{pos}}|\\
+ | \topaccent{o}{hungarumlaut}{\int{pos}}|\\
+ | \endsetglyph|\\
+ | \setleftrightkerning{ohungarumlaut\strint{pos}}|\\
+ | {ohungarumlaut}{1000}|\\
+ |\endfor(pos)|
+\end{quote}
+This will set eleven glyphs \texttt{ohungarumlaut250},
+\texttt{ohungarumlaut300}, \texttt{ohungarumlaut350}, \textellipsis\,,
+\texttt{ohungarumlaut750}, each being an Hungarianly umlauted `o'
+(i.e., an `\H{o}') but all having that umlaut in slightly different
+positions. In order to put them in a font, you also need to make an
+encoding that contains them. Therefore create an ETX file which
+contains the code
+\begin{quote}
+ |\relax\encoding|\\
+ |\nextslot{"C0}|\\
+ |\for(pos){250}{750}{50}|\\
+ | \setslot{ohungarumlaut\strint{pos}}|\\
+ | \endsetslot|\\
+ |\endfor(pos)|\\
+ |\endencoding|
+\end{quote}
+The command for installing this experiment font would be something like
+\begin{isyntax}
+ |\installfont|\marg{some name}|{|\meta{the normal list of metrics}%
+ |,|\penalty0\meta{the new MTX}|}|\penalty0
+ |{ot1,|\meta{the new ETX}|}|\penalty0|{OT1}|\textellipsis
+\end{isyntax}
+The reason for including \texttt{ot1} in the third argument above is
+that you'll need letters other than `\H{o}' against which you can
+compare the experimental glyphs. It would not have been possible to
+use \texttt{t1} instead of \texttt{ot1} (even though that has more
+Hungarian letters) since that would set all slots in the font and
+leave none for these experimental \texttt{ohungarumlaut}s.
+
+It is even possible to use a loop for making the test text. The
+\LaTeX\ macros
+\begin{verbatim}
+\newcount\slotcount
+\newcommand\testtext[3]{%
+ \slotcount=#1\relax
+ \begin{description}%
+ \loop\item[\the\slotcount]#3%
+ \ifnum #2>\slotcount \advance \slotcount 1 \repeat
+ \end{description}%
+}
+\DeclareTextCompositeCommand{\H}{OT1}{o}{\char\slotcount}
+\end{verbatim}
+will let you write
+\begin{quote}
+ |\testtext|\marg{first}\marg{last}\marg{text}
+\end{quote}
+to get the text \meta{text} typeset once for each slot from
+\meta{first} to \meta{last} inclusive, with |\H{o}| ranging through the
+glyphs in this interval. Thus in this case
+|\testtext|\penalty\hyphenpenalty|{"C0}|\penalty\hyphenpenalty|{"CA}|%
+\penalty\hyphenpenalty|{Erd\H{o}s}| would be a trivial test.
+
+
+\subsection{Font installation commands}
+\label{Ssec:FontInstCmds}
+
+The |\installfont|, |\installrawfont|, and |\installfontas| commands
+have the respective syntaxes
+\begin{isyntax}
+ |\installfont|\marg{font-name}\marg{metrics}\marg{etx-list}\penalty0
+ \marg{encoding}\marg{family}\marg{series}\marg{shape}\marg{size}\\
+ |\installrawfont|\marg{font-name}\marg{metrics}\marg{etx-list}^^A
+ \penalty0
+ \marg{encoding}\marg{family}\marg{series}\marg{shape}\marg{size}\\
+ |\installfontas|\marg{font-name}\penalty0\marg{encoding}^^A
+ \marg{family}\marg{series}\marg{shape}\marg{size}
+\end{isyntax}
+The \meta{font-name} argument and the last five arguments are common
+to all these commands. The first argument is the name of a \TeX\ font
+to install. The last five arguments are the NFSS attributes under which
+that font will be declared to \LaTeX---encoding, family, series, shape,
+and size. It is worth observing that encoding names are usually in
+upper case, whereas the family, series, and shape are usually in lower
+case. The size argument is either a shorthand (declared using
+\DescribeMacro{\declaresize}|\declaresize|) for a particular font
+size (or range of font sizes), or an explicit list of font sizes or
+ranges of sizes, which is copied directly to the font declaration.
+The most common case is to let the size argument be empty, as that is
+declared as a shorthand for ``any size''.
+
+The |\installfontas| command does not itself create the font, it just
+makes a note that the specified font declaration should be written to
+the proper FD file at |\end|\-|install|\-|fonts|. The
+|\install|\-|font| and |\install|\-|raw|\-|font| commands do however
+produce the font, in the sense that they write a VPL and PL
+respectively file for the font. It depends solely on the \meta{metrics}
+and \meta{etx-list} arguments what this font will contain. Many
+features of these arguments are new with \package{fontinst} v\,1.9;
+therefore the complete syntaxes are described below.
+
+Both arguments are comma-separated lists of basically file names (not
+including an extension). The files listed in the \meta{metrics} are
+font metric files which together build up a \emph{glyph base}
+(definitions of glyphs and metrics related to one or several glyphs),
+whereas the files listed in the \meta{etx-list} are encoding definition
+files that select a subset of the glyph base for turning into a
+\TeX\ font. The font metrics can be in either of the four formats
+MTX, PL, AFM, and VPL, which are considered in that order. If the
+metrics are not originally in MTX format then they will be converted
+to this format (a new file will be created) before they are used.
+The encoding definitions must be in ETX format. The files actually
+read will have a suffix \texttt{.mtx}, \texttt{.pl}, \texttt{.afm},
+\texttt{.vpl}, or \texttt{.etx} appended to the name given, depending
+on which format is expected.
+
+Within each element of the comma-separated list, the actual file name
+is followed by zero or more \emph{modifier clause}s. A \meta{modifier
+clause} consists of a \emph{keyword} followed by some number (usually
+one) of \emph{arguments}, separated by spaces. The whole thing looks
+a lot like the \meta{rule specifications} of e.g.\ the |\vrule|
+command, but here the spaces are mandatory. The currently defined
+\meta{modifier clause}s are
+\begin{description}
+ \item[\mdseries\textvisiblespace\texttt{option}\textvisiblespace
+ \meta{string}]
+ Available for metric and encoding files. This adds \meta{string}
+ to the list of options for this file, which may affect what code
+ the file executes. The file can then test, using the |\ifoption|
+ command, whether a specific string is one of the options it was
+ given.
+ \item[\mdseries\textvisiblespace\texttt{scaled}\textvisiblespace
+ \meta{factor}]
+ Available for metric files. Causes the \texttt{rawscale} integer
+ variable to be set to the \meta{factor} (an integer expression)
+ while the file is being read. This scales glyphs and kerns that
+ are added to the glyph base by the \meta{factor}.
+ \item[\mdseries\textvisiblespace\texttt{suffix}\textvisiblespace
+ \meta{suffix}]
+ Available for metric files. Causes \meta{suffix} to be appended
+ to every glyph name appearing in a glyph or kern that file adds
+ to the glyph base. Thus ``\texttt{suffix /2}'' effectively
+ changes a
+ \begin{quote}
+ |\setrawglyph{a}|\dots
+ \end{quote}
+ to a
+ \begin{quote}
+ |\setrawglyph{a/2}|\dots
+ \end{quote}
+ \item[\mdseries\textvisiblespace\texttt{encoding}\textvisiblespace
+ \meta{etx-name}]
+ Available for metric files, and forces \package{fontinst} to
+ only consider the PL and VPL formats for this font.
+ As these file formats do not contain glyph names, an ETX file
+ is used to assign glyph names to the slots in the font.
+ This ETX file is usually selected according to the
+ \texttt{CODINGSCHEME} property of the PL or VPL (using the
+ correspondances set up via the |\declare|\-|encoding| command),
+ but that information is not always as one would want it (there
+ are even fonts for which it is quite wrong). An \texttt{encoding}
+ clause bypasses this automatic mechanism, so that the file
+ \meta{etx-name}\texttt{.etx} is used instead.
+
+% % The following is no longer true as of v1.926:
+% \textbf{Note:} The first time that a file in PL or VPL format is
+% used in a \meta{metrics} argument, a corresponding MTX file is
+% generated. This means that if the same file reference is used
+% another time then the reference will be to the MTX file, not to
+% the original PL or VPL, and thus \texttt{encoding} clauses on
+% subsequent uses will have no effect. Each font only has one
+% encoding, so it usually makes no sense to switch the ETX file
+% used to interpret a font, but since MTX files are not
+% automatically deleted between runs there is a risk that this
+% takes away the intended effect of an \texttt{encoding} clause.
+
+ \item[\mdseries\textvisiblespace\texttt{mtxasetx}]
+ This is available for files in the \meta{etx-list}. The actual
+ function of a
+ \begin{quote}
+ \meta{file-name} \texttt{mtxasetx}
+ \end{quote}
+ item in the \meta{etx-list} is that the file
+ \meta{file-name}\texttt{.mtx} is inputted (\emph{not}
+ \meta{file-name}\texttt{.etx}) and that the correspondance
+ between glyph names and slot numbers set up in
+ |\set|\-|raw|\-|glyph| or |\set|\-|scaled|\-|raw|\-|glyph|
+ commands in this file is treated as if it had been set up by
+ |\setslot| commands in an ETX file. Provided the MTX file is
+ transformable, the glyph base will be unaffected.
+
+ The purpose of this feature is to simplify quick and dirty
+ installations of odd fonts for which no suitable ETX file is
+ available. This can be useful in early stages of the design of
+ a new font, but is inferior to installation using proper ETX
+ files since one for example cannot specify any ligatures in
+ MTX files.
+\end{description}
+Furthermore there is a special exception for the \meta{metrics}: if
+the first token in one of the list items is the control sequence
+|\metrics|, then the rest of that item is interpreted as explicit
+metric commands to execute.
+
+If the \meta{metrics} of two subsequent |\install|\-|font|
+or |\install|\-|raw|\-|font| commands are identical then the glyph
+bases will be identical as well. This creates an opportunity for
+optimization, which \package{fontinst} makes use of by caching glyph
+bases from one installation command to the next so that the glyph
+base does not have to be rebuilt in these cases. A side-effect of
+this caching is that local assignments made between two font
+installation commands are cleared out with the glyph base, but
+|\setint| and similar \package{fontinst} commands make global
+assignments when used in such positions.
+
+Some examples might be in order. The first is an adaptation of an
+installation command from \texttt{mfnt-0.59}~\cite{mfnt} by
+Matthias Clasen and Ulrik Vieth: the installation command for the
+8-bit math font \texttt{xma1000} (which can be thought of as being
+to \texttt{cmmi10} sort of as \texttt{ecrm1000} is to \texttt{cmr10}).
+The first three \texttt{encoding} clauses are more fine-tuning---without
+them, a few glyphs would get incorrect names---but the last two are
+quite essential, as the \texttt{msam10} and \texttt{msbm10} fonts
+incorrectly claim to have the coding scheme \texttt{TEX MATH
+SYMBOLS}.
+\begin{verbatim}
+ \installfont{xma1000}{%
+ yma1000 encoding mcin,%
+ cmr10 encoding ot1upright,%
+ cmmi10,%
+ cmsy10 encoding omscal,%
+ msam10 encoding msam,%
+ msbm10 encoding msbm,%
+ mccmhax,mccmkern,mcmissing,%
+ cmsy10-base,cmsy10-extra%
+ }{mc}{MC}{cm}{m}{n}{<10->}
+\end{verbatim}
+Also note the explicit \LaTeX\ size specification for the range
+``10\,pt and up''.
+
+The second example makes use of a \texttt{suffix} clause to combine
+the letters from one font with the digits from another.
+\begin{verbatim}
+ \installfont{msbrj8t}{msbr8r,msbrc8r suffix /2,latin}{digit2,t1}
+ {T1}{msbj}{m}{n}{}
+\end{verbatim}
+In this case, the glyph base contains the glyphs of Monotype Sabon
+(SabonMT)---under names such as \texttt{A} for `A', \texttt{a} for
+`a', and \texttt{one} for a lining digit one---as well as the
+glyphs of Monotype Sabon Small Caps and Oldstyle Figures
+(SabonMT-SCOSF)---under names such as \texttt{A/2} for `A',
+\texttt{a/2} for `\textsc{a}', and \texttt{one/2} for a hanging
+digit one. The \texttt{digit2.etx} file simply makes the definition
+\begin{verbatim}
+ \setcommand\digit#1{#1/2}
+\end{verbatim}
+which causes \texttt{t1.etx} to put \texttt{zero/2} in slot 48 (digit
+zero), \texttt{one/2} in slot 49 etc., instead of as it normally
+would \texttt{zero} in slot 48, \texttt{one} in slot 49 and so on.
+The net effect is that the digits in the generated \texttt{msbrj8t}
+is from \texttt{msbrc8r} (SabonMT-SCOSF) but everything else is from
+\texttt{msbr8r} (SabonMT).
+
+The third example makes use of an \texttt{mtxasetx} clause to install
+(with its default encoding) a font for which creating an appropriate
+ETX file seems not worth the trouble.
+\begin{verbatim}
+ \installrawfont{psyr}{psyr,\metrics
+ \setint{xheight}{\height{alpha}}
+ }{txtfdmns,psyr mtxasetx}{U}{psy}{m}{n}{}
+\end{verbatim}
+The effect of the second \texttt{psyr} is that \texttt{psyr.mtx} is
+read (in case there was no \texttt{psyr.mtx} then it is created from
+(hopefully) \texttt{psyr.afm}) and the information in it will form
+the glyph base. Because of the |\metrics| control sequence, the rest
+of that item will be interpreted as explicit metric commands
+modifying the glyph base, and thus the |\setint| command can provide
+a value for the \texttt{xheight} variable (there doesn't seem to be
+such a value in the AFM). Once the glyph base is completed, the
+|\install|\-|raw|\-|font| starts writing the file \texttt{psyr.pl}
+(that's for the first \texttt{psyr}). The encoding of that font will,
+because of the \texttt{psyr mtxasetx}, be the same as that used in
+\texttt{psyr.mtx}. Finally, the \texttt{txtfdmns} is for
+\texttt{txtfdmns.etx}, an ETX file which sets fontdimens 1--16 as for
+a \texttt{T1} encoded font but does not set any slots. Since
+\texttt{psyr.mtx} reinterpreted as an ETX file sets slots but no
+fontdimens, these complement each other nicely.
+
+
+
+\begingroup
+\renewcommand\thesubsection{\thesection.\ensuremath{\infty}}
+
+\subsection{Coming attractions}
+
+We\footnote{Well, perhaps it's just me. /LH} have some new features
+which we have pretty much sorted out how they should work and how they
+should be implemented, but didn't want to introduce in this version as
+the large modifications in core systems would require another
+pre-release version before the proper release. Instead these features
+will probably appear in the first pre-release of \package{fontinst}
+v\,2.0.
+
+
+\subsubsection{Bounding boxes}
+
+Han The Thanh has created an implementation of bounding box support
+for \package{fontinst}, and it is a modified form of that support
+that will make it into \package{fontinst} v\,2.0. One important
+characteristic of this implementation is that the dimensions of the
+bounding box are not bundled into the same data structure (the
+|\g-|\meta{glyph} macros) as the glyph's width, height, depth, and
+italic correction are, but stored in a separate data structure (the
+|\gb-|\meta{glyph} macros). A glyph doesn't need to have its bounding
+box set, it is simply a piece of information that \package{fontinst}
+will store if you tell it to and which you can later retrieve.
+
+The bounding box will be stored as coordinates of the sides in the
+normal AFM coordinate system. The commands for retrieving these
+coordinates will probably be
+\begin{center}
+ \begin{tabular}{ll}
+ \textbf{Command}& \textbf{Side}\\
+ |\bbtop|\marg{glyph}& top ($y$-coordinate)\\
+ |\bbbottom|\marg{glyph}& bottom ($y$-coordinate)\\
+ |\bbleft|\marg{glyph}& left ($x$-coordinate)\\
+ |\bbright|\marg{glyph}& right ($x$-coordinate)
+ \end{tabular}
+\end{center}
+In Thanh's implementation the command names are |\ury|, |\lly|,
+|\llx|, and |\urx| respectively instead, but I think the former are
+easier to remember. If no bounding box has been set for a glyph then
+the above commands will instead report the corresponding coordinate of
+the glyph's \TeX\ box (i.e.\ |\height|\marg{glyph},
+|\neg{\depth|\marg{glyph}|}|, |0|, and |\width|\marg{glyph}
+respectively).
+
+The command for setting the bounding box of a glyph will be
+\begin{quote}
+ |\setglyphbb|\marg{glyph}\marg{left}\marg{bottom}\marg{right}^^A
+ \marg{top}
+\end{quote}
+
+
+
+\endgroup
+
+
+\section{Notes on using \package{fontinst}}
+\label{Sec:NotesOnUsing}
+
+The primary purpose of \package{fontinst} is to simplify the
+installation of PostScript or TrueType text fonts.
+
+
+\subsection{General notes}
+
+Leaving aside unusual variants which require special attention such
+as alternate or swash fonts, almost all standard font families can
+be installed automatically using the |\latinfamily| command,
+optionally making use of the corresponding expert fonts as well.
+
+Depending on what kind of fonts you have and want to install,
+|\latinfamily| supports three different modes of operation:
+
+|\latinfamily|\marg{fam}|{}| installs a normal font family using
+|8a|-encoded standard fonts (reencoded to |8r|) and nothing else.
+It installs |.fd| files for the \LaTeX{} families \texttt{8r}\meta{fam},
+\texttt{OT1}/\meta{fam}, \texttt{T1}/\meta{fam} and
+\texttt{TS1}/\meta{fam}, and generates virtual fonts for the |7t|,
+|8t|, and |8c| encodings. This is the only option available for most
+typefaces which do not have an expert set.
+
+|\latinfamily{|\meta{fam}|x}{}| installs an expertized font family using
+|8a|-encoded standard fonts (reencoded to |8r|) and |8x|-encoded
+expert fonts. It installs |.fd| files for the \LaTeX{} families,
+\texttt{OT1}/\meta{fam}\texttt{x}, \texttt{T1}/\meta{fam}\texttt{x} and
+\texttt{TS1}/\meta{fam}\texttt{x}, and generates virtual fonts for the
+|9t|, |9e| and |9c| encodings.
+
+|\latinfamily{|\meta{fam}|j}{}| installs an expertized font family with
+oldstyle digits using |8a|-encoded standard fonts (reencoded to
+|8r|) and |8x|-encoded expert fonts. It installs |.fd| files for
+the \LaTeX{} families, |OT1|/\meta{fam}|j|, |T1|/\meta{fam}|j| and
+|TS1|/\meta{fam}|j|, and generates virtual fonts for the |9o|, |9d| and
+|9c| encodings. Since \texttt{TS1} has oldstyle digits by default, the
+|9c|-encoded fonts should be the same as in the previous case. Finally,
+|\latinfamily{|\meta{fam}|9}{}| is also supported as an alternative to
+|\latinfamily{|\meta{fam}|j}{}| for backwards compatibility.
+
+The whole installation process relies on certain assumptions about
+the symbol complement of Adobe's expert fonts. In particular, it is
+assumed that the expert fonts include the oldstyle digits and a
+complete set of small caps glyphs, which is an assumption that's not
+always satisfied for expert fonts by other suppliers. If these
+glyphs are not included in the expert fonts, the only way to get
+them is from real small caps fonts, but this requires some
+reshuffling of glyph names.
+
+To support such unusual cases, this source file contains some
+optional code embedded between \Module{*oldstyle} \dots\
+\Module{/oldstyle},
+which extends the behaviour of |\latinfamily| for expertized
+encodings with oldstyle digits. Instead of relying only on the
+glyphs of the |8r|-reencoded raw font and the |8x|-encoded expert
+font, this version also looks for corresponding OsF or SC\&OsF fonts
+and uses the default digits from those fonts as oldstyle digits.
+
+
+\subsection{Notes on small caps and oldstyle fonts}
+
+The |\latinfamily| command is supposed to do a reasonably good job
+of installing a complete font family based on all the |.afm| files
+it can find. If it doesn't find a suitable font shape, it is
+sometimes possible to fake it by default substitutions. However, in
+the case of small caps fonts, there are several options which may
+require some clarification.
+
+For the majority of typefaces, a font family typically consists only
+of of roman and italic fonts in several weights. Since real small
+caps fonts are not included, they have to be faked from the roman
+fonts, which is implemented by setting |\encoding_shape| to `|c|',
+so that different encoding files |OT1c.etx| or |T1c.etx| are used.
+Since these files call for glyph names such as `|Asmall|' which are
+not found in the roman font, the default substitutions in
+|latin.mtx| are eventually used to approximate fake small caps
+glyphs by scaling and letterspacing. The outcome is just an
+approximation for a small caps font, but it is better than nothing.
+
+For a small number of typefaces, the standard fonts are complemented
+by an expert collection, which usually includes two sets of fonts.
+First, for each standard font there is a corresponding expert font
+containing additional glyphs such as extra ligatures and symbols,
+oldstyle digits and small capital letters. For Adobe expert fonts
+this set is sufficient to build a complete small caps font from the
+standard and expert glyphs. Furthermore, the expert collection
+usually also contains a number of real small caps font corresponding
+to the roman fonts and some OsF fonts corresponding to the italic
+fonts. If these fonts are available, there are several options how
+to install small caps fonts.
+
+By default, |\latinfamily| first tries to find a real small caps
+font. If it is found, it is installed using the default encoding
+files and metric files, just like any roman or slanted font.
+However, once |\latinfamily| has taken this choice, it will fail to
+find a corresponding expert font, since it is actually looking for
+an expert font in small caps shape which doesn't exist. (In fact,
+it would be an error to substitute an expert font in normal shape.)
+The outcome will be a virtual font based only on glyphs from the
+real small caps raw font, which implies ending up with oldstyle
+digits as the default set of digits, but allows to inherit the
+kerning information of the real small caps font.
+
+Another option for an expertized installation would be to make the
+real small caps fonts unavailable, so that |\latinfamily| will
+attempt to fake a small caps font using glyphs from the standard and
+expert fonts in normal shape. This means that |\encoding_shape| is
+again set to `|c|', so that |OT1c.etx| and |T1c.etx| are used, but
+this time a glyph named `|Asmall|' does exist in the expert font and
+will be used instead of faked one generated by scaling. The outcome
+will be a font based on normal and small caps glyphs from the
+standard and expert fonts. The oldstyle digits will only be used if
+they are called for, otherwise the default digits from the roman
+font are used. The only drawback of this approach is that the
+kerning around small capital letters will be based on the scaled
+kern amounts of the capital letters rather than on the kern pairs
+from the real small caps font.
+
+Finally, the most promising approach of all these options would be
+to combine the glyphs from standard and expert fonts with kern pairs
+from the real small caps fonts. The current version of |\latinfamily|
+does not implement this, but it would be a worthwhile approach, and
+advanced \package{fontinst} users are encouraged to attempt it. The
+file \texttt{csckrn2x.tex} (a variant of \texttt{csc2x.tex}, which is
+mentioned in Subsection~\ref{Ssec:Des:Reglyph}) should come in handy
+for this.
+
+
+\subsection{\package{fontinst} variables}
+
+The following is a list of the \package{fontinst} variables that are
+accessible for the user through the |\set|\textellipsis,
+|\reset|\textellipsis, |\unset|\textellipsis, etc.\ commands. You may
+of course set or use other variables in the MTX and ETX files you
+write yourself, as does for example the standard MTX file
+\texttt{latin.mtx}, but all variables that \package{fontinst} commands
+implicitly use or set are listed below.
+
+\begin{list}{}{%
+ \setlength\labelwidth{0pt}%
+ \setlength\itemindent{-\leftmargin}%
+ \setlength\parsep{0pt}
+ \def\makelabel#1{\hspace\labelsep \normalfont\ttfamily #1}%
+}
+ \item[acccapheight] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] The height of accented full capitals.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[address] (string)
+ \begin{smalldes}
+ \item[Description] Snailmail address put in \BibTeX-style file
+ header of automatically generated ENC files. No
+ \texttt{address} field is written unless the \texttt{address}
+ string is set. Quotes are not automatically inserted around
+ the \texttt{address} string.
+ \item[Set by] ETX files.
+ \item[Used by] The ETX-to-ENC converter.
+ \end{smalldes}
+ \item[afm-name] (string)
+ \begin{smalldes}
+ \item[Description] Name of source font. Internal variable.
+ \item[Set by] |\from|\dots\ commands.
+ \item[Used by] The |\transform|\-|font|, |\install|\-|font|,
+ |\install|\-|raw|\-|font|, and |\reglyph|\-|font| commands.
+ \end{smalldes}
+ \item[ascender] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] The ascender height of the font.
+ \item[Set by] MTX files. The AFM-to-MTX converter usually writes
+ |\setint| commands for this integer.
+ \item[Used by] Some MTX and ETX files.
+ \end{smalldes}
+ \item[author] (string)
+ \begin{smalldes}
+ \item[Description] Author name(s) put in \BibTeX-style file
+ header of automatically generated ENC files. See the macro
+ |\ref_to_sourcefile| for more details.
+ \item[Set by] ETX files.
+ \item[Used by] The ETX-to-ENC converter. When not set, the
+ value \texttt{"See file }\meta{etx name}\texttt{"} is used
+ instead.
+ \end{smalldes}
+ \item[\cs{autoinstallfamily}] (command)
+ \begin{smalldes}
+ \item[Description] Command called by the font installation
+ commands, as
+ \begin{quote}
+ |\autoinstallfamily|\marg{encoding}\marg{family}
+ \end{quote}
+ when they are asked to install a font with a combination of
+ \meta{encoding} and \meta{family} that has not been seen
+ before (there was no explicit |\installfamily|).
+ \item[Set by] Explicit commands. Defaults to calling
+ |\installfamily|.
+ \item[Used by] Font installation commands.
+ \end{smalldes}
+ \item[axisheight] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] Math formula parameter $\sigma\sb{22}$.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[baselineskip] (integer denoting length)
+ \begin{smalldes}
+ \item[Description]
+ The font designer's recommendation for natural length of the
+ \TeX\ parameter |\baselineskip|.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[bigopspacing1] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] Math formula parameter $\xi\sb{9}$.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[bigopspacing2] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] Math formula parameter $\xi\sb{10}$.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[bigopspacing3] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] Math formula parameter $\xi\sb{11}$.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[bigopspacing4] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] Math formula parameter $\xi\sb{12}$.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[bigopspacing5] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] Math formula parameter $\xi\sb{13}$.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[capheight] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] The height of the font's full capitals.
+ \item[Set by] MTX files. The AFM-to-MTX converter usually writes
+ |\setint| commands for this variable.
+ \item[Used by] Some MTX and ETX files.
+ \end{smalldes}
+ \item[codingscheme] (string)
+ \begin{smalldes}
+ \item[Description] The codingscheme name.
+ \item[Set by] ETX files.
+ \item[Used by] The (V)PL writer. When not set, the
+ value \texttt{UNKNOWN} is used instead.
+ \end{smalldes}
+ \item[defaultrulethickness] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] Math formula parameter $\xi\sb{8}$.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[delim1] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] Math formula parameter $\sigma\sb{20}$.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[delim2] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] Math formula parameter $\sigma\sb{21}$.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[denom1] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] Math formula parameter $\sigma\sb{11}$.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[denom2] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] Math formula parameter $\sigma\sb{12}$.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[descender] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] The depth of lower case letters with descenders.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[descender_neg] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] The vertical position of the descender line
+ of the font, i.e., the negative of the font's descender depth.
+ \item[Set by] MTX files. The AFM-to-MTX converter usually writes
+ |\setint| commands for this variable.
+ \item[Used by] Some MTX and ETX files.
+ \end{smalldes}
+ \item[designsize] (dimension)
+ \begin{smalldes}
+ \item[Description] The design size of the font.
+ \item[Set by] MTX files. The (V)PL-to-MTX converter usually writes
+ |\setdim| commands for this variable.
+ \item[Used by] The (V)PL writer. The design size defaults to
+ $10\,\mathrm{pt}$ if this variable is not set.
+ \item[Note] The value of this variable has no effect on how
+ the font is declared to \LaTeX.
+ \end{smalldes}
+ \item[designunits] (dimension denoting a real number)
+ \begin{smalldes}
+ \item[Description] The design size of a font expressed in the
+ design unit used in a (V)PL file.
+ \item[Set by] MTX files. The (V)PL-to-MTX converter usually writes
+ |\setdim| commands for this variable.
+ \item[Used by] Nothing. If this variable is set, but to any
+ value other than $1\,\mathrm{pt}$, then some metrics are most
+ likely wrong.
+ \end{smalldes}
+ \item[digitwidth] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] The median width of the digits in the font.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[email] (string)
+ \begin{smalldes}
+ \item[Description] Email address put in \BibTeX-style file
+ header of automatically generated ENC files. See the macro
+ |\ref_to_sourcefile| for more details.
+ \item[Set by] ETX files.
+ \item[Used by] The ETX-to-ENC converter. When not set, the
+ value \texttt{"See file }\meta{etx name}\texttt{"} is used
+ instead.
+ \end{smalldes}
+ \item[encodingname] (string)
+ \begin{smalldes}
+ \item[Description] The name by which the encoding in question is
+ made known to a Postscript interpreter.
+ \item[Set by] ETX files.
+ \item[Used by] The ETX-to-ENC converter. When not set, the
+ value |fontinst-|\nolinebreak[1]|autoenc-|\nolinebreak[1]%
+ \meta{etx name} is used instead.
+ \end{smalldes}
+ \item[etx-name] (string)
+ \begin{smalldes}
+ \item[Description] Name of ETX file. Internal variable in
+ |\transform|\-|font|.
+ \item[Set by] The |\reencodefont| command.
+ \item[Used by] The |\mtxtomtx| command.
+ \end{smalldes}
+ \item[extraspace] (integer denoting length)
+ \begin{smalldes}
+ \item[Description]
+ The natural width of extra interword glue at the end of a
+ sentence.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[fontdimen($n$)] (integer)
+ \begin{smalldes}
+ \item[Description] Family of semi-internal variables that store
+ the values to use for font dimension $n$. It is preferred
+ that the newer |\set|\-|font|\-|dimen| interface is used for
+ setting these values.
+ \item[Set by] ETX files.
+ \item[Used by] The (V)PL writer.
+ \end{smalldes}
+ \item[\cs{iftokeep}] (macro)
+ \begin{smalldes}
+ \item[Description] |\iftokeep|\,\#1\,|\then|, where \#1 will
+ be a \meta{number}, behaves like a switch and decides whether
+ a glyph is kept or not while reglyphing.
+ \item[Set by] Explicit commands. Defaults to
+ $$
+ \mbox{\cs{iftokeep}\,\#1\,\cs{then}} \mapsto
+ \mbox{\cs{ifnum}\,\texttt{-1<}\#1}
+ $$
+ \item[Used by] The |\reglyphfont| command.
+ \end{smalldes}
+ \item[interword] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] The natural width of interword glue (spaces).
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[italicslant] (integer denoting factor)
+ \begin{smalldes}
+ \item[Description] The italic slant of a font.
+ \item[Set by] MTX files generated from AFM or (V)PL files. MTX
+ files generated by |\transformfont|. Locally in the AFM-to-MTX
+ converter for possible use in |\uprightitalcorr| or
+ |\slanteditalcorr|.
+ \item[Used by] MTX files (\texttt{latin.mtx} and the like). ETX
+ files (for determining \texttt{fontdimen(1)}).
+ \end{smalldes}
+ \item[killweight] (integer)
+ \begin{smalldes}
+ \item[Description] Weight for glyphs that are killed.
+ \item[Set by] Explicit commands. Defaults to $-10$ if not set.
+ \item[Used by] The |\kill|\-|glyph| command; indirectly
+ the |\reglyphfont| command.
+ \end{smalldes}
+ \item[letterspacing] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] Extra width added to all glyphs of a font.
+ \item[Set by] ETX or MTX files.
+ \item[Used by] The (V)PL writer. Defaults to $0$ if not set.
+ \end{smalldes}
+ \item[maxdepth] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] The maximal depth over all slots in the font.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[maxdepth_neg] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] The negative of the maximal depth of a glyph in
+ the font.
+ \item[Set by] MTX files. The AFM-to-MTX converter usually writes
+ |\setint| commands for this variable.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[maxheight] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] The maximal height of a glyph in the font.
+ \item[Set by] MTX files. The AFM-to-MTX converter usually writes
+ |\setint| commands for this variable.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[minimumkern] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] Kerns whose size in absolute value is less
+ than or equal to this variable are ignored.
+ \item[Set by] \package{fontinst} command files or MTX files.
+ \item[Used by] The AFM-to-MTX converter and the (V)PL file
+ generator. When not set, the value $0$ is used instead.
+ \end{smalldes}
+ \item[monowidth] (flag integer)
+ \begin{smalldes}
+ \item[Description] Set if this font is monowidth, unset otherwise.
+ \item[Set by] MTX files. The AFM-to-MTX converter writes a
+ |\setint| command for this variable if the AFM specifies
+ \texttt{IsFixedPitch true}.
+ \item[Used by] Some MTX files (\texttt{latin.mtx} and the like),
+ ETX files.
+ \end{smalldes}
+ \item[num1] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] Math formula parameter $\sigma\sb{8}$.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[num2] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] Math formula parameter $\sigma\sb{9}$.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[num3] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] Math formula parameter $\sigma\sb{10}$.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[quad] (integer denoting length)
+ \begin{smalldes}
+ \item[Description]
+ The quad width of the font, normally approximately equal to
+ the font size and\slash or the width of an `M'.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[PSfontsuffix] (string)
+ \begin{smalldes}
+ \item[Description] Suffix added to font names to form name of
+ file to download to include font.
+ \item[Set by] Explicit commands in \textsf{finstmsc} command
+ files. Defaults to `\texttt{.pfa}'.
+ \item[Used by] The map file fragments writer.
+ \end{smalldes}
+ \item[rawscale] (integer denoting factor)
+ \begin{smalldes}
+ \item[Description] Scaling factor applied to raw glyphs.
+ \item[Set by] The |\installfont| command (\texttt{scaled}
+ clauses in argument \#2). Unset for metric files listed
+ without a \texttt{scaled} clause.
+ \item[Used by] The |\set|\-|raw|\-|glyph|,
+ |\set|\-|not|\-|glyph|, |\set|\-|scaled|\-|raw|\-|glyph|,
+ |\set|\-|scaled|\-|not|\-|glyph|, |\set|\-|kern|, and
+ |\reset|\-|kern| commands.
+ \end{smalldes}
+ \item[renameweight] (integer)
+ \begin{smalldes}
+ \item[Description] Weight for glyphs that are renamed.
+ \item[Set by] Explicit commands. Defaults to $1$ if not set.
+ \item[Used by] The |\rename|\-|glyph| command; indirectly
+ the |\reglyphfont| command.
+ \end{smalldes}
+ \item[requireglyphs] (flag integer)
+ \begin{smalldes}
+ \item[Description] Set if warnings are to be generated for
+ glyphs listed in ETX files but not present in the glyph
+ base.
+ \item[Set by] Explicit commands. By defaults not set.
+ \item[Used by] The (V)PL file generator.
+ \end{smalldes}
+ \item[rightboundary] (string)
+ \begin{smalldes}
+ \item[Description] The name of a glyph with the property that
+ kerns on the left may be intended as right word boundary kerns.
+ \item[Set by] MTX files. The (V)PL-to-MTX converter can write
+ |\setstr| commands for this variable.
+ \item[Used by] Some MTX files.
+ \end{smalldes}
+ \item[shrinkword] (integer denoting length)
+ \begin{smalldes}
+ \item[Description]
+ The (finite) shrink component of interword glue.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[slant-scale] (integer denoting factor)
+ \begin{smalldes}
+ \item[Description] Factor to slant by.
+ Internal variable in |\transform|\-|font|.
+ \item[Set by] The |\slant|\-|font|, |\xscale|\-|font|, and
+ |\scale|\-|font| commands.
+ \item[Used by] The |\mtxtomtx| command.
+ \end{smalldes}
+ \item[\cs{SlantAmount}] (macro expanding to an integer expression)
+ \begin{smalldes}
+ \item[Description] Slant factor used for faking oblique shape.
+ \item[Set by] Explicit commands. Defaults to \texttt{167}.
+ \item[Used by] The |\latinfamily| command.
+ \end{smalldes}
+ \item[\cs{slanteditalcorr}]
+ (macro expanding to an integer expression)
+ \begin{smalldes}
+ \item[Description] The integer expression used to calculate a
+ guess for the italic correction of glyphs in a font with
+ positive slant. It has the syntax
+ \begin{quote}
+ \cs{slanteditalcorr}\marg{width}\marg{left}\marg{right}^^A
+ \marg{bottom}\marg{top}
+ \end{quote}
+ where \meta{width} is the glyph's advance width, and the
+ remaining arguments are coordinates of sides of the glyph's
+ bounding box. The \texttt{italicslant} integer provides the
+ italic slant of the font.
+ \item[Set by] Explicit commands in \textsf{fontinst} command
+ files. Defaults to $\max\{0, \mathit{right}-\mathit{width}\}$.
+ \item[Used by] The AFM-to-MTX converter.
+ \end{smalldes}
+ \item[stretchword] (integer denoting length)
+ \begin{smalldes}
+ \item[Description]
+ The (finite) stretch component of interword glue.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[sub1] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] Math formula parameter $\sigma\sb{16}$.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[sub2] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] Math formula parameter $\sigma\sb{17}$.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[subdrop] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] Math formula parameter $\sigma\sb{19}$.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[sup1] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] Math formula parameter $\sigma\sb{13}$.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[sup2] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] Math formula parameter $\sigma\sb{14}$.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[sup3] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] Math formula parameter $\sigma\sb{15}$.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[supdrop] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] Math formula parameter $\sigma\sb{18}$.
+ \item[Set by] MTX files.
+ \item[Used by] Some ETX and MTX files.
+ \end{smalldes}
+ \item[TFMfileprefix] (string)
+ \begin{smalldes}
+ \item[Description] Prefix (typically a path) added to names of
+ TFM files.
+ \item[Set by] Explicit commands in \textsf{finstmsc} command
+ files. By default not set, which is equivalent to being empty.
+ \item[Used by] The \textsf{PLtoTF} ``map file fragments writer''.
+ \end{smalldes}
+ \item[underlinethickness] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] The recommended thickness of an underlining
+ rule.
+ \item[Set by] MTX files. The AFM-to-MTX converter usually writes
+ |\setint| commands for this variable.
+ \item[Used by] Some MTX files (\texttt{latin.mtx} and the like).
+ \end{smalldes}
+ \item[\cs{uprightitalcorr}]
+ (macro expanding to an integer expression)
+ \begin{smalldes}
+ \item[Description] The integer expression used to calculate a
+ guess for the italic correction of glyphs in a font with
+ non-positive slant. It has the syntax
+ \begin{quote}
+ \cs{uprightitalcorr}\marg{width}\marg{left}\marg{right}^^A
+ \marg{bottom}\marg{top}
+ \end{quote}
+ where \meta{width} is the glyph's advance width, and the
+ remaining arguments are coordinates of sides of the glyph's
+ bounding box. The \texttt{italicslant} integer provides the
+ italic slant of the font.
+ \item[Set by] Explicit commands in \textsf{fontinst} command
+ files. Defaults to $0$.
+ \item[Used by] The AFM-to-MTX converter.
+ \end{smalldes}
+ \item[version] (string)
+ \begin{smalldes}
+ \item[Description] Version number put in \BibTeX-style file
+ header of automatically generated ENC files. See the macro
+ |\ref_to_sourcefile| for more details.
+ \item[Set by] ETX files.
+ \item[Used by] The ETX-to-ENC converter. When not set, the
+ value \texttt{"See file }\meta{etx name}\texttt{"} is used
+ instead.
+ \end{smalldes}
+ \item[verticalstem] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] The dominant width of vertical stems
+ (usually the width of stems of lower case letters).
+ \item[Set by] MTX files. The AFM-to-MTX converter writes
+ |\setint| commands for this variable if the AFM file specifies
+ \texttt{StdVW}.
+ \item[Used by] Currently nothing.
+ \end{smalldes}
+ \item[\texttt{warningspecials}] (switch)
+ \begin{smalldes}
+ \item[Description] Controls whether |\glyphwarning| commands
+ will generate VPL \texttt{SPECIAL}s. Defaults to `true'.
+ \item[Set by] Explicit commands (|\warningspecialstrue| and
+ |\warningspecialsfalse|).
+ \item[Used by] The (V)PL file generator.
+ \end{smalldes}
+ \item[x-scale] (integer denoting factor)
+ \begin{smalldes}
+ \item[Description] Horizontal scaling factor.
+ Internal variable in |\transform|\-|font|.
+ \item[Set by] The |\xscale|\-|font| and |\scale|\-|font| commands.
+ \item[Used by] The |\mtxtomtx| command.
+ \end{smalldes}
+ \item[xheight] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] The x-height of the font.
+ \item[Set by] MTX files. The AFM-to-MTX and (V)PL-to-MTX
+ converters usually write |\setint| commands for this variable.
+ \item[Used by] MTX files, and ETX files (for determining
+ \texttt{fontdimen(5)}).
+ \end{smalldes}
+ \item[y-scale] (integer denoting factor)
+ \begin{smalldes}
+ \item[Description] Vertical scaling factor.
+ Internal variable in |\transform|\-|font|.
+ \item[Set by] The |\yscale|\-|font| and |\scale|\-|font| commands.
+ \item[Used by] The |\mtxtomtx| command.
+ \end{smalldes}
+ \item[\meta{\rmfamily glyph}-spacing] (integer denoting length)
+ \begin{smalldes}
+ \item[Description] Glyph-specific override for
+ \texttt{letterspacing}; extra width added to the glyph
+ \meta{glyph} as part of the process of writing a VPL
+ file.
+ \item[Set by] ETX or MTX files.
+ \item[Used by] The (V)PL writer. Defaults to $0$ if not set.
+ \end{smalldes}
+\end{list}
+Besides these, the |\latinfamily| command provides a whole range of
+parameters that are often used somewhat like variables. That subject
+does however deserve to be treated separately.
+
+
+\section{\package{fontdoc} package overview}
+
+The purpose of the \package{fontdoc} package is to support
+typesetting of \texttt{.etx} and \texttt{.mtx} files intended
+for use with \package{fontinst}.
+The typical format of these files looks something like this:
+\begin{quote}
+ |\relax|\\
+ |\documentclass[twocolumn]{article}|\\
+ |\usepackage{fontdoc}|\\[0.5\baselineskip]
+ |\begin{document}|\\
+ {}~~\textit{\LaTeX\ commands}\\
+ |\encoding| or |\metrics| \\
+ {}~~\textit{\package{fontinst} commands}\\
+ |\endencoding| or |\endmetrics|\\
+ {}~~\textit{\LaTeX\ commands}\\
+ |\end{document}|
+\end{quote}
+To make it work, \package{fontdoc} has to define all the user-level
+\package{fontinst} commands in terms of typesetting instructions. This
+goal is currently only partially achieved, but the percentage of
+\package{fontinst} commands covered by \package{fontdoc} is still
+fairly large, so it is our impression that problems with commands not
+covered occur only very rarely.
+
+
+\subsection{Some \package{fontdoc} commands that \package{fontinst}
+ doesn't know}
+
+Some of the commands defined by \package{fontdoc} are not defined by
+\package{fontinst} because they have no meaning in that context.
+Most of these commands are lower-level commands that are used in the
+implementations of commands common to \package{fontinst} and
+\package{fontdoc}, but a few are simply only meant to be used in the
+parts of ETX and MTX files that \package{fontinst} never executes.
+
+With v\,1.916 the mechanism for formatting integer expressions changed
+dramatically. The new base command to use is
+\DescribeMacro{\TypesetIntegerExpression}|\Typeset|\-|Integer|\-%
+|Expression|, which takes as its only argument the integer expression
+to format and typesets it. |\Typeset|\-|Integer|\-|Expression| expects
+to be used in math mode only. A similar command is
+\DescribeMacro{\TypesetStringExpression}|\Typeset|\-|String|\-%
+|Expression|, which takes a string expression as argument, formats,
+and typesets it. |\Typeset|\-|String|\-|Expression| can be used in any
+mode.
+
+The \DescribeMacro{\macroparameter}|\macroparameter| command is (in
+integer and string expressions) understood as a ``placeholder for a
+macro parameter''. This is primarily useful in comments that describe
+a user-defined macro; see \texttt{ltcmds.mtx} for examples.
+
+
+
+% \part*{Implementation}
+% \addcontentsline{toc}{part}{Implementation}
+
+\changes{1.800}{1998/06/22}{\texttt{fontinst.sty} and
+ \texttt{fontdoc.sty} now generated from \texttt{fontinst.dtx}. (UV)}
+\changes{1.900}{1999/02/05}{\texttt{fontinst.dtx} split into several
+ source files. (LH)}
+\changes{1.902}{1999/04/18}{Fixed some silly markup. (LH)}
+
+\DocInclude{fibasics}
+\DocInclude{ficommon}
+\DocInclude{fimain}
+\DocInclude{ficonv}
+\DocInclude{filtfam}
+\DocInclude{fimapgen}
+
+\PrintIndex
+\pagestyle{plain}\tracingmacros=2\tracingcommands=2
+\PrintChanges
+\tracingcommands=0\tracingmacros=0
+
+\clearpage
+\appendix
+\part*{Internal notes}
+\addcontentsline{toc}{part}{Internal notes}
+
+
+\section{Typographic treatment}
+
+\begin{itemize}
+ \item
+ I have been following \emph{The \LaTeX\ Companion} in that I have
+ set all names of packages and the like---\package{fontinst},
+ \package{fontdoc}, \package{trig}, \package{doc}, and
+ \package{docstrip} (I might have forgotten some)---in sans serif
+ type. Actually, I have defined a command |\package| in
+ \texttt{fisource.sty} (or is that \package{fisource}?) which does
+ this, so if we decide on some other formatting, we can just change
+ that. /LH
+ \item
+ It seems to me that there should indeed be some space between the
+ `v' and the digits in a version number when it is typeset, but I
+ also think a full space is too much, so I have been using thin
+ spaces. These are unbreakable and under \LaTeX\ you can simply use
+ |\,| to get one (while you are not in math mode, that is). /LH
+ \item
+ While I went through (some of) the code, I came across a few
+ inconsistencies. \ambiguity{I have marked them out like this%
+ \offindex}---some boldfaced text in a paragraph and a large A
+ in the margin. I defined a command |\ambiguity| for doing this. /LH
+ \item
+ There is also a similar command |\question| which is intended for
+ situations where there isn't really an error, but something seems
+ like it should be taken care of in some other way. \question{The
+ \cs{question} command puts a question mark in the margin.%
+ \offindex}
+ \item
+ I also noticed that there are several \package{fontinst} commands,
+ not all of which are new, which are not defined in \package{fontdoc}.
+ {\offindex\missing{doc}{\foo}}To mark out such things, I have
+ written things like the one shown in the margin by this paragraph.
+ I defined a command |\missing| for doing this. /LH
+\end{itemize}
+
+
+\section{Planning topics}
+
+This section lists items in the larger design of \package{fontinst}
+which need to be resolved in one way or another. Debates about these
+items on the fontinst mailing list are welcome.
+
+
+\subsection{Reorganisation of the source}
+
+At the moment, all the ideas suggested have been realized.
+% \begin{itemize}
+% \item
+% How about moving the first section of \texttt{fimain.dtx} to
+% \texttt{fibasics.dtx}? /LH
+% \item
+% How about extracting the code which has to do with file
+% conversions (Sections~\ref{Sec:Conv. input},
+% \ref{Sec:Font.trans}, and Subsection~\ref{Ssec:MTX->PL}) from
+% \texttt{fimain.dtx} and put it in a file of its own
+% (\texttt{ficonv.dtx}, say)? /LH
+% \end{itemize}
+
+
+\subsection{Files}
+
+Which files should be considered temporary and placed in the location
+specified with |\tempfileprefix|? Should files be explicitly be looked
+for at this location or should it be assumed that fontinst users
+include that location in their \TeX\ input file search path? In the
+former case, \emph{which} files should be looked for in that
+location? Should files be looked for in the temporary location before
+they are looked for without a specified location, or should it be the
+other way round?
+
+
+
+
+
+\section{Contributors}
+
+[The \package{fontinst} source has been pretty inconsistent in how
+people are credited for what they have done---some appear only as
+acronyms while others appear as rather striking e-mail addresses---so
+I thought it best that this is shaped up a bit. My suggestion is that
+we use names or acronyms in the source and move everything else here.
+I also thought it could be interesting with a short description of
+what each person has done and is doing, so I have started ever so
+slightly on something along those lines. Feel free to add things! /LH]
+
+\medskip
+
+The following people have contributed substantial amounts of code or
+documentation to \package{fontinst}. They are listed in strict
+alphabetical order.
+
+\begin{description}
+ \item[Thierry Bouche]
+ Thierry saw to that the \texttt{T1} encoded fonts got font
+ dimensions comparable to the \texttt{ec} fonts. Thierry is also
+ the author of several papers (published in the \textit{Cahiers
+ GUTenberg} and \textit{TUGboat}) which deal with non-trivial
+ applications of \package{fontinst}, such as creating metrics for
+ Adobe Minion Multiple Master fonts and developing a corresponding
+ math font setup.
+
+ E-mail: \texttt{Thierry.Bouche@ujf-grenoble.fr}
+
+ \item[Lars Hellstr\"om (LH)]
+ Lars is responsible for most of the things in v\,1.9 that were
+ not there in v\,1.8.
+
+ Lars is currently a member of the \package{fontinst}
+ maintenance team. He is also a Ph.D.\ in mathematics looking for
+ employment.
+
+ \item[Alan Jeffrey (ASAJ)]
+ Alan is the original author of \package{fontinst}. He is not
+ currently on the development team, but he is still managing the
+ \package{fontinst} mailing list.
+
+ E-mail (\package{fontinst} mailing list subscriptions):%
+ \nobreak\hfill\penalty0\hskip -2em plus -1fill\ \relax
+ \vadjust{}\nobreak\hskip 2em\relax
+ \texttt{fontinst-request@cogs.susx.ac.uk}.
+
+ \item[Constantin Kahn (CK)]
+ Constantin is one (Sebastian is the other) of the original coauthors
+ of the current |\latinfamily| command.
+ % \footnote{Am I right about this? It's a bit before my time,
+ % I've just read \texttt{CHANGES}. /LH}
+
+ \item[Rowland McDonnell]
+ Rowland rewrote Alan's old v\,1.5 documentation for
+ \package{fontinst} and updated it for v\,1.8.
+
+ \item[Sebastian Rahtz (SPQR)]
+ Sebastian is one (Constantin is the other) of the original coauthors
+ of the current |\latinfamily| command. He has also contributed
+ numerous ETX files and made the ``unofficial'' v\,1.6 and v\,1.7,
+ which included the first \package{fontinst} support for making
+ \texttt{TS1} encoded files.
+
+ \item[Ulrik Vieth (UV)]
+ Ulrik converted \texttt{fontinst.sty} to \package{doc}\slash
+ \package{docstrip} format, reunited Alan's v\,1.511 and
+ Sebastian's v\,1.7, and made the first official release of
+ \package{fontinst} (v\,1.8) for more than two years.
+
+ Ulrik is currently a member of the \package{fontinst}
+ maintenance team. He is also involved in the Joint TUG\slash
+ \LaTeX~3 Project Working Group on extended math font encodings.
+
+ \item[\textellipsis]
+\end{description}
+Anyone else?
+
+
+\section{To do}
+
+This section is based on the \texttt{TODO} file from \package{fontinst}
+v\,1.504, but a couple of new entries have been added and some have
+been equipped with comments.
+
+\subsection{Things to do in the ``near'' future}
+
+\begin{itemize}
+ \item
+ Update documentation. (Lars, knowing he isn't saying anything new)
+
+ \item
+ Rewrite the entire substitution mechanism from scratch! The main
+ problem with the current mechanism is that it only allows one
+ substitution per shape and one per series. One cannot substitute
+ the |it| shape for both the |sl| and the |ui| shapes since each
+ new |\substitute|(|noisy|\textbar|silent|) with |it| in the
+ \meta{from} argument will overwrite the setting made by the
+ previous;
+ \begin{quote}
+ |\substitutenoisy{ui}{it}|\\
+ |\substitutesilent{sl}{it}|
+ \end{quote}
+ is effectively the same as
+ \begin{quote}
+ |\substitutesilent{sl}{it}|
+ \end{quote}
+ Another big problem is that it isn't well defined what the
+ substitution mechanism should do. (Lars)
+
+ I've got a sketch for a new substitution mechanism, but I'm not
+ at all sure it will make it into any v\,1.9xx. /LH
+ (The code that was written is now in \texttt{fimain.dtx}, but
+ it's not included in any of the generated files.)
+
+ An alternative to substitutions is to use explicit
+ |\installfontas| commands. This provides complete control. /LH
+
+ \item
+ Consider removing the following unreliable fakes from
+ \texttt{textcomp.mtx}:
+ \begin{quote}
+ \texttt{asciiacutedbl}, \texttt{asciigravedbl},
+ \texttt{bardbl}, \texttt{openbracketleft}, and
+ \texttt{openbracketright}
+ \end{quote}
+ and consider adding fakes for the following unavailable glyphs:
+ \begin{quote}
+ \texttt{dollaroldstyle} (use \texttt{dollar}),
+ \texttt{centoldstyle} (use \texttt{cent}), \texttt{lira} (use
+ \texttt{sterling}), and \texttt{pilcrow} (use
+ \texttt{paragraph})
+ \end{quote}
+ These suggestions are of course open for debate. (Ulrik)
+
+ \item
+ One thing I miss in [the typeset form of an encoding
+ specification] is a simple hex/octal/decimal chart showing all
+ the character names in their positions (and ideally even an
+ example of the printed character, although I know that would be
+ harder). (Karl Berry)
+
+\end{itemize}
+
+
+\subsection{Things that probably won't be done in the near future}
+
+\begin{itemize}
+ \item
+ Find a way to automatically generate math fonts. (Alan)
+
+ I doubt that this will ever be possible to do automatically.
+ \package{mathptm} and \package{mathptmx} are already hackish enough,
+ not to mention the prototype implementations for new math font
+ encodings. /UV
+
+ \item
+ Investigate using Alternate sets. (Alan)
+
+ AFAIK, Thierry Bouche has done some work with alternate sets
+ for AGaramond, ACaslon and Minion, but this implies a lot of
+ manual work to compose the proper calls to \package{fontinst}. /UV
+
+ \item
+ Create \LaTeX\ packages? In fact, rethink the whole package
+ interface \textellipsis\ (Alan)
+
+ Sebastian's Perl front-end to \package{fontinst} does create trivial
+ \LaTeX\ packages automatically for the CTAN fonts. /UV
+
+ \item
+ Worry about excessive kern tables in \texttt{T1} fonts. (Alan)
+
+ I think the best way to get at this would be to write a program
+ that can optimize (for size) kern tables by making use of the |SKIP|
+ instruction. There's often room for quite a lot of compression.
+ Such a program would however have to be written in some compiling
+ language, otherwise it wouldn't be fast enough. /LH
+
+ \item
+ Consider making |\set|(|left|\textbar|right|)|kerning| parameterized
+ by the size of the other glyph, eg so that faking |<Asmall><T>| can
+ be different from |<Aacutesmall><T>|. Suggested by Hilmar Schlegel.
+
+\end{itemize}
+
+
+\subsection{Things that have been done}
+
+\begin{itemize}
+ \item
+ Update documentation (comments from Karl and Damian).
+
+ Rowland has meritoriously done the update requested here. On the
+ other hand, it needs to be updated again, since many new features
+ have been added. /LH
+
+ \item
+ Investigate using raw SC fonts. (Alan)
+
+ This problem comes up on the mailing list from time to time.
+ The problem is that \package{fontinst}'s |\latinfamily| command
+ is geared towards fonts that come with standard and expert font
+ sets (as with Adobe and Monotype fonts) rather than fonts that
+ come with standard and small caps (as with Linotype fonts).
+ I'm afraid it would be to complicated to handle both cases
+ in the same |\latinfamily| procedure. /UV
+
+ \item
+ Investigate problems with duplicate kerns appearing in VPL files
+ (Hilmar Schlegel).
+
+ The problem has been investigated and is solved with v\,1.9. /LH
+
+ \item
+ Find out why, if you have a font with both medium and light variants
+ but no italic, you get |m|/|it| $\mapsto$ |l|/|it| $\mapsto$
+ |l|/|sl| rather than |m|/|it| $\mapsto$ |m|/|sl|.
+ (Sebastian).
+
+ Because for every shape that \package{fontinst} is allowed to use
+ a given font for, it will perform all possible series substitutions.
+ If the |\installfont| for |l|/|sl| came before the |\installfont| for
+ |m|/|sl|, then substitutions will be as described above. See also
+ item about the substitution mechanism. /LH
+
+ \item
+ AFM files can contain real units, not just integers. (Gintautas
+ Grigelionis).
+
+ This is fixed with v\,1.9. /LH
+
+ \item
+ Make \texttt{fontdoc.sty} and co.\ use PS fonts. (Alan)
+
+ I think |\useexamplefont| and friends (introduced with v\,1.8)
+ pretty much do what was intended here. /LH
+
+ \item
+ \texttt{latin.mtx} uses \package{fontinst} rather than
+ \package{fontdoc}! (Rob Hutchings).
+
+ \item
+ Allow |.vpl| files to be read as |.pl| files. (Constantin)
+
+ \item
+ Richard Walker reports that if you say
+ \begin{quote}
+ |\latinfamily{mbvx}{}|\\
+ |\latinfamily{mbv9}{}|
+ \end{quote}
+ then the 2nd run doesn't use old-style digits, because the 1st run
+ has already defined |\digit|. If so, this is because |\latinfamily|
+ is missing a bracing level. I should investigate.
+
+ I think it is best to do oldstyle and non-oldstyle variants in two
+ separate fontinst runs, i.e. don't use |\latinfamily| more than once
+ in a single run. (IIRC, grouping doesn't work properly since
+ every single font closes and reopens a |\begingroup|-|\endgroup|
+ pair to encapsulate the kerning info\footnote{And glyph metrics
+ info, and glyph mapcommands info \textellipsis /LH} or something
+ like that.) /UV
+
+ \item
+ Consider writing an |\installfontas| command which doesn't
+ generate a (V)PL but makes an entry in the FD file.
+ Typical usage: Install an \texttt{sc} shape of a \texttt{TS1}
+ font family by using the font made for the \texttt{n} shape.
+ (Lars)
+
+ Done. The described installation for the \texttt{m} series of the
+ \texttt{ptm} font family can be done through
+ \begin{quote}
+ |\installfontas{ptmr8c}{TS1}{ptm}{m}{sc}{}|
+ \end{quote}
+ Note however that you need to do it in each series explicitly. /LH
+
+ \item
+ Use the \texttt{StdVW} property from AFM 4.0 files instead of the
+ width of \textit{I} for standard stem fontdimen. Pointed out by
+ Hilmar Schlegel.
+
+ Partially done. |\afmtomtx| writes a
+ |\setint{verticalstem}|\marg{value} when it encounters a
+ \texttt{StdVW} property. The ETX files have not yet (2000/05/30)
+ been changed to use this value. /LH
+
+ \item
+ \package{fontdoc} has a problem with glyph, integer, string,
+ etc.\ names that contains underscores, since these will cause
+ \TeX\ to jump to math mode when one tries to typeset these things.
+ Unfortunately \package{fontinst} itself writes two such integers:
+ \texttt{descender_neg} and \texttt{maxdepth_neg}. There are at
+ least three solutions to this. The first is to make underscore an
+ `other' character throughout, but this might break some comments in
+ MTX and ETX files. The second is to temporarily change the catcode
+ in the arguments of the commands, but that will complicate the
+ definitions of almost all \package{fontdoc} commands dramatically.
+ The third is to declare this as unsupported by \package{fontdoc} and
+ change \package{fontinst} so that the troublesome integers are
+ renamed, e.g.\ \texttt{descender-neg} and \texttt{maxdepth-neg}, but
+ this can break people's code. (Lars)
+
+ After thinking about it for a couple of months, I realized that
+ none of the above is the right solution. That is instead to use
+ something similar to the harmless character strings of the
+ \package{xdoc} package when typesetting names of variables etc.\
+ in \package{fontdoc}. This got implemented in v\,1.916. /LH
+
+ \item
+ Modify the (V)PL-to-MTX converter so that |\setint|\discretionary
+ {}{}{}|{fontdimen(|\meta{n}|)}|\discretionary{}{}{}|{\int|%
+ \marg{name}|}| commands in the ETX file declare that
+ \texttt{PARAMETER} (or equivalent) properties for fontdimen
+ \meta{n} should be converted to |\setint| commands for the integer
+ \meta{name}. This ought to be particularly useful for math fonts.
+ (Lars)
+
+ Done with v\,1.917, but only for the new \cs{setfontdimen}
+ command. /LH
+
+ \item
+ Update \texttt{fontdoc.sty} and co.\ for \LaTeXe. (Alan)
+
+ \texttt{fontdoc.sty} underwent a major overhaul from v\,1.916 on,
+ so I suspect this can be said to have been done now. The basic
+ vertical spacing put in by \cs{Aheading} and \cs{Bheading} may
+ however need more work; sometimes it doesn't come out as one
+ would want it to. /LH
+
+ \item
+ \texttt{latin.mtx} fakes composite SC glyphs [kerning?] from the
+ composite glyph, eg.
+ \begin{quote}
+ |\setleftrightkerning{Aacutesmall}{Aacute}{900}|,
+ \end{quote}
+ rather than from the SC non-composite, eg.
+ \begin{quote}
+ |\setleftrightkerning{Aacutesmall}{Asmall}{1000}|
+ \end{quote}
+ This may cause problems with SC fonts with explicit SC--C kerns,
+ eg.
+ \begin{quote}
+ |\setkern{V}{Asmall}{100}|
+ \end{quote}
+ This needs to be thought about. Pointed out by Hilmar Schlegel.
+
+ \texttt{newlatin.mtx} does this right; shrunk glyphs get shrunk
+ kerning, whereas constructed glyphs get kerning from the base
+ letter. /LH
+
+\end{itemize}
+
+
+\subsection{Other notes}
+
+Alan's \texttt{TODO} file also contains some items regarding
+\package{mathptm}, but that seems to have migrated out of
+\package{fontinst} (if it ever really was a part). The problem is that
+\package{mathptm} cannot be changed any more for the sake of checksum
+consistency and backwards compatibility. A new variant called
+\package{mathptmx} tries to do a little better, but there may still be
+room for improvements.
+
+
+
+\section{Efficiency}
+
+This section records the results of some (rather simple) test runs
+that have been made to test the efficiency of \package{fontinst},
+primarily to see how changes in the implementation affect efficiency
+by comparing the time and space used by different \package{fontinst}
+versions to complete the same task.
+
+
+\subsection{Alan Jeffrey's tests}
+\label{Ssec: ASAJ tests}
+
+I compared the version where you try to keep ints as |\mathchardef|s
+with the version where you don't bother, and for a sample font without
+|\mathchardef|s I got:
+\begin{quote}
+ 114673 words of memory out of 150001\\
+ Time elapsed: 135.0 seconds
+\end{quote}
+and with, I got:
+\begin{quote}
+ 114050 words of memory out of 150001\\
+ Time elapsed: 134.5 seconds
+\end{quote}
+so I've saved a little memory and time. Not brilliant, but I may as
+well keep it in.
+
+Where possible, we avoid re-scaling kerns, which saves a bit of time
+and memory. With a sample font, the version where we didn't avoid
+re-scaling used:
+\begin{quote}
+ 114050 words of memory out of 150001\\
+ Time elapsed: 134.5 seconds
+\end{quote}
+whereas the version where we do avoid it used:
+\begin{quote}
+ 113786 words of memory out of 150001\\
+ Time elapsed: 124.9 seconds
+\end{quote}
+
+We keep the names of the glyphs to kern with as |\l-|\meta{name} and
+|\r-|\meta{name} to save on token space, and this got the resources
+used down to:
+\begin{quote}
+ 88574 words of memory out of 150001\\
+ Time elapsed: 106.1 seconds
+\end{quote}
+Keeping track of the kern amounts as |\|\meta{amount} got the resources
+used down to:
+\begin{quote}
+ 75424 words of memory out of 150001\\
+ Time elapsed: 97.2 seconds
+\end{quote}
+Mind you, I then added all the |\transformfont| stuff, and it went
+back to:
+\begin{quote}
+ 77079 words of memory out of 150001\\
+ Time elapsed: 97.7 seconds
+\end{quote}
+
+
+
+\subsection{Current tests}
+
+The setup for this test is that \TeX\ is run on a \texttt{.tex} file
+consisting of the following commands.
+\begin{quote}
+ |\batchmode|\\
+ |\input fontinst.sty|\\
+ |\latinfamily{pad}{}|\\
+ |\tracingstats=1\bye|
+\end{quote}
+All the font metrics are generated from the AFM files; temporary MTX,
+PL, and VPL files are deleted between test runs. The format used was
+generated by typing |\dump| at ini\TeX's |**| prompt; thus there is no
+overhead from a typesetting format in the space requirements.
+
+[It appears the exact data from these tests will have to wait, since
+I haven't been able to get access to any computer with reliable
+process timing. For the next release perhaps \textellipsis\ /LH]
+
+% The \TeX\ version used is \TeX~3.14159. The \TeX\ implementation used
+% is te\TeX~0.9 (Web2C~7.2), running on a
+%
+% The \emph{input sources} figure lists how many items are used on
+% \TeX's stack for simultaneous input sources. As an input source in
+% this context is considered not only input files, but also (and mainly)
+% various token lists. Most of these token lists are replacement texts
+% and parameters of macros, but token list items on this stack also come
+% from expansions of |\the| (not only when applied to a |\toks| register)
+% and the like. The input source stack sizes of normal \TeX\
+% implementations are usually several times larger than what
+% \package{fontinst} uses, so this particular resource shouldn't cause
+% any trouble.
+%
+% The \emph{parameter} figure is the maximal number of macro parameters that
+% \TeX\ has to remember at any one time. The reason this number is
+% greater than 9 is that it counts parameters in \emph{all} macros that
+% are on the input sources stack, not just those in the top one. The
+% same remark about the likelyhood of \TeX\ running out of this resource
+% during a \package{fontinst} run as for input sources applies for
+% parameters.
+%
+% The \emph{buffer characters} stack holds lines read from input files that
+% are partially tokenized (if several files are on the input sources
+% stack then \TeX\ must remember the last line read from each of them) and
+% characters for |\csname| \textellipsis |\endcsname| constructions that
+% are being expanded. This shouldn't cause any trouble either.
+%
+% The \emph{save values} figure is the maximum number of items on \TeX's
+% save stack at any time. \package{fontinst} uses massive amounts of
+% space here (compared to normal \TeX\ documents), but there isn't much
+% that can be done about this since \package{fontinst} uses \TeX's
+% grouping mechanism to clear data for one font from memory before
+% processing begins with the next.
+%
+% The \emph{multiletter control sequences} figure is exactly
+% that---the number of control sequences whose names consist of more than
+% one character. When these become too many, \TeX\ complains that its
+% hash table is full. Some of these control sequences are macros that
+% \package{fontinst} uses in a procedure-like manner, but many of them are
+% rather used as data tables. As a comparision of the figure I might
+% mension that my \LaTeX\ used 3748 multiletter control sequences for
+% typesetting this document, so \package{fontinst} rather average in
+% this respect (perhaps a bit above, but not much).
+%
+% The \emph{strings} figure tells how many items \TeX\ put in its string
+% pool and the \emph{string characters} figure tells how many characters
+% these contain altogether. There are two main categories of things that
+% occur here: names of multiletter control sequences and \TeX's builtin
+% error messages. One thing which certainly doesn't occur here is the
+% texts you save using \package{fontinst}'s |\setstr| command; these will
+% instead become token lists and occupy main memory space (the \emph{names}
+% of string variables will however become part of a control sequence name,
+% so that will be stored as a string). Unlike some other \TeX\
+% implementations however, the Web2C \TeX\ seems to only report new
+% entries in the string pool, so the \emph{strings} and \emph{string
+% characters} figures below do not include the builtin error messages.
+% On the other hand, they don't include the names of the 322 primitive
+% multiletter control sequences either, which is why the figures below
+% report more control sequences than strings.
+%
+% The \emph{main memory}, finally, is where \TeX\ stores almost
+% everything else (I've skipped some of the memory categories \TeX\
+% reports since they are ``only'' used for typesetting), most notably
+% tokens. Each token occupies one word of memory. I don't think
+% \package{fontinst}'s consumption of main memory is that high (in
+% comparision with normal \LaTeX\ jobs) since \package{fontinst} doesn't
+% have to store any boxes here and thus frees space for more tokens.
+%
+% \begin{description}
+% \item[v\,1.801]
+% \consumption{126.68}{%954.9
+% % 5261 strings out of 8681
+% % 54607 string characters out of 136047
+% % 112422 words of memory out of 200001
+% % 3814 multiletter control sequences out of 10000
+% % 8 words of font info for 0 fonts, out of 180000 for 256
+% % 0 hyphenation exceptions out of 2551
+% % 30i,0n,42p,220b,1696s stack positions out of 600i,150n,200p,3000b,4094s
+% 3903 strings out of 13688
+% 42612 string characters out of 101822
+% 112422 words of memory out of 263001
+% 3961 multiletter control sequences out of 10000+0
+% 7 words of font info for 0 fonts, out of 200000 for 1000
+% 0 hyphenation exceptions out of 1000
+% 30i,0n,42p,220b,1770s stack positions out of 300i,100n,500p,30000b,4000s
+% }% Compulsory comment; TeX inserts a & at the end of this line
+% % as a side-effect of the implementation of \consumption.
+% \item[v\,1.902]
+% \consumption{139.59}{%997.4
+% % 6196 strings out of 8681
+% % 69530 string characters out of 136047
+% % 112617 words of memory out of 200001
+% % 4749 multiletter control sequences out of 10000
+% % 8 words of font info for 0 fonts, out of 180000 for 256
+% % 0 hyphenation exceptions out of 2551
+% % 28i,0n,42p,220b,2004s stack positions out of 600i,150n,200p,3000b,4094s
+% 4690 strings out of 13688
+% 52734 string characters out of 101822
+% 112613 words of memory out of 263001
+% 4748 multiletter control sequences out of 10000+0
+% 7 words of font info for 0 fonts, out of 200000 for 1000
+% 0 hyphenation exceptions out of 1000
+% 28i,0n,42p,220b,2000s stack positions out of 300i,100n,500p,30000b,4000s
+% }%
+% Comparing the figures for v\,1.902 with those of v\,1.801, there
+% are mainly three things which are of interest. The first is that
+% the number of items on the save stack have increased quite a lot.
+% Most of this is due to the mechanism by which \package{fontinst}
+% avoids writing multiple kerns to (V)PL files. The second thing to
+% notice is that the number of control sequences has increased quite
+% dramatically (over 20\%). This is to be expected, as a number of
+% new features have been added and the implementation of these
+% features requires many new macros.
+%
+% Some 200 of these new control sequences are however not there
+% because of new features, but because of a silly implementation of
+% how slot numbers for glyphs are stored. In an attempt to save
+% tokens, I (LH) stored these numbers as control sequence names
+% rather than token sequences, just like kern amounts have been
+% stored for some time now. One notable feature of kern
+% amounts is however that although these may assume just about any
+% value you can think of, within any given font family they tend to
+% assume only a handful of values. This means that the number of
+% hash positions occupied by such control sequences is never very
+% large and the storage is efficient. On the other hand, the set of
+% slot numbers that occur usually consists of all integers in the
+% range 0--255, with each slot number occuring in at most one
+% position. This means that the storage method, although efficient
+% in the number of tokens, really squanders space in the hash table.
+% A much better method (which should be implemented, once I get round
+% to it) is to store slot numbers in the character codes of `ordinary'
+% tokens.
+%
+% The third noticable thing is that although the number of macros
+% has grown quite a lot, the amount of main memory used has hardly
+% increased at all! Some of this is probably due to that the ENC to
+% ETX converter was moved to \texttt{finstmsc.sty}, since this
+% consists of only two macros but lots of tokens. Another factor
+% that has probably helped is that |\glyph| now avoids rescaling a
+% glyph by one thousand; this saves 9 tokens for each time
+% |\glyph|\marg{name}|{1000}| gets executed.
+% \item[v\,1.907]
+% \consumption{138.88}{%1019.9
+% % 6226 strings out of 8681
+% % 69918 string characters out of 136047
+% % 113820 words of memory out of 200001
+% % 4779 multiletter control sequences out of 10000
+% % 8 words of font info for 0 fonts, out of 180000 for 256
+% % 0 hyphenation exceptions out of 2551
+% % 28i,0n,42p,220b,2006s stack positions out of 600i,150n,200p,3000b,4094s
+% % 6225 strings out of 8681
+% 4719 strings out of 13688
+% 53105 string characters out of 101822
+% 113814 words of memory out of 263001
+% 4777 multiletter control sequences out of 10000+0
+% 7 words of font info for 0 fonts, out of 200000 for 1000
+% 0 hyphenation exceptions out of 1000
+% 28i,0n,42p,220b,2002s stack positions out of 300i,100n,500p,30000b,4000s
+% }%
+% This is pretty much what could be expected. A couple of new
+% features have been added, so naturally some of the numbers have
+% grown a little.
+% \item[v\,1.908]
+% This version is devoted to optimizing \package{fontinst}.
+%
+% The first idea was to avoid moving the contents of
+% |\glyph_map_commands| and |\glyph_map_fonts| to a macro and back
+% again each time these are updated. This changed the numbers to
+% \consumption{135.64}{%
+% 4719 strings out of 13688
+% 53105 string characters out of 101822
+% 113810 words of memory out of 263001
+% 4777 multiletter control sequences out of 10000+0
+% 7 words of font info for 0 fonts, out of 200000 for 1000
+% 0 hyphenation exceptions out of 1000
+% 28i,0n,42p,220b,2002s stack positions out of 300i,100n,500p,30000b,4000s
+% }%
+% Hence I've earned a few seconds.
+%
+% The next idea is to expand the |\space|s in |\out_lline| and
+% friends when these are defined, instead of expanding them anew
+% each time an output line is written.
+% \item[v\,1.909]
+% \consumption{}{%1159.8 % Ow! It's getting worse.
+% % 6155 strings out of 8681
+% % 68824 string characters out of 136047
+% % 113918 words of memory out of 200001
+% % 4708 multiletter control sequences out of 10000
+% % 8 words of font info for 0 fonts, out of 180000 for 256
+% % 0 hyphenation exceptions out of 2551
+% % 28i,0n,42p,220b,1982s stack positions out of 600i,150n,200p,3000b,4094s
+% }
+% \item[v\,1.910]
+% \consumption{}{%1031.6 % Perhaps not ...
+% % 5949 strings out of 8681
+% % 68261 string characters out of 136047
+% % 113840 words of memory out of 200001
+% % 4502 multiletter control sequences out of 10000
+% % 8 words of font info for 0 fonts, out of 180000 for 256
+% % 0 hyphenation exceptions out of 2551
+% % 28i,0n,42p,220b,1756s stack positions out of 600i,150n,200p,3000b,4094s
+% }
+% \end{description}
+%
+
+
+\begin{thebibliography}{99}
+\bibitem{Fontname}
+ Karl Berry: \textit{Fontname}, CTAN:\discretionary{}{}{}%
+ \texttt{info}\slash \texttt{fontname}\slash \texttt{fontname.texi}
+ (and most of the other files in that directory as well).
+\bibitem{mfnt}
+ Matthias Clasen and Ulrik Vieth:
+ \texttt{mfnt} (their ``work with math fonts''), 1997--8,
+ see \textsc{http}:/\slash \texttt{www.tug.org}\slash
+ \texttt{twg}\slash \texttt{mfg}\slash\texttt{archives}/.
+\bibitem{LaTeX-companion}
+ Michel Goossens, Frank Mittelbach, Alexander Samarin:
+ \textit{The \LaTeX\ Companion},
+ Ad\-di\-son-Wes\-ley, Reading, MA, USA, 1994.
+ % Addison and Wesley are names of two persons, but they
+ % should be joined by a hyphen since Addison-Wesley is
+ % a company name. Tricky that.
+\bibitem{LaTeX-graph-comp}
+ Michel Goossens, Sebastian Rahtz, Frank Mittelbach:
+ \textit{The \LaTeX\ Graphics Companion: Illustrating Documents with
+ \TeX\ and PostScript},
+ Ad\-di\-son-Wes\-ley, Reading, MA, USA, 1997;
+ ISBN~0-201-85469-4.
+\bibitem{TAOCP2}
+ Donald E.\ Knuth: \textit{The art of computer programming},
+ vol.~2 (\textit{Seminumerical algorithms}), 3rd ed.,
+ Ad\-di\-son-Wes\-ley, 1997.
+\bibitem{TeXbook}
+ Donald E.\ Knuth, Duane Bibby (illustrations):
+ \textit{The \TeX book},
+ Ad\-di\-son-Wes\-ley, 1991, ISBN~0-201-13448-9;
+ also volume A of \textit{Computers and typesetting},
+ ISBN~0-201-13447-0.
+\bibitem{fntguide}
+ \LaTeX3 Project Team: \textit{\LaTeXe{} font selection},
+ CTAN: \texttt{macros}\slash
+ \texttt{latex}\slash\texttt{base}\slash\texttt{fntguide.tex}.
+\end{thebibliography}
+
+
+\end{document}