math-tim.mkii / last modification: 2020-01-30 14:15
%D \module
%D   [       file=math-tim,
%D        version=2001.04.12,
%D          title=\CONTEXT\ Math Macros,
%D       subtitle=Mathtime Specials,
%D         author={Hans Hagen \& Taco Hoekwater},
%D           date=\currentdate,
%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
%C
%C This module is part of the \CONTEXT\ macro||package and is
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.

\endinput % i will clean this up after taco has gone over it

%D With thanks to Berthold Horn from YandY for providing me
%D evaluation copies of the MathTimePlus fonts.

% version 0 : Michael Spivak
% version 1 : Taco Hoekwater
% version 2 : Hans Hagen
% version 3 : etc etc etc

\unprotect

%D We use the predefined spare families \type {\mcfam} and
%D \type {\mdfam}.

\let\cafam\mcfam \let\hexcafam\hexmcfam
\let\gbfam\mdfam \let\hexgbfam\hexmdfam
\let\gkfam\mdfam \let\hexgkfam\hexmdfam

% Why is this needed?

% \font\tenmd  =mtgu at 10pt
% \font\sevenmd=mtgu at 7.6pt
% \font\fivemd =mtgu at 6pt
% \font\tenmc  =mtms at 10pt
% \font\sevenmc=mtms at 7.6pt
% \font\fivemc =mtms at 6pt
%
% \textfont        \mcfam\tenmc   \textfont        \mdfam\tenmd
% \scriptfont      \mcfam\sevenmc \scriptfont      \mdfam\sevenmd
% \scriptscriptfont\mcfam\fivemc  \scriptscriptfont\mdfam\fivemd

% \addtocommalist{gk}\familylist
% \addtocommalist{gb}\familylist
%
% \defineinterfaceconstant {ca} {ca} % boohoo!
% \defineinterfaceconstant {gk} {gk} % boohoo!
% \defineinterfaceconstant {gb} {gb} % boohoo!

% \definealternativestyle[script]   [\ca][\ca]
% \definealternativestyle[greek]    [\gk][\gk]
% \definealternativestyle[boldgreek][\gb][\gb]

% \definebodyfont
%   [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt] [rm]
%   [ca=mtms  sa 1,
%    gk=mtgu  sa 1,
%    gb=mtgub sa 1]

%D Since a font size is a rather fuzzy thing, it will be no
%D surprise that the Math Times fonts have different specs
%D than the Computer Modern Roman fonts.
%D
%D \starttabulate[|Bl|c|c|c|c|c|c|c|c|c|c|]
%D \NC Computer Modern\NC
%D     5  \NC6  \NC7  \NC8  \NC9  \NC10  \NC11  \NC12  \NC14  \NC18\NC\NR
%D \NC Math Times     \NC
%D     6.0\NC6.8\NC7.6\NC8.4\NC9.2\NC10.0\NC10.8\NC11.6\NC13.2\NC--\NC\NR
%D \stoptabulate
%D
%D The following definitions presume the existence of \type
%D {tio} and \type {tibio} font alternatives. Definitions for
%D \type {\tf.} etc and \type {\sc} are left as they are.

%D moved code

%D The next lines set up coding dependant versions of math
%D accents (for \type {texnansi} of course). These are needed
%D in commands like \type {\bf} and \type {\it} (which use the
%D text font encoding) a opposed to \type {_no spec_} and
%D \type {mi} that use the math font encoding. This stuff
%D should be made more general!

% \daghex, \ddaghex and \dothex were wrong in my version of mtmacs

\def\daghex  {86}  % to do
\def\ddaghex {87}
\def\Shex    {A7}
\def\Phex    {B6}
\def\barhex  {16}
\def\gravehex{12}
\def\acutehex{13}
\def\checkhex{14}
\def\brevehex{15}
\def\hathex  {5E}
\def\dothex  {05}
\def\tildehex{7E}
\def\ddothex {7F}

%D The \type {mtex} fonts need a recalculation of \type
%D {\p@renwd}, which in \CONTEXT\ is done automatically.

%D The following definitions are mostly copied from the file
%D \type {mtmacs.tex}, which banner said:
%D
%D \starttyping
%D MTMACS.TEX VERSION 1.1.1 (1996 Dec 8)
%D COPYRIGHT (C) 1992, 1993, 1996 BY THE TEXPLORATORS CORPORATION
%D ALL RIGHTS RESERVED
%D \stoptyping
%D
%D We reformatted the macros and changed a few bits and
%D pieces. A further cleanup with regards to the scratch
%D registers will be done later.

\mathchardef\Gamma         = "0130
\mathchardef\Delta         = "0131
\mathchardef\Theta         = "0132
\mathchardef\Lambda        = "0133
\mathchardef\Xi            = "0134
\mathchardef\Pi            = "0135
\mathchardef\Sigma         = "0136
\mathchardef\Upsilon       = "0137
\mathchardef\Phi           = "0138
\mathchardef\Psi           = "0139
\mathchardef\Omega         = "017F
\mathchardef\varGamma      = "0100
\mathchardef\varDelta      = "0101
\mathchardef\varTheta      = "0102
\mathchardef\varLambda     = "0103
\mathchardef\varXi         = "0104
\mathchardef\varPi         = "0105
\mathchardef\varSigma      = "0106
\mathchardef\varUpsilon    = "0107
\mathchardef\varPhi        = "0108
\mathchardef\varPsi        = "0109
\mathchardef\varOmega      = "010A
\mathchardef\varkappa      = "017E

\mathchardef\ldotp         = "613A

\mathchardef\triangleleft  = "2247
\mathchardef\triangleright = "2246
\mathchardef\comp          = "2242

\mathchardef\Relbar        = "3248
\mathchardef\dagger        = "20\daghex    % to do
\mathchardef\ddagger       = "20\ddaghex   % to do
\mathchardef\dotacc        = "0250

\mathcode`\( = "412E
\mathcode`\) = "512F
\mathcode`\. = "013A
\mathcode`\, = "613B
\mathcode`\+ = "2243
\mathcode`\= = "3244
\mathcode`\; = "6249

\delcode `\( = "12E300
\delcode `\) = "12F301

\let\mit=\undefined % to do

\def\vec{\mathaccent"0245 }
\def\t#1{{\edef\next{\the\font}\the\textfont2\accent"41\next#1}}

% fam equals -1 unless the user has said something
% like \rm (cf. the texbook page 290)

\def\ifdefaultfamelse#1#2%
  {\ifnum\fam=\minusone\mathaccent#1\else\mathaccent#2\fi}

\let\noaccents@\relax

\def\grave  {\ifdefaultfamelse{"024A}{"70\gravehex}}
\def\acute  {\ifdefaultfamelse{"024B}{"70\acutehex}}
\def\check  {\ifdefaultfamelse{"024C}{"70\checkhex}}
\def\breve  {\ifdefaultfamelse{"024D}{"70\brevehex}}
\def\bar    {\ifdefaultfamelse{"024E}{"70\barhex  }}
\def\hat    {\ifdefaultfamelse{"024F}{"70\hathex  }}
\def\dot    {\ifdefaultfamelse{"0250}{"70\dothex  }}
\def\tilde  {\ifdefaultfamelse{"0251}{"70\tildehex}}
\def\ddot   {\ifdefaultfamelse{"0252}{"70\ddothex }}

\def\widebar{\mathaccent"0253 }

\def\mathhexbox@#1#2#3%
  {\relax
   \ifmmode
     \mathpalette{}{\mathsurround\zeropoint\rm\mathchar"#1#2#3}%
   \else
     \leavevmode
     \hbox{$\mathsurround\zeropoint\rm\mathchar"#1#2#3$}%
   \fi}

\def\dag {\edef\next@{0\daghex }\expandafter\mathhexbox@\next@}
\def\ddag{\edef\next@{0\ddaghex}\expandafter\mathhexbox@\next@}

\def\S{\edef\next@{0\Shex}\expandafter\mathhexbox@\next@}
\def\P{\edef\next@{0\Phex}\expandafter\mathhexbox@\next@}

\def\vdots%
  {\vbox
     {\baselineskip4\points
      \lineskiplimit\zeropoint
      \kern6\points\hbox{$\mathsurround\zeropoint.$}\hbox{$\mathsurround\zeropoint.$}\hbox{$\mathsurround\zeropoint.$}}}

\def\ddots%
  {\mathinner
     {\mkern1mu
      \raise7\points\vbox{\kern 7\points\hbox{$\mathsurround\zeropoint.$}}\mkern2mu
      \raise4\points\hbox{$\mathsurround\zeropoint.$}\mkern2mu
      \raise \points\hbox{$\mathsurround\zeropoint.$}\mkern1mu}}

\def\hbar
  {{\mathchoice
      {\hbox{\lower.07em \hbox{$\mathchar"\barhex$}}}
      {\hbox{\lower.07em \hbox{$\mathchar"\barhex$}}}
      {\hbox{\lower.049em\hbox{$\scriptstyle\mathchar"\barhex$}}}
      {\hbox{\lower.035em\hbox{$\scriptscriptstyle\mathchar"\barhex$}}}%
  \mkern-6.3muh}}

\def\angle%
  {{\vbox{\ialign{$\mathsurround\zeropoint\scriptstyle##$\crcr
      \not\mathrel{\mkern14mu}\crcr
      \noalign{\nointerlineskip}
      \mkern2.5mu\leaders\hrule height.48\points\hfill\mkern2.5mu\crcr}}}}

\newdimen\amstexex

\amstexex = .2326ex

\def\varinjlim%
  {\mathop{\vtop{\ialign{##\crcr
     \hfil\the\textfont\zerocount lim\hfil\crcr
     \noalign{\nointerlineskip}\rightarrowfill\crcr
     \noalign{\nointerlineskip\kern-\amstexex}\crcr}}}}

\def\varprojlim%
  {\mathop{\vtop{\ialign{##\crcr
     \hfil\the\textfont\zerocount lim\hfil\crcr
     \noalign{\nointerlineskip}\leftarrowfill\crcr
     \noalign{\nointerlineskip\kern-\amstexex}\crcr}}}}

\def\varliminf{\mathop{\underbar  {lim}}} % context-ified
\def\varlimsup{\mathop{\overstrike{lim}}} % context-ified

\def\spdot   {^{\hbox{\raise\amstexex\hbox{\the\textfont\zerocount   .}}}}
\def\spddot  {^{\hbox{\raise\amstexex\hbox{\the\textfont\zerocount  ..}}}}
\def\spdddot {^{\hbox{\raise\amstexex\hbox{\the\textfont\zerocount ...}}}}
\def\spddddot{^{\hbox{\raise\amstexex\hbox{\the\textfont\zerocount....}}}}

%D Here some code is merged in order to save strings.

\def\domultidot#1#2%
  {\setbox0\hbox{$#1#2$}%
   \setbox2\hbox{$#1\infty$}%
   \dimen0\ht2
   \ifdim\ht0<\dimen0 \dimen0\ht0 \fi
   \setbox2\hbox{$#1#2\mathchar"012D$}%
   \dimen2\wd2
   \advance\dimen2-\wd0
   \setbox0\hbox{$#1\rhook$}%
   \advance\dimen2-\wd0
   \vbox
     {\offinterlineskip
      \ialign{\hfil$#1##$\hfil\cr
        \kern\dimen2\dotacc\mkern-2.5mu\dotacc\mkern-2.5mu\dotacc\thirddot\cr
        \noalign{\vskip-\dimen0}%
        #2\cr}}}

\def\dddot%
  {\def\thirddot{}%
   \mathpalette\domultidot}

\def\ddddot%
  {\def\thirddot{\mkern-2.5mu\dotacc}%
   \mathpalette\domultidot}

\newcount\uproot@
\newcount\leftroot@

\def\nonmatherr#1%
  {\errmessage{\noexpand#1allowed only in math mode}}

\def\uproot#1%
  {\relax
   \ifmmode
     \uproot@#1\relax
   \else
     \nonmatherr\uproot
   \fi}

\def\leftroot#1%
  {\relax
   \ifmmode
     \leftroot@#1\relax
   \else
     \nonmatherr\leftroot
   \fi}

\def\root#1\of#2%
  {\setbox\rootbox=\hbox{$\mathsurround\zeropoint\scriptscriptstyle{#1}$}%
   \mathpalette\r@@t{#2}}

\def\r@@t#1#2%
  {\setbox\zerocount\hbox{$\uproot@\zerocount\leftroot\zerocount\mathsurround\zeropoint#1\sqrt{#2}$}%
   \dimen@\ht\zerocount\advance\dimen@-\dp\zerocount
   \dimen@ii\dimen@
   \ifdim\dimen@>30\points \advance\dimen@ii-16\points \else
   \ifdim\dimen@>24\points \advance\dimen@ii -8\points \else
   \ifdim\dimen@>18\points \advance\dimen@ii -6\points \else
   \ifdim\dimen@>12\points \advance\dimen@ii -4\points \else
   \ifdim\dimen@>10\points \advance\dimen@ii -2\points \fi\fi\fi\fi\fi
   \setbox\plustwo=\hbox{$\mathsurround\zeropoint#1\mskip\uproot@ mu$}%
   \advance\dimen@ii by1.667\wd\plustwo
   \mkern-\leftroot@ mu\mkern5mu\raise.6\dimen@ii\copy\rootbox
   \mkern-8mu\mkern\leftroot@ mu\box\zerocount\leftroot\zerocount\uproot\zerocount}

\def\space@.{\futurelet\space@\relax} \space@. % really needed ?

\def\jadjust%
  {\mkern-\plustwo mu}

%D For the moment the following code is left unchanged. It is
%D not used anyway.

\newif\ifsubscriptcorrection \subscriptcorrectionfalse

\ifsubscriptcorrection

  \expandafter\let\csname subscript character \string_\endcsname_

  \catcode`\_=\active

  \def_%
    {\ifmmode
       \expandafter\sb@
     \else
       \expandafter\csname subscript character \string_\endcsname
     \fi}

  \let\sb_

  \ifnum\catcode`\^^A=8 \catcode`\^^A\active\let^^A_\fi

  \def\sb@#1%
    {\csname subscript character \string_\endcsname
     {\futurelet\next\sb@@#1}}

  \def\sb@@%
    {\ifx\next\space@
       \def\next@. %
         {\futurelet\next\sb@@}%
     \else
       \def\next@.%
         {\ifx\next j%
            \mkern-\plustwo mu\else
          \ifx\next f%
            \mkern-\plustwo mu\else
          \ifx\next p%
            \mkern-\plusone mu\fi\fi\fi}%
     \fi
     \next@.}

\fi

\protect