summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/subeqnarray/subeqnarray.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/subeqnarray/subeqnarray.dtx
Initial commit
Diffstat (limited to 'macros/latex/contrib/subeqnarray/subeqnarray.dtx')
-rw-r--r--macros/latex/contrib/subeqnarray/subeqnarray.dtx379
1 files changed, 379 insertions, 0 deletions
diff --git a/macros/latex/contrib/subeqnarray/subeqnarray.dtx b/macros/latex/contrib/subeqnarray/subeqnarray.dtx
new file mode 100644
index 0000000000..5b3555c312
--- /dev/null
+++ b/macros/latex/contrib/subeqnarray/subeqnarray.dtx
@@ -0,0 +1,379 @@
+% \iffalse meta-comment
+%
+% Copyright 1994-2004 Johannes Braams. All rights reserved.
+%
+% This file is part of the subeqnarray package.
+% ---------------------------------------------
+%
+% It may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% The Current Maintainer of this work is Johannes Braams.
+%
+% The list of all files belonging to the subeqnarray package is
+% given in the file `manifest.txt'.
+%
+% The list of derived (unpacked) files belonging to the distribution
+% and covered by LPPL is defined by the unpacking scripts (with
+% extension .ins) which are part of the distribution.
+% \fi
+% \CheckSum{259}
+%\iffalse
+%
+% Subeqnarray package to use with LaTeX2e
+%
+%% Copyright (C) 1988--2004 by Johannes Braams,
+%% all rights resserved
+%%
+%% Error reports please to: J. Braams
+%% TeXniek
+%% Kooienswater 62
+%% 2715 AJ Zoetermeer
+%% The Netherlands
+%% Email: texniek at braams.cistron.nl
+%
+% \section{Producing the documentation}
+%
+% A short driver is provided that can be extracted if necessary by
+% the \textsf{DocStrip} program provided with \LaTeXe.
+%<*dtx>
+\ProvidesFile{subeqnarray.dtx}
+%</dtx>
+%<package>\NeedsTeXFormat{LaTeX2e}[1998/06/01]
+%<package>\ProvidesPackage{subeqnarray}
+%<sample>\ProvidesFile{subeqnarray.tex}
+%<driver>\ProvidesFile{subeqnarray.drv}
+%\ProvidesFile{subeqnarray.dtx}
+ [2004/04/15 v2.1c subeqnarray package]
+%<*driver>
+\documentclass{ltxdoc}
+
+\pagestyle{myheadings}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\newcommand\Lopt[1]{\textsf{#1}}
+\makeatletter
+\renewenvironment{theglossary}{%
+ \glossary@prologue%
+ \GlossaryParms \let\item\@idxitem \ignorespaces}%
+ {}
+\makeatother
+\begin{document}
+
+\DocInput{subeqnarray.dtx}
+\newpage
+\PrintIndex
+\PrintChanges
+\end{document}
+%</driver>
+% \end{macrocode}
+%\fi
+%
+% \GetFileInfo{subeqnarray.dtx}
+% \title{Numbering individual lines of equation array's}
+%
+% \author{Johannes Braams\\
+% \TeX niek\\
+% Kersengaarde 33\\
+% 2723 BP Zoetermeer\\
+% The Netherlands\\
+% Internet: \texttt{TeXniek at braams.cistron.nl}}
+%
+% \date{\filedate}
+%
+% \markboth
+% {subeqnarray package version \fileversion\space as of \filedate}
+% {subeqnarray package version \fileversion\space as of \filedate}
+%
+% \maketitle
+%
+%
+% This package defines the \texttt{subeqnarray} and
+% \texttt{subeqnarray*} environments, which behave like the
+% equivalent \texttt{eqnarray} and \texttt{eqnarray*} environments,
+% except that the individual lines are numbered like 1a, 1b, 1c,
+% etc.
+%
+% To refer to these numbers an extra label command |\slabel|
+% has been defined.
+%
+% Many of this code was taken from \texttt{latex.tex} and modified
+% for this purpose.
+%
+% \StopEventually{}
+%
+% \changes{1.1}{1988/12/22}{Fixed bug in subeqnarray* environment}
+% \changes{2.0}{1993/11/02}{Added support for the leqno option}
+% \changes{2.0}{1993/11/02}{Added support for the fleqn option}
+% \changes{2.1}{1994/02/09}{Upgrade for LaTeX2e}
+% \changes{2.1b}{1999/03/03}{Changed licensing remarks to use LPPL}
+% \changes{2.1c}{2004/04/15}{Updated address information}
+%
+% \section{Initial Code}
+%
+% \begin{macro}{\c@subequation}
+% We need to allocate a new counter for the \texttt{subequation}
+% environment. It is reset by the \texttt{equation} counter.
+% \begin{macrocode}
+%<*package>
+\newcounter{subequation}[equation]
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\thesubequation}
+% The representation o the counter \texttt{subequation} includes
+% the \texttt{equation} counter
+% \begin{macrocode}
+\def\thesubequation{\theequation\alph{subequation}}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Option Handling}
+%
+% The standard \LaTeX\ options \Lopt{leqno} and \Lopt{fleqn} are
+% recognised by this package.
+% \begin{macrocode}
+%
+% When \Lopt{leqno} is used the equation numbers should appear on
+% the left side of the equation. The numbers are generated by
+% |\@subeqnnum| which needs a different definition to acheive this
+% effect.
+% \begin{macrocode}
+\DeclareOption{leqno}{%
+ \def\@subeqnnum{\hbox to .01\p@{}\rlap{\reset@font\rmfamily
+ \hskip -\displaywidth(\thesubequation)}}}
+% \end{macrocode}
+% The default definition of |\@subeqnnum|.
+% \begin{macrocode}
+\DeclareOption{reqno}{%
+ \def\@subeqnnum{{\reset@font\rmfamily (\thesubequation)}}}
+% \end{macrocode}
+%
+% When the option \Lopt{fleqn} is used, the equations have to be
+% printed flush left, with an indent of |\mathindent|; the
+% equations are seperated from the surrounding text by |\topsep|
+% (plus |\partopsep| if necessary) and the width of the display is
+% |\linewidth|.
+% \begin{macrocode}
+\DeclareOption{fleqn}{%
+ \def\subeqn@start{%
+ \tabskip\mathindent
+ \abovedisplayskip\topsep
+ \ifvmode\advance\abovedisplayskip\partopsep\fi
+ \belowdisplayskip\abovedisplayskip
+ \belowdisplayshortskip\abovedisplayskip
+ \abovedisplayshortskip\abovedisplayskip
+ $$\everycr{}\halign to \linewidth}}% $$
+% \end{macrocode}
+%
+% The default will be to have displayed equations to the width of
+% |\displaywidth|.
+% \begin{macrocode}
+\DeclareOption{deqn}{%
+ \def\subeqn@start{%
+ \tabskip\@centering
+ $$\everycr{}\halign to \displaywidth}}% $$
+% \end{macrocode}
+%
+% We don't support any other options
+% \begin{macrocode}
+\DeclareOption*{\OptionNotUsed}
+% \end{macrocode}
+%
+% \section{Executing Options}
+%
+% Make sure the |\@eqnnum| is defined by specifying \Lopt{reqno} as
+% a default option. Specifying \Lopt{deqn} as a default option
+% defines |\subeqn@start|.
+% \begin{macrocode}
+\ExecuteOptions{reqno,deqn}
+% \end{macrocode}
+%
+% Now see if the use specified any options.
+% \begin{macrocode}
+\ProcessOptions
+% \end{macrocode}
+%
+% \section{The main code}
+%
+% \begin{macro}{\slabel}
+% A new label command to refer to subequations. It works
+% like the |\label| command and was taken from \texttt{latex.tex}.
+%
+% |\slabel{FOO}| writes the following on file |\@auxout|
+%
+% |\newlabel{FOO}{{eval(\@currentlabel)}{eval(\thepage)}}|
+%
+% \begin{macrocode}
+\newcommand\slabel[1]{%
+ \@bsphack
+ \if@filesw
+ {\let\thepage\relax
+ \def\protect{\noexpand\noexpand\noexpand}%
+ \edef\@tempa{\write\@auxout{\string
+ \newlabel{#1}{{\thesubequation}{\thepage}}}}%
+ \expandafter}\@tempa
+ \if@nobreak \ifvmode\nobreak\fi\fi
+ \fi\@esphack}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{subeqnarray}
+% The \texttt{subeqnarray} environment steps the equation counter,
+% sets the subequation counter equal to 1 and behaves much like the
+% \texttt{eqnarray} environment. Note the |\@currentlabel| is
+% defined to use the equation counter. This is done so that an
+% entire array an be referred to using the value of the equation
+% counter. Hence the need for the |\slabel| command.
+%
+% \begin{macrocode}
+\newenvironment{subeqnarray}%
+ {\stepcounter{equation}%
+ \def\@currentlabel{\p@equation\theequation}%
+ \global\c@subequation\@ne
+ \global\@eqnswtrue\m@th
+ \global\@eqcnt\z@\let\\\@subeqncr
+ \subeqn@start
+ \bgroup\hskip\@centering
+ $\displaystyle\tabskip\z@skip{##}$\@eqnsel
+ &\global\@eqcnt\@ne \hskip \tw@\arraycolsep \hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip \tw@\arraycolsep
+ $\displaystyle{##}$\hfil \tabskip\@centering
+ &\global\@eqcnt\thr@@
+ \hbox to\z@\bgroup\hss##\egroup\tabskip\z@skip\cr}
+ {\@@subeqncr\egroup $$\global\@ignoretrue}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\@subeqncr}
+% These macros handle the user command |\\|; they are adapted from
+% the ones used or the \texttt{eqnarray} environment.
+%
+% First the presence of a \texttt{*} detected and the right penalty
+% selected.
+% \begin{macrocode}
+\def\@subeqncr{{\ifnum0=`}\fi\@ifstar{\global\@eqpen\@M
+ \@ysubeqncr}{\global\@eqpen\interdisplaylinepenalty \@ysubeqncr}}
+% \end{macrocode}
+%
+% \begin{macro}{@ysubeqncr}
+% This macro is called by |\@subeqncr| and checks if the user
+% requested any extra vertical space. It calls |\@xsubeqncr| with
+% the wanted amount of space as its argument.
+% \begin{macrocode}
+\def\@ysubeqncr{\@ifnextchar [{\@xsubeqncr}{\@xsubeqncr[\z@skip]}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@xsubeqncr}
+% This macro calls |\@@subeqncr| to put in extra |&|'s if needed,
+% generating an error if the number of columns is too large. Then
+% the penalty selected earlier and the white space requested are
+% inserted.
+% \begin{macrocode}
+\def\@xsubeqncr[#1]{\ifnum0=`{\fi}\@@subeqncr
+ \noalign{\penalty\@eqpen\vskip\jot\vskip #1\relax}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@subeqncr}
+% Ceck the number of columns, and insert extra |&| if needed. If
+% there appear to be more than 3 columns an error is signalled.
+% \begin{macrocode}
+\def\@@subeqncr{\let\@tempa\relax
+ \ifcase\@eqcnt \def\@tempa{& & &}\or \def\@tempa{& &}
+ \or \def\@tempa{&}\else
+ \let\@tempa\@empty
+ \@latexerr{Too many columns in subeqnarray environment}\@ehc\fi
+ \@tempa \if@eqnsw\@subeqnnum\refstepcounter{subequation}\fi
+ \global\@eqnswtrue\global\@eqcnt\z@\cr}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{environment}{subeqnarray*}
+% This environment is basically the same as the \texttt{eqnarray}
+% environment, but it is provided just or completeness.
+% \begin{macrocode}
+\newenvironment{subeqnarray*}%
+ {\def\@subeqncr{\nonumber\@ssubeqncr}\subeqnarray}
+ {\global\advance\c@equation\m@ne\nonumber\endsubeqnarray}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\@ssubeqncr}
+% This is used in the \texttt{esubqnarray*} environment.
+% \begin{macrocode}
+\let\@ssubeqncr\@subeqncr
+%</package>
+%<*sample>
+% \end{macrocode}
+% \end{macro}
+%
+% \section{An example of the use of this package}
+%
+% When you run the following document through \LaTeX\ you will see
+% the differene between the \texttt{subeqnarray} and
+% \texttt{eqnarray} environments.
+% \begin{macrocode}
+%<*sample>
+\documentclass[fleqn]{article}
+\usepackage{subeqnarray}
+\begin{document}
+This document shows an example of the use of the \emph{subeqnarray}
+environment. Here is one:
+\begin{subeqnarray}
+\label{eqw}
+\slabel{eq0}
+ x & = & a \times b \\
+\slabel{eq1}
+ & = & z + t\\
+\slabel{eq2}
+ & = & z + t
+\end{subeqnarray}
+The first equation is number~\ref{eq0}, the last is~\ref{eq2}. The
+equation as a whole can be referred to as equation~\ref{eqw}.
+
+To show that equation numbers behave normally, here's an
+\emph{eqnarray} environment.
+\begin{eqnarray}
+\label{eq10}
+ x & = & a \times b \\
+\label{eq11}
+ & = & z + t\\
+\label{eq12}
+ & = & z + t
+\end{eqnarray}
+
+These are equations~\ref{eq10},~\ref{eq11} and~\ref{eq12}.
+\end{document}
+%</sample>
+% \end{macrocode}
+%
+% \Finale
+\endinput
+%
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%