%%% ==================================================================== %%% @LaTeX-file{ %%% author = "Alan Jeffrey and Rowland McDonnell and %%% Ulrik Vieth and Lars Hellstr{\"o}m", %%% version = "1.927", %%% date = "6 August 2004", %%% time = "22:10:00 CEST", %%% filename = "fontinst.tex", %%% email = "fontinst@tug.org", %%% checksum = "", %%% codetable = "ISO/ASCII", %%% keywords = "fontinst, TeX, PostScript, documentation", %%% supported = "yes", %%% abstract = "This is the documentation for the fontinst %%% font installation package.", %%% package = "fontinst", %%% dependencies = "ltxguide.cls, url.sty, xspace.sty" %%% } %%% ==================================================================== % Copyright 1993, 1994, 1995, 1996 Alan Jeffrey % Modified by Rowland McDonnell June 1998 % Modified and revised by Ulrik Vieth June 1998 % Modified by Lars Hellstr\"om July 2004 \documentclass[a4paper]{ltxguide} \usepackage[OT1]{fontenc} \usepackage{url,xspace} \usepackage{graphicx} % \renewcommand\rmdefault{ppl} %\renewcommand\rmdefault{padx} %\renewcommand\rmdefault{pmnx} % \MakeShortVerb{\|} % Title page and running heads. \makeatletter \newcommand{\subtitle}[1]{\renewcommand{\@subtitle}{#1}} \newcommand{\version}[1]{\renewcommand{\@version}{#1}} \newcommand{\illustration}[1]{\renewcommand{\@illustration}{#1}} \newcommand{\@subtitle}{} \newcommand{\@version}{???} \newcommand{\@illustration}{cover.eps} % \pagestyle{myheadings} % \AtBeginDocument{\markright{\small\itshape % \@author\hfill\@title: \@subtitle\quad}} \renewcommand{\maketitle}{{% \thispagestyle{empty}% \normalfont\centering \null {\fontsize{100}{100}\textit{\@title}}% \par\bigskip {\Large\textbf{\@subtitle}}% \vfill \includegraphics[width=\textwidth]{\@illustration}% \vfill {\Large\textbf{% \def\and{\egroup\qquad\hbox\bgroup} \leavevmode \hbox{\@author}\\[\smallskipamount] \@title~v\@version \quad\textperiodcentered\quad \@date}}% \clearpage }} \makeatother % Set lists tighter (assuming non-zero \parskip). \makeatletter \renewcommand{\@listI}{% \leftmargin\leftmargini \parsep\medskipamount \itemsep\z@ % + parsep \topsep\z@ % + parskip \partopsep\z@ } \newenvironment{isyntax}{% \let\\\@centercr \list{}{% \itemsep \z@ \itemindent -1.5em% \listparindent \itemindent \advance \leftmargin 1.5em% }% \advance \rightskip \z@\@plus0.7\linewidth \relax \linepenalty=100\relax \item\relax }{\endlist} \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} \newenvironment{hackernote}{% \list{}{ \setlength{\leftmargin}{0pt}% \setlength\labelwidth{0pt}% \setlength{\listparindent}{1.4em}% \setlength{\parsep}{0pt plus 1pt}% \setlength{\itemsep}{\medskipamount}% }\item[]% \small \textit{Note for hackers.}\hspace{0.5em}% }{\endlist} % % I don't use the <...> feature for verbatim, % % so I undo that ltxguide feature. % \makeatletter % \renewcommand{\verbatim@font}{% % \normalfont \ttfamily % % \catcode`\<=\active % % \catcode`\>=\active % } \makeatother % Set spacing around captions. \setlength{\abovecaptionskip}{\medskipamount} \setlength{\belowcaptionskip}{\medskipamount} % Markup for logos, file types, programs, etc. \newcommand*{\meta}{\m} \newcommand*{\marg}{\arg} \newcommand*{\parg}[1]{\texttt{(}\m{#1}\texttt{)}} \newcommand*{\cs}[1]{\texttt{\char`\\ #1}\xspace} \newcommand*{\OzTeX}{O\kern-.03em z\kern-.15em\TeX} \newcommand*{\OzMF}{O\kern-.03em zMF} \newcommand*{\OzTools}{O\kern-.03em z\kern-.15em Tools} \newcommand{\PS}{Post\-Script\xspace} \newcommand{\TT}{True\-Type\xspace} \newcommand*{\setfilename}[1]{\texttt{#1}} \newcommand*{\setdotfilename}[1]{\setfilename{.#1}} \newcommand*{\setpackagename}[1]{\textsf{#1}} \newcommand{\dvips} {\setpackagename{dvips}\xspace} \newcommand{\Dvips} {\setpackagename{Dvips}\xspace} \newcommand{\fontinst}{\setpackagename{font\-inst}\xspace} \newcommand{\Fontinst}{\setpackagename{Font\-inst}\xspace} % \show\fontname \newcommand{\fontnamekb}{fontname\xspace} \newcommand{\Fontnamekb}{Fontname\xspace} \newcommand{\mf} {\setfilename{mf}\xspace} \newcommand{\Mf} {\setfilename{Mf}\xspace} \newcommand{\vf} {\setfilename{vf}\xspace} \newcommand{\Vf} {\setfilename{Vf}\xspace} \newcommand{\pl} {\setfilename{pl}\xspace} \newcommand{\Pl} {\setfilename{Pl}\xspace} \newcommand{\fd} {\setfilename{fd}\xspace} \newcommand{\Fd} {\setfilename{Fd}\xspace} \newcommand{\pk} {\setfilename{pk}\xspace} \newcommand{\Pk} {\setfilename{Pk}\xspace} \newcommand{\afm}{\setfilename{afm}\xspace} \newcommand{\Afm}{\setfilename{Afm}\xspace} \newcommand{\vpl}{\setfilename{vpl}\xspace} \newcommand{\Vpl}{\setfilename{Vpl}\xspace} \newcommand{\tfm}{\setfilename{tfm}\xspace} \newcommand{\Tfm}{\setfilename{Tfm}\xspace} \newcommand{\mtx}{\setfilename{mtx}\xspace} \newcommand{\Mtx}{\setfilename{Mtx}\xspace} \newcommand{\etx}{\setfilename{etx}\xspace} \newcommand{\Etx}{\setfilename{Etx}\xspace} \newcommand{\pfa}{\setfilename{pfa}\xspace} \newcommand{\Pfa}{\setfilename{Pfa}\xspace} \newcommand{\pfb}{\setfilename{pfb}\xspace} \newcommand{\Pfb}{\setfilename{Pfb}\xspace} \newcommand{\dvi}{\setfilename{dvi}\xspace} \newcommand{\Dvi}{\setfilename{Dvi}\xspace} \newcommand{\pdf}{\setfilename{pdf}\xspace} \newcommand{\Pdf}{\setfilename{Pdf}\xspace} \newcommand{\ttf}{\setfilename{ttf}\xspace} \newcommand{\Ttf}{\setfilename{Ttf}\xspace} \newcommand{\vftovp}{\setpackagename{vftovp}\xspace} \newcommand{\vptovf}{\setpackagename{vptovf}\xspace} \newcommand{\pltotf}{\setpackagename{pltotf}\xspace} \newcommand{\tftopl}{\setpackagename{tftopl}\xspace} \newcommand{\BibTeX}{Bib\TeX} % % Stolen from Dr Knuth % \makeatletter % borrow the private macros of PLAIN (with care) % \def\oct#1{\hbox{\rm\'{}\kern-.2em\it#1\/\kern.05em}} % octal constant % \def\hex#1{\hbox{\rm\H{}\tt#1}} % hexadecimal constant % % macros for font tables % \def\oddline#1{\cr % \noalign{\nointerlineskip} % \multispan{19}\hrulefill& % \setbox0=\hbox{\lower 2.3pt\hbox{\hex{#1x}}}\smash{\box0}\cr % \noalign{\nointerlineskip}} % \def\evenline{\cr\noalign{\hrule}} % \def\chartstrut{\lower4.5pt\vbox to14pt{}} % \def\beginchart#1{$$\global\count@=0 #1 % \halign to\hsize\bgroup % \chartstrut##\tabskip0pt plus10pt& % &\hfil##\hfil&\vrule##\cr % \lower6.5pt\null % &&&\oct0&&\oct1&&\oct2&&\oct3&&\oct4&&\oct5&&\oct6&&\oct7&\evenline} % \def\endchart{\raise11.5pt\null&&&\hex 8&&\hex 9&&\hex A&&\hex B& % &\hex C&&\hex D&&\hex E&&\hex F&\cr\egroup$$} % \def\*{\global\advance\count@ by1 } % \def\:{\setbox0=\hbox{\char\count@}% % \ifdim\ht0>7.5pt\reposition % \else\ifdim\dp0>2.5pt\reposition\fi\fi % \box0\global\advance\count@ by1 } % \def\reposition{\setbox0=\hbox{$\vcenter{\kern2pt\box0\kern2pt}$}} % \def\smallchart{% % %\global\advance\count@ by16 % &\oct{00x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline0 % &\oct{01x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline % &\oct{02x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline1 % &\oct{03x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline % &\oct{04x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline2 % &\oct{05x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline % &\oct{06x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline3 % &\oct{07x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline % &\oct{10x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline4 % &\oct{11x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline % &\oct{12x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline5 % &\oct{13x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline % &\oct{14x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline6 % &\oct{15x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline % &\oct{16x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline7 % &\oct{17x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline} % % \def\bigchart{% % %\global\advance\count@ by16 % &\oct{00x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline0 % &\oct{01x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline % &\oct{02x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline1 % &\oct{03x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline % &\oct{04x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline2 % &\oct{05x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline % &\oct{06x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline3 % &\oct{07x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline % &\oct{10x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline4 % &\oct{11x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline % &\oct{12x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline5 % &\oct{13x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline % &\oct{14x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline6 % &\oct{15x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline % &\oct{16x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline7 % &\oct{17x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline % &\oct{20x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline8 % &\oct{21x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline % &\oct{22x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline9 % &\oct{23x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline % &\oct{24x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline{A} % &\oct{25x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline % &\oct{26x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline{B} % &\oct{27x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline % &\oct{30x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline{C} % &\oct{31x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline % &\oct{32x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline{D} % &\oct{33x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline % &\oct{34x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline{E} % &\oct{35x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline % &\oct{36x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline{F} % &\oct{37x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline} % % % \font\xrm = cmr10 at 10pt % change this line to test font % % \beginchart\xrm \normalchart \endchart % % \newcommand{\smallfontchart}[1]{% % \font\xrm = #1 \beginchart\xrm \smallchart \endchart} % \newcommand{\bigfontchart}[1]{% % \font\xrm = #1 \beginchart\xrm \bigchart \endchart} % % % \smallfontchart{cmr10 at 10pt} % % \bigfontchart{ecrm1000 at 10pt} % \makeatother % % End stolen from Dr Knuth \title{fontinst} \subtitle{Font installation software for \TeX} \author{Alan Jeffrey\and Rowland McDonnell\and Lars Hellstr\"om} \illustration{roadmap.eps} \version{1.9} \date{July 2004} \errorcontextlines=999 \begin{document} \maketitle \begin{itshape} This manual is currently being rewritten, and may therefore be a bit disorganised. For authoritative information on command syntaxes and the like, see the Literate Programming sources for \fontinst. The main file there is \textsl{\texttt{fisource.tex}}. \end{itshape} \bigskip \begin{footnotesize} This manual describes the \texttt{fontinst} software for converting fonts from Adobe Font Metric format to forms readable by \TeX. This manual should be distributed with the \texttt{fontinst} software, which is available by anonymous FTP from \url{ftp://ftp.tex.ac.uk/tex-archive/fonts/utilities/fontinst}, and on the various CD-ROMs containing material from the CTAN archives. Please do not contact the author directly for copies. If you would like to report a bug with \texttt{fontinst}, please mail \url{fontinst@tug.org}. The mail will be sent to the \texttt{fontinst} mailing list. If you would like to be on the \texttt{fontinst} mailing list, see \url{http://tug.org/mailman/listinfo/fontinst}. \end{footnotesize} \tableofcontents % \vfill \clearpage % \section{Introduction} % % Digital fonts, as they may be bought from a foundry or other supplier, % are usually not directly usable with \LaTeX. An obvious problem can be % that the font information is not available in a format that \LaTeX\ % understands. A more subtle problem is that the fonts are often % organised in a way that is unsuitable for automatic typesetting. % % \Fontinst was written to overcome these problems. % % % The main thing \fontinst does is creating virtual fonts (\vf's). % % % % The \fontinst package is a set of \TeX\ macros written to create % % virtual fonts for use with \TeX. \section{Defining terms} This is rather a large and perhaps tedious section. You might be tempted to skip it so you can get to some more direct information on how to use \fontinst. That's fine if you understand everything about how \TeX\ handles fonts. If not, I suggest you at least skim though this section. \subsection{What's a font?} Once upon a time, this question was easily answered: a font is a set of type in one size, style, etc. There used to be no ambiguity, because a font was a collection of chunks of type metal kept in a drawer, one drawer for each font. These days, with digital typesetting, things are more complicated. What a font `is' isn't easy to pin down. A typical use of a \PS font with \LaTeX\ might use these elements: \begin{itemize} \item Type 1 printer font file \item Bitmap screen font file \item Adobe font metric file (\afm file) \item \TeX\ font metric file (\tfm file) \item Virtual font file (\vf file) \item font definition file (\fd file) \end{itemize} Looked at from a particular point of view, each of these files `is' the font. So what's going on? \subsubsection{Type 1 printer font files} These files contain the information needed by your printer to draw the shapes of all the characters in a font. They're typically files with a \pfa or \pfb extension; on Macs they're usually in files of type `LWFN' which usually have icons that look like a laser printer. The information in all these files is basically the same: the only difference is in its representation. \pfa stands for `printer font ASCII', while \pfb stands for `printer font binary'. That is, \pfa files contain plain text information, while \pfb files contain the same information encoded as machine-readable binary data. If you have Adobe Type Manager (ATM) installed on your computer, ATM will use these files to draw an accurate representation of the letters on the screen of your computer when you are previewing a \TeX\ document. Printer font files are not used directly by \TeX\ at all -- \TeX\ just prepares a \dvi file that refers to the fonts by name and the characters by number: \TeX\ knows nothing about the shapes involved. The DVI driver uses the printer font files when you ask it to print the \dvi file. This means that you can produce a \dvi file which uses, say, Palatino, even if you do not have the Type~1 printer font file for this font on your computer. You will need to find a computer that does have Palatino before you can print it or preview it, though. Pdf\TeX\ is different from \TeX\ in this respect; since pdf\TeX\ integrates most of the functionality of a DVI driver, it may be unable to generate working \pdf output if the some Type~1 printer font file is not available. \subsubsection{Bitmap screen font files} These files contain a low-resolution bitmap for drawing a representation of the font on the screen of your computer if ATM is not installed. In the \TeX\ world, these files are only used for screen previews by the DVI driver. They are kept in font suitcase files on Macintoshes. %\marginnote{And where on other computers?} \subsubsection{Adobe font metric files (\afm files)} These files are text files which contain information about the size of each character in a font, kerning and ligature information, and so on. They can't be used by \TeX\ directly, but the information they contain is essential if you want to use a font with \TeX. \Fontinst can create from an \afm file the necessary \tfm and \vf files so you can use a font with \TeX. Once you have created all the files you need to use a font with \TeX, you can remove the corresponding \afm files from your computer unless you have other software that needs them. The job of turning an \afm file into a set of \tfm and \vf files is one of the main uses for \fontinst. Most of this document is concerned with this process, so don't worry if it seems a bit vague at the moment. \subsubsection{\TeX\ font metric files (\tfm files)} These are binary data files in a format designed for use by \TeX\ which contain (more-or-less) the same information as \afm files: the size of each character in a font (font metric data), kerning, and ligature information. When you select a font in \TeX, you are telling \TeX\ to typeset using a particular \tfm file; from \TeX's point of view, a \tfm file (and nothing else) \emph{is} a font. \TeX\ itself doesn't see printer font files, screen bitmaps, \pk files, \vf files, or anything else to do with fonts: only \tfm files. \TeX\ uses these \tfm files to decide where to put characters when typesetting. From \TeX's point of view, \tfm files are fonts, even though they contain no information about the shape of letters, and are not used by anything except \TeX\ -- once you have produced a \dvi file, you don't need the \tfm files to print it out. (This is a slight lie: \dvips can read \tfm files corresponding to \PS and \TT fonts so it can modify the metrics slightly to improve the letterspacing at your chosen output resolution. This is an optional minor tweak and not an essential part of the output process.) \subsubsection{Property list files (\pl files)} \pl files are human-readable text files which contain all the font metric, kerning, ligature, and other information needed to create a \tfm file. You can convert between the two file formats using \tftopl and \pltotf. \subsubsection{Virtual font files (\vf files)} These are binary data files in a format designed for use by \TeX\ \dvi drivers. They're main purpose in life is to let you use fonts in different encodings to the standard \TeX\ encodings. These files are used by \dvi driver software only. They are used only by \dvi drivers to work out what it should \emph{really} print when you ask for a particular character. Technically they are like subroutine libraries for \dvi drivers, with one subroutine for each character in the virtual font: when the \dvi driver sees a \dvi command to set a character from a virtual font, it will execute a sequence of \dvi commands (the ``mapcommands property'' of this character) that it reads in the \vf file. You need not worry about the details of this, as \fontinst deals with them for you. Creating and using virtual fonts is what this document is about, so don't worry if this doesn't make sense yet. (After all, how much do you need to know about the inner workings of \dvi files to typeset and print \TeX\ documents?) Each \vf file has a \tfm file with the same name. To use a virtual font, you select the \tfm file as the font to use in your document. When the \dvi driver comes across this \tfm file in the \dvi file, it looks up the \vf file and uses that to decide what to do. \subsubsection{Virtual property list files (\vpl files)} \vpl files are human-readable text files which contain all the font metric, kerning, mapping, and other information needed to create a \vf and \tfm pair. \vptovf will create a \vf/\tfm pair from a \vpl file. \vftovp will create a \vpl from a \vf/\tfm pair. \vftovp also needs to be able to read all the \tfm files that are referred to by a \vf to recreate the \vpl\ -- it looks at the checksums to verify that everything's okay. \subsubsection{Font definition files (\fd files)} These are files containing commands to tell \LaTeX\ which \tfm files to associate with a request for a font using \LaTeX's font selection commands. For example, here is a small and edited part of the \fd file supplied with \setpackagename{PSNFSS} to allow you to use the Adobe Times font in T1 encoding: \begin{verbatim} \ProvidesFile{t1ptm.fd} [1997/02/11 Fontinst v1.6 font definitions for T1/ptm.] \DeclareFontFamily{T1}{ptm}{} \DeclareFontShape{T1}{ptm}{m}{n} {<<->> ptmr8t}{} \DeclareFontShape{T1}{ptm}{m}{it}{<<->> ptmri8t}{} ... \DeclareFontShape{T1}{ptm}{b}{n} {<<->> ptmb8t}{} \DeclareFontShape{T1}{ptm}{b}{it}{<<->> ptmbi8t}{} ... \end{verbatim} What this means is: when you use \LaTeX\ to select the font family |ptm| in T1 encoding in the medium series (|m|) and normal shape (|n|), \TeX\ uses the font \texttt{ptmr8t.tfm}. Similarly, if you select bold italic, \TeX\ uses \texttt{ptmbi8t.tfm}. \LaTeX\ works out which \fd file to load based on the current encoding and font family selected. If you've selected T1 encoded |ptm| like this: \begin{verbatim} \fontencoding{T1}\fontfamily{ptm}\selectfont \end{verbatim} \LaTeX\ loads the file \url{t1ptm.fd} (if it doesn't exist, you're in trouble). As you can see above, this file contains information so that \LaTeX\ knows which \tfm file to use. So if you ask for, say, |T1/ptm/b/it| (T1 encoded Times-Roman, bold series, italic shape), you get the font \texttt{ptmbi8t}. You can find more about \fd files and \LaTeX's font selection commands at CTAN: \url{ftp://ftp.tex.ac.uk/tex-archive/macros/latex/base/fntguide.tex} and \url{ftp://ftp.tex.ac.uk/tex-archive/info/simple-nfss.tex} are both useful. \subsection{What does \fontinst do?} \fontinst creates \vpl and \pl files from \afm or \pl files to map any glyph or combination of glyphs in the original font files to any slot in the output font file. There, isn't that better? Off you go now\ldots If you're still confused, I'll explain a few things. \begin{description} \item[Glyph] A glyph is an image, often associated with one or several characters. Some examples of glyphs are: `A', `\textsf{A}', `$\mathcal{A}$', `B', `F', `{\usefont{OT1}{cmr}{m}{n}f}', `{\usefont{OT1}{cmr}{m}{n}fi}', `\~{}'. Fonts are collections of glyphs. \Fontinst refers to glyphs by name. \item[Slot] This is jargon for `a numbered position in a font'. (What is important is the number, and that this number refers to a position in a font, but which font is usually irrelevant.) \item[Character] The modern definition is that a character is the smallest component of written language that has semantic value. Speaking of a character, one refers to the abstract meaning and/or shape, rather than a specific shape. Since fonts have often contained a unique glyph for each character and each usable glyph has been assigned a particular slot, it is not uncommon (in particular in older terminology) to see the three mixed up, usually so that one says `character' where one of the other two would have been more correct. The \TeX-related font file formats is no exception, as you may see examples of elsewhere in this document. \item[Encoding] There are really two different encoding concepts that one encounters when using \fontinst. The differences are not great, and an encoding of one kind often corresponds to an encoding of the other kind, but it is not merely a matter of translation. A \emph{\LaTeX\ encoding} is a mapping from characters (or more formally \LaTeX\ Internal Character Representations) to slots. In the \texttt{OT1} encoding, `\o' (or more technically `|\o|') maps to slot~28, whereas in the \texttt{T1} encoding it maps to slot~248. This kind of encoding affects what \TeX\ is doing; \dvi drivers are not involved. A \emph{font encoding} (or \emph{encoding vector}) is a mapping from slots to glyph names. This is the kind of encoding that \fontinst primarily deals with, and also the kind of encoding that \dvi drivers make use of. \texttt{ot1.etx} associates slot~28 with `\texttt{oslash}', whereas \texttt{t1.etx} and \texttt{EC.enc} (one of several to \texttt{T1} corresponding encoding vectors that come with \dvips) associates slot~28 with `\texttt{fi}'. \LaTeX\ encodings occur in \fontinst only as names and only in relation to \fd files. It is unlikely that you will need to create one of your own. The mappings defined by font encodings are on the other hand of great importance and \etx files are used to direct the generation of virtual fonts. Advanced \fontinst users may well find that they need to create new font encodings to achieve their goals. \end{description} % You're probably familiar with ASCII % encoding, which has the letter `A' in slot~65, `B' in slot~66, % and so on. That's it, really. \TeX\ uses several different % encodings. The most common ones are OT1 (the original \TeX\ % 7~bit encoding) and T1 (the newer \TeX\ 8~bit encoding). % % -- much more on this later. The thing is that the average \PS font comes in Adobe standard encoding, which, for example, has the glyph dotless~i `\i' in slot~245. But \TeX\ \texttt{T1} encoding expects the glyph o~dieresis `{\"o}' in that slot, and wants dotless~i in slot~25. So if you tried to use a raw \PS font with \TeX, any time you tried to get a `{\"o}', you'd get a `\i'; and every time you tried to get a `\i', you'd get a blank, because Adobe standard encoding says that slot~25 is empty. The process of dealing with this problem is called `re-encoding', and is what \fontinst helps with. This might not make much sense yet; the best thing to do is relax. There's a lot of things that need to be dealt with when you're setting up \LaTeX\ to use a new font, so you can expect to be a bit confused until you've done it a few times. \subsection{What do you do with \fontinst?} If you're using \fontinst, the usual steps you need to take to use an ordinary \PS text font with \LaTeX\ are these: \begin{enumerate} \item Give the \afm files an appropriate name. \item Use \fontinst to produce an |8r| encoded \pl files from these \afm files. \item Use \fontinst to create T1 and OT1 encoded \pl and \vpl files from the |8r| encoded \pl files (this procedure will also create suitable \fd files). \item Use \pltotf to turn each \pl file into a \tfm file. \item Use \vptovf to turn each \vpl file into a pair of \vf and \tfm files. \item Move the \tfm, \vf, and \fd files into the appropriate directories so \LaTeX\ can see them. \item Tell your DVI driver about the new font (edit \dvips's \texttt{psfonts.map} file, or \OzTeX's \texttt{Default} configuration file. \item Perhaps write a package file to make selecting the new font a little easier. \item Test it. \end{enumerate} \section{Fontmaking commands} There are three main types of files that you may write to control what \fontinst does: \emph{command files} (usually with suffix \setdotfilename{tex}), \emph{encoding definition files} (suffix \setdotfilename{etx}), and \emph{metric files} (suffix \setdotfilename{mtx}). Command files directly tell \fontinst to do things, whereas the purpose of an encoding or metric file is more to store data, but all three file types are technically sequences of \TeX\ commands that \fontinst execute when reading the file. Normal \TeX\ syntax rules apply in all three file types, although a few commands may behave in unfamiliar ways. Within the command file category, it is possible to discern certain subcategories. Most command files are written for one particular task, but some are common pieces that have been factored out from larger command files and are merely meant to be |\input| where appropriate. (\setfilename{csc2x.tex} in the \fontinst distribution is an example of this latter kind.) One may also distinguish between command files that are made for use with \setfilename{fontinst.sty} command definitions and command files that are made for use with \setfilename{finstmsc.sty} command definitions. This section documents the commands that are particular to the former category, whereas the next section documents commands that are particular to the latter. \subsection{Install commands} The core fontmaking takes place within a block of ``install commands''. (This name is a bit unfortunate since nothing is actually installed; rather some files that need to be installed are generated.) Such blocks have the structure \begin{quote} |\installfonts|\\ \m{install commands}\\ |\endinstallfonts| \end{quote} The \m{install commands} describe the fonts, glyphs and encodings used to build fonts, whereas the purpose of the delimiting |\installfonts| and |\endinstallfonts| are rather to organise the writing of \fd files. \begin{decl} |\installfonts|\\ |\endinstallfonts| \end{decl} At |\installfonts|, \fontinst's internal list of \fd files to generate are cleared. At |\endinstallfonts|, \fd files are written for those combinations of encoding and font family that appeared in the \meta{install commands}. \begin{hackernote} |\installfonts|, |\endinstallfonts|, and the individual install commands between them also cooperate in a rather complicated grouping scheme to cache glyphbases. This may interfere with non-\fontinst commands in the \meta{install commands}. If for example an assignment to some |\tracing|\dots\ parameter here does not seem to have any effect, try making the assignment |\global|. \end{hackernote} The most important \meta{install command} is \begin{decl} |\installfont|\arg{font-name}\arg{metrics-list}\arg{etx-list}\\ \hspace*{1.5em}\arg{encoding}\arg{family}\arg{series}% \arg{shape}\arg{size} \end{decl} This produces a \TeX\ virtual font called \m{font-name}. The \meta{metrics-list} and the \meta{etx-list} determine this font, whereas the other arguments specify how the \fd file will declare it for \LaTeX. The \m{encoding}, \m{family}, \m{series}, and \m{shape} are precisely the NFSS parameters. The \m{size} is either a shorthand declared by \verb|\declaresize| (see below), or is an \fd size specification. Like most \fontinst lists, the elements in the \meta{metrics-list} and \meta{etx-list} are separated by commas (so-called comma-separated lists). In their simplest form, the elements of these lists are file names (minus suffixes): \mtx files in the \meta{metrics-list} and \etx files in the \meta{etx-list}. First the \mtx files are processed to build up a glyphbase, i.e., store definitions of glyphs and their metric properties in memory, and then the \etx files are processed (several times) to select a set of glyphs and write the corresponding information to a \vpl file. For example, to install the T1-encoded Times Roman font (using \texttt{t1.etx} and \texttt{latin.mtx}), you say: \begin{verbatim} \installfont{ptmr8t}{ptmr8r,latin}{t1} {T1}{ptm}{m}{n}{} \end{verbatim} To install a OT1-encoded Times Roman font with a scaled version of Symbol for the Greek letters, you say: \begin{verbatim} \installfont{zptmrsy}{ptmr8r,psyr scaled 1100,latin}{ot1} {OT1}{ptm}{m}{n}{} \end{verbatim} As the second example indicates, there is more to the list items than just file names. In the case of an metrics list item, the syntax permits the two forms \begin{decl} \meta{filename}\meta{optional modifiers}\\ |\metrics| \meta{metric commands} \end{decl} \NEWfeature{v1.923} where an \meta{optional modifier} is one of \begin{decl} \verb*| scaled |\meta{rawscale factor}\\ \verb*| suffix |\meta{glyph name suffix}\\ \verb*| encoding |\meta{etx}\\ \verb*| option |\meta{string} \end{decl} A list item may contain several such modifiers, but most commonly it does not contain any. The \meta{metric commands} are explicit metric commands, as described in Section~\ref{Sec:Metric}; this latter feature is meant for minor adjustments that you don't want to bother creating a separate \mtx file for. The \meta{filename} above primarily refers to a file \meta{filename}\texttt{.mtx}, but that need not always exist before executing the above command. If there exists a \pl, \afm, or \vpl file with the right name then that is first converted to a corresponding \mtx file. However, a special case occurs if there is an |encoding| modifier: this forces conversion of a \pl or \vpl file even if an \mtx file exists, and also forces using the specified \etx file when assigning glyph names to the slots of that file. Normally the choice of \etx file for such conversions to \mtx is based on |\declareencoding| declarations. The |scaled| modifier sets the \texttt{rawscale} variable for the processing of that file. This has the effect of scaling all raw glyphs from that file to \meta{rawscale factor} per milles of their previous size. The |suffix| modified causes the \meta{glyph name suffix} to be implicitly appended to all glyphs defined by this file. The |option| modifier adds the \meta{string} to the list of ``options'' for this file. The |\ifoption| command can be used in the file to test whether a particular string has been supplied as an option. \begin{hackernote} In general, \fontinst commands process comma-separated list arguments by first splitting at commas and then fully expanding each item, but this \meta{metrics-list} argument is an exception. This is first fully expanded (|\edef|) and then split into items. The difference is that a macro used in this \meta{metrics-list} argument can expand to several list items, whereas a macro used in an ordinary comma-separated list argument can only expand to (part of) a single list item. The |\metrics| list items do however constitute an exception within this exception. These list items are in their entirety protected from the initial full expansion, so you don't have to worry about peculiar fragility errors there. \end{hackernote} The elements in the \meta{etx-list} have fewer variants, but there is still a general syntax \begin{decl} \meta{filename}\meta{optional modifiers} \end{decl} The only \meta{optional modifier} permitted is however \begin{decl} \verb*| mtxasetx| \end{decl} and that is probably only relevant for use with |\installrawfont| (see below). \begin{decl} |\installfontas|\arg{font-name}\\% \hspace*{1.5em}\arg{encoding}\arg{family}\arg{series}% \arg{shape}\arg{size} \end{decl} \NEWfeature{v1.912} This install command adds an \fd entry for the \meta{font-name}, but it doesn't actually generate that font. Usually that font was generated by a previous |\installfont|, and this is used to create additional entries for the font. \begin{decl} |\installrawfont|\arg{font-name}\arg{metrics-list}\arg{etx-list}\\ \hspace*{1.5em}\arg{encoding}\arg{family}\arg{series}% \arg{shape}\arg{size} \end{decl} This is similar to |\installfont| except that it produces a \TeX\ raw font as \pl file rather than a virtual font. Often a \pl font with the specified name will already exist when this command is called, and that will then be overwritten. These two \pl files will typically be somewhat different. The normal reason for using this command is that one wishes to ``refine'' the metrics of a font that was generated by transformation commands. For example, to install an 8r-encoded Times Roman raw font (using \texttt{8r.etx} and \texttt{8r.mtx}), you say: \begin{verbatim} \installrawfont{ptmr8r}{ptmr8r,8r}{8r} {8r}{ptm}{m}{n}{} \end{verbatim} The effect of a \begin{decl} \meta{filename}\verb*| mtxasetx| \end{decl} \NEWfeature{v1.923} in the \meta{etx-list} is not that \meta{filename}\texttt{.etx} is read, but that \meta{filename}\texttt{.mtx} is read. The interpretation of the commands in this file is however not the customary, and almost the only thing paid attention to is the correspondence between glyph names and slot numbers that is provided by the |\setrawglyph| and |\setscaledrawglyph| commands; this correspondence is treated as if it was given by |\setslot| \dots\ |\endsetslot| commands in an \etx file. This is however only guaranteed to work with transformable metric files. The purpose of this feature is to simplify installation of fonts with very special encodings, such as ``Dingbat'' or ``Pi'' fonts. Instead of creating an \etx file, which would probably only be useful with that particular font, one can make use of the fact that the interesting information is anyway available in the \mtx file. To install Zapf Dingbats in their default encoding, one can thus say \begin{verbatim} \installrawfont{pzdr}{pzdr}{pzdr mtxasetx} {U}{pzd}{m}{n}{} \end{verbatim} Unlike the case with |\installfont|, which actually creates a real (although virtual) font, |\installrawfont| can only create the metrics for a font. The \dvi driver will require some other kind of implementation of this font, usually an entry in some map file (e.g. \texttt{psfonts.map}, in the case of \dvips) that links the \TeX\ font name to e.g.\ a \PS\ font name and file. (Many \dvi drivers are configured in such a way that they, without such a map file entry, will call Metafont with the font name and thereby raise a sequence of error messages about a \setdotfilename{mf} that doesn't exist. These results are often rather confusing.) \begin{decl} |\installfamily|\arg{encoding}\arg{family}\arg{fd-commands} \end{decl} This tells \fontinst to write an \fd file for the given combination of encoding and family, and clears the internal list of entries to put in that file. |\installfamily| commands usually come first in each block of \meta{install commands}. For example, to produces a \LaTeX\ family with the Cork-encoded Times family, you say: \begin{verbatim} \installfamily{T1}{ptm}{} \end{verbatim} The \m{fd-commands} are executed every time a font in that family is loaded, for example to stop the Courier font from being hyphenated you say: \begin{verbatim} \installfamily{T1}{pcr}{\hyphenchar\font=-1} \end{verbatim} In more recent versions of \fontinst, the |\installfamily| command is only necessary if you want the \m{fd-commands} argument to be nonempty, but it doesn't hurt to make it explicit. \subsection{Transformation commands} \begin{decl} |\transformfont|\arg{font-name}\arg{transformed font} \end{decl} This makes a raw transformed font, for example expanded, slanted, condensed or re-encoded. \emph{It is the responsibility of the device driver to implement this transform.} Each \verb|\transformfont| command writes out an \mtx file and a raw \pl file for \m{font-name}. A \m{transformed font} is given by the following commands: \begin{decl} |\fromafm|\arg{afm}\\ |\fromany|\arg{whatever}\\ |\frompl|\arg{pl}\\ |\fromplgivenetx|\marg{pl}\marg{etx}\\ |\frommtx|\arg{mtx} \end{decl} This reads the metrics of a font which is about to be transformed from an external file. |\fromafm|, |\frompl|, and |\fromplgivenetx| write out an \mtx file corresponding to the \afm or \pl file. In addition, |\formafm| also writes out a raw \pl file, containing just the glyph metrics but no kerning information. |\fromplgivenetx| permits specifying which encoding file to use when associating glyph names to slots, whereas |\frompl| tries to guess this from the \texttt{CODINGSCHEME} property of the \pl file. |\fromany| looks for a file in any of the formats (in the order \mtx, \pl, \afm) and behaves as the first |\from|\dots\ for which it found a file. A \m{transformed font} may also be one of the following: \begin{decl} |\scalefont|\arg{integer expression}\arg{transformed font}\\ |\xscalefont|\arg{integer expression}\arg{transformed font}\\ |\yscalefont|\arg{integer expression}\arg{transformed font}\\ |\slantfont|\arg{integer expression}\arg{transformed font} \end{decl} This applies a geometric transformation to the font metrics of \m{transformed font}. The scale factor or slant factor are given in 1000 units to the design size. Typical examples are 167 for slanted fonts or 850 for condensed fonts. The final case of a \m{transformed font} is: \begin{decl} |\reencodefont|\arg{etx}\arg{transformed font} \end{decl} This rearranges the encoding vector of \m{transformed font} to match the encoding given by the \etx file. For example, to create an oblique, |8r|-encoded version of Adobe Times called \texttt{ptmro8r} you say: \begin{verbatim} \transformfont{ptmro8r}{\reencodefont{8r}{\slantfont{167}{\fromafm{ptmr8a}}}} \end{verbatim} This will create \texttt{ptmr8a.mtx}, \texttt{ptmr8a.pl}, \texttt{ptmro8r.mtx} and \texttt{ptmro8r.pl}, which can then be used as raw fonts in \verb|\installfont| commands. The same transformation can also be achieved in two steps: \begin{verbatim} \transformfont{ptmr8r}{\reencodefont{8r}{\fromafm{ptmr8a}}} \transformfont{ptmro8r}{\slantfont{167}{\frommtx{ptmr8r}}} \end{verbatim} This will create \texttt{ptmr8a.mtx}, \texttt{ptmr8a.pl}, \texttt{ptmr8r.mtx}, \texttt{ptmr8r.pl}, \texttt{ptmro8r.mtx} and \texttt{ptmro8r.pl}. You will have to inform your device driver about the transformed font, using the syntax appropriate for that driver. For example, in \dvips you add a line to \texttt{psfonts.map}: \begin{verbatim} ptmro8r Times-Roman ".167 SlantFont TeXBase1Encoding ReEncodeFont" <<8r.enc \end{verbatim} \subsection{Miscellaneous settings} \begin{decl} |\substitutesilent|\arg{to}\arg{from}\\ |\substitutenoisy|\arg{to}\arg{from} \end{decl} This declares a \LaTeX\ font substitution, that the series or shape \m{to} should be substituted if necessary by the series or shape \m{from}. \verb|\substitutesilent| means that when the font substitution is made, no warning will given. \verb|\substitutenoisy| is the same as \verb|\substitutesilent|, but gives a warning when the substitution is made by \LaTeX. For example, to say that the series |bx| can be replaced by the series |b|, you say: \begin{verbatim} \substitutesilent{bx}{b} \end{verbatim} To say that the shape |ui| can be replaced by the shape |i|, you say: \begin{verbatim} \substitutenoisy{ui}{it} \end{verbatim} The following weight substitutions are standard: \begin{verbatim} \substitutesilent{bx}{b} \substitutesilent{b}{bx} \substitutesilent{b}{sb} \substitutesilent{b}{db} \substitutesilent{m}{mb} \substitutesilent{m}{l} \end{verbatim} The following shape substitutions are standard: \begin{verbatim} \substitutenoisy{ui}{it} \substitutesilent{it}{sl} \substitutesilent{sl}{it} \end{verbatim} The |\installfontas| command should be considered as an alternative to using font substitution, as it gives much finer control over what \fd entries will be made. \begin{decl} |\declaresize|\arg{size}\arg{fd-size-range} \end{decl} This declares a new size, and gives the \fd commands for it. For example, \url{fontinst.sty} declares the following sizes: \begin{verbatim} \declaresize{}{<<->>} \declaresize{5}{<<5>>} \declaresize{6}{<<6>>} \declaresize{7}{<<7>>} \declaresize{8}{<<8>>} \declaresize{9}{<<9>>} \declaresize{10}{<<10>>} \declaresize{11}{<<10.95>>} \declaresize{12}{<<12>>} \declaresize{14}{<<14.4>>} \declaresize{17}{<<17.28>>} \declaresize{20}{<<20.74>>} \declaresize{25}{<<24.88>>} \end{verbatim} \begin{decl} |\declareencoding|\arg{string}\arg{etx} \end{decl} This declares which \etx file corresponds to which encoding string. For example, \url{fontinst.sty} declares the following encoding strings: \begin{verbatim} \declareencoding{TEX TEXT}{ot1} \declareencoding{TEX TEXT WITHOUT F-LIGATURES}{ot1} \declareencoding{TEX TYPEWRITER TEXT}{ot1tt} \declareencoding{TEX MATH ITALIC}{oml} \declareencoding{TEX MATH SYMBOLS}{oms} \declareencoding{TEX MATH EXTENSION}{omx} \declareencoding{EXTENDED TEX FONT ENCODING - LATIN}{t1} \declareencoding{TEX TEXT COMPANION SYMBOLS 1---TS1}{ts1} \declareencoding{TEXBASE1ENCODING}{8r} \declareencoding{TEX TYPEWRITER AND WINDOWS ANSI}{8y} \end{verbatim} \subsection{Other} The following commands belong to this section, but there is currently no description of them here. |\afmtomtx|\marg{afmfile}\marg{mtxfile} |\endrecordtransforms| |\endreglyphfonts| |\etxtopl|\marg{encoding list}\marg{plfile} |\etxtovpl|\marg{encoding list}\marg{vplfile} |\fakenarrow|\marg{width factor} |\generalpltomtx|\marg{plfile}\marg{mtxfile}\marg{plsuffix}\marg{opt-enc} |\killglyph|\marg{glyph} |\killglyphweighted|\marg{glyph}\marg{weight} |\latinfamily|\marg{family}\marg{commands} |\mtxtomtx|\marg{source MTX}\marg{destination MTX} |\mtxtopl|\marg{mtxfile}\marg{plfile} |\NOFILES| |\offmtxcommand|\marg{command} |\onmtxcommand|\marg{command} |\recordtransforms|\marg{filename} |\reglyphfont|\marg{destination font}\marg{source font} |\reglyphfonts| |\renameglyph|\marg{to}\marg{from} |\renameglyphweighted|\marg{to}\marg{from}\marg{weight} \section{Mapmaking commands} The following commands belong to this section, but there is currently no description of them here. Note that several of them have a different syntax and meaning than they do in fontmaking command files. |\adddriver|\marg{driver name}\marg{fragment file name} |\AssumeAMSBSYY| |\AssumeBaKoMa| |\AssumeLWFN| |\AssumeMetafont| |\debugvalue|\arg{name} |\declarepsencoding|\marg{etx}\marg{postscript name}\marg{action} |\donedrivers| |\download|\marg{file} |\enctoetx|\marg{encfile}\marg{etxfile} |\etxtoenc|\marg{etxfile}\marg{encfile} |\fromafm|\marg{AFM name}\marg{PS name} |\frompl|\marg{PL name} |\frommtx|\marg{MTX name} |\fromvpl| |\makemapentry|\marg{\TeX\ font name} |\reencodefont|\marg{etx} |\reglyphfont| |\specifypsfont|\marg{PS font name}\marg{actions} |\storemapdata|\marg{\TeX\ font name}\marg{source}\marg{transforms} |\transformfont|\marg{x-scale}\marg{slant-scale} \section{General commands} This section describes commands and mechanisms that are the same in all file types. Commands that are particular for one type of file are described in subsequent sections. \subsection{Variables} Many (but not all) of the activities \fontinst perform can be understood as either ``setting variables'' or ``formatting and writing to file data stored in some variable''. The accessing of variables is an important aspect of how \fontinst works. Variables come in different types and variables of different types live in different namespaces; |\int{foo}|, |\str{foo}|, and |\dim{foo}| refer to three different variables which are all named |foo|. Variables are either set or not set. Unless the contrary is stated explicitly, variables default to not being set. It is an error to access the value of a variable that has not been set. \Fontinst variable assignments are as a rule local, i.e., will be undone when the enclosing \TeX\ group is ended. Most command file commands that cause files to be read will begin a group before reading the file(s) and end the group at some point after having read them. Taking string variables as an example, there are three commands for changing a string variable: \begin{decl} |\setstr|\arg{name}\arg{string expression}\\ |\resetstr|\arg{name}\arg{string expression}\\ |\unsetstr|\arg{name} \end{decl} The |\resetstr| command unconditionally sets the string variable \meta{name} to the full expansion of the \meta{string expression}. The |\unsetstr| command unconditionally renders the string variable \meta{name} unset. If the the string variable \meta{name} is currently unset then the |\setstr| command will set it to the full expansion of the \meta{string expression}, but if it already is set then |\setstr| does nothing. This pattern with three commands, one |\set|\dots\ which only sets unset variables, one |\reset|\dots\ which sets variables regardless of whether they have been set or not, and one |\unset|\dots\ which unsets variables is recurring in \fontinst. Variables are most commonly set using some |\set|\dots\ command; this has the effect that the first command to try to set a variable is the one which actually sets it. % \subsection{Argument types} % % There are roughly five types of arguments that \fontinst % commands can take. These are % \begin{itemize} % \item integer expressions, % \item string expressions, % \item dimensions, % \item commands (i.e., \TeX\ control sequences), and % \item other (pretty much ``none of the above''). % \end{itemize} % The most common form of an integer expression is simply a \TeX\ % \meta{number} and the most common form of a string expression is % simply a sequence of character tokens, but there are more complicated % forms. Dimensions are simply \TeX\ \meta{dimen}s; their use is rather % limited. Common to integer expressions, string expressions, and % dimensions is that these argument types get expanded during % evaluation (in the case of string expressions, this expansion % \emph{is} the evaluation), which means one can use macros in % arguments of these types. % % Command arguments do not get expanded---they are mainly used with % commands that modify the definitions of other commands. As for the % ``other'' arguments one cannot give any rules: they might get % expanded, but it could also happen that they won't. % There are three types of files used by the \fontinst package: % \begin{itemize} % \item \emph{fontinst files} contain commands to process fonts % metrics so you can use a font with \TeX. For example, % \texttt{fontptcm.tex} is a \emph{fontinst file}. % % \item \emph{encoding files} contain information about an encoding, % including the code table, ligatures, and font dimensions. For % example, \texttt{8r.etx} is an \emph{encoding file}. % % \item \emph{metric files} contain information about glyphs, % including glyph dimensions, composite characters, and kerning. % For example, \texttt{latin.mtx} is a \emph{metric file}. % \end{itemize} \subsection{General commands} The following \emph{general commands} can be used anywhere: \begin{decl} |\needsfontinstversion|\arg{version} \end{decl} This issues a warning if the current version of the \fontinst package is less than \m{version}. \begin{decl} |\setdim|\arg{dim}\arg{dimension}\\ |\setint|\arg{int}\arg{integer expression}\\ |\setstr|\arg{str}\arg{string} \end{decl} If the dimension variable \m{dim} is currently undefined, it is defined to be the current value of \m{dimension}. If the integer variable \m{int} is currently undefined, it is defined to be the current value of \m{integer expression}. If the string variable \m{str} is currently undefined, it is defined to be the current value of \m{string}. \begin{decl} |\setcommand|\arg{command}\meta{parameter text}\arg{replacement text} \end{decl} If the command \m{command} is currently undefined, it is defined to be the \m{definition}. This uses the same syntax for parameters as the \TeX\ \verb|\def| command. \begin{center} \begin{tabular}{r l} No. parameters& \meta{parameter text}\\ 0& (empty)\\ 1& |#1|\\ 2& |#1#2|\\ 3& |#1#2#3|\\ \multicolumn{2}{c}{and so on.} \end{tabular} \end{center} \begin{decl} |\resetdim|\arg{dim}\arg{dimension}\\ |\resetint|\arg{int}\arg{integer expression}\\ |\resetstr|\arg{str}\arg{string} \end{decl} The dimension variable \m{dim} is defined to be the current value of \m{dimension}. The integer variable \m{int} is defined to be the current value of \m{integer expression}. The string variable \m{str} is defined to be the current value of \m{string}. \begin{decl} |\resetcommand|\arg{command}\meta{parameter text}\arg{replacement text} \end{decl} The command \m{command} is defined to be the \m{definition}, regardless of whether it was already defined or not. This is a synonym for the \TeX\ \verb|\def| command. \begin{decl} |\ifisint|\arg{int}|\then|\\ |\ifisdim|\arg{dim}|\then|\\ |\ifisstr|\arg{str}|\then|\\ |\ifisglyph|\arg{glyph}|\then|\\ |\ifiscommand|\arg{command}|\then| \end{decl} Expands out to \verb|\iftrue| if the integer variable \m{int} is defined, and \verb|\iffalse| otherwise. Expands out to \verb|\iftrue| if the dimension variable \m{dim} is defined, and \verb|\iffalse| otherwise. Expands out to \verb|\iftrue| if the string variable \m{str} is defined, and \verb|\iffalse| otherwise. Expands out to \verb|\iftrue| if the glyph variable \m{glyph} is defined, and \verb|\iffalse| otherwise. Expands out to \verb|\iftrue| if the command \m{command} is defined, and \verb|\iffalse| otherwise. \begin{decl} |\unsetdim|\arg{dim}\\ |\unsetint|\arg{int}\\ |\unsetstr|\arg{str}\\ |\unsetcommand|\arg{command} \end{decl} Makes \m{dim}, \m{int}, \m{str}, or \m{command} an undefined dimension, integer, string or command. \subsection{Integer expressions} \label{Sec:integer} The \emph{integer expressions} provide a user-friendly syntax for \TeX\ arithmetic. They are used to manipulate any integers, including glyph dimensions, which are given in \afm units, that is 1000 to the design size. \TeX\ \pl fonts have their dimensions converted to \afm units automatically. The \emph{integer expressions} are: \begin{decl} \m{number} \end{decl} Returns the value of a \TeX\ \m{number} (as explained in \emph{The \TeX book}). \begin{decl} |\int|\arg{int} \end{decl} Returns the value of the integer variable \m{int}. \begin{decl} |\width|\arg{glyph}\\ |\height|\arg{glyph}\\ |\depth|\arg{glyph}\\ |\italic|\arg{glyph} \end{decl} Returns the width, height, depth, or italic correction of the glyph variable \m{glyph}. \begin{decl} |\kerning|\arg{left}\arg{right} \end{decl} Returns the kerning between the \m{left} and \m{right} glyph variables. \begin{decl} |\neg|\arg{integer expression}\\ |\add|\arg{integer expression}\arg{integer expression}\\ |\sub|\arg{integer expression}\arg{integer expression}\\ |\max|\arg{integer expression}\arg{integer expression}\\ |\min|\arg{integer expression}\arg{integer expression}\\ |\mul|\arg{integer expression}\arg{integer expression}\\ |\div|\arg{integer expression}\arg{integer expression}\\ |\scale|\arg{integer expression}\arg{integer expression}\\ |\half|\arg{integer expression}\\ |\otherhalf|\arg{integer expression} \end{decl} |\neg| returns the negation of the \m{integer expression}. |\ad| returns the sum of the two \m{integer expression}s. |\sub| returns the first \m{integer expression} minus the second. |\mul| returns the product of the two \m{integer expression}s. |\div| returns the first \m{integer expression} divided by the second. |\scale| returns the first \m{integer expression} times the second, divided by 1000. \subsection{Other} The following commands belong to this section, but there is currently no description of them here. |\begincomment| |\bye| |\Else| |\endcomment| |\endfor|\parg{name} |\eTeX|\marg{version number} |\Fi| |\fontinstcc| |\fontinsterror|\marg{subsystem}\marg{error}\marg{help} |\fontinstinfo|\marg{subsystem}\marg{info} |\fontinstwarning|\marg{subsystem}\marg{warning} |\fontinstwarningnoline|\marg{subsystem}\marg{warning} |\for|\parg{name}\marg{start}\marg{stop}\marg{step} |\foreach|\parg{name}\marg{csep-list} |\ifareglyphs|\marg{glyph list}|\then| |\ifiskern|\marg{glyph1}\marg{glyph2}|\then| |\ifnumber|\marg{integer expression}\meta{rel}% \marg{integer expression}|\then| |\ifoption|\marg{string}|\then| |\input| \meta{file name} |\messagebreak| |\needsTeXextension|\marg{extension tests}\marg{who} |\normalcc| |\offcommand|\marg{command} |\oncommand|\marg{command} |\pdfTeX|\marg{version number}\marg{revision} |\strint|\arg{int} \section{Encoding files} An \emph{encoding file} (or \texttt{.etx} file) is a \TeX\ document consisting of: \begin{decl} |\relax|\\ \emph{ignored material}\\ |\encoding|\\ \m{encoding commands}\\ |\endencoding|\\ \emph{ignored material} \end{decl} This describes the encoding of a font, using the \m{encoding commands}. Since the encoding file ignores any material between \verb|\relax| and \verb|\encoding|, an \emph{encoding file} can also be a \LaTeX\ document. See also the descriptions in \texttt{encspecs.tex}. \subsection{Encoding commands} The \m{encoding commands} are: \begin{decl} |\nextslot|\arg{integer expression} \end{decl} Sets the number of the next slot. If there is no \verb|\nextslot| command, the number is the successor of the previous slot. \begin{decl} |\skipslots|\arg{integer expressions} \end{decl} \NEWfeature{v1.8} Advances the number of the next slot. \begin{decl} |\setslot|\arg{glyph}\\ \m{slot commands}\\ |\endsetslot| \end{decl} Sets the slot of the \m{glyph}. The \m{slot commands} describe the glyph, and give its usage in \TeX. \begin{decl} |\inputetx|\arg{file} \end{decl} Inputs the \m{encoding commands} of \m{file}\texttt{.etx}. \subsection{Slot commands} The \m{slot commands} are: \begin{decl} |\comment|\arg{text} \end{decl} A comment, which is ignored by \fontinst. \begin{decl} |\label|\arg{text} \end{decl} A reference label. Ignored by \fontinst. \begin{decl} |\ligature|\arg{ligtype}\arg{glyph}\arg{glyph}\\ |\Ligature|\arg{ligtype}\arg{glyph}\arg{glyph}\\ |\oddligature|\marg{note}\arg{ligtype}\arg{glyph}\arg{glyph} \end{decl} Specifies a ligature of type \m{ligtype} from the current glyph followed by the first glyph to the second glyph. The \m{ligtype}s are as in \vpl files (see the \texttt{vptovf} Web source for more details). For example: \begin{verbatim} \setslot{ff} \ligature{LIG}{i}{ffi} \ligature{LIG}{l}{ffl} \comment{The `ff' ligature.} \endsetslot \end{verbatim} \begin{decl} |\makerightboundary|\arg{glyph} \end{decl} \begin{decl} |\Unicode|\marg{code point}\marg{name} \end{decl} \begin{decl} |\usedas|\arg{type}\arg{control sequence} \end{decl} \NEWfeature{Obsolete?!} Sets the \TeX\ control sequence for this slot, with the \emph{type} taken from: \begin{verbatim} char accent mathord mathbin mathrel mathopen mathclose mathpunct mathvariable mathaccent mathdelim \end{verbatim} \begin{decl} |\nextlarger|\arg{glyph} \end{decl} Sets a \textsc{nextlarger} entry from the current slot to the \m{glyph}. \begin{decl} |\varchar|\\ \m{varchar commands}\\ |\endvarchar| \end{decl} Sets a \textsc{varchar} entry for the current slot, using the \m{varchar commands}. The \m{varchar commands} are: \begin{decl} |\vartop|\arg{glyph}\\ |\varmid|\arg{glyph}\\ |\varbot|\arg{glyph}\\ |\varrep|\arg{glyph} \end{decl} Sets the top, middle, bottom, or repeated \m{glyph} of the \textsc{varchar}. \subsection{Other} The following commands belong to this section, but there is currently no description of them here. |\endsetleftboundary| |\ifdirect| |\ifisinslot|\marg{glyph}\marg{slot}|\then| |\resetslotcomment|\marg{text} |\setfontdimen|\marg{fontdimen no.}\marg{integer variable} |\setleftboundary|\marg{glyph} |\setslotcomment|\marg{text} |\useexamplefont|\marg{font} |\unsetslotcomment| \section{Metric files} \label{Sec:Metric} A \emph{metric file} (or \texttt{.mtx} file) is a \TeX\ document consisting of: \begin{decl} |\relax|\\ \emph{ignored material}\\ |\metrics|\\ \m{metric commands}\\ |\endmetrics|\\ \emph{ignored material} \end{decl} This describes the glyphs in a font, using the \m{metric commands}. Metric files are usually either \emph{hand-crafted} or \emph{transformable}. The transformable metric files typically encode the metrics of one particular font and are automatically generated. Hand-crafted metric files (such as \setfilename{latin.mtx}) typically do not contain much explicit metric data, instead the code there makes use of metrics previously specified by other files to construct new glyphs or adjust metrics to meet special conditions. Whereas transformable metric files tend to be mere lists of metric data, the hand-crafted metric files are more like programs. \subsection{Metric commands} The \m{metric commands} are: \begin{decl} |\setglyph|\arg{name}\\ \m{glyph commands} \\ |\endsetglyph| \end{decl} If the glyph called \m{name} is undefined, it is built using the \m{glyph commands} given below, for example: \begin{verbatim} \setglyph{IJ} \glyph{I}{1000} \glyph{J}{1000} \endsetglyph \setglyph{Asmall} \glyph{A}{850} \endsetglyph \end{verbatim} \begin{decl} |\resetglyph|\arg{name}\\ \m{glyph commands}\\ |\endsetglyph| \end{decl} Gives the definition of the glyph called \m{name} using the \m{glyph commands}. \begin{decl} |\unsetglyph|\arg{name} \end{decl} Makes the glyph called \m{name} undefined. \begin{decl} |\setrawglyph|\arg{name}\arg{font}\arg{dimen}\arg{integer}\\ \arg{integer}\arg{integer}\arg{integer}\arg{integer}\\ |\setscaledrawglyph|\arg{name}\arg{font}\arg{dimen}\arg{integer}\arg{integer}\\ \arg{integer}\arg{integer}\arg{integer}\arg{integer} \end{decl} This sets a glyph called \m{name} from the \m{font}, which has the given design size, slot, width, height, depth and italic correction. If the integer variable \texttt{rawscale} is set, the glyph will be scaled by that amount. This command will usually be generated automatically from an \afm or \pl file. \begin{decl} |\setnotglyph|\arg{name}\arg{font}\arg{dimen}\\ \arg{integer}\arg{integer}\arg{integer}\arg{integer}\\ |\setscalednotglyph|\arg{name}\arg{font}\arg{dimen}\arg{integer}\arg{integer}\\ \arg{integer}\arg{integer}\arg{integer}\arg{integer} \end{decl} This sets a glyph called \m{name}\texttt{-not}, which is present in the \m{font}, but is not in the default encoding. It takes the same arguments as \verb|\setrawglyph|, although the slot will normally be $-1$. This command will usually be generated automatically from an \afm file. \begin{decl} |\setkern|\arg{glyph}\arg{glyph}\arg{integer expression}\\ |\resetkern|\arg{glyph}\arg{glyph}\arg{integer expression} \end{decl} |\setkern| sets a kern between the two glyphs, scaled by the current value of \texttt{rawscale}, unless such a kern already has been set. \begin{decl} |\setleftkerning|\arg{glyph}\arg{glyph}\arg{integer expression}\\ |\setrightkerning|\arg{glyph}\arg{glyph}\arg{integer expression} \end{decl} Sets the amount by which the first glyph should mimic how the second glyph kerns on the left or right, for example: \begin{verbatim} \setleftkerning{Asmall}{A}{850} \setrightkerning{Asmall}{A}{850} \setleftkerning{IJ}{I}{1000} \setrightkerning{IJ}{J}{1000} \end{verbatim} Sets the amount by which the first glyph should mimic how the second glyph kerns on the right, for example: \begin{decl} |\setleftrightkerning|\arg{glyph}\arg{glyph}\arg{integer expression} \end{decl} \NEWfeature{v1.8} Sets the amount by which the first glyph should mimic how the second glyph kerns on both sides, for example: \begin{verbatim} \setleftrightkerning{Asmall}{A}{850} \end{verbatim} \begin{decl} |\noleftkerning|\arg{glyph}\\ |\norightkerning|\arg{glyph}\\ |\noleftrightkerning|\arg{glyph} \end{decl} \NEWfeature{v1.9} Removes all kerning on the specified side(s) of the \meta{glyph}. \begin{decl} |\inputmtx|\arg{file} \end{decl} Inputs the \m{metric commands} of \m{file}\texttt{.mtx}. \subsection{Glyph commands} The \m{glyph commands} are: \begin{decl} |\glyph|\arg{glyph}\arg{integer expression} \end{decl} Sets the named glyph \m{glyph} at the given scale, with 1000 as the natural size. This: \begin{itemize} \item Advances the current glyph width. \item Sets the current glyph height to be at least the height of the named glyph, adjusted for the current vertical offset. \item Sets the current glyph depth to be at least the depth of the named glyph, adjusted for the current vertical offset. \item Sets the current glyph italic correction to be the same as the set glyph. \end{itemize} The named glyph must have already been defined, otherwise an error will occur. For example: \begin{verbatim} \setglyph{fi} \glyph{f}{1000} \glyph{i}{1000} \endsetglyph \end{verbatim} \begin{decl} |\glyphrule|\arg{integer expression}\arg{integer expression} \end{decl} Sets a rule of the given width and height, for example: \begin{verbatim} \setglyph{underline} \glyphrule{333}{40} \endsetglyph \end{verbatim} \begin{decl} |\glyphspecial|\arg{text} \end{decl} Sets a driver-dependent \verb|\special|, for example: \begin{verbatim} \setglyph{crest} \glyphspecial{Filename: crest.eps} \endsetglyph \end{verbatim} \begin{decl} |\glyphwarning|\arg{text} \end{decl} Sets a warning \verb|\special|, and produces a warning message each time the glyph is used, for example: \begin{verbatim} \setglyph{missingglyph} \glyphrule{500}{500} \glyphwarning{Missing glyph `missingglyph'} \endsetglyph \end{verbatim} \begin{decl} |\movert|\arg{integer expression} \end{decl} Moves right by the given amount, and advances the current glyph width, for example: \begin{verbatim} \setglyph{Asmall} \movert{50} \glyph{A}{700} \movert{50} \endsetglyph \end{verbatim} \begin{decl} |\moveup|\arg{integer expression} \end{decl} Moves up by the given amount, and advances the current vertical offset. Each glyph should always end at vertical offset zero, for example: \begin{verbatim} \setglyph{onehalf} \moveup{500} \glyph{one}{700} \moveup{-500} \glyph{slash}{1000} \moveup{-200} \glyph{two}{700} \moveup{200} \endsetglyph \end{verbatim} \begin{decl} |\push|\\ \m{glyph commands}\\ |\pop| \end{decl} Performs the \m{glyph commands} without adjusting the current position or glyph width, for example: \begin{verbatim} \setglyph{aacute} \push \movert{\div{\sub{\width{a}}{\width{acute}}}{2}} \glyph{acute}{1000} \pop \glyph{a}{1000} \endsetglyph \end{verbatim} \begin{decl} |\glyphpcc|\arg{glyph}\arg{integer expression}\arg{integer expression} \end{decl} This is generated from \texttt{PCC} instructions in an \afm file, and is syntactic sugar for: \begin{quote} \begin{small} |\push|\\ |\movert|\arg{first integer expression}\\ |\moveup|\arg{second integer expression}\\ |\glyph|\arg{glyph}|{1000}|\\ |\pop| \end{small} \end{quote} \begin{decl} |\resetwidth|\arg{integer expression}\\ |\resetheight|\arg{integer expression}\\ |\resetdepth|\arg{integer expression}\\ |\resetitalic|\arg{integer expression} \end{decl} Sets the width, height, depth, or italic correction of the current glyph. \begin{decl} |\samesize|\arg{glyph} \end{decl} Sets the dimensions of the current glyph to be the same as \m{glyph}. Inside the definition of \m{glyph}, you can use expressions such as |\width|\arg{glyph}, which will refer to the glyph defined so far. For example, a display summation sign can be defined to be a text summation $\sum$ scaled 120\% with 0.5\,pt extra height and depth using: \begin{verbatim} \setglyph{summationdisplay} \glyph{summationtext}{1200} \resetheight{\add{\height{summationdisplay}}{50}} \resetdepth{\add{\depth{summationdisplay}}{50}} \endsetglyph \end{verbatim} Within a |\resetglyph|, these expressions will refer to the previous definition of the glyph. For example, you can add sidebearings to the letter `A' with: \begin{verbatim} \resetglyph{A} \movert{25} \glyph{A}{1000} \movert{25} \endresetglyph \end{verbatim} \subsection{Other} The following commands belong to this section, but there is currently no description of them here. |\aliased|\marg{font's name}\marg{alias name} |\ProvidesMtxPackage|\marg{package~name} |\unsetkerns|\marg{left~glyph~list}\marg{right~glyph~list} |\usemtxpackage|\marg{package~list} \section{\textsf{fontdoc} commands} |\macroparameter|\marg{digit} |\plaindiv| |\plainint| |\plainmax| |\plainmin| |\showbranches| |\slotexample| |\textunicode|\marg{code point}\marg{name} \section{\fontinst variables} The following is a list of the \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 \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] 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 mapmaking 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 default 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}% \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 mapmaking 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}% \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 (|\latin_weights|, |\latin_widths|, |\latin_shapes|, etc.) that are often used somewhat like variables. That subject does however deserve to be treated separately. \section{Customisation} The \fontinst package reads a file \texttt{fontinst.rc} if it exists. This can contain your own customisations. You can create a \texttt{fontinst} format by running ini\TeX{} on \texttt{fontinst.sty} then saying \verb|\dump|. \section{Notes on features new with v\,1.9} The following notes are copied from \texttt{fisource.tex}; they were written to explain new \fontinst features to old \fontinst users. \subsection{Metric packages} \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 all right, 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{center} \begin{tabular}{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{tabular} \end{center} \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. \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 \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. \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 \fontinst) and the smallcaps `\textsc{a}' (\texttt{Asmall}, for \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 read the comments in the source of \fontinst. 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 \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, \fontinst can (in a fairly automatic way) create the map file fragment which is needed for the set of raw fonts \fontinst has (i) installed directly (using |\installrawfont|) or (ii) used as a base font for some installed virtual font (generated by |\installfont|). \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 \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 \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 \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|& |%| Writes to output file(s)\\ |\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 \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} or \texttt{pltotf} for \meta{driver name}. The \texttt{debug} ``DVI driver'' file simply contains 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, as the combined effects of several font transformations are not always easy to compute manually. The file generated for the \texttt{pltotf} ``driver'' is actually a shell script consisting of a sequence of \pltotf commands. These commands perform the \pl to \tfm conversion for precisely those fonts that are actually needed (\fontinst usually generates \pl files also for a number of fonts at intermediate stages of transformation, and many of these need not be converted to \tfm files). The \texttt{TFMfileprefix} string can be used to add a directory path to the \tfm file names, perhaps saving the step of moving them to their proper location later. 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 \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. 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 \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 were 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 |\specifypsfont| command, which describes exactly which file (or files, if any) a given font is stored in. The syntax of this command is \begin{quote} |\specifypsfont|\marg{PS font name}\marg{actions} \end{quote} where the \meta{actions} is a sequence of ``action commands''. Currently the only such command is \begin{quote} |\download|\marg{file} \end{quote} which instructs the map file writer to include in any entry using that PS font and ``instruction'' that the specified file should be downloaded. Some examples are \begin{verbatim} \specifypsfont{Times-Roman}{} \specifypsfont{Shareware-Cyrillic-Regular}{\download{fcyr.gsf}} \specifypsfont{zmnl8ac6}{% \download{MinionMM.pfb}\download{zmnl8ac6.pro}% } \end{verbatim} Many \dvi drivers (for example \dvips) have more than one style of font downloading (e.g., partial and full downloading). This interface could be extended to control also such finer details (for example by adding a |\fulldownload| command to force full download of a font), but requests for this has so far been scarce. 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 \fontinst will automatically create a postscript encoding (\texttt{.enc}) file for that encoding, and use this file for all reencoding commands. 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{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 \fontinst, (iii) run \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 centre 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{quote} |\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{quote} 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}% \penalty0 \marg{encoding}\marg{family}\marg{series}\marg{shape}\marg{size}\\ |\installfontas|\marg{font-name}\penalty0\marg{encoding}% \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 |\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 \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 \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 correspondences 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 correspondence 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 \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 \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. \subsection{Bounding boxes} Han The Thanh has created an implementation of bounding box support for \fontinst, and it is a modified form of that support is distributed with \fontinst as the file \texttt{bbox.sty}. To load this, begin your command file with \begin{verbatim} \input fontinst.sty \input bbox.sty \end{verbatim} The reason for not making it default is that keeping track of bounding boxes increases some of \fontinst's memory requirements quite a lot. 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 \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 are \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 were |\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 is \begin{quote} |\setglyphbb|\marg{glyph}\marg{left}\marg{bottom}\marg{right}% \marg{top} \end{quote} \section{Miscellaneous notes} \subsection{On verbatim, typewriter, and monowidth fonts} The verbatim, typewriter, and monowidth concepts are common sources of confusion for those who use \fontinst to install fonts with \LaTeX; 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. \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 \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 criterion 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 criterion 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. \section*{Acknowledgements} I'd like to thank all of the \fontinst $\alpha$-testers, especially Karl Berry, Damian Cugley, Steve Grahthwohl, Yannis Haralambous, Alan Hoenig, Rob Hutchings, Constantin Kahn, Peter Busk Laursen, Ciar{\'a}n {\'O} Duibh{\'\i}n, Hilmar Schlegel, Paul Thompson, Norman Walsh and John Wells, who made excellent bug-catchers! Thanks to Barry Smith, Frank Mittelbach, and especially Sebastian Rahtz for many useful email discussions on how virtual fonts should interact with \LaTeXe. Thanks to Karl Berry and Damain Cugley for detailed comments on this documentation. Thanks to David Carlisle for the use of his \texttt{trig} macros for calculating trigonometry. % \section*{Warranty and distribution} % % There is no warranty for the \fontinst package, to the extent % permitted by applicable law. Except when otherwise stated in writing, % the author provides the program `as is' without warranty of any kind, % either expressed or implied, including, but not limited to, the % implied warranties of merchantability and fitness for a particular % purpose. The entire risk as to the quality and performance of the % program is with you. Should the package prove defective, you assume % the cost of all necessary servicing, repair or correction. % % In no event unless required by applicable law or agreed to in writing % will the author be liable to you for damages, including any general, % special, incidental or consequential damages arising out of the use or % inability to use the program (including but not limited to loss of % data or data being rendered inaccurate or losses sustained by you or % third parties or a failure of the program to operate with any other % programs), even if such holder or other party has been advised of the % possibility of such damages. % % Redistribution of unchanged files is allowed provided that all files % listed in the \texttt{MANIFEST} file are distributed. % % If you receive only some of these files from someone, or if you % receieve altered files, then complain! \end{document}