diff options
Diffstat (limited to 'Master/texmf-dist/source/fontinst/base/fisource.tex')
-rw-r--r-- | Master/texmf-dist/source/fontinst/base/fisource.tex | 2985 |
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 #4 #6 #8	&{% + \consumption@iii{{#1}{#3}}{{#5}{#7}}% +} +\def\consumption@iii#1#2#3i,#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} |