From 85b7bc695629926641c7cb752fd478adfdf374f3 Mon Sep 17 00:00:00 2001 From: Marius Date: Sun, 4 Jul 2010 15:32:09 +0300 Subject: stable 2010-05-24 13:10 --- tex/context/base/supp-mat.mkii | 293 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 293 insertions(+) create mode 100644 tex/context/base/supp-mat.mkii (limited to 'tex/context/base/supp-mat.mkii') diff --git a/tex/context/base/supp-mat.mkii b/tex/context/base/supp-mat.mkii new file mode 100644 index 000000000..1a51164e6 --- /dev/null +++ b/tex/context/base/supp-mat.mkii @@ -0,0 +1,293 @@ +%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. It may move +%D back to math-ini. + +\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: + +\long\def\mathematics#1{\relax\ifmmode#1\else $#1$\fi} % lookahead bug reported by brooks +\long\def\displaymath#1{\relax\ifmmode#1\else$$#1$$\fi} +\long\def\inlinemath #1{\dontleavehmode\relax\ifmmode#1\else $#1$\fi} + +\let\stopmathmode\relax + +\def\startmathmode % cannot be used nested + {\relax\ifmmode + \let\stopmathmode\relax + \else + $\def\stopmathmode{$}% \let\stopmathmode=$ + \fi} + +\def\startmathmode % nested variant + {\relax\ifmmode + \begingroup\let\stopmathmode\endgroup + \else + $\let\stopmathmode$% + \fi} + +\def\nomathematics#1% + {\relax\ifmmode\hbox{#1}\else#1\fi} + +\let\math\mathematics + +%D \macros +%D {displaymathematics,inlinemathematics,automathematics} +%D +%D An example of usage of the following can be found in the MathML module: + +\long\def\displaymathematics#1{\relax\ifmmode#1\else\dostartformula{}#1\dostopformula\fi} + \def\inlinemathematics {\dontleavehmode\mathematics} + \def\automathematics {\relax\ifhmode\@EA\inlinemathematics\else\@EA\displaymathematics\fi} + +% better, esp when used in bTABLE ... eTABLE + +\def\automathematics + {\relax + \ifhmode + \expandafter\inlinemathematics + \else\ifintable + \expandafter\expandafter\expandafter\inlinemathematics + \else + \expandafter\expandafter\expandafter\displaymathematics + \fi\fi} + +%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} + +%D \macros +%D {cramped} +%D +%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 {http://www.ctan.org/tex-archive/digests/tex-implementors/042}). +%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 +%D \typebuffer \getbuffer + +\def\cramped + {\mathpalette\docramped} + +%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} + +\def\docramped#1#2% + {\begingroup % added HH, made even more cramped + \setbox\scratchbox\hbox + {\nulldelimiterspace\zeropoint + $\mathsurround\zeropoint#1\radical\zerocount{#2}$}% + \ht\scratchbox-\dimexpr + \ifx#1\displaystyle + \fontdimen8\textfont3 + +.25\fontdimen5\textfont2 + \else + 1.25\fontdimen8 + \ifx#1\textstyle + \textfont + \else\ifx#1\scriptstyle + \scriptfont + \else + \scriptscriptfont + \fi \fi + \plusthree + \fi + -\ht\scratchbox + \relax + \box\scratchbox + \endgroup} + +%D \macros +%D {cramedllap, crampedrlap, crampedclap} +%D +%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 +%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 +%D \start +%D \typebuffer +%D \switchtobodyfont[24pt] +%D \getbuffer +%D \stop +%D +%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}}} + +\def\crampedllap{\mathpalette\docrampedllap} +\def\crampedrlap{\mathpalette\docrampedrlap} +\def\crampedclap{\mathpalette\docrampedclap} + +\protect \endinput -- cgit v1.2.3