%{{{ pdcfsel.tex 1.1.6 92/07/17 -- basic font loading % started - Damian Cugley Tue. 23 Apr. 1991 {\catcode`\%=12 \gdef\ldfontsversion{1.1.6 }} % \catcode for SCCS's sake \ifx\utilsversion\UNDEFINED \input utils \fi \counta=\catcode`\_ \catcode`\_=11 %{{{ setting the AUTOLOAD flag % If autoloading is true then the magnification and fonts used % are written to a file \jobname.fnt in the hope that it will be % possible to create them easily using the mff program. \newwrite\font_list \newif\if_autoloading \def\autoloadfonts % set autoload flag to TRUE { \_autoloadingtrue \immediate\openout\font_list=\jobname.fnt \def\setmag##1{\writemag{##1}\mag##1\relax} } \def\setmag#1{\mag=#1\relax \write_mag } \def\write_mag#1% #1 is file #2 is mag {{% \def\magstep##1{\ifcase##1 1000\or1200\or1440\or1728\or2074\or2488\fi}% \edef\tmp{-s #1}% \write\font_list\tmp }} %}}} %{{{ how to set up the csname for one font % All parameters are token strings % #1 is fontset name, e.g., body % #2 is the size part of external name % -- either ` at 12pt' or `12' % #3 is fam name -- e.g., rm % #4 is "external" name sans size info -- e.g., cmbx % This does the equivalent of \font\bodyrm=cmbx12 % except if autoloading then the actual \font is delayed. \def\ld_font#1#2#3#4% {\expcs\ifx{#1#3}\relax \if_autoloading \expcs\edef{#1#3}% {% \write\font_list{#4#2}% make note that font used \def\noexpand\subfont {\global\font\noexpcs{#1#3}=cmr10 }% use i\subfont if not found \global\font\noexpcs{#1#3}=#4#2\relax % load the font \noexpand\everyloadfont\noexpcs{#1#3}{#4#2}% hook \expcs\noexpand{#1#3}% and select it }% \else \global\expcs\font{#1#3}=#4#2\relax \expcs\everyloadfont{#1#3}{#4#2}% \fi \else % The font is already loaded; call \everyloadfont anyway \expcs\everyloadfont{#1#3}{#4#2}% \fi } % Ad-hoc laoding of fonts by user % #1 is csname % #2 is tokens for external name \def\ldfont#1#2% {% {\escapechar=-1\xdef\ldfont_tmp{{\string#1}}}% get name sans \ \expandafter\ld_font\ldfont_tmp{#2}{}{}% }% %{% % \if_autoloading \write\font_list{#2}\fi % \def\subfont{\font#1=cmr10 }% % \global\font#1=#2\relax % \everyloadfont#1{#2}% %} % Hook for user's customization % #1 is one token, the csname of the newly-loaded font % #2 is token string that is its external name \def\everyloadfont#1#2{} %}}} %{{{ how to set up a fontset % fontset map macro: % \FOOmap is of form {\m{rm}{ma}[\@]\f{it}{mai}...} % \f -- non-maths font % \m -- maths font (has \textfont and \scriptfont) % \M -- ditto plus \scriptscriptfont % Set up a fontset % #1 is name % #2 is \FOOmap % #3 is size % #4 is baselineskip % #5 is script (fontset name) % #6 is scriptscript \def\fontset#1#2#3#4#5#6% { \xfontset{#1}{#2}{#3} % % set up the \bodyfonts macro \expcs\edef{#1fonts}% {% \if_autoloading \expcs\noexpand{#1mathsfonts}\fi \noexpand\set_short_names{#1}{#5}{#6}\noexpand#2% % \def\rm{...}... % \textfont\rmfam\bodyrm \noexpand\set_baseline{#4}% set \baselineskip etc. \noexpand\rm } \if_autoloading % set up \bodymathsfonts macro \expcs\def{#1mathsfonts}{\force_maths_fonts{#1}{#5}{#6}#2} \fi } % xfontset can be used to make a fontset that is never selected % in its own right -- e.g., used for maths subscripts only % % #1 is name % #2 is map macro % #3 is size \def\xfontset#1#2#3% { % call \ld_font for each font: \def\f##1##2{\ld_font{#1}{#3}{##1}{##2}} \let\m=\f \let\M=\f \def\@##1##2##3{\ld_font{#1}{ at #3pt }{##2}{##3}}% #2 } % Set up the \rm style names and the \textfont etc. vectors % #1 -- fontset name -- e.g., body % #2 -- script -- e.g., small % #3 -- scriptscript -- e.g., tiny % followed by map macro \def\set_short_names#1#2#3% {% \let\@\relax \def\f##1##2% {% \expcs\edef{##1}{\noexpcs{#1##1}}% has to be def'd not let'd }% \def\m##1##2% {% \expcs\textfont{##1fam}\csname#1##1\endcsname \expcs\scriptfont{##1fam}\csname#2##1\endcsname \expcs\edef{##1}{\fam\expcs\noexpand{##1fam}\expcs\noexpand{#1##1}}% }% \def\M##1% {% \expcs\scriptscriptfont{##1fam}\csname#3##1\endcsname \m{##1}% }% } \def\set_baseline#1% {% \baselineskip#1\relax \normalbaselineskip\baselineskip \jot0.25\baselineskip \smallskipamount 0.25\baselineskip plus 0.083\baselineskip minus 0.083\baselineskip \medskipamount 0.5\baselineskip plus 0.167\baselineskip minus 0.167\baselineskip \bigskipamount 1\baselineskip plus 0.333\baselineskip minus 0.333\baselineskip \abovedisplayskip=\medskipamount \abovedisplayshortskip=\abovedisplayskip \advance\abovedisplayshortskip-1\abovedisplayskip \belowdisplayskip=\medskipamount \belowdisplayshortskip=\smallskipamount } % Force all the fonts used in maths to be loaded -- % then redefine #1mathsfonts to be \relax % #1 -- fontset name % #2 -- script fontset name % #3 -- scriptscript fontset name \def\force_maths_fonts#1#2#3% {% %\message{Loading maths fonts for #1...}% \let\@\relax \def\f##1##2{}% \def\m##1##2{\csname#1##1\endcsname \csname#2##1\endcsname}% \def\M##1{\csname#3##1\endcsname \m{##1}}% \global\expcs\let{#1mathsfonts}\relax } %}}} %{{{ example fontset templates \chardef\rmfam=0 \chardef\mifam=1 \chardef\syfam=2 % \itfam \bffam \ttfam \slfam set in plain.tex %}}} \catcode`\_=\counta %}}} pdcfsel.tex %Local variables: %fold-folded-p: t %tex-macros-p: t %End: