% \iffalse ********************************************* METACOMMENT
%
%                   TeX this file with LaTeX2e !
%
%        The following files will be writen out:
%
%        ==> buxsym.dvi             [ READ THIS FIRST ! ]
%
%        --> buxsym.drv             ( Documentation )
%        --> buxsym.sty             ( LaTeX2e package )
%        --> bmex10.mf, bmex9.mf    ( METAFONT driver files )
%        --> bmathex.mf, bmbigop.mf ( METAFONT files )
%
%
%% Copyright :  Kai-Uwe Bux
%% ---------    Norderneystraße 26
%%              D-26419 Schortens/Heidmühle (Germany)
%%
%% *****************************************************************
% >>>>>>>>>  !! Proliferation of UNCHANGED versions of !!  <<<<<<<<<
%            !! this file is permitted                 !!
%
% >>>>>>>>>  !! Don't change this file without changing !! <<<<<<<<<
%            !! it's name                               !!
% ******************************************************************
%
%    \begin{macrocode}
%<*driver|package|fd>
\def\FileVersion{0.10 $\beta$-Test}
\def\FileDate{1999/08/25}
\def\FileDescription{supplementary math extension font, package contains METAFONT sources!}
%</driver|package|fd>
%    \end{macrocode}
%
% ********************************************** END METACOMMENT \fi
%
% \CheckSum{22}
% \StopEventually{}
%
% \iffalse ********************************************* METACOMMENT
%    \begin{macrocode}
%<*driver>
\let\ThisVersion\FileVersion
\let\ThisDate\FileDate
%</driver>
%    \end{macrocode}
% ********************************************** END METACOMMENT \fi
%
% \iffalse ******************************************** METATCOMMENT
%
%    \begin{macrocode}
%<*installation>
\ifx\undefined\batchfile\begingroup\newtoks\a\newtoks\b\newtoks\c\fi
  \def\batchfile{buxsym.dtx}
  \makeatletter
  \let\@@end=\relax
\a={}
\def\File#1#2{\a=\expandafter{\the\a\file{#1}{\from{buxsym.dtx}{#2}}}}
  \File{buxsym.sty}{package}
  \File{buxsym.drv}{driver}
  \File{ubmexs.fd}{fd}
  \File{bmex9.mf}{bmexnine}
  \File{bmex10.mf}{bmexten}
  \File{bmathex.mf}{bmathex}
  \File{bmbigop.mf}{bmbigop}
\def\A{\expandafter\expandafter\expandafter\generate\expandafter{\the\a}}
  \def\GenerateAll{\A\let\GenerateAll\relax}
  \def\StopInput{\endinput\let\StopInput\relax}
  \input docstrip.tex
  \GenerateAll
  \StopInput
\endgroup
%    \end{macrocode}
%    \begin{macrocode}
\documentclass[12pt]{article}
  
  \newcommand{\MF}{\textsf{METAFONT}}
  \newcommand{\pkg}[1]{\textsf{#1}}
  \newcommand{\cls}[1]{\textsf{#1}}
  \newcommand{\file}[1]{\texttt{#1}}
  \newcommand{\env}[1]{\texttt{#1}}
  \newcommand{\opt}[1]{\textsf{#1}}
  \newcommand{\Fam}[1]{\textsf{#1}}
  \newcommand{\sect}[1]{{#1}}
  \newcommand{\sty}[1]{\emph{#1}}
  \newcommand{\ARG}[1]{\emph{#1}}
  \newcommand{\GobbleOne}[1]{}
  \newcommand{\Section}{\newpage\section}
  \newcommand{\finalnopagebreak}{\nopagebreak}
  \newcommand{\finalpagebreak}{\pagebreak}
  
  \title{The \pkg{buxsym} package\\
         --- installation guide ---}
  \author{Kai-Uwe Bux}
  \date{\begin{tabular}{ll}
           Datum:   & \ThisDate\\
           Version: & \ThisVersion
        \end{tabular}}
\begin{document}
  \maketitle\thispagestyle{empty}

  Having processed the file \file{buxsym.dtx} with \LaTeX\ you will
  find the following files additionally:
  \begin{enumerate}
    \item \file{buxsym.sty}
    \item \file{buxsym.drv}
    \item \file{buxsym.fd}
    \item \file{bmex9.mf}, \file{bmex10.mf}
    \item \file{bmathex.mf} and \file{bmbigop.mf}
  \end{enumerate}
  The package \file{buxsym.sty} and the font description file
  \file{buxsym.fd} are to be put into the
  \file{texinputs} path where \LaTeX\ can find them.
  
  The \file{mf}-files belong in the \file{mfinputs} path.
  The \MF\ driver files \file{bmex9.mf} and \file{bmex10.mf} have to
  be processed before the documentation \file{buxsym.drv} can be 
  processed. The reason is that \TeX\ will need the \file{tfm}-files
  to use these fonts.
\end{document}
%</installation>
%    \end{macrocode}
%
% ********************************************** END METACOMMENT \fi
% 
% \iffalse ********************************************* METACOMMENT
%
%    \begin{macrocode}
%<*driver>
\documentclass[12pt]{ltxdoc}
  \usepackage{buxsym}

  \newcommand{\MF}{\textsf{METAFONT}}
  \newcommand{\pkg}[1]{\textsf{#1}}
  \newcommand{\cls}[1]{\textsf{#1}}
  \newcommand{\file}[1]{\texttt{#1}}
  \newcommand{\env}[1]{\texttt{#1}}
  \newcommand{\opt}[1]{\textsf{#1}}
  \newcommand{\Fam}[1]{\textsf{#1}}
  \newcommand{\sect}[1]{{#1}}
  \newcommand{\sty}[1]{\emph{#1}}
  \newcommand{\ARG}[1]{\emph{#1}}
  \newcommand{\GobbleOne}[1]{}
  \newcommand{\Section}{\newpage\section}
  \newcommand{\finalnopagebreak}{\nopagebreak}
  \newcommand{\finalpagebreak}{\pagebreak}

  \title{The \pkg{buxsym} package\\
        --- supplementary math extension fonts ---}
  \author{Kai-Uwe Bux}
  \date{\begin{tabular}{ll}
           Datum:   & \ThisDate\\
           Version: & \ThisVersion
        \end{tabular}}

\begin{document}
  \maketitle
  \DocInput{buxsym.dtx}
\end{document}
%</driver>
%    \end{macrocode}
%
% ********************************************** END METACOMMENT \fi
%
%   There are a few symbols which are sometimes needed as big
%   operators but not available by means of the computer modern math
%   extension font. Hence we define a little supplement here.
%   The corresponding package \pkg{buxsym} defines the names.
%   \begin{quote}
%     \begin{tabular}{ll}
%       $\bigast_{i=1}^n L_i$  & |\bigast|\\
%       $\bigudot_{i=1}^n L_i$  & |\bigudot|\\
%       $\bigplus$              & |\bigplus|\\
%       $\bigtimes_{i=1}^n L_i$ & |\bigtimes|\\
%     \end{tabular}
%   \end{quote}
%
% \section{The package \pkg{buxsym}}
%    \begin{macrocode}
%<*package>
\InputIfFileExists{ubmexs.fd}{}{%
  \PackageWarningNoLine{buxsym}{File ubmexs.fd not found.
                    Math extension supplement wont work}
  \endinput
}
\DeclareSymbolFont{largesymsup}{U}{bmexs}{m}{n}
\DeclareMathSymbol{\bigast}{\mathop}{largesymsup}{'100}
\DeclareMathSymbol{\bigudot}{\mathop}{largesymsup}{'102}
\DeclareMathSymbol{\bigplus}{\mathop}{largesymsup}{'110}
\DeclareMathSymbol{\bigtimes}{\mathop}{largesymsup}{'112}
%</package>
%    \end{macrocode}
%
% \section{The File \file{ubmexs.fd}}
%    \begin{macrocode}
%<*fd>
\ProvidesFile{ubmexs.fd}[\FileDate\space\FileVersion,
                         TeX math extension supplement]
\DeclareFontFamily{U}{bmexs}{}
\DeclareFontShape{U}{bmexs}{m}{n}{ <-> sfixed * bmex10 }{}
%</fd>
%    \end{macrocode}
%
% \iffalse ********************************************* METACOMMENT
% ------------------------------------------------------------------
%
% \section{The \MF\ files}
%    \begin{macrocode}
%<*bmexnine>
% TeX Math Extension Supplement 9 point
if unknown cmbase: input cmbase fi

font_identifier:="BMEX"; font_size 9pt#;

u#:=18.5/36pt#;      % unit width
width_adj#:=0pt#;    % width adjustment for certain characters
serif_fit#:=0pt#;    % extra sidebar near lowercase serifs
cap_serif_fit#:=4.6/36pt#;  % extra sidebar near uppercase serifs
letter_fit#:=0pt#;    % extra space added to all sidebars

body_height#:=243/36pt#;  % height of tallest characters
asc_height#:=225/36pt#;    % height of lowercase ascenders
cap_height#:=221.4/36pt#;  % height of caps
fig_height#:=208.8/36pt#;  % height of numerals
x_height#:=139.5/36pt#;    % height of lowercase without ascenders
math_axis#:=81/36pt#;    % axis of symmetry for math symbols
bar_height#:=78.3/36pt#;  % height of crossbar in lowercase e
comma_depth#:=63/36pt#;    % depth of comma below baseline
desc_depth#:=63/36pt#;    % depth of lowercase descenders

crisp#:=0pt#;      % diameter of serif corners
tiny#:=8/36pt#;      % diameter of rounded corners
fine#:=7/36pt#;      % diameter of sharply rounded corners
thin_join#:=7/36pt#;    % width of extrafine details
hair#:=9/36pt#;      % lowercase hairline breadth
stem#:=24/36pt#;    % lowercase stem breadth
curve#:=28/36pt#;    % lowercase curve breadth
ess#:=25/36pt#;      % breadth in middle of lowercase s
flare#:=30/36pt#;    % diameter of bulbs or breadth of terminals
dot_size#:=35/36pt#;    % diameter of dots
cap_hair#:=10/36pt#;    % uppercase hairline breadth
cap_stem#:=29/36pt#;    % uppercase stem breadth
cap_curve#:=33/36pt#;    % uppercase curve breadth
cap_ess#:=31/36pt#;    % breadth in middle of uppercase s
rule_thickness#:=.38pt#;  % thickness of lines in math symbols

dish#:=1/36pt#;      % amount erased at top or bottom of serifs
bracket#:=18/36pt#;    % vertical distance from serif base to tangent
jut#:=25/36pt#;      % protrusion of lowercase serifs
cap_jut#:=33/36pt#;    % protrusion of uppercase serifs
beak_jut#:=9.2/36pt#;    % horizontal protrusion of beak serifs
beak#:=63/36pt#;    % vertical protrusion of beak serifs
vair#:=8/36pt#;      % vertical diameter of hairlines
notch_cut#:=9pt#;    % maximum breadth above or below notches
bar#:=10/36pt#;      % lowercase bar thickness
slab#:=10/36pt#;    % serif and arm thickness
cap_bar#:=10/36pt#;    % uppercase bar thickness
cap_band#:=10/36pt#;    % uppercase thickness above/below lobes
cap_notch_cut#:=9pt#;    % max breadth above/below uppercase notches
serif_drop#:=3.6/36pt#;    % vertical drop of sloped serifs
stem_corr#:=1/36pt#;    % for small refinements of stem breadth
vair_corr#:=1/36pt#;    % for small refinements of hairline height
apex_corr#:=0pt#;    % extra width at diagonal junctions

o#:=7/36pt#;      % amount of overshoot for curves
apex_o#:=7/36pt#;    % amount of overshoot for diagonal junctions

slant:=0;      % tilt ratio $(\Delta x/\Delta y)$
fudge:=1;      % factor applied to weights of heavy characters
math_spread:=.2;    % extra openness of math symbols
superness:=1/sqrt2;    % parameter for superellipses
superpull:=1/6;      % extra openness inside bowls
beak_darkness:=11/30;    % fraction of triangle inside beak serifs
ligs:=2;      % level of ligatures to be included

square_dots:=false;    % should dots be square?
hefty:=false;      % should we try hard not to be overweight?
serifs:=true;      % should serifs and bulbs be attached?
monospace:=false;    % should all characters have the same width?
variant_g:=false;    % should an italic-style g be used?
low_asterisk:=false;    % should the asterisk be centered at the axis?
math_fitting:=false;    % should math-mode spacing be used?

% the following font parameters are explained in {\sl The \TeX book}, Appendix G
fontdimen 8:  % parameters $\xi_8$ through $\xi_{13}$ will now be listed
 rule_thickness#,  % default\_rule\_thickness
 36/36pt#,    % big\_op\_spacing1
 54/36pt#,    % big\_op\_spacing2
 64.8/36pt#,    % big\_op\_spacing3
 196/36pt#,    % big\_op\_spacing4
 36/36pt#;    % big\_op\_spacing5

generate bmathex      % switch to the driver file
%</bmexnine>
%    \end{macrocode} 
%
%    \begin{macrocode}
%<*bmexten>
% TeX Math Extension Supplement 10 point
if unknown cmbase: input cmbase fi

font_identifier:="BMEX"; font_size 10pt#;

u#:=20/36pt#;      % unit width
width_adj#:=0pt#;    % width adjustment for certain characters
serif_fit#:=0pt#;    % extra sidebar near lowercase serifs
cap_serif_fit#:=5/36pt#;  % extra sidebar near uppercase serifs
letter_fit#:=0pt#;    % extra space added to all sidebars

body_height#:=270/36pt#;  % height of tallest characters
asc_height#:=250/36pt#;    % height of lowercase ascenders
cap_height#:=246/36pt#;    % height of caps
fig_height#:=232/36pt#;    % height of numerals
x_height#:=155/36pt#;    % height of lowercase without ascenders
math_axis#:=90/36pt#;    % axis of symmetry for math symbols
bar_height#:=87/36pt#;    % height of crossbar in lowercase e
comma_depth#:=70/36pt#;    % depth of comma below baseline
desc_depth#:=70/36pt#;    % depth of lowercase descenders

crisp#:=0pt#;      % diameter of serif corners
tiny#:=8/36pt#;      % diameter of rounded corners
fine#:=7/36pt#;      % diameter of sharply rounded corners
thin_join#:=7/36pt#;    % width of extrafine details
hair#:=9/36pt#;      % lowercase hairline breadth
stem#:=25/36pt#;    % lowercase stem breadth
curve#:=30/36pt#;    % lowercase curve breadth
ess#:=27/36pt#;      % breadth in middle of lowercase s
flare#:=33/36pt#;    % diameter of bulbs or breadth of terminals
dot_size#:=38/36pt#;    % diameter of dots
cap_hair#:=11/36pt#;    % uppercase hairline breadth
cap_stem#:=32/36pt#;    % uppercase stem breadth
cap_curve#:=37/36pt#;    % uppercase curve breadth
cap_ess#:=35/36pt#;    % breadth in middle of uppercase s
rule_thickness#:=.4pt#;    % thickness of lines in math symbols

dish#:=1/36pt#;      % amount erased at top or bottom of serifs
bracket#:=20/36pt#;    % vertical distance from serif base to tangent
jut#:=28/36pt#;      % protrusion of lowercase serifs
cap_jut#:=37/36pt#;    % protrusion of uppercase serifs
beak_jut#:=10/36pt#;    % horizontal protrusion of beak serifs
beak#:=70/36pt#;    % vertical protrusion of beak serifs
vair#:=8/36pt#;      % vertical diameter of hairlines
notch_cut#:=10pt#;    % maximum breadth above or below notches
bar#:=11/36pt#;      % lowercase bar thickness
slab#:=11/36pt#;    % serif and arm thickness
cap_bar#:=11/36pt#;    % uppercase bar thickness
cap_band#:=11/36pt#;    % uppercase thickness above/below lobes
cap_notch_cut#:=10pt#;    % max breadth above/below uppercase notches
serif_drop#:=4/36pt#;    % vertical drop of sloped serifs
stem_corr#:=1/36pt#;    % for small refinements of stem breadth
vair_corr#:=1/36pt#;    % for small refinements of hairline height
apex_corr#:=0pt#;    % extra width at diagonal junctions

o#:=8/36pt#;      % amount of overshoot for curves
apex_o#:=8/36pt#;    % amount of overshoot for diagonal junctions

slant:=0;      % tilt ratio $(\Delta x/\Delta y)$
fudge:=1;      % factor applied to weights of heavy characters
math_spread:=0;      % extra openness of math symbols
superness:=1/sqrt2;    % parameter for superellipses
superpull:=1/6;      % extra openness inside bowls
beak_darkness:=11/30;    % fraction of triangle inside beak serifs
ligs:=2;      % level of ligatures to be included

square_dots:=false;    % should dots be square?
hefty:=false;      % should we try hard not to be overweight?
serifs:=true;      % should serifs and bulbs be attached?
monospace:=false;    % should all characters have the same width?
variant_g:=false;    % should an italic-style g be used?
low_asterisk:=false;    % should the asterisk be centered at the axis?
math_fitting:=false;    % should math-mode spacing be used?

% the following font parameters are explained in {\sl The \TeX book}, Appendix G
fontdimen 8:  % parameters $\xi_8$ through $\xi_{13}$ will now be listed
 rule_thickness#,  % default\_rule\_thickness
 40/36pt#,    % big\_op\_spacing1
 60/36pt#,    % big\_op\_spacing2
 72/36pt#,    % big\_op\_spacing3
 216/36pt#,    % big\_op\_spacing4
 36/36pt#;    % big\_op\_spacing5

generate bmathex      % switch to the driver file
%</bmexten>
%    \end{macrocode} 
%
%    \begin{macrocode}
%<*bmathex>
font_coding_scheme:="TeX math extension supplement";
mode_setup; font_setup;

input bmbigop;  % large operators

font_x_height x_height#;
font_quad 18u#+4letter_fit#;
bye.
%</bmathex>
%    \end{macrocode} 
%
%    \begin{macrocode}
%<*bmbigop>
% Each operator has a `{\tt\char`\\textstyle}' form, for math in text,
% and a `{\tt\char`\\displaystyle}' form, for displayed formulas.

% Character codes \0100--\0103, \0110--\0113 are generated.

charlist oct"100": oct"101";  % bigasterix operators
charlist oct"102": oct"103";  % disjoint union sign
charlist oct"110": oct"111";  % bigplus operators
charlist oct"112": oct"113";  % bigplus operators

cmchar "\textstyle bigasterix oparator";
beginchar(oct"100",20u#,0,10/6dh#);
adjust_fit(0,0);
numeric ast_flare; ast_flare=hround.7[thin_join,stem];
x0=.5w; y0=.5[h,-d];
for t=-150 step 60 until 150: z[t]=z0+.5 dir t scaled d;
  numeric theta; theta=angle(z[t]-z0);
  fill z0+1(0,-thin_join) rotated theta
       --- z[t]+1(-ast_flare,-ast_flare) rotated theta
       .. z[t]
       .. z[t]+1(-ast_flare,ast_flare) rotated theta
       --- z0+1(0,thin_join) rotated theta
       -- cycle;
  endfor
labels(0,[-150],[-90],[-30],30,90,150); endchar;

cmchar "\displaystyle bigasterix oparator";
beginchar(oct"101",27.2u#,0,14/6dh#); padded 1/6dh#;
adjust_fit(0,0);
numeric ast_flare; ast_flare=hround.7[thin_join,stem];
x0=.5w; y0=.5[h,-d];
for t=-150 step 60 until 150: z[t]=z0+.5 dir t scaled d;
  numeric theta; theta=angle(z[t]-z0);
  fill z0+1(0,-thin_join) rotated theta
       --- z[t]+1(-ast_flare,-ast_flare) rotated theta
       .. z[t]
       .. z[t]+1(-ast_flare,ast_flare) rotated theta
       --- z0+1(0,thin_join) rotated theta
       -- cycle;
  endfor
labels(0,[-150],[-90],[-30],30,90,150); endchar;

cmchar "\textstyle disjoint union sign";
beginchar(oct"102",15u#,0,10/6dh#);
adjust_fit(0,0); pickup pencircle scaled stem;
lft x1=hround u; x2=x1; x3=w-x3; x4=x5=w-x1;
top y1=eps; bot y3=-d; y2=y4=2/3[y1,y3]; y5=y1;
draw z1---z2...z3...z4---z5;  % stems and cup
x6=x3; y6=.47[y1,y3];
fill fullcircle scaled(bold+4dw+eps) shifted(z6); % dot
labels(1,2,3,4,5,6); endchar;

cmchar "\displaystyle disjoint union sign";
beginchar(oct"103",20u#,0,14/6dh#); padded 1/6dh#;
adjust_fit(0,0); pickup pencircle scaled curve;
lft x1=hround u; x2=x1; x3=w-x3; x4=x5=w-x1;
top y1=eps; bot y3=-d; y2=y4=2/3[y1,y3]; y5=y1;
draw z1---z2...z3...z4---z5;  % stems and cup
x6=x3; y6=.47[y1,y3];
fill fullcircle scaled(bold+6dw+eps) shifted(z6); % dot
labels(1,2,3,4,5,6); endchar;

cmchar "\textstyle bigplus operator";
beginchar(oct"110",20u#,0,10/6dh#);
adjust_fit(0,0); pickup pencircle scaled stem;
lft x6=hround u; x2=w-x6; top y8=0; bot y4=-d;
circle_points;             % this is a trick !
draw z2--z6; draw z4--z8;  % plus
labels(2,4,6,8); endchar;

cmchar "\displaystyle bigplus operator";
beginchar(oct"111",27.2u#,0,14/6dh#); padded 1/6dh#;
adjust_fit(0,0); pickup pencircle scaled curve;
lft x6=hround u; x2=w-x6; top y8=0; bot y4=-d;
circle_points;             % this is a trick !
draw z2--z6; draw z4--z8;  % plus
labels(2,4,6,8); endchar;

cmchar "\textstyle bigtimes operator";
beginchar(oct"112",20u#,0,10/6dh#);
adjust_fit(0,0); pickup pencircle scaled stem;
lft x6=hround u; x2=w-x6; top y8=0; bot y4=-d;
circle_points;             % this is a trick!
draw z1--z5; draw z3--z7;  % times
labels(1,3,5,7); endchar;

cmchar "\displaystyle bigtimes operator";
beginchar(oct"113",27.2u#,0,14/6dh#); padded 1/6dh#;
adjust_fit(0,0); pickup pencircle scaled curve;
lft x6=hround u; x2=w-x6; top y8=0; bot y4=-d;
circle_points;             % this is a trick !
draw z1--z5; draw z3--z7;  % times
labels(1,3,5,7); endchar;
%</bmbigop>
%    \end{macrocode} 
%
% ********************************************** END METACOMMENT \fi
%
% \iffalse ********************************************* METACOMMENT
% ------------------------------------------------------------------
% \section{Character Table}
%    \begin{macrocode}
%<*installation>
\endinput
%</installation>
%    \end{macrocode}
% ------------------------------------------------------------------
% ********************************************** END METACOMMENT \fi
%
%% \CharacterTable
%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%%   Digits        \0\1\2\3\4\5\6\7\8\9
%%   Exclamation   \!     Double quote  \"     Hash (number) \#
%%   Dollar        \$     Percent       \%     Ampersand     \&
%%   Acute accent  \'     Left paren    \(     Right paren   \)
%%   Asterisk      \*     Plus          \+     Comma         \,
%%   Minus         \-     Point         \.     Solidus       \/
%%   Colon         \:     Semicolon     \;     Less than     \<
%%   Equals        \=     Greater than  \>     Question mark \?
%%   Commercial at \@     Left bracket  \[     Backslash     \\
%%   Right bracket \]     Circumflex    \^     Underscore    \_
%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%%   Right brace   \}     Tilde         \~}
%%
% \Finale
