\documentclass{article} \usepackage{mdwtab} \errorcontextlines 999 \showboxbreadth\maxdimen \showboxdepth=2 \makeatletter % --- Switch allocations --- \newif\if@fleqn \newif\if@leqno % --- Dimen allocations --- \newdimen\eqa@thiscolwd \newdimen\eqa@maxcolwd \newdimen\eqa@maxeqwd \newdimen\eqa@maxcoleqwd % --- Main environments --- \def\equations{% \def\eqa@defnumber{(\theequation)\stepcounter{equation}}% \let\eqa@defmarker\eqa@fullmarker% \eqa@equations% } \def\endequations{% \\% \noalign{\global\dimen@i\prevdepth}% \multispan\tab@columns\hfill\vrule\@depth\dimen@i\cr% \egroup% \eqa@offsetcalc% \egroup% \eqa@restore% {\scrollmode\showbox\z@}% } \def\eqa@equations#1{% % % Set up restoring of things. % \toks@\expandafter{\eqa@number}% \toks\tw@\expandafter{\eqa@marker}% \edef\eqa@restore{% \gdef\noexpand\eqa@number{\the\toks@}% \gdef\noexpand\eqa@marker{\the\toks\tw@}% \eqa@maxcolwd\the\eqa@maxcolwd% \eqa@maxcoleqwd\the\eqa@maxcoleqwd% \eqa@maxeqwd\the\eqa@maxeqwd% }% % % Initialise numbering things. % \global\let\eqa@number\eqa@defnumber% \global\let\eqa@marker\eqa@defmarker% \let\eqa@markpen\@ne% % % Parse the preamble string. Put measuring things in the right places. % \tab@initread% \def\tab@tabtext{&\tabskip\z@skip}% \if@leqno% \tab@append\tab@preamble{\let\eqa@measure\eqa@domeasure}% \fi% \def\eqa@seteqcol##1{% \def\eqa@eqcol{##1} \if@leqno\let\eqa@seteqcol\relax\fi% }% \colset{equations}% \tab@doreadpream{#1}% \if@leqno\else% \tab@prepend\tab@pretext{\let\eqa@measure\eqa@domeasure}% \fi% \tab@readpreamble{}% % % Setting the newline command and some other initialisation. % \let\\\eqa@cr% \global\eqa@maxcolwd\z@% \global\eqa@maxcoleqwd\z@% \global\eqa@maxeqwd\z@% % % Start the box. Hacking to make \prevdepth work properly. % \setbox\z@\vbox\expandafter\bgroup% \expandafter\prevdepth\the\prevdepth% \relax% % % And now the alignment. % \tabskip\z@skip% \halign\expandafter\bgroup\the\tab@preamble\cr% } % --- Column building things --- \def\eqa@aligncol#1#2#3{% \eqa@seteqcol{#1}% \ifx l#1\eqa@aligncol@i{#2#3}{#2\hfil}\else% \ifx c#1\eqa@aligncol@i{\hfil#2#3}{#3#2\hfil}\else% \ifx r#1\eqa@aligncol@i{\hfil#2}{#3#2}% \fi\fi\fi% } \def\eqa@aligncol@i#1#2{% \tabcoltype% {\setbox\z@\hbox\bgroup#1}% {#2\egroup\eqa@measure}% } \colpush{equations} \coldef l{\eqa@aligncol l${{}}} \coldef c{\eqa@aligncol c${{}}} \coldef r{\eqa@aligncol r${{}}} \coldef M#1{\eqa@aligncol{#1}${{}}} \coldef T#1{\eqa@aligncol{#1}{}{}} \colpop % --- Equation measuring macros --- \let\eqa@number\relax \let\eqa@marker\relax \def\eqnumber#1{% \global\let\eqa@marker\eqa@fullmarker% \gdef\eqa@number{#1}% } \def\nonumber{% \global\let\eqa@marker\eqa@nonummarker% \global\let\eqa@number\@empty% } \def\eqa@measure{\unhbox\z@} \def\eqa@domeasure{% \global\eqa@thiscolwd\wd\z@% \ifdim\eqa@maxcolwd<\eqa@thiscolwd% \global\eqa@maxcolwd\eqa@thiscolwd% \fi% \unhbox\z@% } % --- The newline command --- \def\eqa@cr{\tab@cr\eqa@cr@i\z@\@M} \def\eqa@cr@i#1#2{% \cr% \noalign{% \eqa@marker{#1}{#2}% \global\let\eqa@number\eqa@defnumber% \global\let\eqa@marker\eqa@defmarker% \penalty\eqa@markpen% }% } \def\eqa@fullmarker#1#2{% \dimen@\prevdepth% \vskip\eqa@thiscolwd% \penalty#2% \skip@#1\advance\skip@\jot% \vskip\skip@% \setbox\z@\hbox{\eqa@number}% \dimen@\eqa@thiscolwd\advance\dimen@\wd\z@% \ifdim\dimen@\eqa@maxcoleqwd<\dimen@% \global\eqa@maxcoleqwd\dimen@% \global\eqa@maxeqwd\wd\z@% \fi% \nointerlineskip\hb@xt@\z@{\hbox{\eqa@number}}% \prevdepth\dimen@% } \def\eqa@nonummarker#1#2{% \penalty#2% \skip@#1\advance\skip@\jot% \vskip\skip@% \penalty\eqa@markpen% } % --- Offset calculation --- % % This stuff is sort of like the standard offset calculation, only it's % different. \def\eqa@offsetcalc{% \setbox\z@\lastbox% \unskip% \csname eqa@calc:\eqa@eqcol\expandafter\noexpand\if@leqno\endcsname% } \@namedef{eqa@calc:l\noexpand\iffalse}{% % --- Test document --- \makeatother \begin{document} \setcounter{equation}{23} \begin{equations}{rrl} x &= y^2 +& z^2 \\ x-y &= 3y^2 -& 2z^2 \end{equations} \end{document}