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

%D For practical reasons, I decided to move some math things to
%D a support module. There is nothing spectacular here. It may move
%D back to math-ini.

\writestatus{loading}{ConTeXt Support Macros / Math}


%D \macros
%D   {mathematics, math, nomathematics, startmathmode}
%D The \type{$} can be both an begin and end math character.
%D This can lead to confusing and errorprone situations when
%D macros insert \type{$}. When for instance we have defined:
%D \starttyping
%D \def\MyPlus{$\,+\,$}
%D \stoptyping
%D the sequence \type{$x^2 \MyPlus y^2 = r^2$} will expand to:
%D \starttyping
%D $x^2 $\,+\,$ y^2 = r^2$
%D \stoptyping
%D Here the \type{\,} are given outside math mode and \TEX\ will
%D definitely complain about this. A more save definition would
%D have been:
%D \starttyping
%D \def\MyPlus{\mathematics{\,+\,}}
%D \stoptyping
%D Which is implemented as:

\long\def\mathematics#1{\relax\ifmmode#1\else $#1$\fi} % lookahead bug reported by brooks
\long\def\inlinemath #1{\dontleavehmode\relax\ifmmode#1\else $#1$\fi}


\def\startmathmode % cannot be used nested
     $\def\stopmathmode{$}%  \let\stopmathmode=$

\def\startmathmode % nested variant



%D \macros
%D   {displaymathematics,inlinemathematics,automathematics}
%D An example of usage of the following can be found in the MathML module:

     \def\inlinemathematics   {\dontleavehmode\mathematics}
     \def\automathematics     {\relax\ifhmode\@EA\inlinemathematics\else\@EA\displaymathematics\fi}

% better, esp when used in bTABLE ... eTABLE


%D \macros
%D   {dimension, nodimension}
%D The next few macros are used for typesetting dimensions in
%D such a way that spacing is acceptable. I won't spend much
%D words on these macros, because they will be overloaded in
%D the units module.


\def\dimensiontypeface  {\tf}
\def\dimensionhalfspace {\,}



%D \macros
%D   {super, suber}
%D \TEX\ uses \type{^} and \type{_} for entering super- and
%D subscript mode. We want however a bit more control than
%D normally provided, and therefore provide \type {\super}
%D and \type{\suber} (\type {\sub} is already taken).



\newevery\everysupersub \EverySuperSub

\appendtoks \advance\supersubmode 1\relax \to \everysupersub

% \def\dodosuper#1{\normalsuper{\the\everysupersub#1}}
% \def\dodosuber#1{\normalsuber{\the\everysupersub#1}}
% \def\dosuper{\ifx\next\bgroup\expandafter\dodosuper\else\normalsuper\fi}
% \def\dosuber{\ifx\next\bgroup\expandafter\dodosuber\else\normalsuber\fi}
% \def\super{\futurelet\next\dosuper}
% \def\suber{\futurelet\next\dosuber}


%D \macros
%D   {enablesupsub}
%D We can let \type {^} and \type {_} act like \type {\super}
%D and \type {\suber} by saying \type {\enablesupsub}.


%D \macros
%D   {restoremathstyle}
%D We can pick up the current math style by calling \type
%D {\restoremathstyle}.


%D \macros
%D   {cramped}
%D \TEX provides no primitive to force in cramped math mode. Here is
%D a macro that does so. It is based on a solution by Don Knuth (\useurl
%D {}).
%D \startbuffer
%D \ruledhbox{$\left\{{x^2\over y^2}\right\}$}
%D \ruledhbox{$\cramped{\left\{ {x^2\over y^2}\right\}}$}
%D \stopbuffer
%D \typebuffer \getbuffer


%D We force a cramped style by issuing a non||existing radical (box).
%D After that we make sure the height is correct. (Comment taken from
%D Morten H√łgholm's mathtools package.) Macro suggested by AM and
%D cleaned up a bit by HH.

% original
% \def\docramped#1#2%
%   {\setbox\scratchbox\hbox
%     {\nulldelimiterspace\zeropoint
%      $\mathsurround\zeropoint#1\radical\zerocount{#2}$}%
%    \ifx#1\displaystyle
%       \scratchdimen\fontdimen8\textfont3
%       \advance\scratchdimen .25\fontdimen5\textfont2
%    \else
%       \scratchdimen1.25\fontdimen8
%       \ifx#1\textstyle\textfont
%       \else
%         \ifx#1\scriptstyle\scriptfont\else\scriptscriptfont\fi
%       \fi
%       3
%     \fi
%     \advance\scratchdimen-\ht\scratchbox
%     \ht\scratchbox-\scratchdimen
%     \box\scratchbox}

  {\begingroup % added HH, made even more cramped
          \fi \fi

%D \macros
%D    {cramedllap, crampedrlap, crampedclap}
%D In many cases, one wants to use the \tex {clap} macro in
%D math mode while using subscripts. Normally, subscripts are
%D in cramped mode, and these macros allow you to go to
%D cramped mode. For example:
%D \startbuffer
%D \startformula
%D   \sum_{a^2 < b^2 < c^2} \quad
%D   \sum_{\clap{a^2 < b^2 < c^2}} \quad
%D   \sum_{\crampedclap{a^2 < b^2 < c^2}}
%D \stopformula
%D \stopbuffer
%D \start
%D   \typebuffer
%D   \switchtobodyfont[24pt]
%D   \getbuffer
%D \stop
%D Notice that \type {\clap{\cramped ... }} would also work,
%D but it requires \TEX\ to typeset it arguments 16 times.

\def\docrampedllap#1#2{{}\dollap{\docramped #1{#2}}}
\def\docrampedrlap#1#2{{}\dorlap{\docramped #1{#2}}}
\def\docrampedclap#1#2{{}\doclap{\docramped #1{#2}}}


\protect \endinput