supp-mat.mkiv /size: 9755 b    last modification: 2020-07-01 14:35
 1%D \module 2%D [ file=supp-mat, 3%D version=1998.09.10, 4%D title=\CONTEXT\ Support Macros, 5%D subtitle=Math, 6%D author=Hans Hagen, 7%D date=\currentdate, 8%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] 9%C 10%C This module is part of the \CONTEXT\ macro||package and is 11%C therefore copyrighted by \PRAGMA. See mreadme.pdf for 12%C details. 13 14%D For practical reasons, I decided to move some math things to 15%D a support module. There is nothing spectacular here. It may move 16%D back to math-ini. 17 18\writestatus{loading}{ConTeXt Support Macros / Math} 19 20\unprotect 21 22%D \macros 23%D {mathematics, math, nomathematics, startmathmode} 24%D 25%D The \type{$} can be both an begin and end math character. 26%D This can lead to confusing and errorprone situations when 27%D macros insert \type{$}. When for instance we have defined: 28%D 29%D \starttyping 30%D \def\MyPlus{$\,+\,$} 31%D \stoptyping 32%D 33%D the sequence \type{$x^2 \MyPlus y^2 = r^2$} will expand to: 34%D 35%D \starttyping 36%D $x^2$\,+\,$y^2 = r^2$ 37%D \stoptyping 38%D 39%D Here the \type{\,} are given outside math mode and \TEX\ will 40%D definitely complain about this. A more save definition would 41%D have been: 42%D 43%D \starttyping 44%D \def\MyPlus{\mathematics{\,+\,}} 45%D \stoptyping 46%D 47%D Which is implemented (in \type{syst-ini.mkiv}) as: 48 49% \let\normalsuperscript\Usuperscript 50% \let\normalsubscript \Usubscript 51% \let\normalstartimath \Ustartmath 52% \let\normalstopimath \Ustopmath 53% \let\normalstartdmath \Ustartdisplaymath 54% \let\normalstopdmath \Ustopdisplaymath 55 56% \unexpanded\def\Ustartdisplaymath 57% {\ifinner 58% \ifhmode 59% \normalUstartmath 60% \let\Ustopdisplaymath\normalUstopmath 61% \else 62% \normalUstartdisplaymath 63% \let\Ustopdisplaymath\normalUstopdisplaymath 64% \fi 65% \else 66% \normalUstartdisplaymath 67% \let\Ustopdisplaymath\normalUstopdisplaymath 68% \fi} 69 70\unexpanded\def\Ucheckedstartdisplaymath 71 {\ifinner 72 \ifhmode 73 \normalUstartmath 74 \let\Ucheckedstopdisplaymath\normalUstopmath 75 \else 76 \normalUstartdisplaymath 77 \let\Ucheckedstopdisplaymath\normalUstopdisplaymath 78 \fi 79 \else 80 \normalUstartdisplaymath 81 \let\Ucheckedstopdisplaymath\normalUstopdisplaymath 82 \fi} 83 84\let\Ucheckedstopdisplaymath\relax 85 86\def\normalmathaligntab{&} % \let\normalmathaligntab\aligntab does to work well in a let to & (a def works ok) 87 88\let\normalsuper \Usuperscript % obsolete 89\let\normalsuber \Usubscript % obsolete 90 91\let\startimath \Ustartmath 92\let\stopimath \Ustopmath 93\let\startdmath \Ustartdisplaymath % \Ucheckedstartdisplaymath 94\let\stopdmath \Ustopdisplaymath % \Ucheckedstopdisplaymath 95 96\unexpanded\def\mathematics#1{\relax \ifmmode#1\else\normalstartimath#1\normalstopimath\fi} 97\unexpanded\def\displaymath#1{\noindent \ifmmode#1\else\normalstartdmath#1\normalstopdmath\fi} 98\unexpanded\def\inlinemath #1{\dontleavehmode\ifmmode#1\else\normalstartimath#1\normalstopimath\fi} 99\unexpanded\def\textmath #1{\dontleavehmode\ifmmode#1\else\begingroup\everymath\emptytoks\normalstartimath#1\normalstopimath\endgroup\fi} % \mathsurround\zeropoint 100 101\let\m\mathematics 102 103\let\stopmathmode\relax 104 105\unexpanded\def\startmathmode % nested variant 106 {\relax\ifmmode 107 \begingroup 108 \let\stopmathmode\endgroup 109 \else 110 \normalstartimath 111 \let\stopmathmode\normalstopimath 112 \fi} 113 114\unexpanded\def\nomathematics#1% 115 {\relax\ifmmode\hbox{#1}\else#1\fi} 116 117\let\math\mathematics 118 119%D \macros 120%D {displaymathematics,inlinemathematics,automathematics} 121%D 122%D An example of usage of the following can be found in the MathML module: 123 124\ifdefined\strc_formulas_start_formula \else 125 \def\strc_formulas_start_formula{\normalstartdmath} 126 \def\strc_formulas_stop_formula {\normalstopdmath } 127\fi 128 129\unexpanded\def\displaymathematics#1{\relax\ifmmode#1\else\strc_formulas_start_formula{}#1\strc_formulas_stop_formula\fi} 130\unexpanded\def\inlinemathematics {\dontleavehmode\mathematics} 131\unexpanded\def\automathematics {\relax\ifhmode\expandafter\inlinemathematics\else\expandafter\displaymathematics\fi} 132 133% better, esp when used in bTABLE ... eTABLE 134 135\unexpanded\def\automathematics 136 {\relax 137 \ifhmode 138 \expandafter\inlinemathematics 139 \else\ifintable 140 \doubleexpandafter\inlinemathematics 141 \else 142 \doubleexpandafter\displaymathematics 143 \fi\fi} 144 145%D \macros 146%D {dimension, nodimension} 147%D 148%D The next few macros are used for typesetting dimensions in 149%D such a way that spacing is acceptable. I won't spend much 150%D words on these macros, because they will be overloaded in 151%D the units module. 152%D 153%D REPLACED (keep commented): 154 155\newsignal\dimensionsignal 156 157\def\dimensiontypeface {\tf} 158\def\dimensionhalfspace {\,} 159 160\unexpanded\def\dimension#1% 161 {\pushmacro\dodimensionsignal 162 \gdef\dodimensionsignal{\kern\dimensionsignal}% 163 \ifzeropt\lastskip 164 \ifzeropt\lastkern 165 \ifmmode 166 \mathematics{\dimensionhalfspace\dimensionhalfspace\dimensiontypeface#1}% 167 \else 168 \mathematics{\dimensiontypeface#1}% 169 \fi 170 \else\ifdim\lastkern=\dimensionsignal 171 \mathematics{\dimensionhalfspace\dimensiontypeface#1}% 172 \else 173 \unkern\mathematics{\dimensionhalfspace\dimensionhalfspace\dimensiontypeface#1}% 174 \fi\fi 175 \else 176 \unskip\mathematics{\dimensionhalfspace\dimensionhalfspace\dimensiontypeface#1}% 177 \fi 178 \dodimensionsignal 179 \popmacro\dodimensionsignal} 180 181\unexpanded\def\nodimension#1% 182 {\unskip#1\glet\dodimensionsignal\relax} 183 184%D \macros 185%D {cramped} 186%D 187%D Cramped math: 188%D 189%D \startbuffer 190%D \ruledhbox{$\left\{{x^2\over y^2}\right\}$} 191%D \ruledhbox{$\cramped{\left\{ {x^2\over y^2}\right\}}$} 192%D \stopbuffer 193%D 194%D \typebuffer \getbuffer 195 196\unexpanded\def\cramped 197 {\mathpalette\math_cramped} 198 199%D We force a cramped style by issuing a non||existing radical (box). 200%D After that we make sure the height is correct. (Comment taken from 201%D Morten Høgholm's mathtools package.) Macro suggested by AM and 202%D cleaned up a bit by HH. 203 204% original 205% 206% \def\docramped#1#2% 207% {\setbox\scratchbox\hbox 208% {\nulldelimiterspace\zeropoint 209% $\mathsurround\zeropoint#1\radical\zerocount{#2}$}% 210% \ifx#1\displaystyle 211% \scratchdimen\fontdimen8\textfont3 212% \advance\scratchdimen .25\fontdimen5\textfont2 213% \else 214% \scratchdimen1.25\fontdimen8 215% \ifx#1\textstyle\textfont 216% \else 217% \ifx#1\scriptstyle\scriptfont\else\scriptscriptfont\fi 218% \fi 219% 3 220% \fi 221% \advance\scratchdimen-\ht\scratchbox 222% \ht\scratchbox-\scratchdimen 223% \box\scratchbox} 224 225% mkii: 226% 227% \def\math_cramped#1#2% 228% {\begingroup % added HH, made even more cramped 229% \setbox\scratchbox\hbox 230% {\nulldelimiterspace\zeropoint 231% \normalstartimath\mathsurround\zeropoint#1\radical\zerocount{#2}\normalstopimath}% 232% \ht\scratchbox-\dimexpr 233% \ifx#1\displaystyle 234% \fontdimen\pluseight\textfont\plusthree 235% +.25\fontdimen\plusfive\textfont\plustwo 236% \else 237% 1.25\fontdimen\pluseight 238% \ifx#1\textstyle 239% \textfont 240% \else\ifx#1\scriptstyle 241% \scriptfont 242% \else 243% \scriptscriptfont 244% \fi \fi 245% \plusthree 246% \fi 247% -\ht\scratchbox 248% \relax 249% \box\scratchbox 250% \endgroup} 251 252\def\math_cramped#1#2% we have all in one family 253 {\begingroup % added HH, made even more cramped 254 \setbox\scratchbox\hbox 255 {\nulldelimiterspace\zeropoint 256 \normalstartimath\mathsurround\zeropoint#1\radical\zerocount{#2}\normalstopimath}% 257 \ht\scratchbox-\dimexpr 258 \ifx#1\displaystyle 259 \fontdimen\pluseight\textfont\plusone 260 + .25\fontdimen\plusfive \textfont\plusone 261 \else 262 1.25\fontdimen\pluseight 263 \ifx#1\textstyle \textfont \else 264 \ifx#1\scriptstyle\scriptfont \else 265 \scriptscriptfont\fi\fi \plusone 266 \fi 267 -\ht\scratchbox 268 \relax 269 \box\scratchbox 270 \endgroup} 271 272%D \macros 273%D {cramedllap, crampedrlap, crampedclap} 274%D 275%D In many cases, one wants to use the \tex {clap} macro in 276%D math mode while using subscripts. Normally, subscripts are 277%D in cramped mode, and these macros allow you to go to 278%D cramped mode. For example: 279%D 280%D \startbuffer 281%D \startformula 282%D \sum_{a^2 < b^2 < c^2} \quad 283%D \sum_{\clap{a^2 < b^2 < c^2}} \quad 284%D \sum_{\crampedclap{a^2 < b^2 < c^2}} 285%D \stopformula 286%D \stopbuffer 287%D 288%D \start 289%D \typebuffer 290%D \switchtobodyfont[24pt] 291%D \getbuffer 292%D \stop 293%D 294%D Notice that \type {\clap{\cramped ... }} would also work, 295%D but it requires \TEX\ to typeset it arguments 16 times. 296 297\unexpanded\def\crampedllap{\mathpalette\math_cramped_llap} 298\unexpanded\def\crampedrlap{\mathpalette\math_cramped_rlap} 299\unexpanded\def\crampedclap{\mathpalette\math_cramped_clap} 300 301\def\math_cramped_llap#1#2{{}\dollap{\math_cramped #1{#2}}} 302\def\math_cramped_rlap#1#2{{}\dorlap{\math_cramped #1{#2}}} 303\def\math_cramped_clap#1#2{{}\doclap{\math_cramped #1{#2}}} 304 305% experiment, not yet to be used 306 307% \unexpanded\def\displaybreak 308% {\ifhmode 309% \removeunwantedspaces 310% \ifcase\raggedstatus\hfill\fi 311% \strut\penalty-9999 % \break fails on case (3) 312% \fi} 313% 314% \def\startdisplay{\displaybreak\ignorespaces\startpacked} 315% \def\stopdisplay {\stoppacked\displaybreak\ignorespaces} 316 317\let\superscript \Usuperscript 318\let\subscript \Usubscript 319\let\nosuperscript\Unosuperscript 320\let\nosubscript \Unosubscript 321 322% only in luametatex: 323 324\let\superprescript \Usuperprescript 325\let\subprescript \Usubprescript 326\let\nosuperprescript\Unosuperprescript 327\let\nosubsprecript \Unosubprescript 328 329\protect \endinput 330