%AM: This should go to supp-box.tex. %D \macros %D {llap, rlap, tlap, blap, clap} %D %D Some well known friends, but we implement them our own %D way. We want the macros to work in both math and text mode. \def\dorlap{\begingroup\dowithnextbox{\normalhbox to \zeropoint {\flushnextbox\normalhss}\endgroup}\normalhbox} \def\dollap{\begingroup\dowithnextbox{\normalhbox to \zeropoint {\normalhss\flushnextbox}\endgroup}\normalhbox} \def\doclap{\begingroup\dowithnextbox{\normalhbox to \zeropoint {\normalhss\flushnextbox\normalhss}\endgroup}\normalhbox} \def\domathclap{\mathpalette\dodomathclap} \def\dodomathclap#1#2{\doclap{$\m@th#1#2$}} \def\domathllap{\mathpalette\dodomathllap} \def\dodomathllap#1#2{\dollap{$\m@th#1#2$}} \def\domathrlap{\mathpalette\dodomathrlap} \def\dodomathrlap#1#2{\dorlap{$\m@th#1#2$}} \unexpanded\def\rlap{\mathortext\domathrlap\dorlap} \unexpanded\def\llap{\mathortext\domathllap\dollap} \unexpanded\def\clap{\mathortext\domathclap\doclap} %AM: I do not know where this belongs. Perhaps supp-mat.tex %D \macros {cramed} %D %D \TEX provides no primitive to force in cramped math mode. %D Here is a macro that does so. It is based on a solution by %D Don Knuth %D \userul{http://www.ctan.org/tex-archive/digests/tex-implementors/042}. %D The explanation is by Morten Høgholm's mathtools package. \def\cramped {\mathpalette\docramped} \def\docramped#1#2% %D Force a cramped style by issuing a non||existing radical {\setbox\scratchbox=\hbox{\nulldelimiterspace=\zeropoint% $\m@th#1\radical\zerocount{#2}$} %D Make sure the height is correct \ifx#1\displaystyle \scratchdimen=\fontdimen8\textfont3 \advance\scratchdimen .25\fontdimen5\textfont2 \else \scratchdimen=1.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} %AM: Not sure about these either. Either supp-box or supp-mat %AM: core-mat. %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 \typebuffer{\switchtobodyfont[24pt]\getbuffer} %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} %AM: This needs to replace the core-mat macros. %D \macros %D {substack} %D %D Preliminary code: %D %D \startbuffer %D \startformula %D \sum_{% %D \startsubstack %D i = 1 \NR %D i \neq n \NR %D i \neq m %D \stopsubstack %D }a_i %D \stopformula %D \stopbuffer %D \getbuffer which was typed as \typebuffer %D Notice that these macros give the correct spacing for %D subscripts. Compare for example %D \startbuffer %D \startformula %D \sum_{\startsubstack a \NR b \NR \stopsubstack} %D \text{ and } %D \sum_{\scriptstyle a \atop \scriptstyle} %D \stopformula %D \typebuffer which gives \getbuffer \def\startsubstack {%\bgroup% Is this ok? \vcenter\bgroup \baselineskip\fontdimen10 \scriptfont\plustwo \advance\baselineskip\fontdimen12 \scriptfont\plustwo \lineskip\plusthree\fontdimen8 \scriptfont\plusthree \lineskiplimit\lineskip \let\stopmathmode\relax \def\NC{\domatrixNC}% \def\MC{\domatrixNC\startmathmode}% \global\let\domatrixNC\dodomatrixNC \def\NR {\stopmathmode \global\let\domatrixNC\dodomatrixNC \crcr}% \mathsurround\zeropoint \everycr\emptytoks \halign\bgroup\hfil$\scriptstyle##$\hfil\crcr} \def\stopsubstack {\crcr \egroup \egroup %\egroup% Is this ok? } %AM: These need to go into math-tex. Perhaps I should also %AM: port dotsint? \def\dointkern {\mkern-6mu\mathchoice{\mkern-3mu}{}{}{}} \definemathcommand [iint] {\repeatintegral{1}} \definemathcommand [iiint] {\repeatintegral{2}} \definemathcommand [iiiint] {\repeatintegral{3}} \def\repeatintegral#1% {\scratchtoks\emptytoks \let\dointlimits\nolimits \dorecurse{#1}{\appendtoks \intop \dointkern \to \scratchtoks} \appendtoks \intop \dointlimits \to \scratchtoks \edef\dodorepeatintegral{\the\scratchtoks} \futurelet\next\dorepeatintegral} %D If the \type{\limits} option is used after \type{\iint}, use %D \type{\mathop} and fudge the left hand space a bit to make the %D subscript visually centered. \def\dorepeatintegral {\ifx\limits\next \dointlimitcorrection \else \ifx \displaylimits\next \dointlimitcorrection \fi\fi \dodorepeatintegral} \def\dointlimitcorrection {\mkern-7mu\mathchoice{\mkern-2mu}{}{}{}% \mathop\bgroup \mkern7mu\mathchoice{\mkern2mu}{}{}{}% \let\dointlimits\egroup} %AM: This needs to go to m-newmat.tex %D \macros {splitfrac, splitdfrac} %D Occasionally one needs to typeset multi||line fractions. %D These commands use \tex{genfrac} to create such fractions. %D \startbuffer %D \startformula %D a=\frac{ %D \splitfrac{xy + xy + xy + xy + xy} %D {+ xy + xy + xy + xy} %D } %D {z} %D =\frac{ %D \splitdfrac{xy + xy + xy + xy + xy} %D {+ xy + xy + xy + xy} %D } %D {z} %D \stopformula %D \stopbuffer %D \typebuffer \getbuffer %D %D These macros are based on Michael J.~Downes posting on %D comp.text.tex on 2001/12/06 \def\splitfrac#1#2% {\genfrac{}{}{0pt}{1}% {\textstyle#1\quad\hfill}% {\textstyle\hfill\quad\mathstrut#2}} \def\splitdfrac#1#2% {\genfrac{}{}{0pt}{0}% {#1\quad\hfill} {\hfill\quad\mathstrut #2}}