diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-12 23:59:02 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-12 23:59:02 +0000 |
commit | a8860bb3a74f6fd3f6b242d3258271b9763b5a1e (patch) | |
tree | b592ee9fbb500334b962889b8320fb0441948496 /Master/texmf-dist/tex/latex/mff/mff.sty | |
parent | 4a98d09bb853cba5e3531c8b7131df26768e38fa (diff) |
mff
git-svn-id: svn://tug.org/texlive/trunk@1086 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/mff/mff.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/mff/mff.sty | 743 |
1 files changed, 743 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/mff/mff.sty b/Master/texmf-dist/tex/latex/mff/mff.sty new file mode 100644 index 00000000000..ca698889d2e --- /dev/null +++ b/Master/texmf-dist/tex/latex/mff/mff.sty @@ -0,0 +1,743 @@ +\def\MFF@version{1.21 [June 1996]} +\typeout{LaTeX Style file MFF.STY, ver. \MFF@version} + +\def\MFFcatcode{% + \chardef\oldatcatcode=\catcode`@ + \chardef\oldsubcatcode=\catcode`_ + \catcode`@=11 + \catcode`_=11 +} + +\def\noMFFcatcode{% + \catcode`@=\oldatcatcode + \catcode`_=\oldsubcatcode +} + +\def\otherMFFcatcode{% + \catcode`@=12 + \catcode`_=12 +} + +\def\letterMFFcatcode{% + \catcode`@=11 + \catcode`_=11 +} + +\MFFcatcode + +\newif\ifMFF@dcfont +\MFF@dcfontfalse + +% +% select approximation scheme: dcfonts, sauter +% + +\def\MFFsauter{\def\MFF@apptype{SAUTER}} +\def\MFFdcfonts{\def\MFF@apptype{DCFONT}} + +\input{mfdcdata.tex} +\input{mfsauter.tex} +\input{mfcorfnt.tex} +\input{mftricks.tex} +\input{mfarithm.tex} + +\newwrite\MFF@outfont +\newread\MFF@checkfont + +% type warning message +\def\MFF@warning#1{\immediate\write16{<MFF/line=\the\inputlineno>: #1}} +\def\MFF@warncorr#1{\MFF@warning{Variable "#1" is corrected}} + +% open new font: #1 = internal name, #2 = file name, #3 = scaling +\def\MFF@open#1#2#3{% + \immediate\openout\MFF@outfont=#2.mf + \openin\MFF@checkfont=#2.tfm + \ifeof\MFF@checkfont + \MFF@warning{No file #2.tfm -- dummy font will be used}% + \font #1=dummy\relax + \else + \font #1=#2 #3\relax + \fi + \closein\MFF@checkfont + \MFF@warning{Do not forget to process #2.mf + and reprocess this file}% +} + +% write to \MFF@outfont some string +\def\MFF@write#1{\immediate\write\MFF@outfont{#1}\ignorespaces} + +% close output file +\def\MFF@close{\MFF@write{}\immediate\closeout\MFF@outfont} + +% +% output primitives +% +\chardef\tempoldCod=\catcode`# \chardef\tempoldcoD=\catcode`^ +\chardef\tempoldCoD=\catcode37 +\catcode`#=12 \catcode`^=6 \catcode37=12 + +\def\MFF@p{#} +\def\MFF@c{%} + +\def\MFF@comment^1{\MFF@write{% \space ^1}} +\def\MFF@commstr^1^2{\MFF@write{^1 \space\space\space % ^2}} +\def\MFF@capsprmdc{\MFF@write{lower.uu#:= lower.u#;}} +\def\MFF@capsprm^1^2^3{\MFF@write{lower.^1#:= \space\space\space % ^3} + \MFF@write{ \space\space\space ^1# * (^2);}} +\def\MFF@capsval^1^2^3{\MFF@write{lower.^1:= \space\space\space % ^3} + \MFF@write{ \space\space\space ^1 * (^2) ;}} +\def\MFF@parameter^1^2^3{\MFF@write{^1:=\@tempa^2; \space\space\space % ^3}} +\def\MFF@parmreal^1^2{\MFF@parm{^1}\MFF@parameter{^1#}{/36pt#}{^2}} +\def\MFF@parmrule^1^2{\MFF@parm{^1}\MFF@parameter{^1#}{/100pt#}{^2}} +\def\MFF@parmfactor^1^2{\MFF@parm{^1}\MFF@parameter{^1}{}{^2}} +\def\MFF@parmsize^1{\MFF@convert{^1}\MFF@write{font_size \@tempa pt#;}} + +\catcode`#=\tempoldCod \catcode`^=\tempoldcoD \catcode37=\tempoldCoD + +% set slant value +\def\MFFslant#1{\global\edef\MFF@slant{#1}} +\def\MFFslantD#1{\global\edef\MFF@slant{sind(#1)/cosd(#1)}} + +% set flags +\def\MFF@setflag#1#2{% + \if y#1 \global\expandafter\edef\csname MFF@#2\endcsname{true}\fi + \if n#1 \global\expandafter\edef\csname MFF@#2\endcsname{false}\fi} + +\def\MFFflagLigs#1{% + \if s#1 \def\MFF@ligs{\ifdim \@tempdima<6pt 1 \else 2\fi}\fi + \if n#1 \def\MFF@ligs{0}\fi + \if 0#1 \def\MFF@ligs{0}\fi + \if 1#1 \def\MFF@ligs{1}\fi + \if 2#1 \def\MFF@ligs{2}\fi +} + +\def\MFFflagSquareDots#1{\MFF@setflag{#1}{squaredots}} +\def\MFFflagHefty#1{\MFF@setflag{#1}{hefty}} +\def\MFFflagSerifs#1{\MFF@setflag{#1}{serifs}} +\def\MFFflagMonospace#1{\MFF@setflag{#1}{monospace}} +\def\MFFflagVariantG#1{\MFF@setflag{#1}{variantg}} +\def\MFFflagLowAsterisk#1{\MFF@setflag{#1}{lowasterisk}} +\def\MFFflagMathSpacing#1{\MFF@setflag{#1}{mathfitting}} + +% +% set font mixture +% +\def\MFF@add@cmr#1{\global\def\MFF@frac@CMR{#1}} +\def\MFF@add@bold#1{\global\def\MFF@frac@CMB{#1}} +\def\MFF@add@x#1{\global\def\MFF@frac@CMX{#1}} +\def\MFF@add@bx#1{\MFF@add@b{#1}\MFF@add@x{#1}} +\def\MFF@add@sf#1{\global\def\MFF@frac@CMS{#1}} +\def\MFF@add@tt#1{\global\def\MFF@frac@CMT{#1}} +\def\MFF@add@fib#1{\global\def\MFF@frac@FIB{#1}} +\def\MFF@add@funny#1{\global\def\MFF@frac@CMF{#1}} + +\def\MFFmixture#1#2#3#4#5#6{\MFF@add@cmr{1}% + \MFF@add@bold{#1}\MFF@add@x{#2}\MFF@add@sf{#3}\MFF@add@tt{#4}% + \MFF@add@fib{#5}\MFF@add@funny{#6}% +} + +\def\clearMFF{\MFFmixture{0}{0}{0}{0}{0}{0}} +\def\mixMFF{\@ifnextchar[{\mixMFF@}{\mixMFF@[1.0]}} +\def\setMFF{\clearMFF\mixMFF} + +\def\mixMFF@[#1]#2{% + \ifx \relax\expandafter\csname MFF@add@#2\endcsname + \else \csname MFF@add@#2\endcsname{#1}\fi +} + +\def\MFFscaleWidth#1{\global\def\MFF@scale@width{#1}} +\def\MFFscaleHeight#1{\global\def\MFF@scale@height{#1}} +\def\MFFscaleAsc#1{\global\def\MFF@scale@asc{#1}} +\def\MFFscaleDesc#1{\global\def\MFF@scale@desc{#1}} +\def\MFFscaleMath#1{\global\def\MFF@scale@math{#1}} +\def\MFFscaleBoldLines#1{\global\def\MFF@scale@bold{#1}} +\def\MFFscaleThinLines#1{\global\def\MFF@scale@thin{#1}} +\def\MFFscaleJoinLines#1{\global\def\MFF@scale@join{#1}} +\def\MFFscaleNotchCut#1{\global\def\MFF@scale@notch{#1}} +\def\MFFscaleDotSize#1{\global\def\MFF@scale@dot{#1}} +\def\MFFscaleSerifDish#1{\global\def\MFF@scale@dish{#1}} + +\def\MFFcontrast{\@ifnextchar[{\MFF@@contrast}{\MFF@contrast}}% +\def\MFF@@contrast[#1]{\global\edef\MFF@contrasttype{#1}% + \global\edef\MFF@contrast{0.5}} +\def\MFF@contrast#1{\global\edef\MFF@contrasttype{d}% + \global\edef\MFF@contrast{#1}} + + +\newif\if@MFF@checkit +\def\MFFcheck{\@MFF@checkittrue} +\def\MFFnocheck{\@MFF@checkitfalse} + +\newif\if@MFF@tricks + +% z = empty (white), b = black, +% v = vertical, h = horizontal, r = slanted(/), l - slanted (\) +% d = dotted, g = rectangular grid, s - slanted grid +% uppercase(*) = (*) + outline + +% #1 - var name, #2 - value +\def\MFF@settrick#1#2{% + \@negargtrue + \@tfor \@temp:=zZbBvVhHrRlLdDgGsS\do + {\if \@temp#2 + \@negargfalse \expandafter\edef\csname#1\endcsname{#2}% + \fi}% + \if@negarg \MFF@warning{Illegal pattern style: #2}\fi +} + +% #1 - variable, #2 - list of legal values, #3 - command +\def\MFF@checktrick#1#2#3{% + \@tfor \@temp:=#2\do + {\if \@temp#1\relax \@negargfalse #3 \fi}% +} + +% !!! +% argument #4 is not used currently - reserved for underline effect +% !!! +\def\MFFtrick#1#2#3#4#5{% + \MFF@settrick{MFF@trickchar}{#1}% + \MFF@settrick{MFF@trickbox}{#2}% + \MFF@settrick{MFF@trickshadow}{#3}% + \edef\MFF@trick@transform{#5}% + \@MFF@trickstrue} + +\def\trickMFFshadow#1{\MFF@settrick{MFF@trickshadow}{#1}} +\def\trickMFFbox#1{\MFF@settrick{MFF@trickbox}{#1}} +\def\trickMFFchar#1{\MFF@settrick{MFF@trickchar}{#1}} +\def\trickMFFtransform#1{\edef\MFF@trick@transform{#1}} + +\def\MFFnotricks{\@MFF@tricksfalse} +\def\MFFfonttricks{\@MFF@trickstrue} + +\def\MFFstdtrick#1{\csname MFF@stdtrick@#1\endcsname\@MFF@trickstrue} + +\def\MFF@stdtrick@standard{\MFFtrick{b}{z}{z}{}{}}% +\def\MFF@stdtrick@reversed{\MFFtrick{z}{b}{z}{}{}}% +\def\MFF@stdtrick@dotted{\MFFtrick{D}{z}{z}{}{}}% +\def\MFF@stdtrick@striped{\MFFtrick{G}{z}{z}{}{}}% +\def\MFF@stdtrick@stripedH{\MFFtrick{H}{z}{z}{}{}}% +\def\MFF@stdtrick@stripedV{\MFFtrick{V}{z}{z}{}{}}% +\def\MFF@stdtrick@slanted{\MFFtrick{S}{z}{z}{}{}}% +\def\MFF@stdtrick@slantedR{\MFFtrick{R}{z}{z}{}{}}% +\def\MFF@stdtrick@slantedL{\MFFtrick{L}{z}{z}{}{}}% +\def\MFF@stdtrick@outlined{\MFFtrick{Z}{z}{z}{}{}}% +\def\MFF@stdtrick@shadowed{\MFFtrick{b}{z}{b}{}{}}% +\def\MFF@stdtrick@sHadowed{\MFFtrick{Z}{z}{Z}{}{}}% +\def\MFF@stdtrick@shadowonly{\MFFtrick{z}{z}{b}{}{}}% + +\def\stepMFFoutline#1{\def\MFF@contourstep{#1}} +\def\stepMFFshadow#1{\def\MFF@shadowstep{#1}} +\def\cornerMFFshadow#1{\def\MFF@shadowstyle{#1}} + +\def\stepMFFboxpattern#1{\def\MFF@HPenstep{#1}} +\def\penMFFboxpattern#1{\def\MFF@HPenpen{#1}} +\def\stepMFFcharpattern#1{\def\MFF@MPenstep{#1}} +\def\penMFFcharpattern#1{\def\MFF@MPenpen{#1}} +\def\stepMFFshadowpattern#1{\def\MFF@SPenstep{#1}} +\def\penMFFshadowpattern#1{\def\MFF@SPenpen{#1}} + +% +% this code calculates the parameter value: +% #1 = parameter name +% #2 = font family +% \@tempdima = size, +% output: \@tempdimb = value + +\def\MFF@calc#1#2{\csname \MFF@apptype @calc\endcsname{#1}{#2}} + +\def\SAUTER@calc#1#2{\@tempdimb=0pt \csname SAUTER@#2@#1\endcsname} + +\def\DCFONT@calc#1#2{\@tempdimb=0pt + \csname DCFNT@findpos@#2\endcsname + % calculate reference points + \@tempcntb=\@tempcnta \@tempdimb=\z@ \csname DCFNT@#2@#1\endcsname + \@ovxx=\@tempdimb + \advance\@tempcntb by 1 \@tempdimb=\z@ \csname DCFNT@#2@#1\endcsname + \@ovyy=\@tempdimb + % calculate local inclination + \MFF@dimenD=\@ovyy \advance \MFF@dimenD by -\@ovxx + \@tempcntb=\@tempcnta + \MFF@dimenD=\csname DCFNT@revint@#2\endcsname \MFF@dimenD + % calculate function + \@tempcntb=\@tempcnta \csname DCFNT@fntsize@#2\endcsname + \MFF@dimenA=\@tempdima \advance \MFF@dimenA by -\@tempdimb\relax + \MFF@multiply{\MFF@dimenA}{\MFF@dimenD}{\@tempdimb}% + \advance\@tempdimb by \@ovxx +} + +% this macro adds fraction of parameter value from other font +% #1 = parm name, #2 = font name +\def\MFF@addparm#1#2{% + \@tempdimb=\csname MFF@frac@#2\endcsname pt\relax + \ifdim \@tempdimb=\z@\relax + \else + \MFF@calc{#1}{#2}% + \advance\@tempdimb by -\@ovro + \advance\@ovri by \csname MFF@frac@#2\endcsname \@tempdimb + \fi +} + +% this macro calculates parameter value: +% #1 = variable name + +\def\MFF@parm#1{% + \MFF@calc{#1}{CMR}% + \@ovro=\@tempdimb \@ovri=\MFF@frac@CMR\@tempdimb + % add other font components + \MFF@addparm{#1}{CMX}% + \MFF@addparm{#1}{CMB}% + \MFF@addparm{#1}{CMS}% + \MFF@addparm{#1}{CMT}% + \MFF@addparm{#1}{CMF}% + \MFF@addparm{#1}{FIB}% + % correct value + \@tempdimb=\@ovri + \csname MFF@assign@#1\endcsname + \csname MFF@correct@#1\endcsname + \MFF@convert{\@tempdimb}% +} + +% +% this macro creates the parameter file for CMR font: +% #1 is (optional) scaling parameter +% #2 is internal font name +% #3 is font file name +% #4 is font size (in pt) +% +\def\MFFgener{\@ifnextchar[{\MFF@font}{\MFF@font[scaled 1000]}} + +% +% !!! attention: +% stem, cap_stem are processed before other "thickness" parms +% bar_height is processed after x_height +% asc_height is processed after x_height +% curve is processed after stem +% cap_stem is processed after stem +% cap_curve is processed after curve +% +% the variables: +% thin_join, hair, vair, stem, curve, ess, flare, dot_size, bar, +% slab, cap_hair, cap_stem, cap_curve, cap_ess, cap_bar, cap_band +% are processed after crisp, tiny, fine +% +% the variables stem_corr, vair_corr +% are processed after cap_hair, stem, fudge, curve +% +% the variable vair_corr is processed after slab, fudge, hair +% +\def\MFF@font[#1]#2#3#4{% + \MFF@open{#2}{\MFFprefix#3}{#1} + \MFF@comment{Created by MMF/LaTeX (ver. \MFF@version) at \today.} + \MFF@write{} + \csname MFF@title@\MFF@apptype\endcsname + \MFF@write{} + \MFF@comment{This font is the modification of} + \csname MFF@\MFF@class \MFF@fam @header\endcsname + \@tempdima=#4\relax \ifdim \@tempdima<\z@ \@tempdima=\z@ \fi + \MFF@parmsize{#4} + \MFF@write{} + \MFF@parmreal{u}{unit width} + \MFF@parmreal{width_adj}{width adjustment for certain characters} + \MFF@parmreal{serif_fit}{extra sidebar near lowercase serifs} + \MFF@parmreal{cap_serif_fit}{extra sidebar near uppercase serifs} + \MFF@parmreal{letter_fit}{extra space added to all sidebars} + \MFF@write{} + \MFF@parmreal{body_height}{height of tallest characters} + \MFF@parmreal{x_height}{height of lowercase without ascenders} + \MFF@parmreal{asc_height}{height of lowercase ascenders} + \MFF@parmreal{cap_height}{height of caps} + \MFF@parmreal{fig_height}{height of numerals} + \MFF@parmreal{math_axis}{axis of symmetry for math symbols} + \MFF@parmreal{bar_height}{height of crossbar in lowercase e} + \MFF@parmreal{comma_depth}{depth of comma below baseline} + \MFF@parmreal{desc_depth}{depth of lowercase descenders} + \ifMFF@dcfont + \MFF@parmreal{acc_height}{height of accents} + \MFF@parmreal{dot_height}{height of y umlaut dots} + \MFF@parmreal{udot_height}{height of u umlaut dots (skipped actually)} + \fi + \MFF@write{} + \MFF@parmreal{crisp}{diameter of serif corners} + \MFF@parmreal{tiny}{diameter of rounded corners} + \MFF@parmreal{fine}{diameter of sharply rounded corners} + \MFF@parmreal{stem}{lowercase stem breadth} + \MFF@parmreal{cap_stem}{uppercase stem breadth} + \MFF@parmreal{thin_join}{width of extrafine details} + \MFF@parmreal{hair}{lowercase hairline breadth} + \MFF@parmreal{curve}{lowercase curve breadth} + \MFF@parmreal{ess}{breadth in middle of lowercase s} + \MFF@parmreal{flare}{diameter of bulbs or breadth of terminals} + \MFF@parmreal{dot_size}{diameter of dots} + \MFF@parmreal{cap_hair}{uppercase hairline breadth} + \MFF@parmreal{cap_curve}{uppercase curve breadth} + \MFF@parmreal{cap_ess}{breadth in middle of uppercase s} + \MFF@parmrule{rule_thickness}{thickness of lines in math symbols} + \MFF@write{} + \MFF@parmreal{dish}{amount erased at top or bottom of serifs} + \MFF@parmreal{bracket}{vertical distance from serif base to tangent} + \MFF@parmreal{jut}{protrusion of lowercase serifs} + \MFF@parmreal{cap_jut}{protrusion of uppercase serifs} + \MFF@parmreal{beak_jut}{horizontal protrusion of beak serifs} + \MFF@parmreal{beak}{vertical protrusion of beak serifs} + \MFF@parmreal{vair}{vertical diameter of hairlines} + \MFF@parmrule{notch_cut}{maximum breadth above or below notches} + \MFF@parmreal{bar}{lowercase bar thickness} + \MFF@parmreal{slab}{serif and arm thickness} + \MFF@parmreal{cap_bar}{uppercase bar thickness} + \MFF@parmreal{cap_band}{uppercase thickness above/below lobes} + \MFF@parmrule{cap_notch_cut}{max breadth above/below uppercase notches} + \MFF@parmreal{serif_drop}{vertical drop of sloped serifs} + \MFF@parmreal{apex_corr}{extra width at diagonal junctions} + \MFF@write{} + \MFF@parmreal{o}{amount of overshoot for curves} + \MFF@parmreal{apex_o}{amount of overshoot for diagonal junctions} + \MFF@write{} + \edef\@tempa{\MFF@slant}% + \MFF@parameter{slant}{}{tilt ratio (Delta x/Delta y)} + \MFF@parmfactor{fudge}{factor applied to weights of heavy characters} + \MFF@parmfactor{math_spread}{extra openness of math symbols} + \MFF@parmfactor{superness}{parameter for superellipses} + \MFF@parmfactor{superpull}{extra openness inside bowls} + \MFF@parmfactor{beak_darkness}{fraction of triangle inside beak serifs} + \MFF@write{} + \MFF@parmreal{stem_corr}{for small refinements of stem breadth} + \MFF@parmreal{vair_corr}{for small refinements of hairline height} + \MFF@write{} + \edef\@tempa{\MFF@ligs}% + \MFF@commstr{ligs:=\@tempa;}{level of ligatures to be included} + \MFF@write{} + \MFF@commstr{square_dots:=\MFF@squaredots;}{should dots be square?} + \MFF@commstr{hefty:=\MFF@hefty;}{should we try hard not to be overweight?} + \MFF@commstr{serifs:=\MFF@serifs;}{should serifs and bulbs be attached?} + \MFF@commstr{monospace:=\MFF@monospace;}{should all characters have the same width?} + \MFF@commstr{variant_g:=\MFF@variantg;}{should an italic-style g be used?} + \MFF@commstr{low_asterisk:=\MFF@lowasterisk;}{should the asterisk be centered at the axis?} + \MFF@commstr{math_fitting:=\MFF@mathfitting;}{should math-mode spacing be used?} + \if@MFF@tricks + \MFF@write{} + \MFF@comment{This part is taken from "The ABC's of Special Effects"} + \MFF@comment{by Georgia K.M. Tobin in TUGBoat 9 (1988) No 1 pp. 15--18} + \MFF@comment{and from "Outline Fonts with Metafont"} + \MFF@comment{by Doug Henderson in TUGBoat 10 (1989) No 1 pp. 36--38.} + \MFF@maketrick + \fi + \MFF@write{} + \csname MFF@\MFF@class \MFF@fam @generate\endcsname + \MFF@close +} + +% +% this macro adds parameters for CAPS +\def\MFF@smallcaps{% + \MFF@comment{now come replacements used to set the lowercase caps} + \MFF@write{} + \MFF@capsprm{u}{16.0/21.0}{unit width} + \ifMFF@dcfont \MFF@capsprmdc \fi + \MFF@capsprm{width_adj}{1.0}{width adjustment for certain characters} + \MFF@capsprm{cap_serif_fit}{40.0/50.0}{extra sidebar near uppercase serifs} + \MFF@capsprm{letter_fit}{24.0/50.0}{extra space added to all sidebars} + \MFF@capsprm{body_height}{20.0/27.0}{height of tallest characters} + \MFF@capsprm{cap_height}{18.5/24.6}{height of caps} + \MFF@capsprm{x_height}{116.0/155.0}{height of lowercase without ascenders} + \MFF@capsprm{bar_height}{65.0/87.0}{height of crossbar in lowercase e} + \MFF@capsprm{comma_depth}{52.0/70.0}{depth of comma below baseline} + \MFF@capsprm{stem}{21.0/25.0}{lowercase stem breadth} + \MFF@capsprm{flare}{25.0/33.0}{diameter of bulbs or breadth of terminals} + \MFF@capsprm{cap_hair}{91.0/110.0}{uppercase hairline breadth} + \MFF@capsprm{cap_stem}{26.0/32.0}{uppercase stem breadth} + \MFF@capsprm{cap_curve}{31.0/37.0}{uppercase curve breadth} + \MFF@capsprm{cap_ess}{28.0/35.0}{breadth in middle of uppercase s} + \MFF@capsprm{cap_jut}{26.0/37.0}{protrusion of uppercase serifs} + \MFF@capsprm{beak_jut}{7.0/10.0}{horizontal protrusion of beak serifs} + \MFF@capsprm{beak}{52.0/70.0}{vertical protrusion of beak serifs} + \MFF@capsprm{slab}{91.0/110.0}{serif and arm thickness} + \MFF@capsprm{cap_bar}{91.0/110.0}{uppercase bar thickness} + \MFF@capsprm{cap_band}{91.0/110.0}{uppercase thickness above/below lobes} + \MFF@capsprm{cap_notch_cut}{1.0}{max breadth above/below uppercase notches} + \MFF@capsprm{o}{5.0/8.0}{amount of overshoot for curves} + \MFF@capsprm{apex_o}{4.0/8.0}{amount of overshoot for diagonal junctions} + \MFF@capsval{fudge}{1.0}{factor applied to weights of heavy characters} +} + +\def\MFF@setcmbas#1{\MFF@common@header + \MFF@write{}% + \MFF@commstr{if unknown cmbase: input cmbase fi}{}% + \MFF@write{}% + \MFF@write{font_identifier:="#1/MFF";}% +} + +\def\MFF@setdcbas#1{\MFF@common@header + \MFF@write{}% + \MFF@commstr{if unknown cmbase: }{}% + \MFF@commstr{\space\space\space if unknown dxbase: input dxbase; fi;}{}% + \MFF@commstr{else:}{}% + \MFF@commstr{\space\space\space show "You cannot use cmbase with DC fonts!"; }{}% + \MFF@commstr{\space\space\space endinput; }{}% + \MFF@commstr{fi;}{}% + \MFF@write{}% + \MFF@write{font_identifier:="#1/MFF";}% +} + +\def\MFF@setgener#1{% + \MFF@commstr{generate #1}{switch to the driver file}% +} + +% general header +\def\MFF@common@header{\MFF@write{} + \MFF@comment{Composition\space\space\space\space\space\space\space: + bold=\MFF@frac@CMB, x=\MFF@frac@CMX, + sf=\MFF@frac@CMS, tt=\MFF@frac@CMT, + fib=\MFF@frac@FIB, funny=\MFF@frac@CMF} + \MFF@comment{Scale char size\space\space\space: + widht=\MFF@scale@width, height=\MFF@scale@height, + asc=\MFF@scale@asc, desc=\MFF@scale@desc, + math=\MFF@scale@math} + \MFF@comment{Scale char weight : + bold line factor=\MFF@scale@bold, + thin line factor=\MFF@scale@thin} + \MFF@comment{\space\space\space\space\space\space + \space\space\space\space\space\space + \space\space\space\space\space\space\space\space + contrast type=\MFF@contrasttype, + contrast factor=\MFF@contrast} + \MFF@comment{Scale variables\space\space\space: + join_lines\MFF@p\space * \MFF@scale@join, + notch_cut\MFF@p\space * \MFF@scale@notch,} + \MFF@comment{\space\space\space\space\space\space + \space\space\space\space\space\space + \space\space\space\space\space\space\space\space + dot_size\MFF@p\space * \MFF@scale@dot, + dish\MFF@p\space * \MFF@scale@dish} + \if@MFF@checkit \MFF@comment{Auto correction\space\space\space: ON} + \else \MFF@comment{Auto correction\space\space\space: OFF} + \fi + \if@MFF@tricks \MFF@comment{Add font tricks\space\space\space: + foreground=\MFF@trickchar, + background=\MFF@trickbox, + shadow=\MFF@trickshadow, + transform=\MFF@trick@transform} + \else \MFF@comment{Add font tricks\space\space\space: none} + \fi +} + +% CMR family +\def\MFF@CMR@header{% + \MFF@dcfontfalse + \MFF@comment{Computer Modern Roman family}% + \MFF@comment{created by D.E.Knuth [driver=roman.mf]}% + \MFF@setcmbas{CMR}% +} +\def\MFF@CMR@generate{% + \MFF@setgener{roman}% +} +\def\MFF@CMI@header{% + \MFF@dcfontfalse + \MFF@comment{Computer Modern Text Italic family}% + \MFF@comment{created by D.E.Knuth [driver=textit.mf]}% + \MFF@setcmbas{CMTI}% +} +\def\MFF@CMI@generate{% + \MFF@setgener{textit}% +} +\def\MFF@CMC@header{% + \MFF@dcfontfalse + \MFF@comment{Computer Modern Caps and Small Caps family}% + \MFF@comment{created by D.E.Knuth [driver=csc.mf]}% + \MFF@setcmbas{CMCSC}% +} +\def\MFF@CMC@generate{% + \MFF@smallcaps\MFF@write{}% + \MFF@setgener{csc}% +} + +% Samarin/Glonti Roman family +\def\MFF@SGR@header{% + \MFF@dcfontfalse + \MFF@comment{Computer Modern Roman Cyrillic family}% + \MFF@comment{by N.Glonti and A.Samarin [driver=cyrillic.mf]}% + \MFF@setcmbas{CMRZ}% +} +\def\MFF@SGR@generate{% + \MFF@setgener{cyrillic}% +} +\def\MFF@SGI@header{% + \MFF@dcfontfalse + \MFF@comment{Computer Modern Text Italic Cyrillic family}% + \MFF@comment{by N.Glonti and A.Samarin [driver=cytextit.mf]}% + \MFF@setcmbas{CMRIZ}% +} +\def\MFF@SGI@generate{% + \MFF@setgener{cytextit}% +} +\def\MFF@SGC@header{% + \MFF@dcfontfalse + \MFF@comment{Computer Modern Small Caps Cyrillic family}% + \MFF@comment{by N.Glonti and A.Samarin [driver=cyccsc.mf]}% + \MFF@setcmbas{CMCCSC}% +} +\def\MFF@SGC@generate{% + \MFF@smallcaps\MFF@write{}% + \MFF@setgener{cyccsc}% +} + +% Lapko/Khodulev Roman family +\def\MFF@LHR@header{% + \MFF@dcfontfalse + \MFF@comment{Computer Modern Roman Cyrillic family}% + \MFF@comment{by A.Khodulev and O.Lapko [driver=ldrmfont.mf]}% + \MFF@setcmbas{LHR}% +} +\def\MFF@LHR@generate{% + \MFF@setgener{ldrmfont;}% + \MFF@write{bye.}% +} +\def\MFF@LHI@header{% + \MFF@dcfontfalse + \MFF@comment{Computer Modern Text Italic Cyrillic family}% + \MFF@comment{by A.Khodulev and O.Lapko [driver=ldrifont.mf]}% + \MFF@setcmbas{LHTI}% +} +\def\MFF@LHI@generate{% + \MFF@setgener{ldrifont;}% + \MFF@write{bye.}% +} +\def\MFF@LHC@header{% + \MFF@dcfontfalse + \MFF@comment{Computer Modern Small Caps Cyrillic family}% + \MFF@comment{by A.Khodulev and O.Lapko [driver=ldrcfont.mf]}% + \MFF@setcmbas{LHCSC}% +} +\def\MFF@LHC@generate{% + \MFF@smallcaps\MFF@write{}% + \MFF@setgener{ldrcfont;}% + \MFF@write{bye.}% +} +% Lapko/Khodulev Roman family (cyrillic only) +\def\MFF@LLR@header{% + \MFF@dcfontfalse + \MFF@comment{Computer Modern Roman Cyrillic-only family}% + \MFF@comment{by A.Khodulev and O.Lapko [driver=ldrmfont.mf]}% + \MFF@setcmbas{LLR}% +} +\def\MFF@LLR@generate{% + \MFF@commstr{vfcoding=1; }{only cyrillic characters}% + \MFF@write{}\MFF@setgener{ldrmfont;}% + \MFF@write{bye.}% +} +\def\MFF@LLI@header{% + \MFF@dcfontfalse + \MFF@comment{Computer Modern Text Italic Cyrillic-only family}% + \MFF@comment{by A.Khodulev and O.Lapko [driver=ldrifont.mf]}% + \MFF@setcmbas{LLTI}% +} +\def\MFF@LLI@generate{% + \MFF@commstr{vfcoding=1; }{only cyrillic characters}% + \MFF@write{}\MFF@setgener{ldrifont;}% + \MFF@write{bye.}% +} +\def\MFF@LLC@header{% + \MFF@dcfontfalse + \MFF@comment{Computer Modern Small Caps Cyrillic-only family}% + \MFF@comment{by A.Khodulev and O.Lapko [driver=ldrcfont.mf]}% + \MFF@setcmbas{LLCSC}% +} +\def\MFF@LLC@generate{% + \MFF@smallcaps\MFF@write{}% + \MFF@commstr{vfcoding=1; }{only cyrillic characters}% + \MFF@write{}\MFF@setgener{ldrcfont;}% + \MFF@write{bye.}% +} + +% DC family +\def\MFF@DCR@header{% + \MFF@dcfonttrue + \MFF@comment{European Computer Modern Roman family}% + \MFF@comment{by J"org Knappen and Norbert Schwarz [driver=dxroman.mf]}% + \MFF@setdcbas{DCR}% +} +\def\MFF@DCR@generate{% + \MFF@setgener{dxroman}% +} +\def\MFF@DCI@header{% + \MFF@dcfonttrue + \MFF@comment{European Computer Modern Text Italic family}% + \MFF@comment{by J"org Knappen and Norbert Schwarz [driver=dxtextit.mf]}% + \MFF@setdcbas{DCTI}% +} +\def\MFF@DCI@generate{% + \MFF@setgener{dxtextit}% +} +\def\MFF@DCC@header{% + \MFF@dcfonttrue + \MFF@comment{European Computer Modern Caps and Small Caps family}% + \MFF@comment{by J"org Knappen and Norbert Schwarz [driver=dxcsc.mf]}% + \MFF@setdcbas{DCCSC}% +} +\def\MFF@DCC@generate{% + \MFF@smallcaps\MFF@write{}% + \MFF@setgener{dxcsc}% +} + +\def\MFFclass@CMR{\def\MFF@class{CM}\def\MFF@fam{R}} +\def\MFFclass@LHR{\def\MFF@class{LH}\def\MFF@fam{R}} +\def\MFFclass@LLR{\def\MFF@class{LH}\def\MFF@fam{R}} +\def\MFFclass@CMRZ{\def\MFF@class{SG}\def\MFF@fam{R}} +\def\MFFclass@DCR{\def\MFF@class{DC}\def\MFF@fam{R}} + +\def\MFFclass@CMTI{\def\MFF@class{CM}\def\MFF@fam{I}} +\def\MFFclass@LHTI{\def\MFF@class{LH}\def\MFF@fam{I}} +\def\MFFclass@LLTI{\def\MFF@class{LH}\def\MFF@fam{I}} +\def\MFFclass@CMRIZ{\def\MFF@class{SG}\def\MFF@fam{I}} +\def\MFFclass@DCTI{\def\MFF@class{DC}\def\MFF@fam{I}} + +\def\MFFclass@CMCSC{\def\MFF@class{CM}\def\MFF@fam{C}} +\def\MFFclass@LHCSC{\def\MFF@class{LH}\def\MFF@fam{C}} +\def\MFFclass@LLCSC{\def\MFF@class{LH}\def\MFF@fam{C}} +\def\MFFclass@CMCCSC{\def\MFF@class{SG}\def\MFF@fam{C}} +\def\MFFclass@DCCSC{\def\MFF@class{DC}\def\MFF@fam{C}} + +\def\MFFclass#1{\csname MFFclass@#1\endcsname} + +\def\MFFdefault{\MFFnocheck +% + \MFFscaleWidth{1}% + \MFFscaleHeight{1}% + \MFFscaleAsc{1}% + \MFFscaleDesc{1}% + \MFFscaleMath{1}% + \MFFscaleBoldLines{1}% + \MFFscaleThinLines{1}% + \MFFscaleJoinLines{1}% + \MFFscaleNotchCut{1}% + \MFFscaleDotSize{1}% + \MFFscaleSerifDish{1}% + \MFFcontrast[s]% +% + \MFFslant{0}% + \MFFflagLigs{s}% + \MFFflagSquareDots{n}% + \MFFflagHefty{n}% + \MFFflagSerifs{y}% + \MFFflagMonospace{n}% + \MFFflagVariantG{n}% + \MFFflagLowAsterisk{n}% + \MFFflagMathSpacing{n}% +% + \stepMFFoutline{0.075}% + \stepMFFshadow{0.5}% + \cornerMFFshadow{A}% + \stepMFFboxpattern{0.375}\penMFFboxpattern{0.075}% + \stepMFFcharpattern{0.375}\penMFFcharpattern{0.075}% + \stepMFFshadowpattern{0.375}\penMFFshadowpattern{0.075}% + \MFFstdtrick{standard}% + \MFFnotricks% +% + \def\MFFprefix{xx}% + \MFFsauter + \MFFmixture{0}{0}{0}{0}{0}{0}% + \MFFclass{CMR}% +} + +\MFFdefault +\noMFFcatcode + |