summaryrefslogtreecommitdiff
path: root/usergrps/uktug/baskervi/4_1/jeffrey.tex
diff options
context:
space:
mode:
Diffstat (limited to 'usergrps/uktug/baskervi/4_1/jeffrey.tex')
-rw-r--r--usergrps/uktug/baskervi/4_1/jeffrey.tex261
1 files changed, 261 insertions, 0 deletions
diff --git a/usergrps/uktug/baskervi/4_1/jeffrey.tex b/usergrps/uktug/baskervi/4_1/jeffrey.tex
new file mode 100644
index 0000000000..fddc102c99
--- /dev/null
+++ b/usergrps/uktug/baskervi/4_1/jeffrey.tex
@@ -0,0 +1,261 @@
+\def\VPL{\textsc{vpl}}
+\title{Building virtual fonts with `fontinst'}
+\author[Alan Jeffrey]{Alan Jeffrey\\\texttt{alanje@cogs.susx.ac.uk}}
+\begin{Article}
+
+\def\vptovf{\texttt{vptovf{}}}
+\def\afmtotfm{\texttt{afm2tfm}}
+\def\psnfss{\texttt{psnfss}}
+\def\pltotf{\texttt{pltotf}}
+
+\newcount\slot
+\newcount\p
+
+\def\fonttable#1{{%
+ \font\foo=#1 at12pt \foo
+ \global\slot=0
+ \global\p=0
+ \fontrow
+ \fontrow
+ \fontrow
+ \fontrow
+ \fontrow
+ \fontrow
+ \fontrow
+ \fontrow
+ \fontrow
+ \fontrow
+ \fontrow
+ \fontrow
+ \fontrow
+ \fontrow
+ \fontrow
+ \fontrow
+}}
+
+\def\fontrow{%
+ \global\p=0
+ \setbox0\hbox{}
+ \fontcell
+ \fontcell
+ \fontcell
+ \fontcell
+ \fontcell
+ \fontcell
+ \fontcell
+ \fontcell
+ \fontcell
+ \fontcell
+ \fontcell
+ \fontcell
+ \fontcell
+ \fontcell
+ \fontcell
+ \fontcell
+ \ifnum\p<16 \leavevmode\box0\par \fi
+}
+
+\def\fontcell{%
+ \setbox0\hbox{%
+ \unhbox0
+ \hbox to 10pt{%
+ \hss
+ \penalty1
+ \char\slot
+ \global\advance\p by \lastpenalty
+ \hss
+ }%
+ }%
+ \global\advance\slot by 1
+}
+
+
+\section{Introduction}
+
+This document gives a brief overview of the \fontinst{} package. The
+\fontinst{} package is used to build \emph{virtual fonts} (\emph{\VF{}}s)
+which allow PostScript fonts to be used as drop-in replacements for
+the Computer Modern fonts in \TeX.
+
+Below, I'll describe \VF{}s briefly, and describe how they can be built
+using the \fontinst{} package.
+
+\section{A problem with fonts}
+
+One of the biggest problems about using fonts in \TeX{} is
+\emph{encodings}, that is the order the characters come in the font.
+For example, the default encoding for Adobe's Times-Roman font is the
+`Adobe Standard encoding':
+\begin{center}
+ \fonttable{ptmrraw}
+\end{center}
+The default encoding for \TeX, however, is the `\TeX\ text encoding'.
+The Adobe Times-Roman font in the `\TeX\ text encoding' is:\footnote{%
+ The \TeX nically minded may note that the glyphs `\l' and `\L' are not
+ normally in the `\TeX\ text encoding'. This is because Computer
+ Modern has a special `\l-slash' glyph for building `\l' and `\L',
+ which Adobe Times-Roman does not have. Its place is therefore taken
+ by a black square, and there are ligatures with `l' and `L' to
+ produce `\l' and `\L'. Thus this font is drop-in compatible with
+ Computer Modern, despite the lack of an `\l-slash' glyph.
+}
+\begin{center}
+ \fonttable{ptmr-mn}
+\end{center}
+There are many other competing encodings: `ISO Latin-1', `\TeX\ extended
+text' (or `Cork'), `Macintosh', the list is seemingly endless.
+
+In addition, different encodings contain different glyphs. The \TeX\
+text encoding is supposed to contain a dotless `j' character, and a slash
+for building `\l' and `\L', but very few fonts contain these characters,
+and their places are taken by black squares above.
+
+The problem of incompatible font encodings is addressed in \TeX{} by \emph{
+virtual fonts}.
+
+\section{A solution: virtual fonts}
+
+As far as \TeX{} is concerned a virtual font (\VF{}) is a font like any
+other. It has a \TeX{} font metric file, which contains the
+dimensions of each character, together with ligatures, kerning, and other
+typographical information.
+
+However, a \VF{} does not have an associated bitmap, Type~1 font, TrueType
+font, or other information about what the font should look like.
+
+Instead, a \VF{} has an associated \texttt{.vf} file, which contains a small
+fragment of \DVI{} file for each character in the font. This \DVI{} fragment may contain characters from other fonts, rules or
+\verb|\specials|.
+
+For example, the `Adobe Standard'
+encoded Times-Roman font above is a `raw' Type~1 font, but the `\TeX{}
+text' encoded Times-Roman font is a virtual font.
+\begin{itemize}
+\item The `ff', `ffi' and `ffl' ligatures are faked by putting an `f'
+ next to an `f', `fi' or `fl'.
+\item The missing `dotless j' and `\l-slash' are rules, together with a
+ `Warning: missing glyph' \verb|\special|.
+\item The Greek upper case come from the Symbol Type~1 font.
+\item The other characters come from the Times-Roman Type~1 font.
+\end{itemize}
+Any \DVI{} driver which understands \VF{}s and can use Type~1 fonts can
+use the \TeX\ text Times-Roman \VF{} as a drop-in replacement for Computer
+Modern.
+
+\section{A problem with virtual fonts}
+
+One stumbling block about using \VF{}s is that they are not very easy to
+generate. Despite having been in existence for four years, there are
+very few tools for creating \VF{}s.
+
+The most important tool is Knuth's \vptovf{}, which converts \emph{Virtual
+Property Lists} (\VPL{}s) into \VF{}s. Unfortunately, the \VPL{}
+language is rather opaque; for example the \VPL{} code for the Adobe Times
+character `ff' is:
+\begin{verbatim}
+(CHARACTER D 11
+ (CHARWD R 6.47998)
+ (CHARHT R 6.81995)
+ (CHARDP R 0.0)
+ (MAP
+ (SELECTFONT D 1)
+ (SETCHAR D 102)
+ (MOVERIGHT R -0.17993)
+ (SETCHAR D 102)
+ )
+ )
+\end{verbatim}
+Editing \VPL{} files by hand is something of a black art, and there are
+few tools for manipulating them.
+
+The main tool for generating \VPL{}s is Rokicki's \afmtotfm, which
+converts the \emph{Adobe Font Metric} (\emph{AFM}) files which come
+with every PostScript font into \VPL{}s. Unfortunately, \afmtotfm{}
+cannot produce fonts with more than one raw font (for example the
+`\TeX{} text' encoded Times-Roman uses Symbol for the upper case
+Greek) and had problems with math fonts.
+
+
+\section{A solution: the `fontinst' package}
+
+The \fontinst{} package is designed to read AFMs and produce \VPL{}s.
+It:
+\begin{itemize}
+\item Is written in \TeX, for maximum portabilty (at the cost of speed).
+\item Supports the \TeX\ text, \TeX\ math, and extended \TeX\ text
+ encoding.
+\item Allows fonts to be generated in an arbitrary encoding, with
+ arbitrary `fake' characters---for example the `ff' character can be
+ faked if necessary by putting an `f' next to a `f'.
+\item Allows caps and small caps fonts with letter spacing and kerning.
+\item Allows kerning to be shared between characters; for example `\AA'
+ can be kerned as if it were an `A'. This is useful, since many
+ PostScript fonts only
+ include kerning information for characters without accents.
+\item Allows the generation of math fonts.
+\item Allows more than one PostScript font to contribute to a \TeX\ font;
+ for example the `ff' ligature can be taken from the
+ Expert encoding, if you have it.
+\item Automatically generates an \verb|fd| file for use with \LaTeXe.
+\end{itemize}
+The \fontinst{} package is available as freeware from the CTAN archives,
+along with a selection of \VF{}s which have been generated with \fontinst{}.
+
+Version 0.19 of \fontinst{} is described in the proceedings of the Aston
+TUG~AGM (\emph{TUGboat} 14(3)). This description is now largely out of
+date.
+
+The \VF{}s generated by \fontinst{} will be the standard \VF{}s for use with
+Sebastian Rahtz's \psnfss{} package for \LaTeXe.
+
+\section{Using the `fontinst' package}
+
+The \fontinst{} package comes with full documentation in the file \texttt{
+fontinst.tex}. The simplest way to start to use \fontinst{} is to edit
+the file \texttt{fonttime.tex}, shown in Table~\ref{Tab:times}.
+This tells \TeX\ to create the Adobe Times Roman fonts in the `\TeX\
+extended text' (T1) encoding, using the files:
+\begin{itemize}
+\item \texttt{ptmr0.afm}, \texttt{ptmri0.afm}, \texttt{ptmb0.afm} and \texttt{
+ ptmbi0.afm}, the Times-Roman \textsc{afm} files.
+\item \texttt{latin.mtx}, the \emph{\TeX\ metric} file containing the
+ default Latin characters.
+\item \texttt{T1.etx} and \texttt{T1c.etx}, the \emph{\TeX\ encoding} files
+ containing the `\TeX\ extended text' and `\TeX\ extended tex caps \&
+ small caps' encodings.
+\end{itemize}
+This produces a number of \textsc{PL} and \VPL{} fonts, which can be
+converted into \TeX\ fonts using \pltotf{} and \vptovf{}.
+
+For example by replacing every occurrence of \texttt{ptm} by
+\texttt{ppl} you can install the Adobe Palatino fonts.
+
+If you generate any fonts with \fontinst{} which you think other people
+might want to use, please send them to me, and if I like them, I'll
+include them in the \fontinst\ contributors directory.
+
+\end{Article}
+\vfill
+\begin{table*}[!h]
+\begin{verbatim}
+\input fontinst.sty
+
+\needsfontinstversion{1.303}
+
+\installfonts
+ \installfamily{T1}{ptm}{}
+ \installfont{ptmrq}{ptmr0,latin}{T1}{T1}{ptm}{m}{n}{}
+ \installfont{ptmrcq}{ptmr0,latin}{T1c}{T1}{ptm}{m}{sc}{}
+ \installfont{ptmriq}{ptmri0,latin}{T1}{T1}{ptm}{m}{it}{}
+ \installfont{ptmbq}{ptmb0,latin}{T1}{T1}{ptm}{bx}{n}{}
+ \installfont{ptmbcq}{ptmb0,latin}{T1c}{T1}{ptm}{bx}{sc}{}
+ \installfont{ptmbiq}{ptmbi0,latin}{T1}{T1}{ptm}{bx}{it}{}
+\endinstallfonts
+
+\bye
+\end{verbatim}
+ \caption{The file \texttt{fonttime.tex}}
+ \label{Tab:times}
+\end{table*}
+\newpage
+\endinput \ No newline at end of file