From: Mark Wooding Date: Tue, 9 Aug 2022 17:15:52 +0000 (+0100) Subject: mdwmath.dtx: Delete the old version of `eqnarray'. X-Git-Url: https://git.distorted.org.uk/~mdw/mdwtools/commitdiff_plain/fb8a9453a2722d549260bcad087bf963bb23fe36 mdwmath.dtx: Delete the old version of `eqnarray'. --- diff --git a/mdwmath.dtx b/mdwmath.dtx index dbd707a..0b8dc36 100644 --- a/mdwmath.dtx +++ b/mdwmath.dtx @@ -25,9 +25,6 @@ %<+package>\NeedsTeXFormat{LaTeX2e} %<+package>\ProvidesPackage{mdwmath} %<+package> [2020/09/06 1.14.0 Nice mathematical things] -%<+oldeqnarray>\NeedsTeXFormat{LaTeX2e} -%<+oldeqnarray>\ProvidesPackage{eqnarray} -%<+oldeqnarray> [2020/09/06 1.14.0 Old enhanced eqnarray] % \end{meta-comment} % % \CheckSum{728} @@ -55,9 +52,6 @@ \let\opmod\pmod \usepackage{amssymb} \describespackage{mdwmath} -%\describespackage{eqnarray} -\ignoreenv{old-eqnarray} -%\unignoreenv{old-eqnarray} \mdwdoc % % @@ -322,135 +316,6 @@ % the command |\mpunct| sets its argument as text, a little distance from % the preceding mathematics. % -% \begin{ignore} -% There used to be an eqnarray here, but that's migrated its way into the -% \package{mdwtab} package. Maybe the original version, without dependency -% on \package{mdwtab} ought to be releasable separately. I'll keep it around -% just in case. -% -% The following is the documentation for the original version. There's an -% updated edition in \package{mdwtab}. -% \end{ignore} -% -% \begin{old-eqnarray} -% -% \subsection{A new \env{eqnarray} environment} -% -% \LaTeX's built-in \env{eqnarray} is horrible -- it puts far too much space -% between the items in the array. This environment is rather nearer to the -% \env{amsmath} \env{align} environments, although rather less capable. -% -% \bigskip -% \DescribeEnv{eqnarray} -% {\synshorts -% \setbox0\hbox{"\\begin{eqnarray}[""]" \dots "\\end{eqnarray}"} -% \leavevmode \hskip-\parindent \fbox{\box0} -% } -% \smallskip -% -% The new version of \env{eqnarray} tries to do everything which you really -% want it to. The \synt{preamble} string allows you to define the column -% types in a vaguely similar way to the wonderful \env{tabular} environment. -% The types provided (and it's easy-ish to add more) are: -% -% \def\ch{\char`} -% \begin{description} \setdescriptionlabel{\normalfont\ttfamily#1} -% \item [r] Right aligned equation -% \item [c] Centre-aligned equation -% \item [l] Left aligned equation -% \item [\textrm{\texttt{Tr}, \texttt{Tc} and \texttt{Tl}}] Right, centre and -% left aligned text (not maths) -% \item [L] Left aligned zero-width equation -% \item [x] Centred entire equation -% \item [:] Big gap separating sets of equations -% \item [q] Quad space -% \item [>\ch\{\synt{text}\ch\}] Insert text before column -% \item [<\ch\{\synt{text}\ch\}] Insert text after column -% \end{description} -% -% Some others are also defined: don't use them because they do complicated -% things which are hard to explain and they aren't much use anyway. -% -% The default preamble, if you don't supply one of your own, is \lit{rcl}. -% Most of the time, \lit{rl} is sufficient, although compatibility is more -% important to me. -% -% By default, there is no space between columns, which makes formul\ae\ in an -% \env{eqnarray} environment look just like formul\ae\ typeset on their own, -% except that things get aligned in columns. This is where the default -% \env{eqnarray} falls down: it leaves |\arraycolsep| space between each -% column making the thing look horrible. -% -% An example would be good here, I think. This one's from exercise 22.9 of -% the \textit{\TeX book}. -% -% \begin{demo}[w]{Simultaneous equations} -%\begin{eqnarray}[rcrcrcrl] -% 10w & + & 3x & + & 3y & + & 18z & = 1 \\ -% 6w & - & 17x & & & - & 5z & = 2 -%\end{eqnarray} -% \end{demo} -% -% Choosing a more up-to-date example, here's one demonstrating the \lit{:} -% column specifier from the \textit{\LaTeX\ Companion}. -% -% \begin{demo}[w]{Lots of equations} -%\begin{eqnarray}[rl:rl:l] -% V_i &= v_i - q_i v_j, & X_i &= x_i - q_i x_j, & -% U_i = u_i, \qquad \mbox{for $i \ne j$} \label{eq:A} \\ -% V_j &= v_j, & X_j &= x_j & -% U_j u_j + \sum_{i \ne j} q_i u_i. -%\end{eqnarray} -% \end{demo} -% -% We can make things more interesting by adding a plain text column. Here we -% go: -% -% \begin{demo}[w]{Plain text column} -%\begin{eqnarray}[rlqqTl] -% x &= y & by (\ref{eq:A}) \\ -% x' &= y' & by definition \\ -% x + x' &= y + y' & by Axiom~1 -%\end{eqnarray} -% \end{demo} -% -% The new features also mean that you don't need to mess about with -% |\lefteqn| any more. This is handled by the \lit{L} column type: -% -% \begin{demo}{Splitting example} -%\begin{eqnarray*}[Ll] -% w+x+y+z = \\ -% & a+b+c+d+e+{} \\ -% & f+g+h+i+j -%\end{eqnarray*} -% \end{demo} -% -% Finally, just to prove that the spacing's right at last, here's another one -% from the \textit{Companion}. -% -% \begin{demo}{Spacing demonstration} -%\begin{equation} -% x^2 + y^2 = z^2 -%\end{equation} -%\begin{eqnarray}[rl] -% x^2 + y^2 &= z^2 \\ -% y^2 &< z^2 -%\end{eqnarray} -% \end{demo} -% -% Well, that was easy enough. Now on to numbering. As you've noticed, the -% equations above are numbered. You can use the \env{eqnarray$*$} -% environment to turn off the numbering in the whole environment, or say -% |\nonumber| on a line to suppress numbering of that one in particular. -% More excitingly, you can say \syntax{"\\nonumber[""]"} to choose -% what text to display. -% -% A note for cheats: you can use the sparkly new \env{eqnarray} for simple -% equations simply by specifying \lit{x} as the column description. Who -% needs \AmSTeX? |;-)| -% -% \end{old-eqnarray} -% % \implementation % % \section{Implementation} @@ -1145,366 +1010,6 @@ % %\end{macro} % -% \begin{ignore} -% The following is the original definition of the enhanced eqnarray -% environment. It's not supported, although if you can figure out how to -% extract it, it's all yours. -% \end{ignore} -% -% \begin{old-eqnarray} -% -% \subsection{The sparkly new \env{eqnarray}} -% -% Start off by writing a different package. -% -% \begin{macrocode} -% -%<*oldeqnarray> -% \end{macrocode} -% -% \subsubsection{Options handling} -% -% We need to be able to cope with \textsf{fleqn} and \textsf{leqno} options. -% This will adjust our magic modified \env{eqnarray} environment -% appropriately. -% -% \begin{macrocode} -\newif\if@fleqn -\newif\if@leqno -\DeclareOption{fleqn}{\@fleqntrue} -\DeclareOption{leqno}{\@leqnotrue} -\ProcessOptions -% \end{macrocode} -% -% This is all really different to the \LaTeX\ version. I've looked at the -% various \env{tabular} implementations, the original \env{eqnarray} and the -% \textit{\TeX book} to see how best to do this, and then went my own way. -% If it doesn't work it's all my fault. -% -% \subsubsection{Some useful registers} -% -% The old \LaTeX\ version puts the equation numbers in by keeping a count of -% where it is in the alignment. Since I don't know how may columns there are -% going to be, I'll just use a switch in the preamble to tell me to stop -% tabbing. -% -% \begin{macrocode} -\newif\if@eqalast -% \end{macrocode} -% -% Now define some useful length parameters. First allocate them: -% -% \begin{macrocode} -\newskip\eqaopenskip -\newskip\eqacloseskip -\newskip\eqacolskip -\newskip\eqainskip -% \end{macrocode} -% -% Now assign some default values. Users can play with these if they really -% want although I can't see the point myself. -% -% \begin{macrocode} -\if@fleqn - \AtBeginDocument{\eqaopenskip\leftmargini} -\else - \eqaopenskip\@centering -\fi -\eqacloseskip\@centering -\eqacolskip\@centering -\eqainskip\z@ -% \end{macrocode} -% -% We allow the user to play with the style if this is really wanted. I dunno -% why, really. Maybe someone wants very small alignments. -% -% \begin{macrocode} -\let\eqa@style\displaystyle -% \end{macrocode} -% -% \subsubsection{The main environments} -% -% We define the toplevel commands here. They just add in default arguments -% and then call |\@eqnarray| with a preamble string. The only difference is -% the last column they add in -- \env{eqnarray$*$} throws away the last -% column by sticking it in box~0. (I used to |\@gobble| it but that caused -% the |\cr| to be lost.) -% -% \begin{macrocode} -\def\eqnarray{\@ifnextchar[\eqnarray@i{\eqnarray@i[rcl]}} -\def\eqnarray@i[#1]{% - \@eqnarray{#1!{\hb@xt@\z@{\hss##}\tabskip\z@}} -} -\@namedef{eqnarray*}{\@ifnextchar[\eqnarray@s@i{\eqnarray@s@i[rcl]}} -\def\eqnarray@s@i[#1]{% - \@eqnarray{#1!{\nonumber\setbox\z@\hbox{##}\tabskip\z@}}% -} -% \end{macrocode} -% -% \subsubsection{Set up the initial display} -% -% \begin{macro}{\@eqnarray} -% -% The |\@eqnarray| command does most of the initial work. It sets up some -% flags and things, builds the |\halign| preamble, and returns. -% -% \begin{macrocode} -\def\@eqnarray#1{% -% \end{macrocode} -% -% Start playing with the counter here. The original does some icky internal -% playing, which isn't necessary. The |\if@eqnsw| switch is |true| if the -% user hasn't supplied an equation number. The |\if@eqalast| switch is -% |true| in the final equation-number column. -% -% \begin{macrocode} - \refstepcounter{equation}% - \@eqalastfalse% - \global\@eqnswtrue% - \m@th% -% \end{macrocode} -% -% Set things up for the |\halign| which is coming up. -% -% \begin{macrocode} - \openup\jot% - \tabskip\eqaopenskip% - \let\\\@eqncr% - \everycr{}% - $$% -% \end{macrocode} -% -% We'll build the real |\halign| and preamble in a token register. All we -% need to do is stuff the header in the token register, clear a switch -% (that'll be explained later), parse the preamble and then expand the -% tokens we collected. Easy, no? -% -% \begin{macrocode} - \toks@{\halign to\displaywidth\bgroup}% - \@tempswafalse% - \eqa@preamble#1\end% - \the\toks@\cr% -} -% \end{macrocode} -% -% \end{macro} -% -% \subsubsection{Parsing the preamble} -% -% All this actually involves is reading the next character and building a -% command from it. That can pull off an argument if it needs it. Just make -% sure we don't fall off the end and we'll be OK. -% -% \begin{macrocode} -\def\eqa@preamble#1{% - \ifx\end#1\else\csname eqa@char@#1\expandafter\endcsname\fi% -} -% \end{macrocode} -% -% Adding stuff to the preamble tokens is a simple matter of using -% |\expandafter| in the correct way.\footnote{^^A -% I have no idea why \LaTeX\ uses \cmd\edef\ for building its preamble. It -% seems utterly insane to me -- the amount of bodgery that \env{tabular} -% has to go through to make everything expand at the appropriate times is -% scary. Maybe Messrs~Lamport and Mittelbach just forgot about token -% registers when they were writing the code. Maybe I ought to rewrite the -% thing properly some time. Sigh. -% -% As a sort of postscript to the above, I \emph{have} rewritten the -% \env{tabular} environment, and made a damned fine job of it, in my -% oh-so-humble opinion. All this \env{eqnarray} stuff has been remoulded -% in terms of the generic column-defining things in \package{mdwtab}. -% You're reading the documentation of the old version, which isn't -% supported any more, so any bugs here are your own problem.} -% -% \begin{macrocode} -\def\eqa@addraw#1{\expandafter\toks@\expandafter{\the\toks@#1}} -% \end{macrocode} -% -% Now for some cleverness again. In order to put all the right bits of -% |\tabskip| glue in the right places we must \emph{not} terminate each -% column until we know what the next one is. We set |\if@tempswa| to be -% |true| if there's a column waiting to be closed (so it's initially -% |false|). The following macro adds a column correctly, assuming we're in -% a formula. Other column types make their own arrangements. -% -% \begin{macrocode} -\def\eqa@add#1{% - \if@tempswa% - \eqa@addraw{\tabskip\eqainskip}% - \else% - \eqa@addraw{#1}% - \fi% - \@tempswatrue% -} -% \end{macrocode} -% -% Now to defining column types. Let's define a macro which allows us to -% define column types: -% -% \begin{macrocode} -\def\eqa@def#1{\expandafter\def\csname eqa@char@#1\endcsname} -% \end{macrocode} -% -% Now we can define the column types. Each column type must loop back to -% |\eqa@preamble| once it's finished, to read the rest of the preamble -% string. Note the positioning of ord atoms in the stuff below. This will -% space out relations and binops correctly when they occur at the edges of -% columns, and won't affect ord atoms at the edges, because ords pack -% closely. -% -% First the easy onces. Just stick |\hfil| in the right places and -% everything will be all right. -% -% \begin{macrocode} -\eqa@def r{\eqa@add{\hfil$\eqa@style##{}$}\eqa@preamble} -\eqa@def c{\eqa@add{\hfil$\eqa@style{}##{}$\hfil}\eqa@preamble} -\eqa@def l{\eqa@add{$\eqa@style{}##$\hfil}\eqa@preamble} -\eqa@def x{\eqa@add{\hfil$\eqa@style##$\hfil}\eqa@preamble} -% \end{macrocode} -% -% Now for the textual ones. This is also fairly easy. -% -% \begin{macrocode} -\eqa@def T#1{% - \eqa@add{}% - \if#1l\else\eqa@addraw{\hfil}\fi% - \eqa@addraw{##}% - \if#1r\else\eqa@addraw{\hfil}\fi% - \eqa@preamble% -} -% \end{macrocode} -% -% Sort of split types of equations. I mustn't use |\rlap| here, or -% everything goes wrong -- |\\| doesn't get noticed by \TeX\ in the same way -% as |\cr| does. -% -% \begin{macrocode} -\eqa@def L{\eqa@add{\hb@xt@\z@{$\eqa@style##$\hss}\qquad}\eqa@preamble} -% \end{macrocode} -% -% The \lit{:} column type is fairly simple. We set |\tabskip| up to make -% lots of space and close the current column, because there must be one.^^A -% \footnote{This is an assumption.} -% -% \begin{macrocode} -\eqa@def :{% - \eqa@addraw{\tabskip\eqacolskip&}\@tempswafalse\eqa@preamble% -} -\eqa@def q{\eqa@add{\quad}\@tempswafalse\eqa@preamble} -% \end{macrocode} -% -% The other column types just insert given text in an appropriate way. -% -% \begin{macrocode} -\eqa@def >#1{\eqa@add{#1}\@tempswafalse\eqa@preamble} -\eqa@def <#1{\eqa@addraw{#1}\eqa@preamble} -% \end{macrocode} -% -% Finally, the magical \lit{!} column type, which sets the equation number. -% We set up the |\tabskip| glue properly, tab on, and set the flag which -% marks the final column. -% -% \begin{macrocode} -\eqa@def !#1{% - \eqa@addraw{\tabskip\eqacloseskip&\@eqalasttrue#1}\eqa@preamble% -} -% \end{macrocode} -% -% \subsubsection{Newline codes} -% -% Newline sequences (|\\|) get turned into calls of |\@eqncr|. The job is -% fairly simple, really. However, to avoid reading `|&|' characters -% prematurely, we set up a magic brace (from the \package{array} package -- -% this avoids creating ord atoms and other nastyness). -% -% \begin{macrocode} -\def\@eqncr{% - \iffalse{\fi\ifnum0=`}\fi% - \@ifstar{\eqacr@i{\@M}}{\eqacr@i{\interdisplaylinepenalty}}% -} -\def\eqacr@i#1{\@ifnextchar[{\eqacr@ii{#1}}{\eqacr@ii{#1}[\z@]}} -\def\eqacr@ii#1[#2]{% - \ifnum0=`{}\fi% - \eqa@eqnum% - \noalign{\penalty#1\vskip#2\relax}% -} -% \end{macrocode} -% -% \subsubsection{Setting equation numbers} -% -% Before we start, we need to generalise the flush-left number handling bits. -% The macro |\eqa@eqpos| will put its argument in the right place. -% -% \begin{macrocode} -\if@leqno - \def\eqa@eqpos#1{% - \hb@xt@.01\p@{}\rlap{\normalfont\normalcolor\hskip-\displaywidth#1}% - } -\else - \def\eqa@eqpos#1{\normalfont\normalcolor#1} -\fi -% \end{macrocode} -% -% First we need to move into the right column. Then we just set the equation -% number appropriately. There is some subtlety here, ish. The |\relax| is -% important, to delay expansion of the |\if|\dots\ until the new column has -% been started. The two helper macros are important too, to hide `|&|'s and -% `|\cr|'s from \TeX's scanner until the right time. -% -% \begin{macrocode} -\def\eqa@eqnum{% - \relax% - \if@eqalast\expandafter\eqa@eqnum@i\else\expandafter\eqa@eqnum@ii\fi% -} -\def\eqa@eqnum@i{% - \if@eqnsw% - \eqa@eqpos{(\theequation)}\stepcounter{equation}% - \else% - \eqa@eqpos\eqa@number% - \fi% - \global\@eqnswtrue% - \cr% -} -\def\eqa@eqnum@ii{&\eqa@eqnum} -% \end{macrocode} -% -% \subsubsection{Numbering control} -% -% This is trivial. We set the |\if@eqnsw| flag to be |false| and store the -% text in a macro. -% -% \begin{macrocode} -\let\nonumber\relax -\newcommand\nonumber[1][]{\global\@eqnswfalse\global\def\eqa@number{#1}} -% \end{macrocode} -% -% \subsubsection{Closing the environments off} -% -% This is really easy. Set the final equation number, close the |\halign|, -% tidy up the equation counter (it's been stepped once too many times) and -% close the display. -% -% \begin{macrocode} -\def\endeqnarray{% - \eqa@eqnum% - \egroup% - \global\advance\c@equation\m@ne% - $$% - \global\@ignoretrue% -} -\expandafter\let\csname endeqnarray*\endcsname\endeqnarray -% \end{macrocode} -% -% Now start up the other package again. -% -% \begin{macrocode} -% -%<*package> -% \end{macrocode} -% -% \end{old-eqnarray} -% % That's all there is. Byebye. % % \begin{macrocode}