summaryrefslogtreecommitdiff
path: root/fonts/utilities/fontinst/source/filtfam.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'fonts/utilities/fontinst/source/filtfam.dtx')
-rw-r--r--fonts/utilities/fontinst/source/filtfam.dtx1187
1 files changed, 1187 insertions, 0 deletions
diff --git a/fonts/utilities/fontinst/source/filtfam.dtx b/fonts/utilities/fontinst/source/filtfam.dtx
new file mode 100644
index 0000000000..1cfcf6c1f0
--- /dev/null
+++ b/fonts/utilities/fontinst/source/filtfam.dtx
@@ -0,0 +1,1187 @@
+% \CheckSum{1041}
+% \iffalse meta-comment
+%
+% Copyright 1993, 1994, 1995, 1996 Alan Jeffrey,
+% hacked and maintained 1997, 1998 Sebastian Rahtz,
+% copyright 1998, 1999 the fontinst maintenance team and any individual
+% authors listed elsewhere in this file. All rights reserved.
+%
+% This file is part of the fontinst system version 1.9.
+% -----------------------------------------------------
+%
+% It may be distributed under the terms of the LaTeX Project Public
+% License, as described in lppl.txt in the base LaTeX distribution.
+% Either version 1.0 or, at your option, any later version.
+%
+%%% From file: filtfam.dtx
+%
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{fisource}
+\GetFileInfo{filtfam.dtx}
+\title{The \package{fontinst} utility}
+\author{Alan Jeffrey, Sebastian Rahtz, Ulrik Vieth}
+\begin{document}
+\maketitle
+\DocInput{filtfam.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \section{Installing Latin families}
+%
+% \changes{1.800}{1998/06/22}{\cs{textcompfamily} integrated into
+% \cs{latinfamily}. (UV)}
+%
+% \begin{macro}{\latinfamily}
+% The macro:
+% \begin{quote}
+% |\latinfamily|\marg{family}\marg{commands}
+% \end{quote}
+% installs a Latin font family.
+%
+% \StopEventually{}
+%
+% \begin{macrocode}
+%<*pkg>
+\def\latinfamily#1#2{{
+ \edef\a_macro{#1}
+ \expandafter\parse_family\a_macro
+ \empty_command\empty_command\end_parse_family
+ \installfonts
+ \if_file_exists{\raw_encoding.mtx}\then
+ \installfamily{\raw_encoding}{\latex_family}{#2}
+ \fi
+ \installfamily{OT1}{\latex_family}{#2}
+ \installfamily{T1}{\latex_family}{#2}
+%<*textcomp>
+ \installfamily{TS1}{\latex_family}{#2}
+%</textcomp>
+ \latin_weights
+ \endinstallfonts
+}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\parse_family}
+% \begin{macro}{\font_family}
+% \begin{macro}{\font_variant}
+% \begin{macro}{\raw_variant}
+% \begin{macro}{\latex_variant}
+% |\parse_family FAMILY\end_parse_family|
+%
+% Intializes |\latex_family| to |FAMILY|, |\font_family| to first
+% three characters of |FAMILY|, |\font_variant| and |\raw_variant|
+% to fourth and fifth character (if present).
+%
+% SPQR 02/95: If the fourth parameter is |x| or |9|, then its an expert
+% indication, not a variant. So initialy set |\raw_variant| to |#4|,
+% but unset it if the expert test succeeds. When |#4| is used for a
+% real variant, it passes through.
+%
+% SPQR 05/95: If it \emph{is} an expert font, then the variantness
+% is expressed by the encoding, not a variant letter, so unset
+% |\font_variant|.
+%
+% UV 06/98: Added |\if_oldstyle_| code from Alan's v~1.511 beta.
+% If the fourth parameter is |9|, treat it as if |j| was given.
+%
+% Note that instead of using |\setcommand\digit|, we now use separate
+% encoding files for |T1j.etx|, etc.
+%
+% \begin{macrocode}
+\def\parse_family #1#2#3#4#5\end_parse_family{
+ \gdef\font_family{#1#2#3}
+ \gdef\font_variant{#4#5}
+ \gdef\raw_variant{#4#5}
+ \gdef\latex_family{#1#2#3#4#5}
+ \_expert_false
+ \_oldstyle_false
+ \ifx#4x
+ \_expert_true
+ \gdef\raw_variant{#5}
+ \gdef\font_variant{#5}
+ %\setcommand\digit##1{##1}
+ \else\ifx#4j
+ \_expert_true
+ \_oldstyle_true
+ \gdef\raw_variant{#5}
+ \gdef\font_variant{#5}
+ %\setcommand\digit##1{##1oldstyle}
+ \else\ifx#49
+ \gdef\latex_family{#1#2#3j#5}
+ \_expert_true
+ \_oldstyle_true
+ \gdef\raw_variant{#5}
+ \gdef\font_variant{#5}
+ %\setcommand\digit##1{##1oldstyle}
+ \else
+ \_expert_false
+ \_oldstyle_false
+ %\setcommand\digit##1{##1}
+ \fi\fi\fi
+%<*debug>
+ \if_oldstyle_
+ \immediate\write16{INFO>~parse~family~<#1#2#3><#5>~(oldstyle)}
+ \else\if_expert_
+ \immediate\write16{INFO>~parse~family~<#1#2#3><#5>~(expert)}
+ \else
+ \immediate\write16{INFO>~parse~family~<#1#2#3><#4#5>}
+ \fi\fi
+%</debug>
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\if_expert_}
+% \begin{macro}{\if_oldstyle_}
+% \begin{macrocode}
+\newif\if_expert_
+\newif\if_oldstyle_
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Processing a list of weights, widths and shapes}
+%
+% \begin{macro}{\latin_weight}
+% \begin{macro}{\font_weight}
+% \begin{macro}{\latex_weight}
+% |\latin_weight{FONTWEIGHT}{LATEXWEIGHT}|
+%
+% \begin{macrocode}
+\def\latin_weight#1#2{
+ \gdef\font_weight{#1}%
+ \gdef\latex_weight{#2}%
+ \latin_widths
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\latin_width}
+% \begin{macro}{\font_width}
+% \begin{macro}{\latex_width}
+% |\latin_width{FONTWIDTH}{LATEXWIDTH}|
+%
+% \begin{macrocode}
+\def\latin_width#1#2{
+ \gdef\font_width{#1}
+ \gdef\latex_width{#2}
+ \latin_shapes
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\latin_shape}
+% \begin{macro}{\font_shape}
+% \begin{macro}{\raw_shape}
+% \begin{macro}{\encoding_shape}
+% \begin{macro}{\latex_shape}
+% \begin{macro}{\encoding_switches}
+% |\latin_shape{FONTSHAPE}{RAWSHAPE}{ENCODINGSHAPE}{LATEXSHAPE}{SWITCHES}|
+%
+% Calls |\fake_width_WIDTH| and |\fake_shape_SHAPE| to generate an
+% |8r|-reencoded |.mtx| file. If successful, calls |\latin_encodings|.
+%
+% UV 06/98: Added a fifth argument |SWITCHES|, which may be used
+% to set |\if_textcomp_| before it is evaluated in |\latin_encodings|.
+%
+% \begin{macrocode}
+\def\latin_shape#1#2#3#4#5{
+ \gdef\font_shape{#1}
+ \gdef\raw_shape{#2}
+ \gdef\encoding_shape{#3}
+ \if_oldstyle_
+ \gdef\encoding_shape{#3\oldstyle_shape}
+ \fi
+ \gdef\latex_shape{#4}
+ \gdef\encoding_switches{#5}
+%<*debug>
+ \immediate\write16{
+ INFO>~to~make~LaTeX~font~shape~<\latex_family,
+ \latex_weight,\latex_shape,\latex_width>~seek~
+ \font_family\font_weight\raw_shape
+ \raw_variant\raw_encoding\font_width.mtx}
+%</debug>
+ \csname fake_width_\font_width\endcsname
+ \csname fake_shape_\raw_shape\endcsname
+ \if_file_exists{
+ \font_family\font_weight\raw_shape
+ \raw_variant\raw_encoding\font_width.mtx
+ }\then
+ \latin_encodings
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Faking font shapes}
+%
+% (CK) changed font faking code; based on SPQR's code (still in this
+% file). I am not sure that know what I am doing here; let's hope
+% I won't be caught. Also changed: Order of |\font_width| and
+% |\font_encoding| in MANY places. Also added tests which prevent
+% multiple calls to the same font faking routine. (Seems to be
+% necessary in some cases and can't hurt.) --- (ASAJ) I think CK
+% knows more about what he's doing than he's letting on.
+%
+% \begin{macro}{\fake_shape_}
+% Check if an |8a|-encoded |.afm| file exists for current combination
+% of font attributes, and, if so, call |\fake_shape_raw_encoding|.
+% For expert fonts, also check if an |8x|-encoded |.afm| file exists,
+% and call |\fake_shape_expert_encoding|, if approporiate.
+%
+% UV, 06/98: Cut down lengthy |\fake_shape_| routine into several
+% subroutines |\fake_shape_raw_encoding| and optionally
+% |\fake_shape_expert_encoding| and |\fake_shape_oldstyle_encoding|.
+%
+% UV, 06/98: Added experimental code to install OsF or SC\&OsF fonts.
+%
+% \begin{macrocode}
+\def\fake_shape_{
+ \if_file_exists{
+ \font_family\font_weight\raw_shape\raw_variant
+ \adobe_encoding\font_width.afm
+ }\then
+ \fake_shape_raw_encoding
+ \fi
+ \if_expert_
+ \if_file_exists{
+ \font_family\font_weight\raw_shape\raw_variant
+ \expert_encoding\font_width.afm
+ }\then
+ \fake_shape_expert_encoding
+ \fi
+ \fi
+%<*oldstyle>
+ \if_oldstyle_
+ \gdef\oldstyle_variant{\oldstyle_shape}
+ \if_file_exists{
+ \font_family\font_weight\raw_shape\oldstyle_variant
+ \adobe_encoding\font_width.afm
+ }\then
+ \fake_shape_oldstyle_encoding
+ \else
+ \gdef\oldstyle_variant{\caps_shape}
+ \if_file_exists{
+ \font_family\font_weight\raw_shape\oldstyle_variant
+ \adobe_encoding\font_width.afm
+ }\then
+ \fake_shape_oldstyle_encoding
+ \fi
+ \fi
+ \fi
+%</oldstyle>
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fake_shape_raw_encoding}
+% Called from |\fake_shape_| if an |8a|-encoded |.afm| file was found.
+% Invokes
+% \begin{quote}
+% |\transformfont{<FONT>8r}|\\
+% | {\reencodefont{8r}{\fromafm{<FONT>8a}}}|
+% \end{quote}
+% to generate an |8r|-reencoded |.mtx| file (and a raw |.pl| file),
+% followed by
+% \begin{quote}
+% |\installrawfont{<FONT>8r}{<FONT>8r,8r}{8r}...|
+% \end{quote}
+% to install a ligfull |.pl| file.
+%
+% \begin{macrocode}
+\def\fake_shape_raw_encoding{
+ \if_file_exists{
+ \font_family\font_weight\raw_shape\raw_variant
+ \raw_encoding\font_width.mtx
+ }\then % no action required
+ \else
+%<*debug>
+ \immediate\write16{
+ INFO>~run~\string\transformfont\space\space
+ <\font_family\font_weight\raw_shape\raw_variant
+ \raw_encoding\font_width>~from~
+ <\font_family\font_weight\raw_shape\raw_variant
+ \adobe_encoding\font_width>
+ }
+%</debug>
+ \transformfont{
+ \font_family\font_weight\raw_shape\raw_variant
+ \raw_encoding\font_width
+ }{
+ \reencodefont{\raw_encoding}{
+ \fromafm{
+ \font_family\font_weight\raw_shape\raw_variant
+ \adobe_encoding\font_width
+ }
+ }
+ }
+ \if_file_exists{ \raw_encoding.mtx }\then
+%<*debug>
+ \immediate\write16{
+ INFO>~run~\string\installrawfont\space
+ <\font_family\font_weight\font_shape\raw_variant
+ \raw_encoding\font_width>
+ <\font_family\font_weight\raw_shape\raw_variant
+ \raw_encoding\font_width,
+ \raw_encoding>
+ <\raw_encoding>
+ <\raw_encoding>
+ <\latex_family>
+ <\latex_weight\latex_width>
+ <\latex_shape>}
+%</debug>
+ \installrawfont{
+ \font_family\font_weight\raw_shape\raw_variant
+ \raw_encoding\font_width
+ }{ \font_family\font_weight\raw_shape\raw_variant
+ \raw_encoding\font_width,
+ \raw_encoding
+ }{ \raw_encoding
+ }{ \raw_encoding
+ }{ \latex_family
+ }{ \latex_weight\latex_width
+ }{ \latex_shape
+ }{}
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fake_shape_expert_encoding}
+% Called from |\fake_shape_| if an |8x|-encoded |.afm| file was found.
+% Invokes
+% \begin{quote}
+% |\fromafm{<FONT>8x}|
+% \end{quote}
+% to generate an |8x|-encoded |.mtx| file (and a raw |.pl| file).
+%
+% \begin{macrocode}
+\def\fake_shape_expert_encoding{
+ \if_file_exists{
+ \font_family\font_weight\raw_shape\raw_variant
+ \expert_encoding\font_width.mtx
+ }\then % no action required
+ \else
+ \fromafm{
+ \font_family\font_weight\raw_shape\raw_variant
+ \expert_encoding\font_width
+ }
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fake_shape_oldstyle_encoding}
+% Called from |\fake_shape_| if an OsF or SC\&OsF variant of an
+% |8a|-encoded |.afm| file was found. Invokes
+% \begin{quote}
+% |\transformfont{<FONT>j8r}|\\
+% | {\reencodefont{8r}{\fromafm{<FONT>j8a}}}|
+% \end{quote}
+% to generate an |8r|-reencoded |.mtx| file (and a raw |.pl| file).
+%
+% \begin{macrocode}
+%<*oldstyle>
+\def\fake_shape_oldstyle_encoding{
+ \if_file_exists{
+ \font_family\font_weight\raw_shape\oldstyle_variant
+ \adobe_encoding\font_width.mtx
+ }\then % no action required
+ \else
+%<*debug>
+ \immediate\write16{
+ INFO>~run~\string\transformfont\space\space
+ <\font_family\font_weight\raw_shape\oldstyle_variant
+ \raw_encoding\font_width>~from~
+ <\font_family\font_weight\raw_shape\oldstyle_variant
+ \adobe_encoding\font_width>
+ }
+%</debug>
+ \transformfont{
+ \font_family\font_weight\raw_shape\oldstyle_variant
+ \raw_encoding\font_width
+ }{
+ \reencodefont{\raw_encoding}{
+ \fromafm{
+ \font_family\font_weight\raw_shape\oldstyle_variant
+ \adobe_encoding\font_width
+ }
+ }
+ }
+ \fi
+}
+%</oldstyle>
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\fake_shape_c}
+% Check if an |8a|-encoded |.afm| file exists for the small caps shape.
+% If so, call |\fake_shape_| to generate an |8r|-reencoded MTX
+% file and to install a ligfull |.pl| file. If not, reset |\raw_shape|
+% to the default shape and |\encoding_shape| to small caps before
+% calling |\fake_shape_| to install a faked small caps font.
+%
+% \begin{macrocode}
+\def\fake_shape_c{
+ \if_file_exists{
+ \font_family\font_weight\raw_shape\raw_variant
+ \adobe_encoding\font_width.afm
+ }\then
+ \fake_shape_
+ \else
+ % If real smallcaps font doesn't exist, fake it from the roman.
+ \gdef\raw_shape{}
+ \if_oldstyle_
+ \gdef\encoding_shape{cj}
+ \else
+ \gdef\encoding_shape{c}
+ \fi
+ \fake_shape_
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\fake_shape_o}
+% Check if an |8a|-encoded |.afm| file exists for the oblique shape.
+% If so, call |\fake_shape_| to generate an |8r|-reencoded MTX
+% file and to install a ligfull |.pl| file. If not, call macros
+% to fake a oblique fonts.
+%
+% \begin{macrocode}
+\def\fake_shape_o{
+ \if_file_exists{
+ \font_family\font_weight\raw_shape\raw_variant
+ \adobe_encoding\font_width.afm
+ }\then
+ \fake_shape_
+ \else
+ \fake_shape_o_raw_encoding
+ \if_expert_
+ \fake_shape_o_expert_encoding
+ \fi
+%<*oldstyle>
+ \if_oldstyle_
+ \fake_shape_o_oldstyle_encoding
+ \fi
+%</oldstyle>
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fake_shape_o_raw_encoding}
+% Called from |\fake_shape_o| if the oblique shape needs to be faked.
+% Invokes
+% \begin{quote}
+% |\transformfont{<FONT>o8r}|\\
+% | {\slantfont{SLANT}{\frommtx{<FONT>8r}}}|
+% \end{quote}
+% to generate an |8r|-reencoded |.mtx| file (and a raw |.pl| file),
+% followed by
+% \begin{quote}
+% |\installrawfont{<FONT>o8r}{<FONT>o8r,8r}{8r}...|
+% \end{quote}
+% to install a ligfull |.pl| file.
+%
+% \begin{macrocode}
+\def\fake_shape_o_raw_encoding{
+ \if_file_exists{
+ \font_family\font_weight\raw_variant
+ \raw_encoding\font_width.mtx
+ }\then
+ \if_file_exists{
+ \font_family\font_weight\font_shape\raw_variant
+ \raw_encoding\font_width.mtx
+ }\then % no action required
+ \else
+%<*debug>
+ \immediate\write16{
+ INFO>~run~\string\transformfont\space\space
+ <\font_family\font_weight\font_shape\raw_variant
+ \raw_encoding\font_width>~from~
+ <\font_family\font_weight\raw_variant
+ \raw_encoding\font_width>~(faking~oblique)
+ }
+%</debug>
+ %%% WARNING: famtool.pl relies on this message format!!!
+ \immediate\write16{
+ Faking~oblique~font~
+ \font_family\font_weight\font_shape\raw_variant
+ \raw_encoding\font_width
+ \space from~
+ \font_family\font_weight\raw_variant
+ \raw_encoding\font_width
+ }
+ \transformfont{
+ \font_family\font_weight\font_shape\raw_variant
+ \raw_encoding\font_width
+ }{
+ \slantfont{\SlantAmount}{
+ \frommtx{
+ \font_family\font_weight\raw_variant
+ \raw_encoding\font_width
+ }
+ }
+ }
+ \if_file_exists{ \raw_encoding.mtx }\then
+%<*debug>
+ \immediate\write16{
+ INFO>~run~\string\installrawfont\space
+ <\font_family\font_weight\font_shape\raw_variant
+ \raw_encoding\font_width>
+ <\font_family\font_weight\font_shape\raw_variant
+ \raw_encoding\font_width,
+ \raw_encoding>
+ <\raw_encoding>
+ <\raw_encoding>
+ <\latex_family>
+ <\latex_weight\latex_width>
+ <\latex_shape>}
+%</debug>
+ \installrawfont{
+ \font_family\font_weight\font_shape\raw_variant
+ \raw_encoding\font_width
+ }{ \font_family\font_weight\font_shape\raw_variant
+ \raw_encoding\font_width,
+ \raw_encoding
+ }{ \raw_encoding
+ }{ \raw_encoding
+ }{ \latex_family
+ }{ \latex_weight\latex_width
+ }{ \latex_shape
+ }{}
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fake_shape_o_expert_encoding}
+% Called from |\fake_shape_o| if the oblique shape needs to be faked.
+% Invokes
+% \begin{quote}
+% |\transformfont{<FONT>o8x}|\\
+% | {\slantfont{SLANT}{\frommtx{<FONT>8x}}}|
+% \end{quote}
+% to generate an |8x|-reencoded |.mtx| file (and a raw |.pl| file).
+%
+% \begin{macrocode}
+\def\fake_shape_o_expert_encoding{
+ \if_file_exists{
+ \font_family\font_weight\raw_variant
+ \expert_encoding\font_width.mtx
+ }\then
+ \if_file_exists{
+ \font_family\font_weight\font_shape\raw_variant
+ \expert_encoding\font_width.mtx
+ }\then % no action required
+ \else
+%<*debug>
+ \immediate\write16{
+ INFO>~run~\string\transformfont\space\space
+ <\font_family\font_weight\font_shape\raw_variant
+ \expert_encoding\font_width>~from~
+ <\font_family\font_weight\raw_variant
+ \expert_encoding\font_width>~(faking~oblique)
+ }
+%</debug>
+ %%% WARNING: famtool.pl relies on this message format!!!
+ \immediate\write16{
+ Faking~oblique~font~
+ \font_family\font_weight\font_shape\raw_variant
+ \expert_encoding\font_width
+ \space from~
+ \font_family\font_weight\raw_variant
+ \expert_encoding\font_width
+ }
+ \transformfont{
+ \font_family\font_weight\font_shape\raw_variant
+ \expert_encoding\font_width
+ }{
+ \slantfont{\SlantAmount}{
+ \frommtx{
+ \font_family\font_weight\raw_variant
+ \expert_encoding\font_width
+ }
+ }
+ }
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fake_shape_o_oldstyle_encoding}
+% Called from |\fake_shape_o| if the oblique shape needs to be faked.
+% Invokes
+% \begin{quote}
+% |\transformfont{<FONT>oj8r}|\\
+% | {\slantfont{SLANT}{\frommtx{<FONT>j8r}}}|
+% \end{quote}
+% to generate an |8r|-reencoded |.mtx| file (and a raw |.pl| file).
+%
+% \begin{macrocode}
+%<*oldstyle>
+\def\fake_shape_o_oldstyle_encoding{
+ \if_file_exists{
+ \font_family\font_weight\oldstyle_variant
+ \raw_encoding\font_width.mtx
+ }\then
+ \if_file_exists{
+ \font_family\font_weight\font_shape\oldstyle_variant
+ \raw_encoding\font_width.mtx
+ }\then % no action required
+ \else
+%<*debug>
+ \immediate\write16{
+ INFO>~run~\string\transformfont\space\space
+ <\font_family\font_weight\font_shape\oldstyle_variant
+ \raw_encoding\font_width>~from~
+ <\font_family\font_weight\oldstyle_variant
+ \raw_encoding\font_width>~(faking~oblique)
+ }
+%</debug>
+ %%% WARNING: famtool.pl relies on this message format!!!
+ \immediate\write16{
+ Faking~oblique~font~
+ \font_family\font_weight\font_shape\oldstyle_variant
+ \raw_encoding\font_width
+ \space from~
+ \font_family\font_weight\oldstyle_variant
+ \raw_encoding\font_width
+ }
+ \transformfont{
+ \font_family\font_weight\font_shape\oldstyle_variant
+ \raw_encoding\font_width
+ }{
+ \slantfont{\SlantAmount}{
+ \frommtx{
+ \font_family\font_weight\oldstyle_variant
+ \raw_encoding\font_width
+ }
+ }
+ }
+ \fi
+ \fi
+}
+%</oldstyle>
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\fake_shape_i}
+% Call |\fake_shape_| to generate an |8r|-reencoded |.mtx| file and a
+% ligfull |.pl| file, if a corresponding |8a|-encoded |.afm| file exists.
+% Otherwise, do nothing, since an italic shape can't be faked.
+%
+% \begin{macrocode}
+\let\fake_shape_i\fake_shape_ % We must do this again!
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Faking font widths}
+%
+% \begin{macro}{\if_fake_narrow_}
+% \begin{macrocode}
+\newif\if_fake_narrow_
+\_fake_narrow_false
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fakenarrow}
+% |\fakenarrow{WIDTH}|
+%
+% Sets the expansion factor used to generate faked narrow fonts.
+% If it isn't set, do not attempt to install faked narrow fonts.
+% \begin{macrocode}
+\def\fakenarrow#1{
+ \_fake_narrow_true
+ \gdef\fake_narrow_width{#1}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fake_width_}
+% Do nothing for the default width or the condensed width.
+% \begin{macrocode}
+\def\fake_width_{}
+\def\fake_width_c{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fake_width_n}
+% If we are faking narrow fonts, check if an |8a|-encoded |.afm| file
+% exists for the current shape in narrow width, and if not call
+% |\fake_shape_n_raw_encoding| and |\fake_shape_n_expert_encoding|.
+%
+% \begin{macrocode}
+\def\fake_width_n{
+ \if_fake_narrow_
+ \if_file_exists{
+ \font_family\font_weight\raw_shape\raw_variant
+ \adobe_encoding\font_width.afm
+ }\then % no action required
+ \else
+ \fake_width_n_raw_encoding
+ \if_expert_
+ \fake_width_n_expert_encoding
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fake_width_n_raw_encoding}
+% Called from |\fake_width_n| if the narrow width needs to be faked.
+% Invokes
+% \begin{quote}
+% |\transformfont{<FONT>8rn}|\\
+% | {\xscalefont{WIDTH}{\frommtx{<FONT>8r}}}|
+% \end{quote}
+% to generate an |8r|-encoded |.mtx| file for a faked narrow font,
+% followed by
+% \begin{quote}
+% |\installrawfont{<FONT>8rn}{<FONT>8rn,8r}{8r}...|
+% \end{quote}
+% to install a ligfull |.pl| file.
+%
+% \begin{macrocode}
+\def\fake_width_n_raw_encoding{
+ \if_file_exists{
+ \font_family\font_weight\font_shape\raw_variant
+ \raw_encoding.mtx
+ }\then
+ \if_file_exists{
+ \font_family\font_weight\font_shape\raw_variant
+ \raw_encoding\font_width.mtx
+ }\then % no action required
+ \else
+%<*debug>
+ \immediate\write16{
+ INFO>~run~\string\transformfont\space\space
+ <\font_family\font_weight\font_shape\raw_variant
+ \raw_encoding\font_width>~from~
+ <\font_family\font_weight\font_shape\raw_variant
+ \raw_encoding>~(faking~narrow)
+ }
+%</debug>
+ %%% WARNING: famtool.pl relies on this message format!!!
+ \immediate\write16{
+ Faking~narrow~font~
+ \font_family\font_weight\font_shape\raw_variant
+ \raw_encoding\font_width
+ \space from~
+ \font_family\font_weight\font_shape\raw_variant
+ \raw_encoding
+ }
+ \transformfont{
+ \font_family\font_weight\font_shape\raw_variant
+ \raw_encoding\font_width
+ }{
+ \xscalefont{\fake_narrow_width}{
+ \frommtx{
+ \font_family\font_weight\font_shape\raw_variant
+ \raw_encoding
+ }
+ }
+ }
+ \if_file_exists{ \raw_encoding.mtx }\then
+%<*debug>
+ \immediate\write16{
+ INFO>~run~\string\installrawfont\space
+ <\font_family\font_weight\font_shape\raw_variant
+ \raw_encoding\font_width>
+ <\font_family\font_weight\font_shape\raw_variant
+ \raw_encoding\font_width,
+ \raw_encoding>
+ <\raw_encoding>
+ <\raw_encoding>
+ <\latex_family>
+ <\latex_weight\latex_width>
+ <\latex_shape>}
+%</debug>
+ \installrawfont{
+ \font_family\font_weight\font_shape\raw_variant
+ \raw_encoding\font_width
+ }{ \font_family\font_weight\font_shape\raw_variant
+ \raw_encoding\font_width,
+ \raw_encoding
+ }{ \raw_encoding
+ }{ \raw_encoding
+ }{ \latex_family
+ }{ \latex_weight\latex_width
+ }{ \latex_shape
+ }{}
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fake_width_n_expert_encoding}
+% Called from |\fake_width_n| if the narrow width needs to be faked.
+% Invokes
+% \begin{quote}
+% |\transformfont{<FONT>8xn}|\\
+% | {\xscalefont{WIDTH}{\frommtx{<FONT>8x}}}|
+% \end{quote}
+% to generate an |8x|-encoded |.mtx| file for a faked narrow font.
+%
+% \begin{macrocode}
+\def\fake_width_n_expert_encoding{
+ \if_file_exists{
+ \font_family\font_weight\font_shape\raw_variant
+ \expert_encoding.mtx
+ }\then
+ \if_file_exists{
+ \font_family\font_weight\font_shape\raw_variant
+ \expert_encoding\font_width.mtx
+ }\then % no action required
+ \else
+%<*debug>
+ \immediate\write16{
+ INFO>~run~\string\transformfont\space\space
+ <\font_family\font_weight\font_shape\raw_variant
+ \expert_encoding\font_width>~from~
+ <\font_family\font_weight\font_shape\raw_variant
+ \expert_encoding>~(faking~narrow)
+ }
+%</debug>
+ %%% WARNING: famtool.pl relies on this message format!!!
+ \immediate\write16{
+ Faking~narrow~font~
+ \font_family\font_weight\font_shape\raw_variant
+ \expert_encoding\font_width
+ \space from~
+ \font_family\font_weight\font_shape\raw_variant
+ \expert_encoding
+ }
+ \transformfont{
+ \font_family\font_weight\font_shape\raw_variant
+ \expert_encoding\font_width
+ }{
+ \xscalefont{\fake_narrow_width}{
+ \frommtx{
+ \font_family\font_weight\font_shape\raw_variant
+ \expert_encoding
+ }
+ }
+ }
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Installing reencoded fonts}
+%
+% \begin{macro}{\latin_encoding}
+% \begin{macro}{\font_encoding}
+% \begin{macro}{\latex_encoding}
+% \begin{macro}{\latex_mtx}
+%
+% |\latin_encoding{FONTENC}{EXPERTISED-ENC}{OLDSTYLE-ENC}|
+% |{LATEXENC}{LATEXMTX}|
+%
+% If this is an expertised family |EXPERTISED-ENC| is used instead
+% of |FONTENC|. If this is an expertised family with oldstyle
+% digits |OLDSTYLE-ENC| is used instead of |EXPERTISED-ENC|.
+%
+% UV 06/98: Added code for oldstyle encodings from Alan's v~1.511.
+% The |\font_encoding| is changed when |\if_oldstyle_| is true.
+%
+% UV 06/98: Added anonther parameter for the default metrics file
+% (which is usually either |latin.mtx| or |textcomp.mtx|).
+%
+% UV 06/98: Added experimental code for OsF or SC\&OsF fonts.
+%
+% \begin{macrocode}
+\def\latin_encoding#1#2#3#4#5{
+ \gdef\latex_encoding{#4}
+ \gdef\latex_mtx{#5}
+ \if_oldstyle_
+ \gdef\font_encoding{#3}
+ \else\if_expert_
+ \gdef\font_encoding{#2}
+ \else
+ \gdef\font_encoding{#1}
+ \fi\fi
+ \gdef\expert_font{}
+ \gdef\oldstyle_font{}
+ \if_expert_
+ \if_file_exists{
+ \font_family\font_weight\raw_shape\raw_variant
+ \expert_encoding\font_width.mtx
+ }\then
+ \gdef\expert_font{
+ \font_family\font_weight\raw_shape\raw_variant
+ \expert_encoding\font_width,
+ }
+ \fi
+ \fi
+%<*oldstyle>
+ \if_oldstyle_
+ \if_file_exists{
+ \font_family\font_weight\raw_shape\oldstyle_variant
+ \raw_variant\raw_encoding\font_width.mtx
+ }\then
+ \gdef\oldstyle_font{
+ unsetnum,
+ \font_family\font_weight\raw_shape\oldstyle_variant
+ \raw_variant\raw_encoding\font_width,
+ resetosf,
+ }
+ \fi
+ \fi
+%</oldstyle>
+%<*debug>
+ \immediate\write16{
+ INFO>~run~\string\installfont\space
+ <\font_family\font_weight\font_shape\font_variant
+ \font_encoding\font_width>
+ <\font_family\font_weight\raw_shape\raw_variant
+ \raw_encoding\font_width,
+ \if_oldstyle_
+ \ifx\raw_shape\caps_shape
+ resetosf,
+ \fi
+ \fi
+ \expert_font
+ \oldstyle_font
+ \latex_mtx>
+ <\latex_encoding\encoding_shape>
+ <\latex_encoding>
+ <\latex_family>
+ <\latex_weight\latex_width>
+ <\latex_shape>}
+%</debug>
+ \installfont{
+ \font_family\font_weight\font_shape\font_variant
+ \font_encoding\font_width
+ }{
+ \font_family\font_weight\raw_shape\raw_variant
+ \raw_encoding\font_width,
+ \if_oldstyle_
+ \ifx\raw_shape\caps_shape
+ resetosf,
+ \fi
+ \fi
+ \expert_font
+ \oldstyle_font
+ \latex_mtx
+ }{
+ \latex_encoding\encoding_shape
+ }{
+ \latex_encoding
+ }{
+ \latex_family
+ }{
+ \latex_weight\latex_width
+ }{
+ \latex_shape
+ }{}
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Default weights, widths and shapes}
+%
+% \begin{center}
+% \begin{tabular}{llll}
+% \hline
+% \multicolumn{2}{l}{Fontname: \texttt{weight.map}} &
+% \multicolumn{2}{l}{NFSS: \emph{\LaTeX\ Companion}, p.~190} \\
+% \hline
+% |a| & Thin Hairline & |ul| & Ultra Light \\
+% |j| & ExtraLight & |el| & Extra Light \\
+% |l| & Light & |l| & Light \\
+% |r| & Regular Roman & |m| & Medium \\
+% |k| & Book & |m| & Medium \\
+% |m| & Medium & |mb| & (was: |m|) \\
+% |d| & Demi & |db| & (was: |sb|) \\
+% |s| & Semibold & |sb| & Semibold \\
+% |b| & Bold & |b| & Bold \\
+% |h| & Heavy Heavyface & |eb| & (was missing) \\
+% |c| & Black & |eb| & (was missing) \\
+% |x| & ExtraBold ExtraBlack & |eb| & Extra Bold \\
+% |u| & Ultra UltraBlack & |ub| & Ultra Bold \\
+% |p| & Poster & & (still missing) \\
+% \hline
+% \end{tabular}
+% \end{center}
+%
+% \begin{macro}{\latin_weights}
+% Each call to |\latin_weight| maps a Fontname weight code
+% (|\font_weight|) to a \LaTeX{} weight code (|\latex_weight|).
+% Non-existing weights are ignored (or substituted when the
+% |.fd| files are written out by |\endinstallfont|).
+%
+% The standard values are given in the table. They may be changed,
+% but you'd better know what you're doing.
+%
+% UV, 04/98: Changed the processing order: Do the most common
+% shapes first. Added new mappings for |c| and |h|, changed
+% mapping for |m| to newly invented \LaTeX{} weight |mb|.
+%
+% \begin{macrocode}
+\def\latin_weights{
+ \latin_weight{r}{m}
+ \latin_weight{k}{m}
+ \latin_weight{b}{b}
+ \latin_weight{s}{sb}
+ \latin_weight{d}{db} % was {d}{sb}, SPQR changed
+ \latin_weight{m}{mb} % was {m}{m}, UV changed
+ \latin_weight{c}{eb} % UV added
+ \latin_weight{h}{eb} % UV added
+ \latin_weight{x}{eb}
+ \latin_weight{u}{ub}
+ \latin_weight{l}{l}
+ %\latin_weight{j}{el}
+ %\latin_weight{a}{ul} % UV added
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{center}
+% \begin{tabular}{llll}
+% \hline
+% \multicolumn{2}{l}{Fontname: \texttt{width.map}} &
+% \multicolumn{2}{l}{NFSS: \emph{\LaTeX\ Companion}, p.~190} \\
+% \hline
+% |t| & Thin & -- & -- \\
+% |o| & Ultra Condensed & |uc| & Ultra Condensed \\
+% |u| & Ultra Compressed & |uc| & . . \\
+% |q| & Extra Compressed & |ec| & Extra Condensed \\
+% |c| & Condensed & |c| & Condensed \\
+% |p| & Compressed & |c| & . . \\
+% |n| & Narrow & |c| & . . \\
+% -- & -- & |sc| & Semi Condensed \\
+% |r| & Normal, Medium, Regular & |m| & Medium \\
+% -- & -- & |sx| & Semi Expanded \\
+% |e| & Expanded & |x| & Expanded \\
+% |x| & Extended & |x| & . . \\
+% |v| & Extra Expanded & |ex| & Extra Expanded \\
+% -- & -- & |ux| & Ultra Expanded \\
+% |w| & Wide & -- & -- \\
+% \hline
+% \end{tabular}
+% \end{center}
+%
+% \begin{macro}{\latin_widths}
+% Each call to |\latin_width| maps a Fontname width code
+% (|\font_width|) to a \LaTeX{} width code (|\latex_width|).
+% Non-existing narrow fonts are faked only if |\fakenarrow|
+% is specifically called for.
+%
+% \begin{macrocode}
+\def\latin_widths{
+ \latin_width{}{}
+ \latin_width{n}{c}
+ %latin_width{c}{c}
+ %latin_width{x}{x}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\latin_shapes}
+% The fifth argument of |\latin_shape| is stored in the variable
+% |\encoding_switches|.
+% \begin{macrocode}
+\def\latin_shapes{
+ \latin_shape{} {} {} {n} {\_textcomp_true }
+ \latin_shape{c}{c}{} {sc}{\_textcomp_false}
+ \latin_shape{o}{o}{} {sl}{\_textcomp_true }
+ \latin_shape{i}{i}{i}{it}{\_textcomp_true }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\latin_encodings}
+% |\encoding_switches| is evaluated immediatley before the
+% |\if_textcomp_| test to set it as appropriate for the curent shape.
+% \changes{1.925}{2003/03/31}{Changed from using \texttt{latin.mtx} to
+% \texttt{newlatin.mtx}. (LH)}
+% \begin{macrocode}
+\def\latin_encodings{
+ \latin_encoding{7t}{9t}{9o}{OT1}{newlatin}
+ \latin_encoding{8t}{9e}{9d}{T1} {newlatin}
+%<*textcomp>
+ \encoding_switches
+ \if_textcomp_
+ \latin_encoding{8c}{9c}{9c}{TS1}{textcomp}
+ \fi
+%</textcomp>
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if_textcomp_}
+% Switch to control whether or not to install a text companion
+% encoding. It is set or unset for each shape by |\latin_shapes|
+% and evaluated in |\latin_encodings|.
+%
+% \begin{macrocode}
+\newif\if_textcomp_
+% \end{macrocode}
+% \end{macro}
+
+%
+% \begin{macro}{\raw_encoding}
+% \begin{macro}{\adobe_encoding}
+% \begin{macro}{\expert_encoding}
+% \begin{macrocode}
+\def\raw_encoding{8r}
+\def\adobe_encoding{8a}
+\def\expert_encoding{8x}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+
+% \begin{macro}{\caps_shape}
+% \begin{macro}{\oldstyle_shape}
+% \begin{macrocode}
+\def\caps_shape{c}
+\def\oldstyle_shape{j}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\SlantAmount}
+% \begin{macrocode}
+\def\SlantAmount{167}
+%</pkg>
+% \end{macrocode}
+% \end{macro}
+%
+% \Finale
+\endinput \ No newline at end of file