%D \module %D [ file=math-ext, %D version=2006.01.14, %D title=\CONTEXT\ Math Macros, %D subtitle=Extra Macros, %D author={Hans Hagen \& Taco Hoekwater \& Aditya Mahajan}, %D date=\currentdate, %D copyright=\PRAGMA] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \unprotect %D These will be generalized! \def\exmthfont#1{\symbolicsizedfont#1\plusone{MathExtension}} \def\domthfrac#1#2#3#4#5#6#7% {\begingroup \mathsurround\zeropoint \setbox0\hbox{$#1 #6$}% \setbox2\hbox{$#1 #7$}% \dimen0\wd0 \ifdim\wd2>\dimen0 \dimen0\wd2 \fi \setbox4\hbox to \dimen0{\exmthfont#2#3\leaders\hbox{#4}\hss#5}% \mathord{\vcenter{{\offinterlineskip \hbox to \dimen0{\hss\box0\hss}% \kern \ht4% \hbox to \dimen0{\hss\copy4\hss}% \kern \ht4% \hbox to \dimen0{\hss\box2\hss}}}}% \endgroup} \def\domthsqrt#1#2#3#4#5% {\begingroup \mathsurround\zeropoint \setbox0\hbox{$#1 #5$}% \dimen0=1.05\ht0 \advance\dimen0 1pt \ht0 \dimen0 \dimen0=1.05\dp0 \advance\dimen0 1pt \dp0 \dimen0 \dimen0\wd0 \setbox4\hbox to \dimen0{\exmthfont#2\leaders\hbox{#3}\hfill#4}% \delimitershortfall=0pt \nulldelimiterspace=0pt \setbox2\hbox{$\left\delimiter"0270370 \vrule height\ht0 depth \dp0 width0pt \right.$}% \mathord{\vcenter{\hbox{\copy2 \rlap{\raise\dimexpr\ht2-\ht4\relax\copy4}\copy0}}}% \endgroup} \def\mthfrac#1#2#3#4#5{\mathchoice {\domthfrac\displaystyle \textface {#1}{#2}{#3}{#4}{#5}} {\domthfrac\textstyle \textface {#1}{#2}{#3}{#4}{#5}} {\domthfrac\scriptstyle \scriptface {#1}{#2}{#3}{#4}{#5}} {\domthfrac\scriptscriptstyle\scriptscriptface{#1}{#2}{#3}{#4}{#5}}} \def\mthsqrt#1#2#3{\mathchoice {\domthsqrt\displaystyle \textface {#1}{#2}{#3}} {\domthsqrt\textstyle \textface {#1}{#2}{#3}} {\domthsqrt\scriptstyle \textface {#1}{#2}{#3}} {\domthsqrt\scriptscriptstyle\textface {#1}{#2}{#3}}} % temp here \def\mtharrfactor{1} \def\mtharrextra {0} \def\domthxarr#1#2#3#4#5% hm, looks like we do a double mathrel {\begingroup \def\mtharrfactor{1}% \def\mtharrextra {0}% \processaction[#1] % will be sped up [ \v!none=>\def\mtharrfactor{0}, \v!small=>\def\mtharrextra{10}, \v!medium=>\def\mtharrextra{15}, \v!big=>\def\mtharrextra{20}, \v!normal=>, \v!default=>, \v!unknown=>\doifnumberelse{#1}{\def\mtharrextra{#1}}\donothing]% \mathsurround\zeropoint \muskip0=\thirdoffourarguments #2mu \muskip2=\fourthoffourarguments #2mu \muskip4=\firstoffourarguments #2mu \muskip6=\secondoffourarguments #2mu \muskip0=\mtharrfactor\muskip0 \advance\muskip0 \mtharrextra mu \muskip2=\mtharrfactor\muskip2 \advance\muskip2 \mtharrextra mu \setbox0\hbox{$\scriptstyle \mkern\muskip4\relax \mkern\muskip0\relax #5\relax \mkern\muskip2\relax \mkern\muskip6\relax $}% \setbox4\hbox{#3}% \dimen0\wd0 \ifdim\wd4>\dimen0 \dimen0\wd4 \fi \setbox2\hbox{$\scriptstyle \mkern\muskip4\relax \mkern\muskip0\relax #4\relax \mkern\muskip2\relax \mkern\muskip6\relax $}% \ifdim\wd2>\dimen0 \dimen0\wd2 \fi \setbox4\hbox to \dimen0{#3}% \mathrel{\mathop{\hbox to \dimen0{\hss\copy4\hss}}\limits^{\box0}_{\box2}} \endgroup} \let\domthxarrsingle\domthxarr \def\domthxarrdouble#1#2#3#4#5#6#7% opt l r sp rs top bot {\mathrel {\scratchdimen.22ex\relax \setbox0\hbox{$\domthxarr{#1}{#2}{#4}{\phantom{#6}}{#7}$}% \setbox2\hbox{$\domthxarr{#1}{#3}{#5}{#6}{\phantom{#7}}$}% \raise\scratchdimen\box0 \kern-\wd2 \lower\scratchdimen\box2}} \def\definematharrow {\doquadrupleargument\dodefinematharrow} \def\dodefinematharrow[#1][#2][#3][#4]% name type[none|both] template command {\iffourthargument \executeifdefined{dodefine#2arrow}\gobblethreearguments{#1}{#3}{#4}% \else\ifthirdargument \dodefinebotharrow{#1}{#2}{#3}% \else\ifsecondargument \redefinebotharrow{#1}{#2}{#3}% \fi\fi\fi} \def\redefinebotharrow#1#2#3% real dirty, this overload! {\doifdefined{#1} {\pushmacro\dotripleempty \def\dotripleempty##1[##2][##3]{\setvalue{#1}{\dotripleempty\xmtharrow[#2][##3]}}% \getvalue{#1}% \popmacro\dotripleempty}} \def\dodefinebotharrow#1#2#3% {\setvalue{#1}{\dotripleempty\xmtharrow[#2][#3]}} \def\xmtharrow[#1][#2][#3]% #3 == optional arg {\def\doxmtharrow{\dodoxmtharrow[#1,\empty,\empty][#2,\empty,\empty][#3]}% {##1}{##2} \dodoublegroupempty\doxmtharrow} \def\dodoxmtharrow[#1,#2,#3][#4,#5,#6][#7]#8#9% [3] is the optional arg {\edef\!!stringa{#2}% \ifx\!!stringa\empty \ifsecondargument \mathrel{\domthxarrsingle{#7}{#1}{#4}{#8}{#9}}% \else \mathrel{\domthxarrsingle{#7}{#1}{#4}{}{#8}}% \fi \else \ifsecondargument \mathrel{\domthxarrdouble{#7}{#1}{#2}{#4}{#5}{#8}{#9}}% \else \mathrel{\domthxarrdouble{#7}{#1}{#2}{#4}{#5}{}{#8}}% \fi \fi} % Adapted from amsmath. \def\mtharrowfill#1#2#3#4#5#6#7% {$\mathsurround 0pt \thickmuskip0mu\medmuskip\thickmuskip\thinmuskip\thickmuskip \relax#5% \mkern-#1mu \cleaders\hbox{$\mkern -#2mu#6\mkern -#3mu$}\hfill \mkern-#4mu#7$} \def\defaultmtharrowfill{\mtharrowfill 7227} % Maybe redefine leftarrowfill and rightarrowfill using arrowfill \def\rightarrowfill {\defaultmtharrowfill \relbar \relbar \rightarrow } \def\leftarrowfill {\defaultmtharrowfill \leftarrow \relbar \relbar } \def\equalfill {\defaultmtharrowfill \Relbar \Relbar \Relbar } \def\Rightarrowfill {\defaultmtharrowfill \Relbar \Relbar \Rightarrow } \def\Leftarrowfill {\defaultmtharrowfill \Leftarrow \Relbar \Relbar } \def\Leftrightarrowfill {\defaultmtharrowfill \Leftarrow \Relbar \Rightarrow } \def\leftrightarrowfill {\defaultmtharrowfill \leftarrow \relbar \rightarrow } \def\mapstofill {\defaultmtharrowfill {\mapstochar\relbar} \relbar \rightarrow } \def\twoheadrightarrowfill{\defaultmtharrowfill \relbar \relbar \twoheadrightarrow} \def\twoheadleftarrowfill {\defaultmtharrowfill \twoheadleftarrow \relbar \relbar } \def\rightharpoondownfill {\defaultmtharrowfill \relbar \relbar \rightharpoondown } \def\rightharpoonupfill {\defaultmtharrowfill \relbar \relbar \rightharpoonup } \def\leftharpoondownfill {\defaultmtharrowfill \leftharpoondown \relbar \relbar } \def\leftharpoonupfill {\defaultmtharrowfill \leftharpoonup \relbar \relbar } \def\hookleftfill {\defaultmtharrowfill \leftarrow \relbar{\relbar\joinrel\rhook}} \def\hookrightfill{\defaultmtharrowfill{\lhook\joinrel\relbar}\relbar \rightarrow} % From amsmath.sty, extarrows.sty, extpfel.sty and mathtools.sty(ams) \definematharrow [xrightarrow] [0359] [\rightarrowfill] \definematharrow [xleftarrow] [3095] [\leftarrowfill] \definematharrow [xequal] [0099] [\equalfill] \definematharrow [xRightarrow] [0359] [\Rightarrowfill] \definematharrow [xLeftarrow] [3095] [\Leftarrowfill] \definematharrow [xLeftrightarrow] [0099] [\Leftrightarrowfill] \definematharrow [xleftrightarrow] [0099] [\leftrightarrowfill] \definematharrow [xmapsto] [3599] [\mapstofill] \definematharrow [xtwoheadrightarrow] [5009] [\twoheadrightarrowfill] \definematharrow [xtwoheadleftarrow] [0590] [\twoheadleftarrowfill] \definematharrow [xrightharpoondown] [0359] [\rightharpoondownfill] \definematharrow [xrightharpoonup] [0359] [\rightharpoonupfill] \definematharrow [xleftharpoondown] [3095] [\leftharpoondownfill] \definematharrow [xleftharpoonup] [3095] [\leftharpoonupfill] \definematharrow [xleftrightharpoons] [3399,3399] [\leftharpoonupfill,\rightharpoondownfill] \definematharrow [xrightleftharpoons] [3399,3399] [\rightharpoonupfill,\leftharpoondownfill] \definematharrow [xhdefaultookleftarrow] [3095] [\hookleftfill] \definematharrow [xhdefaultookrightarrow] [0395] [\hookrightfill] % \startformula \xrightarrow{stuff on top}\stopformula % \startformula \xrightarrow{}{stuff on top}\stopformula % \startformula \xrightarrow{stuff below}{}\stopformula % \startformula \xrightarrow{stuff below}{stuff on top}\stopformula % \startformula \xleftarrow [none]{stuff below}{stuff on top}\stopformula % \startformula \xleftarrow [small]{stuff below}{stuff on top}\stopformula % \startformula \xleftarrow [medium]{stuff below}{stuff on top}\stopformula % \startformula \xleftarrow [big]{stuff below}{stuff on top}\stopformula \protect \endinput