summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/mff/mffdoc.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/latex/mff/mffdoc.tex')
-rw-r--r--Master/texmf-dist/doc/latex/mff/mffdoc.tex1455
1 files changed, 1455 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/mff/mffdoc.tex b/Master/texmf-dist/doc/latex/mff/mffdoc.tex
new file mode 100644
index 00000000000..1f88354d18a
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/mff/mffdoc.tex
@@ -0,0 +1,1455 @@
+\documentstyle{article}
+\title{{\sc mff.sty}: Computer Modern Typefaces\\
+as the Multiple Master Fonts\\[0.5\baselineskip]
+\Large Version 1.21}
+
+\author{
+\begin{minipage}{0.4\textwidth}
+\begin{center} A.S.Berdnikov\\{\tt berd{\sl @}ianin.spb.su} \end{center}
+\end{minipage}
+\hfill
+\begin{minipage}{0.4\textwidth}
+\begin{center} S.B.Turtia\\{\tt turtia{\sl @}ianin.spb.su} \end{center}
+\end{minipage}
+}
+
+\date{}
+
+\def\PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC\spacefactor1000 }
+\font\manual=logo10 at 12pt
+\def\MF{{\manual META}\-{\manual FONT}\spacefactor1000 }
+\def\AW{Addison\kern.1em-\penalty 0pt \hskip 0pt Wesley}
+\def\CandT{{\sl Computers \& Typesetting}}
+\def\TUB{{\sl TUGboat\/}}
+
+\font\cmcmss=cmss12 scaled 1000
+\font\cmcmbx=cmbx12 scaled 1000
+\font\cmcmtt=cmtt12 scaled 1000
+\font\cmcmsl=cmsl12 scaled 1000
+\font\cmfunny=cmff10 scaled 1200
+\font\cmquote=cmssq8 scaled 1200
+\font\cmdunh=cmdunh10 scaled 1200
+\font\cmcmr=cmr12 scaled 1000
+
+\font\cmq=cmssq8 scaled 800
+\font\cmd=cmdunh10 scaled 800
+\font\csl=cmsl10 scaled 800
+
+\newcommand{\bs}{\char92} % char \
+
+\makeatletter
+\def\hackersmile{\@ifnextchar[{\@hackersmile}{\@hackersmile[10]}}
+\def\@hackersmile[#1]{\hbox{%
+ \unitlength=1pt\relax
+ \unitlength=#1\unitlength
+ \divide\unitlength by 10\relax
+ \thicklines
+ \raise -3\unitlength \hbox{%
+ \begin{picture}(12,12)(-6,-6)
+ \put(0,0){\circle{10}}
+ \put(-2,1.75){\circle*{1}}
+ \put(2,1.75){\circle*{1}}
+ \thicklines
+ \put(-2.75,3){\line(1,0){1.5}}
+ \put(2.75,3){\line(-1,0){1.5}}
+ \put(0,-1){\line(0,1){3}}
+ \put(-2.5,-2.5){\line(1,0){5}}
+ \put(-2.5,-2.5){\line(0,1){1}}
+ \put(2.5,-2.5){\line(0,1){1}}
+ \end{picture}%
+}}}
+\makeatother
+
+\begin{document}
+
+\maketitle
+
+\begin{flushright}
+\begin{minipage}{0.55\textwidth}
+\small
+We would like to express our warmest thanks
+to Dr.\ A.Compagner from the Delft University of Technology
+who spent a lot of his time and efforts
+trying to transform two naive students from Russia
+into serious scientists.
+\end{minipage}
+\end{flushright}
+
+\bigskip
+
+\begin{abstract}
+The style file {\sc mff.sty} simulates the effect of
+{\sl Multiple Master Fonts} created by Adobe using
+the Computer Modern typefaces as a template.
+It enables to vary continuously in a wide range
+the shape of \TeX{} fonts and create the unique font
+which suites the User's demands.
+Although originally {\sc mff.sty} was created for internal
+purposes to investigate the possibilities hidden inside
+the \MF{} source code for Computer Modern typefaces,
+it might be useful for professional applications too.
+The style file works correctly with
+\LaTeX{} 2$_{\hbox{\normalsize$\varepsilon$}}$
+as well as with \LaTeX{} $2.09$.
+\end{abstract}
+
+\section{Introduction}
+
+The {\sl Multiple Master Font} format for PostScript
+fonts was suggested some time ago
+by the well-known company {\sl Adobe Inc}.
+It enables to vary continuously the
+font characteristics (say, {\em weight} (``boldness'')
+from light to black, {\em width} from condensed to expanded,
+etc.) and create the unique font which suites
+the particular User's demands.
+Like many other ``new inventions''
+in computer assisted typography, the roots of this
+idea can be found inside \TeX{}\footnote{For example,
+{\sl Microsoft Word} 6.0 was announced as the {\em first}
+program which enables to mark some place in the text by
+a special marker and then to refer to its position
+in a form: ``see page \dots'' \hackersmile.} --- namely, in \MF{}
+as the language for font description, and in Computer
+Modern font family created by D.Knuth in 1977--1985.
+
+The \MF{} source code was created, and the {\sl Computer Modern}
+font parameters were selected using the advises of such
+professional font designers as Hermann Zapf,
+Matthew Carter, Charles Bigelow and others
+(see \cite{CM} for the {\em full} list of contributors).
+The \MF{} code for {\sl Computer Modern} typefaces
+has the following essential features:
+\begin{itemize}
+\item
+the parameter files are separated from the main source code
+so that the font parameters can be variated easily;
+\item
+the role of the font parameters, the details of the \MF{} source code,
+etc., are documented in \cite{CM} in deep details;
+\item
+the font variations (provided that the fonts and all
+changed {\tt .mf} files have the names \underline{\bf different}
+from that for the original CM fonts)
+are encouraged by the author.
+\end{itemize}
+The {\sl Computer Modern} fonts are parametrized using
+sixty two \hbox{(!!!)} parameters most of which are independent.
+It can be seen easily that such big amount of free parameters
+exceeds the flexibility of {\em any} multiple master font
+which is created up to now or even {\em will be} created
+by somebody in future.
+
+The continuous parametrization of the canonical Computer Modern
+typefaces created by John Sauter and Karl Berry
+({\sc sauter} fonts \cite{SAUTER}), and, on a different basis,
+by J\"org Knappen and Norbert Schwarz for
+{\sl European Computer Modern} typefaces \cite{DC},
+enables to vary continuously the font size in a wide range
+without loosing the high quality of the output.
+As a result it is easy to manipulate with
+{\sl Computer Modern} typefaces like the Adobe multiple master fonts,
+and to produce an enomorous amount of {\bf freeware}
+fonts of professional quality.
+
+The style file {\sc mff.sty} described here performs this work.
+It follows the ideas implimented in the package MF\PiC{}\footnote{%
+Like MF\PiC, the first pass of \LaTeX{}
+creates the {\tt .mf} file,
+then the {\tt .mf} file is processed by \MF,
+and at the second pass of \LaTeX{} the new
+font is used to make the output.}
+and enables to specify the new fonts inside \LaTeX{} document
+without dealing with the details of \MF{} programming and
+manual specification of each of 62 parameters used in
+{\sl Computer Modern} source files.
+The User can variate the font shape continuously between
+CMR, CMBX, CMSL, CMSS, CMTT and CMFF font families,
+specify the {\em weight}, {\em width}, {\em height}
+and {\em contrast} of the output font independently,
+and in addition he/she can play the character
+characteristics so that the output does not
+look like the canonical {\sl Computer Modern}
+typefaces at all.
+
+\section{Main Command: define a font\label{GENER}}
+
+The generation of the {\tt .mf} header file and the activation
+of the new font is performed by the command
+{\tt\bs{}MFFgener} which has the format:
+\begin{itemize}
+\item[] \tt \bs{}MFFgener[{\em fntscaled}]\{{\em{\tt\bs}fntcmd}\}\{{\em filename}\}\{{\em fntsize}\}
+\end{itemize}
+The command {\em{\tt\bs}fntcmd} will switch inside the document
+to the desired font like it is done by the \LaTeX{} commands
+\verb?\bf?, \verb?\sl?, \verb?\sf?, etc.\footnote{The difference is that
+the size of this font is not influenced by the commands like
+{\tt\bs{}large} or {\tt\bs{}small} --- it is fixed and is
+determined totally by the parameters {\em fntscaled} and {\em fntsize}.}
+The file {\em filename{\tt.mf}} will contain the \MF{} source
+code of the new font\footnote{To minimize the attempts to create the
+fonts with the names already used in Computer Modern family, etc.,
+the prefix {\em xx} is added before the file name automatically.
+See section~\ref{MORE} for more details.}.
+The value {\em fntsize} specifies the design size
+of the new font (it defines the size of a new font and
+is used by {\sc mff.sty} to calculate the font parameters
+as the functions of this reference value ---
+see sections \ref{MIXTURE} and \ref{CORRECT} for more details).
+The optional parameter {\em fntscaled} specifies
+the additional scaling of this font in \LaTeX{} document.
+Examples:
+\begin{itemize}
+\item[]\verb?\MFFgener{\zfnt}{zmz30}{30pt}?\\
+ \verb?\MFFgener[scaled 2000]{\zfnt}{zmz15}{15pt}?\\
+ \verb?\MFFgener[at 30pt]{\zfnt}{zmz20}{20pt}?
+\end{itemize}
+
+The {\tt .mf} file created by {\sc mff.sty}
+contains only the list of 62 font
+parameters which determine the character shapes.
+It also contains the command that loads the
+driver file ({\tt roman.mf}, {\tt csc.mf}, etc.),
+and the driver file assemblers all the necessary \MF{} source code.
+It is assumed that the driver files for the fonts described
+in section~\ref{CLASS} together with all necessary
+{\tt .mf} files are already installed on your computer.
+
+When the file {\em filename{\tt.mf}} is created,
+it is necessary to process it by \MF{} to get the metric
+file {\em filename{\tt.tfm}} and the bitmap file
+{\em filename{\tt.pk}}. The second pass of \LaTeX{} will use the metric
+information to format the document properly, and the {\sl DVI}-drivers
+will use the bitmap data to make the output.
+The proper configuration of \TeX-compiler and {\sl DVI}-drivers
+so that they can find these files is the User's task
+(please consult your local \TeX-expert how to configure
+it\footnote{Some advises how to configure the programs
+if you use {\sl MS DOS}/{\sf em\TeX} are in section~\ref{CONFIG}.}).
+
+If \LaTeX{} can find the file {\em filename}{\tt .tfm}, it assigns
+the font {\em filename} to the command {\em{\tt\bs}fntcmd} which
+can be used later in the document to switch to the desired font.
+If \LaTeX{} cannot find the {\tt .tfm} file, the warning message
+\begin{itemize}
+\item[] {\tt No file {\em filename}.tfm -- dummy font will be used}
+\end{itemize}
+is displayed which means that the text typed by this new font
+will disappear from the {\sl DVI}-file ({\tt dummy} font is the
+artificial font which contains no characters).
+
+The file {\em filename{\tt.mf}} which contains the \MF{} data
+necessary to make the font is created after {\em each} pass
+of \LaTeX{} and the warning message
+\begin{itemize}
+\item[] {\tt Do not forget to process {\em filename}.mf
+ and reprocess this file}
+\end{itemize}
+is displayed even if the new {\tt .mf} file is identical to the previous
+one. It is the User's responcibility to guarantee that the {\sc mff.sty}
+commands are the same as during the previous pass of \LaTeX{} and that
+the {\tt .tfm} and {\tt .pk} files are produced from the correct version
+of {\tt .mf} file.
+
+\section{Mixture of independent fonts\label{MIXTURE}}
+
+The {\sl Computer Modern} font sequences
+\begin{itemize}
+\item[]\begin{flushleft}
+{\cmcmr roman},\quad {\cmcmbx bold},\quad
+{\cmcmsl slanted},\quad {\cmcmss sans serif},\quad
+{\cmcmtt typewriter},\quad {\cmfunny funny},\quad
+{\cmdunh dunhill},\quad {\cmquote quotation}\end{flushleft}
+\end{itemize}
+share just the same \MF{} source code but with different values for
+font parameters. Since each font exists at different sizes, it is
+possible to construct for each sequence and for each parameter
+a continuous approximation which is the function of the font size.
+Such approximations, for example, enable to generate fonts with the
+font sizes different from that created by D.E.Knuth.
+
+At least two {\em ready-to-use} font approximations are available from
+CTAN. One is the {\sc sauter} font package created by
+John Sauter and Karl Berry \cite{SAUTER}, and the other is realized
+in {\sc dc} and {\sc tc} fonts created by J\"org Knappen and Norbert
+Schwarz \cite{DC}. Special {\sc mff.sty} comands control
+the approximation scheme:
+\begin{itemize}
+\item[] {\tt \bs{}MFFsauter} --- {\sc sauter}-type approximation
+ is used;\\
+ {\tt \bs{}MFFdcfonts} --- {\sc DC font} approximation
+ is used;
+\end{itemize}
+where the default mode is {\tt\bs{}MFFsauter}.
+
+The continuous approximation for CMR parameters enables to create
+the \MF{} header file for CMR font with an arbitrary font size.
+Similar approximations and, as a result, the font headers with
+an arbitrary font size, can be constructed for CMBX, CMTT, CMSS, etc.
+The main hypothesis used below is the following:
+if some font headers result to correct fonts when processed by \MF{},
+the font header contructed from the {\em weighted sum} of the font
+parameters extracted from these font headers gives
+the correct font also\footnote{The internal relations between
+font parameters described in \cite{CM} are conserved for the weighted
+sum of font parameters.}.
+Although it is not necessarily true, the experiments
+with {\sl Computer Modern} typefaces show that if the header files
+corresponding to different {\sl Computer Modern} fonts
+{\em with the same font size} are selected, this assumption is fulfilled
+with great probability.
+
+The fonts CMR, CMBX, CMTT, CMSS, etc., have quite different
+character styles although they use just the same \MF{} driver file
+{\tt roman.mf}.
+The CMTT fonts have nearly rectangular serifs,
+nearly no contrast between thin and thick lines,
+and different ratio width/height as compared with CMR.
+The CMSS fonts has no serifs at all, they also
+have no contrast, the thickness of their lines is greater
+than that for CMTT.
+Other fonts have their own specific
+features, but inspite of this fact they can be ``added''
+together --- at least mathematically as the 62-dimensional
+vectors of font parameters.
+The resulting font is no longer CMR, CMBX, CMTT, etc.,
+but something intermediate with a unique shape.
+
+Taking into account the {\sf New Font Selection Scheme} used by
+\LaTeX~2$_{\hbox{\normalsize$\varepsilon$}}$,
+it is preferable to decompose
+the CMBX font sequence into {\em two} sequences --- one
+for ``boldness'' ({\em weight}) and one for ``extension''
+({\em width}) characteristics.
+The {\sc mff.sty} uses the special fonts
+$\overline{\hbox{CMB}}$\footnote{It is not the same as
+{\tt cmb10} created by D.E.Knuth --- the font parameters
+are different.} (bold as CMBX and wide as
+CMR) and $\overline{\hbox{CMX}}$ (wide as CMBX and bold as CMR)
+which are derived from CMBX.
+
+The mixture of fonts is performed by the command
+\begin{itemize}
+\item[] {\tt \bs{}MFFmixture\{$\alpha_1$\}\{$\alpha_2$\}%
+ \{$\alpha_3$\}\{$\alpha_4$\}\{$\alpha_5$\}\{$\alpha_6$\}}
+\end{itemize}
+where $\alpha_1$, $\alpha_2$, $\alpha_3$, $\alpha_4$,
+$\alpha_5$, $\alpha_6$ specify
+the weight factors:
+$\alpha_1$ corresponds to $\overline{\hbox{CMB}}$,
+$\alpha_2$ corresponds to $\overline{\hbox{CMX}}$,
+$\alpha_3$ corresponds to CMSS (sans serif fonts),
+$\alpha_4$ corresponds to CMTT (typewriter fonts),
+$\alpha_5$ corresponds to CMFIB (``Fibonacci'' fonts),
+$\alpha_6$ corresponds to CMFF (funny fonts)\footnote{%
+The fonts {\csl slanted}, {\cmq quotation} and {\cmd dunhill}
+
+are not included in this list because they can be produced
+from CMR easily using the scaling commands described
+in section~\ref{CORRECT}.}.
+
+If some parameter has the value $p_{cmr}$ for CMR font,
+the value $p_{cmb}$ for $\overline{\hbox{CMB}}$ font
+(with the same font size!), the value $p_{sf}$ for CMSS font, etc.,
+the {\em mixture} value $p_*$ for this parameter is calculated as
+\begin{eqnarray}
+p_* &=& \alpha_0 p_{cmr}
+ + \alpha_1 \left(p_{cmb}-p_{cmr}\right)
+ + \alpha_2 \left(p_{cmx}-p_{cmr}\right)
+ + \alpha_3 \left(p_{sf}-p_{cmr}\right)
+\cr &&\quad\quad
+ + \alpha_4 \left(p_{tt}-p_{cmr}\right)
+ + \alpha_5 \left(p_{fib}-p_{cmr}\right)
+ + \alpha_6 \left(p_{funny}-p_{cmr}\right)
+\label{Eq1}
+\end{eqnarray}
+The value $\alpha_0$ is set to 1.0 by the command {\tt \bs{}MFFmixture},
+but the User can assign an arbitrary value to it using the
+commands {\tt\bs{}setMFF[$\alpha_0$]\{cmr\}} and
+{\tt\bs{}mixMFF[$\alpha_0$]\{cmr\}} which are decribed below.
+
+This procedure enables, for example, to make the font ``less bold''
+than CMR or ``more bold'' and ``more extended'' than CMBX
+using the weight factors which are less than 0 or greater than 1,
+and to create the ``mutant'' combinations of nearly incompatible
+font families\footnote{Caution: playing this game
+it is very easy to get the {\tt .mf} file which cannot
+be passed through \MF{} without errors if you do not
+understand clearly what are you doing.}.
+
+The command
+ {\tt \bs{}MFFmixture\{$\alpha_{1}$\}\{$\alpha_{2}$\}%
+ \{$\alpha_{3}$\}\{$\alpha_{4}$\}\{$\alpha_{5}$\}%
+ \{$\alpha_{6}$\}}
+is equivalent to the following sequence of commands:
+\begin{itemize}
+\item[]{\tt \bs{}clearMFF\ \ \ \ \ \
+ \% synonim for \bs{}MFFmixture\{0\}\{0\}\{0\}\{0\}\{0\}\{0\}}\\
+ {\tt \bs{}mixMFF[$\alpha_{1}$]\{bold\}} \\
+ {\tt \bs{}mixMFF[$\alpha_{2}$]\{x\}} \\
+ {\tt \bs{}mixMFF[$\alpha_{3}$]\{sf\}} \\
+ {\tt \bs{}mixMFF[$\alpha_{4}$]\{tt\}} \\
+ {\tt \bs{}mixMFF[$\alpha_{5}$]\{fib\}} \\
+ {\tt \bs{}mixMFF[$\alpha_{6}$]\{funny\}}
+\end{itemize}
+These commands are better recognized due to their mnemonic form,
+they can be specified in an arbitrary order, the commands with
+zero $\alpha$'s can be skipped since the zero weight factors are
+already assigned by {\tt\bs{}clearMFF}.
+If several commands with the same font name are encountered,
+the last specification is active. The default value for the
+optional parameter $\alpha$ is {\tt 1.0}.
+
+The mixture between CMR and a {\em single} font can be
+specified by a single mnemonic command selected from
+\begin{center}\begin{tabular}{l@{\qquad}l@{\qquad}l}
+{\tt \bs{}setMFF[$\alpha_{1}$]\{bold\}} &
+{\tt \bs{}setMFF[$\alpha_{3}$]\{sf\}} &
+{\tt \bs{}setMFF[$\alpha_{5}$]\{fib\}} \\
+{\tt \bs{}setMFF[$\alpha_{2}$]\{x\}} &
+{\tt \bs{}setMFF[$\alpha_{4}$]\{tt\}} &
+{\tt \bs{}setMFF[$\alpha_{6}$]\{funny\}}
+\end{tabular}\end{center}
+which is equivalent to {\tt \bs{}MFFmixture} where only
+one weight factor has non-zero value. If the optional parameter $\alpha$
+is skipped, the default value {\tt 1.0} is used. It means that
+the ``pure'' font family can be specified by the commands
+\begin{center}\begin{tabular}{l@{\qquad}l@{\qquad}l}
+{\tt \bs{}setMFF\{bold\}} &
+{\tt \bs{}setMFF\{sf\}} &
+{\tt \bs{}setMFF\{fib\}} \\
+{\tt \bs{}setMFF\{x\}} &
+{\tt \bs{}setMFF\{tt\}} &
+{\tt \bs{}setMFF\{funny\}}
+\end{tabular}\end{center}
+
+Although \LaTeX{} 2$_{\hbox{\normalsize$\varepsilon$}}$/NFSS
+considers the {\em weight} and the {\em width} as two
+independent font characteristics, the movement in the direction
+``bold + extended'' (i.e., to CMBX font family) usually gives
+more pleasant results.
+To perform this operation it is necessary to assign the equal weights
+to $\alpha_{cmb}$ and $\alpha_{cmx}$ which can be done
+by the mnemonic commands
+\begin{itemize}
+\item[]{\tt \bs{}mixMFF[$\alpha_{bx}$]\{bx\}}
+ \qquad and \qquad
+ {\tt \bs{}setMFF[$\alpha_{bx}$]\{bx\}}
+\end{itemize}
+The commands
+\begin{itemize}
+\item[]{\tt \bs{}mixMFF[$\alpha_{cmr}$]\{cmr\}}
+ \qquad and \qquad
+ {\tt \bs{}setMFF[$\alpha_{cmr}$]\{cmr\}}
+\end{itemize}
+play a special role: they enable to assign the value
+$\alpha_0=\alpha_{cmr}$ in the equation~(\ref{Eq1})
+(usually $\alpha_0$ is set to 1.0 by the command
+{\tt\bs{}MFFmixture} --- for the evident reasons).
+
+%\section*{Some notes about the font sequences
+% with continuously variated font size}
+%
+%Suppose that there is a continuous approximation
+%for {\sl Computer Modern Roman} (CMR) which enables
+%to calculate the \MF{} font parameters for an {\em arbitrtary}
+%design size even with weak \TeX{} arithmetical capabilities.
+%The desired font size is specified as the input parameter,
+%all the internal calculations of the font parameters are performed
+%by \TeX{}, and at the output there is the \MF{} {\em ready-to-run}
+%font header file for a new font. When this new font header file
+%is processed by \MF{}, it can be used in \TeX{} documents like
+%other generic \TeX{} fonts.
+%
+%It is interesting to compare the possibilities of this simplest
+%form of pa\-ra\-me\-tri\-za\-ti\-on
+%of CMR-fonts and the {\sc PostScript} vector fonts.
+%The nearly-proportional changing of the font dimensions
+%with respect to magnification parameter is the analog of the
+%linear scaling of the {\sc PostScript} fonts.
+%The non-linear relationship of the inter-character spacing from
+%the font size imitates the {\em tracking} mechanism implemented
+%in {\sc PostScript} fonts (which is not taken into account in most
+%cases by text processors). The fact that the ratio height/width is a
+%non-constant (and non-linear) function of the font size is a
+%serious advantage of these pseudo-CMR fonts in comparison with
+%the linearly scaled {\sc Postscript} fonts since it enables to make
+%the font proportions more suitable for a human eye
+%(it is well known that for good eye recognision small letters
+%are to be more expanded and have greater inter-character spacing).
+%
+%There are at least {\em two} ready-to-use font approximations
+%available from CTAN. The first one is the \MF{} {\sc sauter}
+%font package created by John Sauter and Karl Berry. It uses
+%the continuous functions composed from constant, linear and quadratic
+%pieces which are constructed so that for {\em canonical} font sizes they
+%produce nearly just the same {\tt *.mf} files as the ones used
+%by the original {\sl Computer Modern} typefaces. Although the latest
+%version of {\sc sauter} is dated 1992, and in 1995 the parameters
+%of {\sl Computer Modern} fonts were again slightly changed,
+%it seems still to be the reliable source of the fonts with
+%intermediate design sizes.
+%
+%The other approximation is realized in {\sc dc} and {\sc tc}
+%fonts by by J\"org Knappen and Norbert Schwarz \cite{DC}.
+%It is based on cubic splines --- Lagrange cubic splines or
+%canonical cubic splines --- using the parameters of
+%{\sl Computer Modern} typefaces as the base points.
+%Although generally piecewise-cubic functions produce
+%good quality approximations, it is not so with the data extracted
+%from {\sl Computer Modern} \MF{} files. The plots of its parameters
+%with respect to the design size are ``noisy'' functions with some
+%abrupt jumps since these parameters were selected
+%manually to optimize the font shape, not the mathematical plots.
+%As a result the cubic smooth approximations obey parasilic local
+%minima and maxima and do not work far outside the range of
+%design sizes used as the base data points. The {\sc dc} and {\sc tc}
+%fonts with intermediate font sizes are visually good even with
+%this ``mathematical'' defects but it was more advantageous
+%to impliment piecewise-linear approximation instead of
+%piesewise-cubic one.
+%
+%The first version of {\sc mff.sty} was based on piecewise-linear and
+%piecewise-cubic (Lagrange splines) functions using {\sl Computer Modern}
+%typefaces as the reference data. To eliminate the parasitic local
+%minima and maxima some data points were slightly changed, and new
+%data points were added to guarantee a good behavour of the approximating
+%expressions outside the range {\tt 5pt} -- {\tt 17.28pt}. The current
+%version of {\sc mff.sty} is based on {\sc sauter}-type approximation
+%with some modifications (especially for {\tt cmff} and {\tt cmfib} fonts)
+%and on the piecewise-linear approximations based on {\sc dc} data.
+%The variated {\sl Computer Modern} data used in the previous versions
+%became obsolete and is discarded now since it is not a good idea
+%to modify voluntary the original {\sc Computer Modern} parameters.
+
+\section{Modifications of font parameters\label{CORRECT}}
+
+You can use the weighted mixture of font ingredients using the commands
+{\tt\bs{}setMFF}, {\tt\bs{}mixMFF} and {\tt\bs{}MFFmixture} described
+above, but you can also vary ``by hand'' the font parameters
+which control the essential details of the character shape.
+%The commands described in this section enable to do:
+%\begin{itemize}
+%\item scale the {\em width} of the character;
+%\item scale the {\em height} of the character;
+%\item scale the length of ascenders and descenders;
+%\item scale the height of digits and the middle line for
+% mathematical symbols;
+%\item scale the thickness of {\em thin strokes}
+% and {\em thick strokes};
+%\item correct the {\em contrast} of the character;
+%\item specify the tilt ratio $(\Delta x/\Delta y)$
+% for {\sl slanted} fonts;
+%\item scale (or set to some value) some specific parameters
+% which are responcible for fine character tuning;
+%\item specify the logical flags which control the ligatures,
+% character serifs, etc.
+%\end{itemize}
+
+\subsection{Variations of the height\label{HEIGHT}}
+
+The following commands enable to vary the height of the vertical
+elements of the characters:
+\begin{description}
+\item[\quad{\tt \bs{}MFFscaleHeight\{{\em factor}\}}] --- scale proportionally
+ the height and the depth of the characters;
+\item[\quad{\tt \bs{}MFFscaleAsc\{{\em factor}\}}] --- scale
+ the height of the capital characters, brackets, digits, etc.,
+ and the ascenders of the characters like `b', `h';
+\item[\quad{\tt \bs{}MFFscaleDesc\{{\em factor}\}}] --- scale
+ the depth of comma and the descenders of the characters
+ like `Q', `y';
+\item[\quad{\tt \bs{}MFFscaleMath\{{\em factor}\}}] --- scale
+ the height of digits and the height of
+ the horizontal bar (the middle line) for mathematical symbols
+ like $=$, $+$, $-$.
+\end{description}
+If several height factors are specified, their effect is combined.
+The curious font {\tt cmdunh10} can be reproduced {\em exactly}
+by proper specification of all these factors.
+
+Example:
+\begin{eqnarray*}
+&&\hbox{\tt \bs{}MFFscaleAsc\{1.5\}}\\
+&&\hbox{\tt \bs{}MFFscaleDesc\{1.2\}}
+\end{eqnarray*}
+
+\subsection{Variations of the width\label{WIDTH}}
+
+The {\em width} of CMR font can be variated by mixturing
+with the $\overline{\hbox{CMX}}$ font. It increases the character width
+and also performs some fine tuning of other font parameters.
+Due to this reason the mixturing with
+$\overline{\hbox{CMX}}$ can be advantageous to variate
+the width of characters if you deal with CMR family.
+From the other side, for CMTT fonts or CMSS fonts the
+mixturing with $\overline{\hbox{CMX}}$ results also
+to some variation of the character shapes which can be
+an undesirable effect.
+
+The User can specify the explicit width multiplication
+which means that the font parameters which define the width
+of the characters are multiplied by some factor:
+\begin{itemize}
+\item[]{\tt \bs{}MFFscaleWidth\{{\em factor}\}}
+\end{itemize}
+After this command the font parameters
+\begin{itemize}
+\item[]\begin{flushleft}
+{\tt u\#}, {\tt serif\_fit\#}, {\tt cap\_serif\_fit\#},
+{\tt jut\#}, {\tt cap\_jut\#}
+\end{flushleft}\end{itemize}
+are scaled proportionally to {\em factor}.
+The values $\hbox{\em factor}>1.0$ correspond to expansion,
+the values $0<\hbox{\em factor}<1.0$ --- to compression of the
+characters. The command {\tt \bs{}MFFscaleWidth\{1.0\}}
+restores the default width.
+
+\subsection{Variations of the weight\label{WEIGHT}}
+
+The {\em weight}, i.e., the ``boldness'' of the characters can be
+controlled by muxturing with $\overline{\hbox{CMB}}$.
+Similarly to {\em width} correction described in the previous section,
+for such fonts as CMTT or CMSS it is accompanied
+by some undesirable changes in the character shapes.
+
+The following commands control explicitly
+the {\em weight} and the {\em contrast} of the characters:
+\begin{description}
+\item[\quad{\tt \bs{}MFFscaleBoldLines\{{\em coef}$_1$\}}]
+--- scale the thickness of {\em thick} strokes by {\em coef}$_1$;
+\item[\quad{\tt \bs{}MFFscaleThinLines\{{\em coef}$_2$\}}]
+--- scale the thickness of {\em thin} strokes by {\em coef}$_2$.
+\end{description}
+The coefficient {\em coef}$_1$ scales the values of the font parameters
+\begin{itemize}
+\item[]\begin{flushleft}
+{\tt stem\#}, {\tt curve\#}, {\tt ess\#}, {\tt flare\#}, {\tt dot\_size\#},
+{\tt cap\_stem\#}, {\tt cap\_curve\#}, {\tt cap\_ess\#},
+{\tt bar\#}, {\tt slab\#}, {\tt cap\_bar\#}, {\tt cap\_band\#},
+{\tt thin\_join\#}.
+\end{flushleft}\end{itemize}
+The coefficient {\em coef}$_2$ scales the values of font parameters
+\begin{itemize}
+\item[]\begin{flushleft}
+{\tt hair\#}, {\tt vair\#}, {\tt cap\_hair\#},
+{\tt rule\_thickness\#}, {\tt notch\_cut\#}, {\tt cap\_notch\_cut\#}.
+\end{flushleft}\end{itemize}
+
+Multiplication by {\em coef}$_1$ and {\em coef}$_2$ increases
+the font contrast in $\hbox{\em coef}_1/\hbox{\em coef}_2$ times.
+The contrast can be specified explicitly using the commands
+\begin{itemize}
+\item[]{\tt \bs{}MFFcontrast[{\em type}]}\qquad or \qquad
+ {\tt \bs{}MFFcontrast\{{\em value}\}}
+\end{itemize}
+which defines the parameter {\em value} equal to the ratio
+of the thickness of {\em thin strokes} to the thickness of
+{\em thick strokes}. The commands work as:
+\begin{eqnarray*}
+&&\hbox{{\tt\bs{}MFFcontrast[s]} --- no correction of the contrast;}\\
+&&\hbox{{\tt\bs{}MFFcontrast[n]} --- no contrast at all ({\em value}=1);}\\
+&&\hbox{{\tt\bs{}MFFcontrast[d]} --- 50\% contrast ({\em value}=0.5);}\\
+&&\hbox{{\tt\bs{}MFFcontrast\{{\em value}\}}
+ --- the {\em value} is specified explitly.}
+\end{eqnarray*}
+If the correction of the contrast is active
+(no command {\tt\bs{}MFFcontrast[s]}),
+all thick element of lowercase characters are equal to {\tt stem\#},
+all thick element of uppercase characters are equal to {\tt cap\_stem\#},
+all thin elements have the thickness of {\tt stem\#} or {\tt cap\_stem\#}
+multiplied by {\em value}, the values {\tt stem\#} and {\tt cap\_stem\#}
+are multiplied by $\hbox{\em coef}_1$,
+the value $\hbox{\em coef}_2$ is ignored.
+
+\subsection{Miscellaneous variations\label{MISC}}
+
+The following scaling factors can help to perform fine tuning
+of the characters (see \cite{CM} for more details):
+\begin{description}
+\item[\quad{\tt \bs{}MFFscaleJoinLines\{{\em factor}\}}]
+--- variable {\tt thin\_join\#} is multiplied by {\em factor}
+ (this variable is responcible
+ for fine connection between thin and thick lines in `h', `m', `n');
+\item[\quad{\tt \bs{}MFFscaleNotchCut\{{\em factor}\}}] ---
+ variables {\tt notch\_cut\#} and {\tt cap\_notch\_cut\#} are
+ multiplied by {\em factor} (these variables
+ are responcible for sharp corners in letters `A', `V', `w');
+\item[\quad{\tt \bs{}MFFscaleDotSize\{{\em factor}\}}] ---
+ variables {\tt dot\_size\#} and {\tt flare\#} are multiplied
+ by {\em factor} (these variables
+ are responcible for dots in `i', `:' and bulbs in `a', `c');
+\item[\quad{\tt \bs{}MFFscaleSerifDish\{{\em factor}\}}] ---
+ variable {\tt dish\#} is multiplied by {\em factor} (this
+ variable defines the curved shape of the serif platform).
+\end{description}
+
+Since these parameters perform fine tuning of the character shape,
+it can be desirable to assign the specific value to some of them
+instead of scaling the default value.
+This operation requires the ``expert level macros''
+described in section~\ref{EXPERT}.
+For example, to assign a very big number to the variables
+{\tt notch\_cut\#} and {\tt cap\_notch\_cut\#}
+which control the sharpness of the corners in letters `A', `V', `w',
+etc.\footnote{This operation is necessary to produce high-quality
+outlined characters using {\em font tricks} commands described
+in section~\ref{TRICKS} (see \cite{Outline} for more
+details).}, the following commands can be used:
+\begin{itemize}
+\item[]
+ {\tt\bs{}MFFcatcode}\\
+ {\tt \bs{}def\bs{}MFF@assign@notch\_cut\{\bs{}@tempdimb=16383pt\}}\\
+ {\tt \bs{}def\bs{}MFF@assign@cap\_notch\_cut\{\bs{}@tempdimb=16383pt\}}\\
+ {\tt\bs{}noMFFcatcode}
+\end{itemize}
+To return the rule of calculation for these parameters
+to the default state, the commands
+\begin{itemize}
+\item[]
+ {\tt\bs{}MFFcatcode}\\
+ {\tt \bs{}def\bs{}MFF@assign@notch\_cut\{\}}\\
+ {\tt \bs{}def\bs{}MFF@assign@cap\_notch\_cut\{\}}\\
+ {\tt\bs{}noMFFcatcode}
+\end{itemize}
+should be used.
+
+\subsection{Slanted characters\label{SLANT}}
+
+The inclination of the characters is defined by the
+variable {\tt slant\#} which is specified explicitly
+by the commands:
+\begin{itemize}
+\item[]{\tt \bs{}MFFslant\{{\em parm}\}} --- set {\em slant} as a fraction;
+\item[]{\tt \bs{}MFFslantD\{{\em parm}\}} --- set {\em slant} as an angle
+ specified in degrees.
+\end{itemize}
+For example, {\em slant} typical for CMSL is specified
+as {\tt \bs{}MFFslant\{1/6\}}, and {\em slant} typical for
+CMSSI is specified as {\tt \bs{}MFFslantD\{12\}} which is
+just the same as {\tt \bs{}MFFslant\{sind(12)/cosd(12)\}}.
+The arguments of the commands {\tt\bs{}MFFslant} and {\tt\bs{}MFFslantD}
+are interpreted as the text strings directly transferred to
+{\tt .mf} files, not as the numerical values.
+
+
+\subsection{Logical flags\label{FLAGS}}
+
+The logical switches usually specified at the end of {\tt *.mf}
+file can be controlled by the following commands
+({\sl char}={\tt n} means {\em false}, {\sl char}={\tt y} means {\em true}):
+\begin{description}
+\item[\quad{\tt \bs{}MFFflagSquareDots\{{\sl char}\}}] --- set logical variable
+ {\tt square\_dots} (should dots be square?);
+\item[\quad{\tt \bs{}MFFflagHefty\{{\sl char}\}}] --- set logical variable
+ {\tt hefty} (should we try hard not to be overweight?);
+\item[\quad{\tt \bs{}MFFflagSerifs\{{\sl char}\}}] --- set logical variable
+ {\tt serifs} (should bulbs and se\-rifs be attached?);
+\item[\quad{\tt \bs{}MFFflagMonospace\{{\sl char}\}}] --- set logical variable
+ {\tt monospace} (are all characters of the same width?);
+\item[\quad{\tt \bs{}MFFflagVariantG\{{\sl char}\}}] --- set logical variable
+ {\tt variant\_g} (should an italic-style g be used?);
+\item[\quad{\tt \bs{}MFFflagLowAsterisk\{{\sl char}\}}] --- set logical variable
+ {\tt low\_asterisk} (should the asterisk be centered at the axis?);
+\item[\quad{\tt \bs{}MFFflagMathSpacing\{{\sl char}\}}] --- set logical variable
+ {\tt math\_fitting} (should math-mode spacing be used?).
+\end{description}
+The level of ligature and kerning data is specified by the command:
+\begin{description}
+\item[\quad{\tt \bs{}MFFflagLigs\{{\em type}\}}] where {\em type} is
+ {\tt 0}, {\tt 1}, {\tt 2}, {\tt s} or {\tt n} --- set ligature level:
+ {\tt 0}, {\tt 1}, {\tt 2} correspond to the value of the variable {\tt ligs},
+ {\tt n} is equivalent to {\tt 0}, {\tt s} set ligature level like
+ in CMR fonts (it is {\tt 1} if font design size is less than {\tt 6pt},
+ and {\tt 2} otherwise).
+\end{description}
+
+\subsection{Expert level macros\label{EXPERT}}
+
+It is possible to change manually each font variable
+if the default value calculated by {\sc mff.sty} is
+not satisfactory. To perform such operation it is necessary
+to specify the macro with the name
+\begin{itemize}
+\item[] {\tt \bs{}MFF@assign@{\em varname}}
+\end{itemize}
+which redefine the value of the register \verb?\@tempdimb?.
+On input the register \verb?\@tempdimb?
+is equal to automatically calculated value for that parameter,
+and the register \verb?\@tempdima? is equal to the font design size.
+On output the register \verb?\@tempdimb? should contain
+the new value for the font parameter.
+When the macro {\tt\bs{}MFF@assign@{\em varname}} is executed,
+the correction procedure described in section~\ref{CORR}
+is performed.
+
+For example, the following macro
+\begin{itemize}
+\item[] {\tt \bs{}def\bs{}MFF@assign@x\_height\{\bs{}@tempdimb=3\bs{}@tempdimb\}}
+\end{itemize}
+scales by 3 the font variable {\tt x\_height\#}, and the macro
+\begin{itemize}
+\item[] {\tt \bs{}def\bs{}MFF@assign@crisp\{\bs{}@tempdimb=0pt\}}
+\end{itemize}
+assigns zero value to the font variable {\tt crisp\#}.
+To delete this user-specified transformation it is
+necessary to use the explicit dummy definition
+\begin{itemize}
+\item[] {\tt \bs{}def\bs{}MFF@assign@x\_height\{\}}\\
+ {\tt \bs{}def\bs{}MFF@assign@crisp\{\}}
+\end{itemize}
+
+The characters `{\tt \_}' and `{\tt @}' should have the status
+{\em letters} to type such macro definition. The command
+{\tt\bs{}MFFcatcode} assigns the status {\em letters} to
+`{\tt \_}' and `{\tt @}', and the command {\tt\bs{}noMFFcatcode}
+returns the previous status for these characters.
+These commands work correctly even inside {\tt .sty} files where
+the character `{\tt @}' have the status {\em letter} before \LaTeX{}
+starts to process the style file, and should conserve this status
+when \LaTeX{} finishes to process the style file.
+Since the command {\tt\bs{}noMFFcatcode} returns {\em the previous}
+status to `{\tt \_}' and `{\tt @}' (that is, the catcode which
+they have during the last command {\tt\bs{}MFFcatcode}), two subsequent
+commands {\tt\bs{}MFFcatcode} without intermediate{\tt\bs{}noMFFcatcode}
+produce an error: the status of `{\tt \_}' and `{\tt @}' will be
+{\em letters} even after the command {\tt\bs{}noMFFcatcode}.
+To assign the status {\em other characters} to `{\tt \_}' and `{\tt @}'
+unconditionally, the command {\tt\bs{}otherMFFcatcode} can be used.
+
+\bigskip
+
+The only operation that should be performed inside
+{\tt\bs{}MFF@assign@{\em varname}} is the re-definition of
+{\tt\bs{}@tempdimb}. No {\tt\bs{}@tempdima} nor other
+internal variables can be changed although the contents of
+{\tt\bs{}@tempdima} and the initial value of {\tt\bs{}@tempdimb}
+can be used to calculate the output value. The exception are
+the dimensional registers
+{\tt\bs{}MFF@dimenA}, {\tt\bs{}MFF@dimenB},
+{\tt\bs{}MFF@dimenC}, {\tt\bs{}MFF@dimenD}
+which can be used for intermediate calculations.
+Also, it is necessary to take into account that:
+\begin{itemize}
+\item the value of all dimensional {\tt .mf} variables except
+ \begin{itemize}\item[]
+ {\tt notch\_cut\#}, {\tt cap\_notch\_cut\#},
+ {\tt rule\_thickness\#}
+ \end{itemize}
+ is divided by 36 when printed to the header file;
+\item the values of the variables
+ \begin{itemize}\item[]
+ {\tt notch\_cut\#}, {\tt cap\_notch\_cut\#},
+ {\tt rule\_thickness\#}
+ \end{itemize}
+ are divided by 100 when printed to the header file;
+\item the values of non-dimensional variables
+ \begin{itemize}
+ \item[]\begin{flushleft}
+ {\tt fudge}, {\tt math\_spread},
+ {\tt superness}, {\tt superpull},
+ {\tt beak\_darkness}
+ \end{flushleft}\end{itemize}
+ are printed to the header file `as it is' but it is to be
+ specified in {\tt pt} --- say, to assign
+ the value 0.5 to the variable {\tt fudge},
+ the command
+ \begin{itemize}
+ \item[] {\tt \bs{}def\bs{}MFF@assign@fudge\{\bs{}@tempdimb=0.5pt\}}
+ \end{itemize}
+ should be used;
+\item the value of the font parameter {\tt slant} is
+ set directly by the commands {\tt \bs{}MFFslant}
+ and {\tt \bs{}MFFslantD} and cannot be specified
+ using the command {\tt\bs{}MFF@assign@slant};
+\item the value of {\tt font\_size} is defined by the parameter
+ {\em fntsize} of the command {\tt\bs{}MFFgener}
+ (see section~\ref{GENER}) and cannot be changed
+ after it.
+\end{itemize}
+
+
+\section{Automatic control of font parameters\label{CORR}}
+
+The \MF{} programs which describe the {\sl Computer Modern} typefaces
+assume that the following mutial relations between font parameters
+are fulfilled (see \cite{CM} for more details):
+\begin{itemize}
+\item $0.5\cdot${\tt x\_height} $\le$ {\tt bar\_height}
+ $\le 0.55\cdot${\tt x\_height}
+\item $\displaystyle\begin{array}[t]{rcl}
+ \hbox{\tt asc\_height} &\ge& 1.2\cdot\hbox{\tt x\_height}\\
+ \hbox{\tt curve} &\ge& \hbox{\tt stem}\\
+ \hbox{\tt cap\_stem} &\ge& \hbox{\tt stem}\\
+ \hbox{\tt cap\_curve} &\ge& \hbox{\tt curve}
+ \end{array}$
+\item
+each of the variables
+\begin{itemize}
+\item[] \begin{flushleft}
+ {\tt thin\_join}, {\tt hair}, {\tt vair}, {\tt stem}, {\tt curve},
+ {\tt ess}, {\tt flare}, {\tt dot\_size}, {\tt bar}, {\tt slab},
+ {\tt cap\_hair}, {\tt cap\_stem}, {\tt cap\_curve},
+ {\tt cap\_ess}, {\tt cap\_bar}, {\tt cap\_band}
+ \end{flushleft}
+\end{itemize}
+are no less than {\tt crisp}, {\tt tiny} and {\tt fine};
+\item
+the variables {\tt stem\_corr} and {\tt vair\_corr}
+are no greater than
+$\frac{1}{5}$ {\tt cap\_hair},
+$\frac{1}{6}$ {\tt stem},
+$\frac{1}{4}$ {\tt fudge}$\times${\tt stem}
+and $\frac{1}{12}$ {\tt curve};
+\item
+the variable {\tt vair\_corr} is no greater than
+$\frac{1}{4}\hbox{\tt slab}$;
+\item
+the variable {\tt stem\_corr} is no greater than
+$\frac{1}{16}\hbox{\tt fudge}\times\hbox{\tt hair}$.
+\end{itemize}
+
+Although even the canonical header files sometimes
+violate these conditions,
+it is more safe if the font parameters calculated by {\sc mff.sty}
+satisfy these relations (especially if the {\sl Computer Modern}
+driver files {\tt roman.mf}, {\tt textit.mf}, {\tt csc.mf} are used).
+From the other side, several interesting effects can be achieved only
+when these relations are violated (provided that the {\tt .mf} file
+is still processed by \MF{} without errors).
+The automatical correction is switched {\em on} and {\em off}
+by the commands:
+\begin{description}
+\item[\quad{\tt\bs{}MFFcheck}] --- the conditions described above
+are checked and the variable values are corrected if necessary;
+\item[\quad{\tt\bs{}MFFnocheck}] --- the automatical checking
+and correction of the font parameters is switched off although
+the condition that some critical parameters
+are not negative, is still checked and corrected, if necessary.
+\end{description}
+
+\section{Font classes\label{CLASS}}
+
+The NFSS/\LaTeX$2_{\varepsilon}$ classifies \TeX{} font
+families in a way which is different from the logical structure
+of {\tt .mf} files for {\sl Computer Modern} typefaces.
+That is, the {\em italic} and {\sc small caps}
+are at the same family {\cmcmr roman} together with
+{\cmcmbx bold} and {\cmcmsl slanted} fonts, although they are produced
+by different driver files. Similarly, {\cmcmr roman},
+{\cmcmtt typewriter}, {\cmcmss sans serif}, {\cmdunh dunhill},
+{\cmquote quotation} and {\cmfunny funny} fonts are considered
+as different font families
+although they are produced by the same driver file {\tt roman.mf}
+(but with different font parameters).
+
+As soon as we deal with {\sc mff.sty} there is no sharp boundary
+between {\cmcmr roman}, {\cmcmbx bold}, {\cmcmsl slanted},
+{\cmcmtt typewriter}, {\cmcmss sans serif}, {\cmfunny funny} and
+{\cmdunh dunhill} fonts --- each font is smoothly
+converted to another one, while {\em italic} and {\sc small caps}
+fonts are quite different --- they use different driver files.
+The macros {\sc mff.sty} assign different {\em classes} to these fonts
+to distinguish such difference from {\em font families}
+used in NFSS. The following font classes can be specified now:
+\begin{description}
+\item[\quad CMR] --- Computer Modern Roman;
+\item[\quad CMTI] --- Computer Modern Text Italic;
+\item[\quad CMCSC] --- Computer Modern Small Caps;
+\item[\quad DCR] --- European Computer Modern Roman;
+\item[\quad DCTI] --- European Computer Modern Text Italic;
+\item[\quad DCCSC] --- European Computer Modern Small Caps;
+\item[\quad CMRZ] --- {\sl CMZ} Computer Modern Roman/Cyrillic
+ created by Nana Glonti and Alexander Samarin;
+\item[\quad CMRIZ] --- {\sl CMZ} Computer Modern Text Italic/Cyrillic;
+\item[\quad CMCCSC] --- {\sl CMZ} Computer Modern Small Caps/Cyrillic;
+\item[\quad LHR] --- {\sl LH} Computer Modern Roman/Cyrillic
+ created by Olga Lapko and Alexey Khodulev;
+\item[\quad LHTI] --- {\sl LH} Computer Modern Text Italic/Cyrillic;
+\item[\quad LHCSC] --- {\sl LH} Computer Modern Small Caps/Cyrillic.
+\item[\quad LLR] --- {\sl LL} Computer Modern Roman/Cyrillic
+ created by Olga Lapko and Alexey Khodulev
+ (cyrillic part only);
+\item[\quad LLTI] --- {\sl LL} Computer Modern Text Italic/Cyrillic;
+\item[\quad LLCSC] --- {\sl LL} Computer Modern Small Caps/Cyrillic.
+\end{description}
+The font class is specified by the command
+\begin{itemize}
+\item[]{\tt \bs{}MFFclass\{{\em class}\}}
+\end{itemize}
+For example the command {\tt \bs{}MFFclass\{CMR\}}
+activates {\sl Computer Modern Roman} fonts
+(that is, the font header file will use the driver file
+{\tt roman.mf}).
+
+The set of font classes
+can be extended easily as soon as there is a font based
+on the same set of parameters as {\sl Computer Modern} fonts.
+The only thing to do is to specify the macro which writes the
+{\tt font\_identifier} value and the operator {\tt generate}
+with corresponding name of the driver file (see {\sc mff.sty}
+for the examples).
+
+\section{Special Effects\label{TRICKS}}
+
+To make more fun some special effects described in \cite{ABC,Outline}
+can be included in your font. If you specify some {\em font trick}
+declaration, the special portion of \MF{} code is inserted in the
+header file which modifies the characters generated by
+original \MF{} subroutines.
+The {\em font trick} declarations can specify
+\begin{itemize}
+\item pattern for the main body of the character;
+\item pattern for the rectangular box (background) of the character;
+\item pattern for the character shadow (if present);
+\item pattern for the underlining of the character (if present)
+ [this feature will be realized in future versions];
+\item additional transformations (reflections, rotations, etc.)
+ of the characters.
+\end{itemize}
+The command {\tt \bs{}MFFtrick} which specifies these attributes
+has the format:
+\begin{itemize}
+\item[] {\tt \bs{}MFFtrick\{{\em char-style}\}\{{\em box-style}\}%
+ \{{\em shadow-style}\}\{{\em underline}\}\{{\em transform}\}}
+\end{itemize}
+where the parameter {\em underline} is reserved for future
+improvements and means nothing in the current version.
+The following letters can be used to specify the
+{\em char-style}, {\em box-style} and {\em shadow-style}:
+\begin{eqnarray*}
+&&\hbox{{\tt z} --- no such element or solid white pattern;}\\
+&&\hbox{{\tt b} --- solid black pattern;}\\
+&&\hbox{{\tt h} --- horizontal stripes;}\\
+&&\hbox{{\tt v} --- vertical stripes;}\\
+&&\hbox{{\tt r} --- slanted stripes {\tt /};}\\
+&&\hbox{{\tt l} --- slanted stripes {\tt \bs};}\\
+&&\hbox{{\tt g} --- rectangular grid (`{\tt h}'$+$`{\tt v}');}\\
+&&\hbox{{\tt s} --- slanted grid (`{\tt r}'$+$`{\tt l}');}\\
+&&\hbox{{\tt d} --- dotted grid.}
+\end{eqnarray*}
+The capital letters {\tt Z}, {\tt B}, {\tt H}, {\tt V}, {\tt R},
+{\tt L}, {\tt G}, {\tt S}, {\tt D}
+mean that the outline of the element contour
+is added to the filling pattern.
+The specifications {\tt b} and {\tt B}
+are equivalent since the outlined contour is undistinguishable
+over the solid black pattern.
+For example, the outlined main character
+with a white body, white box background and
+outlined shadow filled with dotted grid is specified by the command
+{\tt \bs{}MFFtrick\{Z\}\{z\}\{D\}\{\}}.
+
+The parameter {\em transform} specifies the transformation
+of the character\footnote{Several transformations can be used
+--- in this case the individual letters are separated by commas
+like in {\tt\{rr,sx,ro\}}.}:
+\begin{eqnarray*}
+&&\hbox{{\tt rr} --- rotation $-90^{\circ}$;}\\
+&&\hbox{{\tt rl} --- rotation $+90^{\circ}$;}\\
+&&\hbox{{\tt ro} --- rotation $180^{\circ}$;}\\
+&&\hbox{{\tt sx} --- symmetry $x \longrightarrow -x$;}\\
+&&\hbox{{\tt sy} --- symmetry $y \longrightarrow -y$;}\\
+&&\hbox{{\tt sz} --- symmetry $(x,y) \longrightarrow (y,x)$,}\\
+&&\hbox{{\tt st} --- symmetry $(x,y) \longrightarrow (-y,-x)$.}
+\end{eqnarray*}
+The font trick effects specified by the command {\tt\bs{}MFFtrick}
+are used immediately by the subsequent commands {\tt\bs{}MFFgener}.
+The following commands switch {\em on} and {\em of}
+the font trick effects provided that the font trick
+parameters are already established:
+\begin{itemize}
+\item[] {\tt \bs{}MFFfonttricks} --- activates
+ the font trick declarations;
+\item[] {\tt \bs{}MFFnotricks} --- deactivates
+ the font trick declarations.
+\end{itemize}
+The following commands can be used to specify the individual
+font trick elements (these declarations are used by the subsequent
+commands {\tt\bs{}MFFgener} only after the explicit
+command {\tt\bs{}MFFfonttricks} or if they are specified after the
+command {\tt\bs{}MFFtrick}):
+\begin{description}
+\item[\quad{\tt\bs{}trickMFFchar\{{\em char-style}\}}] --- the pattern style
+ for filling of the body of the character (``{\tt z}'' means white body);
+\item[\quad{\tt\bs{}trickMFFbox\{{\em box-style}\}}] --- the pattern style
+ for filling of the background box (``{\tt z}'' means empty background);
+\item[\quad{\tt\bs{}trickMFFshadow\{{\em shadow-style}\}}] --- the pattern style
+ for filling of the character shadow (``{\tt z}'' means no shadow);
+\item[\quad{\tt\bs{}trickMFFtransform\{{\em transform}\}}]
+ --- the additional transformation of the character.
+\end{description}
+Some typical font trick effects can be specified using the
+command
+\begin{itemize}
+\item[] {\tt\bs{}MFFstdtrick\{{\em trick-name}\}}
+\end{itemize}
+where the following {\em trick-name} identifiers can be used:
+\begin{description}
+\item[\quad{\tt standard}] --- no font tricks
+(={\tt\bs{}MFFtrick\{b\}\{z\}\{z\}\{\}});
+\item[\quad{\tt reversed}] --- {\em reversed} characters:
+white letters over black rectangle;
+\item[\quad{\tt dotted}] --- characters with a body filled with dots;
+\item[\quad{\tt striped}] --- characters with a body filled with
+rectangular grid;
+\item[\quad{\tt stripedH}] --- characters with a body filled with
+horizontal stripes;
+\item[\quad{\tt stripedV}] --- characters with a body filled with
+vertical stripes;
+\item[\quad{\tt slanted}] --- characters with a body filled with
+slanted rectangular grid;
+\item[\quad{\tt slantedL}] --- characters with a body filled with
+slanted stripes ``{\tt\bs}'';
+\item[\quad{\tt slantedR}] --- characters with a body filled with
+slanted stripes ``{\tt/}'';
+\item[\quad{\tt outlined}] --- outlined white characters;
+\item[\quad{\tt shadowed}] --- outlined white characters
+with solid shadows;
+\item[\quad{\tt sHadowed}] --- outlined white characters
+with outlined white shadows;
+\item[\quad{\tt shadowonly}] ---
+only the solid shadow of the character is still present.
+\end{description}
+The parameters of the {\em font trick} effects are controlled
+by the commands:
+\begin{itemize}
+
+\item outline contour parameters:
+\begin{description}
+\item[\quad{\tt \bs{}stepMFFoutline\{{\em value}\}}] ---
+the thickness of the outline contour.
+\end{description}
+
+\item shadow parameters:
+\begin{description}
+\item[\quad{\tt \bs{}stepMFFshadow\{{\em value}\}}] ---
+the step of the shadow shift;
+\item[\quad{\tt \bs{}cornerMFFshadow\{{\em char}\}}] ---
+the corner of the shadow:
+\begin{itemize}
+\item[]{\tt A} --- right/down corner;\\
+ {\tt B} --- right/upper corner;\\
+ {\tt C} --- left/upper corner;\\
+ {\tt D} --- left/down corner.
+\end{itemize}
+\end{description}
+
+\item the parameters for the patterns which are used
+ for the main body of the character:
+\begin{description}
+\item[\quad{\tt \bs{}stepMFFcharpattern\{{\em value}\}}] ---
+the step between lines and dots;
+\item[\quad{\tt \bs{}penMFFcharpattern\{{\em value}\}}] ---
+the thickness of lines and dots.
+\end{description}
+
+\item the parameters for the patterns which are used
+ for the background of the character:
+\begin{description}
+\item[\quad{\tt \bs{}stepMFFboxpattern\{{\em value}\}}] ---
+the step between lines and dots;
+\item[\quad{\tt \bs{}penMFFboxpattern\{{\em value}\}}] ---
+the thickness of lines and dots.
+\end{description}
+
+\item the parameters for the patterns which are used
+ for the character shadow:
+\begin{description}
+\item[\quad{\tt \bs{}stepMFFshadowpattern\{{\em value}\}}] ---
+the step between lines and dots;
+\item[\quad{\tt \bs{}penMFFshadowpattern\{{\em value}\}}] ---
+the thickness of lines and dots.
+\end{description}
+\end{itemize}
+The values of the thickness/step size for the
+striped, slanted and dotted patterns
+are specified using the non-dimensional {\em value}
+which is the factor applied to the (dimensional)
+font parameter {\tt hair\#}. For example,
+the command {\tt\bs{}stepMFFboxpattern\{0.5\}}
+specifies that the step size between horizontal,
+vertical or slanted lines used to
+construct the pattern for the background
+is equal to $0.5\times${\tt hair\#}.
+
+\section{Default state}
+
+The default values for {\em all} parameters used by {\sc mff.sty}
+are assigned by the command {\tt \bs{}MFFdefault} which
+is defined as
+\begin{itemize}
+\item[]\small
+\begin{verbatim}
+\def\MFFdefault{
+%
+ \MFFcontrast[s]
+ \MFFscaleBoldLines{1} \MFFscaleThinLines{1}
+ \MFFscaleWidth{1} \MFFscaleHeight{1}
+ \MFFscaleAscend{1} \MFFscaleDescend{1} \MFFscaleMath{1}
+ \MFFscaleJoinLines{1} \MFFscaleNotchCut{1}
+ \MFFscaleDotSize{1} \MFFscaleSerifDish{1}
+%
+ \MFFslant{0}
+ \MFFflagLigs{s} \MFFflagMonospace{n}
+ \MFFflagSquareDots{n} \MFFflagHefty{n}
+ \MFFflagSerifs{y} \MFFflagVariantG{n}
+ \MFFflagLowAsterisk{n} \MFFflagMathSpacing{n}
+%
+ \stepMFFoutline{0.075}
+ \stepMFFshadow{0.5}
+ \cornerMFFshadow{A}
+ \stepMFFbackpattern{0.375} \penMFFbackpattern{0.075}
+ \stepMFFcharpattern{0.375} \penMFFcharpattern{0.075}
+ \stepMFFshadowpattern{0.375} \penMFFshadowpattern{0.075}
+%
+ \MFFstdtrick{standard}
+ \MFFnotricks
+%
+ \MFFsauter
+ \MFFclass{CMR}
+ \MFFmixture{0}{0}{0}{0}{0}{0}{0}
+ \MFFnocheck
+}
+\end{verbatim}
+\end{itemize}
+It can be called at any moment to initialize
+from the very beginning the {\sc mff.sty} parameters.
+
+
+\section{Configuration of {\sf em\TeX} programs\label{CONFIG}}
+
+The way you should setup \TeX\ and \MF\ to work with {\sc mff.sty}
+correctly depends on your local system.
+The most difficult (and system-dependent) aspect is how to teach
+\MF{} to generate the {\tt *.pk}-files according to
+your printer specification, and how to teach \TeX\ and
+{\sl DVI}-drivers to find \MF's output files.
+For {\sl MS DOS} and {\sl OS/2} and for {\sf em\TeX}
+package this problem can be solved using the utility {\sl MFJob}
+as it is described below.
+
+The configuration used here assumes that the {\tt .mf} files
+and {\tt .tfm} files are placed at the working directory, and
+the {\tt .pk} files are placed in its subdirectories with the names
+corresponding to font resolution. The {\tt .mf} files created
+by {\sc mff.sty} are placed at the current directory automatically.
+The {\tt .tfm} and {\tt .pk} files are placed at the proper directories
+by the utility {\sl MFJob} if it uses the following script file:
+\begin{verbatim}
+%
+% file mff.mfj / script for MFPiC and MFF.STY
+%
+input [modes];
+def s=[s0];
+{
+base=plain;
+fonts=f; mags=s; m;
+output=pk[.\@Rrdpi\@f] tfm[@f] log[@f];
+}
+\end{verbatim}
+The script file named {\tt mff.mfj} should be placed at the directory
+{\tt\bs{}EMTEX\bs{}MFJOB\bs}.
+To process the {\tt .mf} file by \MF{} and to generate the output font
+for the desired printer with desired magnification it is necessary
+to use the command
+\begin{itemize}
+\item[]\tt mfjob /a mff.mfj m=$<${\em printer-mode}$>$
+ s=$<${\em magn}$>$
+ f=$<${\em fontname}$>$
+\end{itemize}
+(option {\tt /a} forces the program to generate the output font even if
+it was already generated). The program {\sl MFJob} put {\tt .tfm}
+and {.log} files at the current directory, and {\tt .pk} file at
+the subdirectory with the name which mirrors the font resolution.
+Example:
+\begin{itemize}
+\item[]\tt mfjob /a mff.mfj m=lj s=1 f=zcmr10
+\end{itemize}
+
+To teach {\sf em\TeX} to look for {\tt .tfm} files at the current
+directory as well as at the system directories, it is necessary
+to specify the DOS environment variable {\tt TEXTFM} as
+\begin{itemize}
+\item[]\tt SET TEXTFM=\%EMTEXDIR\%\bs{}TFM!;.\bs
+\end{itemize}
+instead of its default value {\tt \%EMTEXDIR\%\bs{}TFM!}
+(it is assumed that {\tt EMTEXDIR}
+is specified already like {\tt SET EMTEXDIR=C:\bs{}EMTEX}).
+
+To teach {\sl DVI}-drivers to look for {\tt .pk}
+files at the subdirectories of the current directory,
+it is necessary to edit the printer configuration files
+placed by {\sf em\TeX} at {\tt\bs{}EMTEX\bs{}DATA\bs}.
+Suppose you use the {\sl HP Laser Jet} printer (the modifications
+of the configuration files for other printers are performed similarly).
+The original {\sl Laser Jet} configuration file {\tt lj.cnf}
+looks like
+\begin{verbatim}
+% lj.cnf (300x300 DPI using LJ fonts)
++dvi-file={,$DVIDRVINPUT:}@i
++font-libraries=$DVIDRVFONTS:lj_{base,more}
++font-files=$DVIDRVFONTS:pixel.lj\@Rrdpi\@f{.pk,.pxl}
++graph-files={,$DVIDRVGRAPH:}{@Rrdpi\,}@PBf{@Ef,.msp,.pcx,.bmp}
++resolution=300
++font-resolution=300
++font-scaling=1
++metafont-mode=laserjet
++max-drift=2
+\end{verbatim}
+The new configuration file (with the file name {\em different}
+from {\tt lj.cnf}) should contain the parameter {\tt +font-files}
+in a form
+\begin{verbatim}
+....
++font-files={$DVIDRVFONTS:pixel.lj\,}@Rrdpi\@f{.pk,.pxl}
+....
+\end{verbatim}
+Now it is necessary to substitute the references on this
+configuration file in the batch files {\tt v.bat}, {\tt vs.bat}
+and {\tt prtlj.bat} from {\tt\bs{}EMTEX\bs{}BIN\bs{}},
+and you are ready to work with {\sc mff.sty}.
+Just the same re-configuration of {\sf em\TeX} will enable
+to work correctly with the {\sl MF\PiC} macro package.
+
+\section{History}
+\begin{itemize}
+\item Ver. 0.?? --- the first attempt which helped
+ to learn more about \TeX{} commands and
+ the internal structure of
+ {\sl Computer Modern} fonts.
+\item Ver. 1.0 --- the arithmetical macros finally works.
+ The ``empirical'' approximation scheme based
+ on linear splines and ``corrected-by-hand''
+ CM parameters is implemented.
+ The fonts generated by command
+ {\tt\bs{}MFFmixture} (at that moment it was called
+ {\tt\bs{}MFFcompose}) are tested experimentally.
+\item Ver. 1.1 --- {\sc sauter} approximation scheme is used instead
+ of the ``empirical'' approximation scheme.
+ Commands for the logical flags are added.
+ Font classes other than CMR are included.
+ Generation of {\sc small caps} and
+ {\it italic} fonts is added.
+ As a result new commands are added,
+ some commands are renamed.
+\item Ver. 1.2 --- the font tricks described in \cite{ABC} and \cite{Outline}
+ are added.
+ Font classes corresponding to the {\sc DC fonts}
+ driver files are included.
+\item Ver. 1.21a --- the approximation based on {\sc DC fonts} data is added.
+ Information printed at the header of {\tt .mf} file
+ becomes more detailed now.
+ The {\sc mff.sty} commands are revised
+ and the names of many commands are changed.
+ This version was distributed during the {\sl TUG-96}
+ Conference.
+\item Ver. 1.21b --- the section ``{\em Last minute corrections}''
+ is added to this manual. The obligatory prefix
+ {\em xx} is added now in front of the file name
+ containing the font header. The list of parameters
+ for {\tt\bs{}MFFtrick} is changed so that in future
+ the {\em underlining} effect can be added.
+ This version is put on CTAN.
+\end{itemize}
+
+\section{Last minute corrections\label{MORE}}
+
+The following data is the result of discussioins
+held during the {\sl TUG-96} Conference.
+Some corrections suggested by the participants
+are implemented just now, most of them will be
+implemented in future versions:
+\begin{itemize}
+\item {\em Add special (and obligatory) prefix in front of
+ the file name so, that the fonts created
+ by {\sc mff.sty} cannot be confused with the fonts
+ created by the professional font designers.}
+
+ Corrected. Now all the fonts created by {\sc mff.sty} are
+ started with {\em xx}. This feature is added to lock the
+ attempts to create user-defined fonts under the names of
+ the Computer Modern, etc., fonts. The prefix {\em xx}
+ used by default is defined as
+ \begin{itemize}
+ \item[] \tt\bs{}def\bs{}MFFprefix\{xx\}
+ \end{itemize}
+ and can be redefined by the User, if necessary.
+
+\item {\em Include {\sl Concrete Fonts} into the set of fonts
+ used in the arithmetical mixture of Computer Modern
+ families.}
+
+ It is not done, and with great probability it will not be done
+ at all. The most essential effects associated with
+ {\em Concrete Font Family} can be produced in {\sc mff.sty}
+ using the scaling of the thickness for
+ the thin strokes (see section~\ref{WEIGHT}).
+
+\item {\em Extend {\sc mff.sty} to generate the mathematical fonts as well.}
+
+ This is a very interesting and important suggestion,
+ but it requires a lot of time since it is also necessary
+ to describe all these fonts as the mathematical ones
+ inside \TeX. Will be done somedays in future.
+
+\item {\em Extend {\sc mff.sty} to work with {\sl Pandora Font Family}
+ as well.}
+
+ Interesting and promising. It may be done if there
+ is enough time to look for for {\sl Pandora Font Family}
+ in more details.
+
+\item {\em Generate the partial fonts, i.e., generate the font where
+ some (or nearly all) characters from the original MetaFont source
+ are excluded.}
+
+ Interesting and not too difficult using the re-definition
+ of the procedure {\tt beginchar} by the commands
+ inside the font header created by {\sc mff.sty}.
+ Some problems may arize due to {\sl Metafont}
+ memory problems. Will be done in future.
+
+\item {\em Include some more {\sl font trick} effect, namely the
+ underlining of the characters so that the underlining stroke
+ has some gaps near the descender of the character.}
+
+ Interesting and not too difficult. Corresponding feature
+ is reserved now in the list of {\tt\bs{}MFFtrick} parameters
+ (see section~\ref{TRICKS}).
+ Will be realized in the nearest future.
+
+\end{itemize}
+
+
+\section*{Acknowledgements}
+
+This research was partially supported by a grant
+from the Dutch Organization for Scientific Research
+(NWO grant No 07-30-007).
+
+
+\begin{thebibliography}{00}
+\bibitem{CM} Donald E.\ Knuth. Computer Modern Typefaces
+(\CandT{} series). \AW, 1986.
+\bibitem{SAUTER} John Sauter. {\em Building Computer Modern fonts}.
+\TUB, {\bf 7} (1986), pp. 151--152.
+\bibitem{DC} J\"org Knappen. {\em The release 1.2 of the Cork
+encoded DC fonts and the text companion symbol fonts}.
+ Proceedings of the 9th Euro\TeX{} Conference, Arnhem, 1995.
+\bibitem{LL} A.Khodulev, I.Mahovaya.
+{\em On \TeX{} experience in MIR Publishers}.
+ Proceedings of the 7th Euro\TeX{} Conference, Prague, 1992.
+\bibitem{LH} O.Lapko.
+ {\em MAKEFONT as a part of CurTUG--Em\TeX{} package}.
+ Proceedings of the 8th Euro\TeX{} Conference, Gda\'nsk, 1994.
+\bibitem{ABC} Georgia K.M. Tobin.
+ {\em The ABS's of Special Effects}.
+ TUGBoat {\bf 9} (1988) No 1 pp. 15--18.
+\bibitem{Outline} Doug Henderson.
+ {\em Outline Fonts with Metafont}.
+ TUGBoat {\bf 10} (1989) No 1 pp. 36--38.
+\end{thebibliography}
+
+
+\end{document}