diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-11 23:52:49 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-11 23:52:49 +0000 |
commit | 04ffa713ed0f042fc5cf25048dc7a0ec1e883819 (patch) | |
tree | 6d3e6091e93a59f16f89ec6341f5ecbc8424d66d /Master/texmf-dist/source/latex/eqnarray/eqnarray.dtx | |
parent | 16ac8348bacde6d6f553362bad641464ea2a8aab (diff) |
trunk/Master/texmf-dist/source/latex/eqnarray
git-svn-id: svn://tug.org/texlive/trunk@253 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/eqnarray/eqnarray.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/eqnarray/eqnarray.dtx | 308 |
1 files changed, 308 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/eqnarray/eqnarray.dtx b/Master/texmf-dist/source/latex/eqnarray/eqnarray.dtx new file mode 100644 index 00000000000..b543d7f1e5e --- /dev/null +++ b/Master/texmf-dist/source/latex/eqnarray/eqnarray.dtx @@ -0,0 +1,308 @@ +\def\fileversion{1.2} +\def\filedate{17 May 1995} +\def\docdate{17 May 1995} +% +% \MakeShortVerb{\|} +% +% \iffalse +% Version 1.1: \def\filedate{jan 1993}, \def\docdate{9 jan 1995} +% Version 1.2: Piet van Oostrum <piet@cs.ruu.nl> added the code which +% is necessary for the |fleqn| option. +% \def\filedate{17 May 1995} \def\docdate{17 May 1995} +% \fi +% +% \title{The |equationarray| environment} +% \author{Roland Winkler\\ \normalsize +% |roland.winkler@physik.uni-regensburg.de|} +% \maketitle +% \begin{abstract}\noindent +% The |equationarray| combines the |eqnarray| and the |array| environment. +% \end{abstract} +% +% \section{Introduction} +% +% Problem: The |eqnarray| environment is too restrictive because it is +% only prepared to accept three part equations. Some applications +% require more sophisticated mathematics, so three parts aren't +% enough. Simultaneously, we would like to have our equations +% numbered. If the equations aren't to be numbered, then the |array| +% environment suffices (nevertheless it is often easier to use the +% |equationarray*| environment than both an |equation| plus an |array| +% environment). If the equations aren't to be aligned with +% each other, then the |equation| environment is preferred. +% +% The following is a new version of Tony Li's |equationarray| +% environment modified such that it is compatible with Frank Mittelbach's +% |array| environment, i.e. it should be possible to use all options +% of the |array| environment. If you find a bug (see below!) or +% if you make any improvements, I'd like to hear about them. +% +% When writing the |equationarray| environment I used the +% version v2.1b of the |array| environment. The original version of +% |equationarray| was written by Tony Li, University of Southern +% California, tli@sargas.usc.edu starting 6/15/88. +% +% I know that my documentation of the |equationarray| environment is +% rather short -- but maybe nobody else might like to use it and +% even this work was superfluous. So if you think that it would be +% useful to have a better documentation please let me know. +% +% \section{Example} +% +% We give a short example for the use of |equationarray|. The +% text is +% % +% \begin{verbatim} +% \newcolumntype{e}{@{}} +% \begin{equationarray}{rclel} +% \phi & = & \sum \bigg( & \frac{xxxxxxxxxx}{\phi} +% \nonumber\\*[3ex] +% & & & + \frac{yyyyyyyyyy}{\phi} \bigg) \\[4ex] +% & = & \multicolumn{2}{l}{ \frac{zzzzzzzzzz}{\phi} } +% \end{equationarray} +% \end{verbatim} +% % +% and we obtain (usually my formulas are much longer $\ldots$) +% % +% \newcolumntype{e}{@{}} +% \begin{equationarray}{rclel} +% \phi & = & \sum \bigg( & \frac{xxxxxxxxxx}{\phi} +% \nonumber\\*[3ex] +% & & & + \frac{yyyyyyyyyy}{\phi} \bigg) \\[4ex] +% & = & \multicolumn{2}{l}{ \frac{zzzzzzzzzz}{\phi} } +% \end{equationarray} +% % +% One can avoid pagebreaks between two lines by using the +% star-version |\\*|. There is also the star-version |equationarray*| +% which has usually no linenumbers. But if for a particular line you +% still want a linenumber, you can use |\yesnumber|, (I find this +% easier than many lines with |\nonumber|). With the options |[l]| +% or |[r]| the |equationarray| will appear flushleft or flushright, +% with the options |[c]| the |equationarray| will be centered, +% e.g. |\begin{equationarray}[l]{rclll}|. The default will be centering +% without the |fleqn| option and left-justified, indented by |\mathindent| +% with the |fleqn| option. Thanks to Piet van Oostrum |<piet@cs.ruu.nl>| +% who added the code which is necessary for the |fleqn| option. +% +% \section{Bugs} +% +% The equationarray has a slightly modified version of +% |\multicolumn| because we must count the |\span|ed columns. Thus +% if you have |\multicolumn| within an |array| within the +% |equationarray| environment, then you might run into difficulties +% if you have a line with less |&|'s than columns defined in the preamble. +% +% Thus you can either fill up the end of a half empty line with +% extra |&|'s or you can put the original definition of +% |\multicolumn| within the definition of the |array| command. +% +% \section{The code} +% +% \begin{macrocode} +\typeout{equationarray \fileversion\space<\filedate>} +\typeout{English documentation\space\space<\docdate>} +% \end{macrocode} +% +% Process the |fleqn| option. +% \begin{macrocode} +\def\eqnarr@left{\@centering} +\let\eqnarr@opts\relax +\DeclareOption{fleqn}{ + \def\eqnarr@left{\mathindent} + \def\eqnarr@opts{\displaywidth\linewidth + \advance\displaywidth-\mathindent} } +\ProcessOptions +% \end{macrocode} +% +% \begin{macro}{\equationarray} +% \begin{macrocode} +\def\equationarray{% + \col@sep\arraycolsep + \def\d@llarbegin{$\displaystyle}% + \def\d@llarend{$}% + \stepcounter{equation}% + \let\@currentlabel=\theequation + \set@eqnsw \global\@eqcnt\z@ \global\@eqargcnt\z@ + \let\@classz\@eqnclassz + \def\multicolumn##1##2##3{\@eqnmulticolumn{##1}{##2}{##3}% + \global\advance\@eqcnt##1 + \global\advance\@eqcnt\m@ne}% + \def\@halignto{to\displaywidth}% + \@ifnextchar[{\@equationarray}{\@equationarray[.]}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@eqnmulticolumn} +% |\@eqnmulticolumn| equals the original version of |\multicolumn|. +% \begin{macrocode} +\let\@eqnmulticolumn=\multicolumn +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\nonumber,\yesnumber} +% Note, that |\nonumber| is already defined in standard latex.tex +% \begin{macrocode} +% \def\nonumber{\global\@eqnswfalse} +\def\yesnumber{\global\@eqnswtrue} +\let\set@eqnsw=\yesnumber +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@amper} +% We need a macro for |&| that expands at the right time. +% \begin{macrocode} +\def\@amper{&} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@eqargcnt} +% We must count the number of columns defined in the preamble so +% that we can fill every line with exactly |\@eqargcnt| copies of +% |&| before we insert the equation number. +% \begin{macrocode} +\newcount\@eqargcnt % counts number of columns +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@equationarray} +% The definition of |\@equationarray| follows the \TeX book, +% Exercise 22.9 +% \begin{macrocode} +\def\@equationarray[#1]#2{% + \eqnarr@opts + \@tempdima \ht \strutbox + \advance \@tempdima by\extrarowheight + \setbox\@arstrutbox=\hbox{\vrule + \@height\arraystretch \@tempdima + \@depth\arraystretch \dp \strutbox + \@width\z@}% + \gdef\advance@eqargcnt{\global\advance\@eqargcnt\@ne}% + \begingroup + \@mkpream{#2}% + \xdef\@preamble{% + \if #1l\tabskip\z@ \else\if #1r\tabskip\@centering + \else\if #1c\tabskip\@centering + \else\tabskip\eqnarr@left \fi\fi\fi + \halign \@halignto + \bgroup \tabskip\z@ \@arstrut \@preamble + \if #1l\tabskip\@centering \else\if #1r\tabskip\z@ + \else\tabskip\@centering \fi\fi +% \end{macrocode} +% +% Here we need an extra column for the equation-number +% +% \begin{macrocode} + \@amper\llap{\@sharp}\tabskip\z@\cr}% + \endgroup + \gdef\advance@eqargcnt{}% + \bgroup + \let\@sharp## \let\protect\relax + \m@th \let\\=\@equationcr + \let\par\@empty + $$ % $$ BRACE MATCHING HACK + \lineskip \z@ + \baselineskip \z@ + \@preamble} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@eqnclassz} +% |\@eqnclassz| does the same thing as |\@classz| except that we add\\ +% |\advance@eqargcnt| +% \begin{macrocode} +\def\@eqnclassz{\@classx + \@tempcnta \count@ + \advance@eqargcnt + \prepnext@tok + \@addtopreamble{% + \global\advance\@eqcnt\@ne + \ifcase \@chnum + \hfil \d@llarbegin \insert@column \d@llarend\hfil \or + \d@llarbegin \insert@column \d@llarend \hfil \or + \hfil\kern\z@ \d@llarbegin \insert@column \d@llarend \or + $\vcenter + \@startpbox{\@nextchar}\insert@column \@endpbox $\or + \vtop \@startpbox{\@nextchar}\insert@column \@endpbox \or + \vbox \@startpbox{\@nextchar}\insert@column \@endpbox + \fi}\prepnext@tok} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\endequationarray} +% \begin{macrocode} +\def\endequationarray{\@zequationcr + \egroup + \global\advance\c@equation\m@ne $$ % $$ BRACE MATCHING HACK + \egroup\global\@ignoretrue + \gdef\@preamble{}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@equationcr} +% If we have |\\*| the command |\@equationcr| avoids pagebreaks +% \begin{macrocode} +\def\@equationcr{${\ifnum0=`}\fi\@ifstar{\global\@eqpen\@M + \@xequationcr}{\global\@eqpen\interdisplaylinepenalty + \@xequationcr}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xequationcr} +% \begin{macrocode} +\def\@xequationcr{% + \@ifnextchar[{\@argequationcr}{\ifnum0=`{\fi}${}% + \@zequationcr}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@argequationcr} +% \begin{macrocode} +\def\@argequationcr[#1]{\ifnum0=`{\fi}${}\ifdim #1>\z@ + \@xargequationcr{#1}\else + \@yargequationcr{#1}\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xargequationcr} +% \begin{macrocode} +\def\@xargequationcr#1{\unskip + \@tempdima #1\advance\@tempdima \dp \@arstrutbox + \vrule \@depth\@tempdima \@width\z@ + \@zequationcr\noalign{\penalty\@eqpen}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@yargequationcr} +% \begin{macrocode} +\def\@yargequationcr#1{% + \@zequationcr\noalign{\penalty\@eqpen\vskip #1}} +% \end{macrocode} +% +% We add |&\omit| for those columns that will remain empty. +% Note that without |\omit| we already have |\advance\@eqcnt\@ne| in +% the preamble. +% +% \begin{macrocode} +\def\@zequationcr{\@whilenum\@eqcnt <\@eqargcnt + \do{\@amper\omit\global\advance\@eqcnt\@ne}% +% \end{macrocode} +% We add an extra alignment tab for the equationnumber +% \begin{macrocode} + \@amper + \if@eqnsw\@eqnnum\stepcounter{equation}\fi + \set@eqnsw\global\@eqcnt\z@\cr} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\equationarray*} +% Finally we define the |equationarray*| environment. It does exactly +% the same thing as |\equationarray| except that we |\let| the command +% |\set@eqnsw| equal |\nonumber| +% \begin{macrocode} +\@namedef{equationarray*}{% + \let\set@eqnsw=\nonumber \equationarray} +\@namedef{endequationarray*}{\endequationarray} +% \end{macrocode} +% \end{macro} +% +\endinput |