%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Module:    ZzTeX New Mathematics Facilities
%
% Synopsis:  This file provides the mathematics facilities for "new math"
%            version 5.
%
% Author:    Paul C. Anagnostopoulos
% Created:   24 September 2003
%
% Copyright 1989--2020 by Paul C. Anagnostopoulos
% under The MIT License (opensource.org/licenses/MIT)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%                       Document Parameters
%                       -------- ----------


\delimitershortfall = 2pt

%                       Math Spaces
%                       ---- ------


\setmathspaces{4mu plus .25mu minus .5mu}
              {4mu plus .25mu minus .5mu}
              {4mu plus .25mu minus .5mu}%

%                       Math Font Selections
%                       ---- ---- ----------


\outer\def \ComputerModernmathfonts {%
  \input zzcmmath\relax
  \setmathpunctuationstyle{\mit}{\rm}}

\outer\def \Lucidamathfonts #1{%                        {arrows?}
  \setflag \zusemar = #1\relax
  \input zzlucida\relax
  \setmathpunctuationstyle{\mit}{\rm}}

\outer\def \MathTimefonts #1{%                          {text face is Times?}
  \input zzmtime\relax
  \setmathucgreekstyles{\mit}{\boldgreekunavailable}%
  \if #1%
    \setmathpunctuationstyle{\mit}{\rm}%
  \else
    \setmathpunctuationstyle{\rm}{\rm}%
  \fi}

\outer\def \Stonemathfonts {%
  \setmathpunctuationstyle{\rm}{\rm}}

%                       Greek Letter Style
%                       ----- ------ -----


\def \zmucgreekstyler {}
\def \zmucgreekstyleb {}


% Note the "s" at the end of the name, versus \setmathucgreekstyle.

\def \setmathucgreekstyles #1#2{%               {regular-style}{bold-style}
  \gdef \zmucgreekstyler {#1}%
  \gdef \zmucgreekstyleb {#2}%
\definemathchar  \Alpha   \classvarfam \rmfam {41}%
\definemathchar  \Beta    \classvarfam \rmfam {42}%
\zdefucgreekchar \Gamma                       {30}%
\zdefucgreekchar \Delta                       {31}%
\definemathchar  \Epsilon \classvarfam \rmfam {45}%
\definemathchar  \Zeta    \classvarfam \rmfam {5A}%
\definemathchar  \Eta     \classvarfam \rmfam {48}%
\zdefucgreekchar \Theta                       {32}%
\definemathchar  \Iota    \classvarfam \rmfam {49}%
\definemathchar  \Kappa   \classvarfam \rmfam {4B}%
\zdefucgreekchar \Lambda                      {33}%
\definemathchar  \Mu      \classvarfam \rmfam {4D}%
\definemathchar  \Nu      \classvarfam \rmfam {4E}%
\zdefucgreekchar \Xi                          {34}%
\definemathchar  \Omicron \classvarfam \rmfam {4F}%
\zdefucgreekchar \Pi                          {35}%
\definemathchar  \Rho     \classvarfam \rmfam {50}%
\zdefucgreekchar \Sigma                       {36}%
\definemathchar  \Tau     \classvarfam \rmfam {54}%
\zdefucgreekchar \Upsilon                     {37}%
\zdefucgreekchar \Phi                         {38}%
\definemathchar  \Chi     \classvarfam \rmfam {58}%
\zdefucgreekchar \Psi                         {39}%
\zdefucgreekchar \Omega                       {7F}}

\def \zdefucgreekchar #1#2{%                            {\name}{code}
  \gdef #1{%
    \if \eqlp{\fam}{-1}%
      {\zmucgreekstyler \mathchar "70#2}%
    \else\if \eqlp{\fam}{\bffam}%
      {\zmucgreekstyleb \mathchar "70#2}%
    \else
      \error{invgrkstyle}{The current math family precludes using bold Greek}%
    \fi\fi}}

%                       Punctuation Style
%                       ----------- -----


% Here we deal with the style for comma, period, semicolon, and colon.
% The default punctuation style for all four is \rm.


% This macro defines the math characters \zmperiod, \zmcomma,
% colon, and semicolon to use the specified style.
% If the style is \mit, then it's different.

\def \setmathpunctuationstyle #1#2{%                    {\style1}{\style2}
  {\zmstyfam = \name{#1fam}%
   \if \eqlp{\zmstyfam}{\mitfam}%
     \definemathchar {`.} \classord  \mitfam {3A}%
     \definemathchar {`,} \classpunc \mitfam {3B}%
   \else
     \definemathchar {`.} \classactive \rmfam {00}%
     \definemathchar {`,} \classactive \rmfam {00}%
     \definemathchar {\zmperiod} \classord  \zmstyfam {2E}%
     \definemathchar {\zmcomma}  \classpunc \zmstyfam {2C}%
   \fi
   \zmstyfam = \name{#2fam}%
   \definemathchar {`;} \classpunc \zmstyfam {3B}%
   \definemathchar {`:} \classrel  \zmstyfam {3A}}}

% When period and comma are active in math, this is what they do.

{
\catcode `\. = \catactive
\gdef .{\mathpalette\zmactperiod{}}

\catcode `\, = \catactive
\gdef ,{\mathpalette\zmactcomma{}}
}

\def \zmactperiod #1#2{%
  \mathord{\hbox to .275em{\hfil $#1\zmperiod$\hfil}}}

\def \zmactcomma #1#2{%
  \mathpunct{\hbox to .331em{\kern .045em $#1\zmcomma$\hfil}}}

%                       Dot-Related Commands
%                       ----------- --------


\def \cdot {\mathbin{\vcenter{\hbox{$.$}}}}

\def \cdotp {\mathpunct{\vcenter{\hbox{$.$}}}}

\def \ldotp {\mathpunct{.}}

\def \cdots {\mathinner{\cdotp\cdotp\cdotp}}

\def \ddots {%
  \vbox{\baselineskip = 4pt \lineskiplimit = 0pt
        \hbox{.}%
        \hbox{\kern .4em .}%
        \hbox{\kern .8em .}%
        \vskip -.25ex}}

\def \ldots {\mathinner{\ldotp\ldotp\ldotp}}

\def \vdots {%
  \vbox{\baselineskip = 4pt \lineskiplimit = 0pt
        \hbox{.}%
        \hbox{.}%
        \hbox{.}%
        \vskip -.25ex}}

%                       Colon Commands
%                       ----- --------


\def \maps {\mathpunct{:}}

\let \colon = \maps