1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
|
%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 / Hans Hagen \& Ton Otten}]
%C
%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.
\writestatus{loading}{Context Support Macros / Math}
\unprotect
%D \macros
%D {mathematics, math, nomathematics, startmathmode}
%D
%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
%D \starttyping
%D \def\MyPlus{$\,+\,$}
%D \stoptyping
%D
%D the sequence \type{$x^2 \MyPlus y^2 = r^2$} will expand to:
%D
%D \starttyping
%D $x^2 $\,+\,$ y^2 = r^2$
%D \stoptyping
%D
%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
%D \starttyping
%D \def\MyPlus{\mathematics{\,+\,}}
%D \stoptyping
%D
%D Which is implemented as:
\def\mathematics#1{\relax\ifmmode#1\else$#1$\fi} % lookahead bug reported by brooks
\def\startmathmode
{\ifmmode
\let\stopmathmode\relax
\else
$\def\stopmathmode{$}% \let\stopmathmode=$
\fi}
\def\nomathematics#1%
{\ifmmode\hbox{#1}\else#1\fi}
\let\math\mathematics
%D \macros
%D {dimension, nodimension}
%D
%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.
\newsignal\dimensionsignal
\def\dimensiontypeface {\tf}
\def\dimensionhalfspace {\,}
\unexpanded\def\dimension#1%
{\def\dodimensionsignal{\kern\dimensionsignal}%
\ifdim\lastskip=\zeropoint\relax
\ifdim\lastkern=\zeropoint\relax
\ifmmode
\mathematics{\dimensionhalfspace\dimensionhalfspace\dimensiontypeface#1}%
\else
\mathematics{\dimensiontypeface#1}%
\fi
\else\ifdim\lastkern=\dimensionsignal
\mathematics{\dimensionhalfspace\dimensiontypeface#1}%
\else
\unkern\mathematics{\dimensionhalfspace\dimensionhalfspace\dimensiontypeface#1}%
\fi\fi
\else
\unskip\mathematics{\dimensionhalfspace\dimensionhalfspace\dimensiontypeface#1}%
\fi
\dodimensionsignal}
\unexpanded\def\nodimension#1%
{\unskip#1\global\let\dodimensionsignal\relax}
%D \macros
%D {super, suber}
%D
%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).
\global\let\normalsuper=^
\global\let\normalsuber=_
\newcount\supersubmode
\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}
\def\super#1{\normalsuper{\the\everysupersub#1}}
\def\suber#1{\normalsuber{\the\everysupersub#1}}
%D \macros
%D {enablesupsub}
%D
%D We can let \type {^} and \type {_} act like \type {\super}
%D and \type {\suber} by saying \type {\enablesupsub}.
\bgroup
\catcode`\^=\@@active
\catcode`\_=\@@active
\gdef\enablesupsub
{\catcode`\^=\@@active
\def^{\ifmmode\expandafter\super\else\expandafter\normalsuper\fi}%
\catcode`\_=\@@active
\def_{\ifmmode\expandafter\suber\else\expandafter\normalsuber\fi}}
\egroup
%D \macros
%D {restoremathstyle}
%D
%D We can pick up the current math style by calling \type
%D {\restoremathstyle}.
\def\restoremathstyle
{\ifmmode
\ifcase\supsubmode
\textstyle
\or
\scriptstyle
\else
\scriptscriptstyle
\fi
\fi}
\protect \endinput
|