mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-05-20 23:12:59 +02:00
213 lines
4.2 KiB
TeX
213 lines
4.2 KiB
TeX
\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}
|