summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/texsis/base/TXSeqns.tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-12 23:47:08 +0000
committerKarl Berry <karl@freefriends.org>2006-01-12 23:47:08 +0000
commit3b927eb81270ca256a85224fda0e0812120168a3 (patch)
treefc763fee20a22d51cc18825d462a1554e86fcdce /Master/texmf-dist/tex/texsis/base/TXSeqns.tex
parent4b07bbd62fe0b4abde93a927773133aac4a9a2ac (diff)
trunk/Master/texmf-dist/tex/texsis/
git-svn-id: svn://tug.org/texlive/trunk@626 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/texsis/base/TXSeqns.tex')
-rw-r--r--Master/texmf-dist/tex/texsis/base/TXSeqns.tex259
1 files changed, 259 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/texsis/base/TXSeqns.tex b/Master/texmf-dist/tex/texsis/base/TXSeqns.tex
new file mode 100644
index 00000000000..9319b534655
--- /dev/null
+++ b/Master/texmf-dist/tex/texsis/base/TXSeqns.tex
@@ -0,0 +1,259 @@
+%% file: TXSeqns.tex - Equation Numbering - TeXsis version 2.18
+%% @(#) $Id: TXSeqns.tex,v 18.0 1999/07/09 17:24:29 myers Exp $
+%======================================================================*
+%
+% These macros use \tag from TXStags to number equations automatically,
+% including chapter and section numbers if \showchapIDtrue and
+% \showsectIDtrue are used. To obtain automatic equation numbers in
+% ordinary displayed equations, use \EQN in place of \eqno:
+% $$
+% <math mode material> \EQN <tag>
+% $$
+% The <tag> can include almost anything, including a number. A ; is used
+% for multi-part equations, with the equation number only being
+% incremented for <tag>;a. For example,
+% $$ <first part> \EQN <tag>;a $$
+% ...
+% $$ <second part> \EQN <tag>;b $$
+% This usage requires that <tag>;<letter> NOT be surrounded by {}; \EQN
+% takes as its argument everything up to the $$.
+%
+% To construct multi-part equations with \EQN, use \EQNalign and
+% \EQNdisplaylines in place of the \eqalign and \displaylines of plain
+% TeX. For equations aligned at the & sign, use
+% $$
+% \EQNalign{
+% <eqn 1 left> & <eqn 1 right> \EQN <tag1> \cr
+% <eqn 2 left> & <eqn 2 right> \EQN <tag2> \cr
+% ...}
+% $$
+% For centered equations with less space than between separate equations,
+% use instead
+% $$
+% \EQNdisplaylines{
+% <eqn 1 > \EQN <tag1> \cr
+% <eqn 2 > \EQN <tag2> \cr
+% ...}
+% $$
+% The \EQN can be omitted on any of the lines, or the ; construction can be
+% used for multi-part numbers. (Note that these macros actually redefine
+% \EQN to be & inside of the \halign and typeset the equation number in the
+% same way as does \eqalignno in plain TeX.)
+%
+% Several macros are provided to use a tag to refer to a previous
+% equation:
+% \Eq{<tag>} ==> Eq.~(<number>)
+% \Eqs{<tag>} ==> Eqs.~(<number>)
+% \Ep{<tag>} ==> (<number>)
+% Compound constructions are possible, e.g.
+% \Eqs{<tag1>}-\Ep{<tag2>} ==> Eqs.~(<number1>)-(<number2>)
+%
+% Note: there may be difficulties with using parentheses in labels
+% if \onparens is set.
+%
+% This file is a part of TeXsis.
+% (C) Copyright 1986, 1997 by Eric Myers and Frank E. Paige
+%======================================================================*
+\message{Equation numbering.}
+
+% Counters and such:
+
+\newcount\eqnum \eqnum=\z@ % equation number in section
+\def\@chaptID{} \def\@sectID{} % start with these null
+
+% Equation Label Tracing: \eqnotracetrue allows you to trace equation
+% numbers by internal label when you print a rough draft of the document.
+% Both the external sequential equation number and the internal label are
+% printed, one over the other.
+
+\newif\ifeqnotrace \eqnotracefalse % start with it off
+
+%----------------------------------------------------------------------*
+% \EQN <label> $$ gets everything up to the "$$" as the equation
+% label and passes it to \EQNOparse for processing. Then it does the
+% final "$$". \@EQN does the work.
+
+\def\EQN{% turns off special characters and calls \@EQN
+ \begingroup % what follows is local
+ \quoteoff\offparens % make sure ",(, ) not active
+ \@EQN} % go get label
+
+\def\@EQN#1$${% gets everything up to $$ and parses as the label
+ \endgroup % end group from \EQN
+ \if ?#1? \EQNOparse *;;\endlist % if no label, tag with "*"
+ \else \EQNOparse#1;;\endlist\fi % parse the label
+ $$} % then end equation with $$
+
+% \EQNOparse <label>;;\endlist parses <text> as an equation number
+% label. It separates out letters, if present. (eg. label;a for equation a,
+% but ";" does not appear in output.) It tags the label and puts the equation
+% number in the display by calling \@EQNOdisplay.
+
+\def\EQNOparse#1;#2;#3\endlist{% parse equation label, look for ``;''
+ \if ?#3?\relax % if #3 is null, no ";" present
+ \global\advance\eqnum by\@ne % so advance count
+ \edef\tnum{\@chaptID\@sectID\the\eqnum}% % construct eqn number
+ \Eqtag{#1}{\tnum}% % tag the eqn number
+ \@EQNOdisplay{#1}% % display equation number
+ \else\stripblanks #2\endlist % remove any blanks
+ \edef\p@rt{\tok}% % and save in \p@rt
+ \if a\p@rt\relax % if ";" present is it ";a"?
+ \global\advance\eqnum by\@ne\fi % yes: advance counter anyway
+ \edef\tnum{\@chaptID\@sectID\the\eqnum}% % construct eqn number
+ \Eqtag{#1}{\tnum}% % and tag equation #nn
+ \edef\tnum{\@chaptID\@sectID\the\eqnum\p@rt}% also make eqn # w/ letter
+ \Eqtag{#1;\p@rt}{\tnum}% % and tag #nn;x
+ \@EQNOdisplay{#1;#2}% % display equation number
+ \fi %
+ \global\let\?=\tnum % \? is last eqn # (ala PHYZZX)
+ \relax}% % end of definition
+
+% \Eqtag#1#2 is like \tag for the equation number, (in future, have it
+% not write to the .aux file if the label begins with "*").
+
+\def\Eqtag#1#2{\tag{Eq.#1}{#2}}
+
+
+% \@EQNOdisplay{<label>} writes the equation number, which is in \tnum.
+% If \eqnotracetrue then we also put the label in the margin, in \tt.
+
+\def\@EQNOdisplay#1{% display equation number besides equation
+ \@eqno % begin eqn number
+ \ifeqnotrace % tracing labels? then...
+ \rlap{\phantom{(\tnum)}% % skip over number to margin
+ \quad{\tenpoint\tt["#1"]}}\fi % put ["label"] in margin
+ \linkname{Eq.#1}{(\tnum)}% % and the equation number
+ }
+
+
+\let\@eqno=\eqno % usual interpretation
+
+\def\endlist{\endlist} % just so it has a def
+
+%----------------------------------------------------------------------*
+% Reference equations in the text. The \linkto makes these HyperTeXt
+% links if \htmltrue is set.
+
+\def\Eq#1{\linkto{Eq.#1}{Eq.~($\use{Eq.#1}$)}} % \Eq prints "Eq. (nn)"
+\def\Eqs#1{\linkto{Eq.#1}{Eqs.~($\use{Eq.#1}$)}}% \Eqs prints "Eqs. (nn)"
+\def\Ep#1{\linkto{Eq.#1}{($\use{Eq.#1}$)}} % \Ep prints just "(nn)"
+
+%----------------------------------------------------------------------*
+% \EQNdisplaylines is just like \displaylines, as described in
+% The TeXbook, except that you can also use \EQN for equation numbers.
+% syntax: "\EQNdisplaylines{... <equation> \EQN <label> \cr ...ditto...\cr}"
+
+\def\EQNdisplaylines#1{% % make \EQN re-\def local
+ \@EQNcr % change \def of \EQN to get label
+ \displ@y % reduce interline spacing (from Plain)
+ \halign{% % alignment
+ \hbox to\displaywidth{% % full width
+ $\@lign\hfil\displaystyle##\hfil$}% centered displaystyle
+ &\llap{$\@lign\@@EQN{##}$}\crcr % then eqn number template
+ #1\crcr}% % now apply template to argument
+ \@EQNuncr} % put \EQN back to normal
+
+
+% \EQNalign is just like \eqalign except that you can use \EQN to get
+% equation numbers. Just put ...\EQN <label> \cr on a line you want to get
+% a label.
+
+\long\def\EQNalign#1{% replacement for \eqalign using \EQN
+ \@EQNcr % re-def \EQN to see label before \cr
+ \displ@y % reduce interline spacing
+ \tabskip=\centering % leftskip for LHS
+ \halign to\displaywidth{% % alignment
+ \hfil$\relax\displaystyle{##}$% % template for LHS
+ \tabskip=0pt % no skip between LHS and RHS
+ &$\relax\displaystyle{{}##}$\hfil % template for RHS
+ \tabskip=\centering % rightskip for RHS
+ &\llap{$\relax\@@EQN{##}$}% % template for eqn number, parses label
+ \tabskip=0pt\crcr % no skip at end of eqn number
+ #1\crcr}% % now apply template to argument
+ }
+
+
+% \@@EQN parses and displays the equation number using \EQNOparse.
+% Here \@eqno is disabled in \@EQNOdisplay by \@EQNcr.
+
+\def\@@EQN#1{\if ?#1? \EQNOparse *;;\endlist % if empty, label *
+ \else \EQNOparse#1;;\endlist\fi} % otherwise label with #1
+
+
+% \@EQNcr changes definition of \EQN so it is an alignment tab.
+% Everything up to the \cr is then passed to \EQNOparse by the \@@EQN in
+% the template. Also changes \@eqno to \relax for \@EQNOdisplay.
+% \@EQNuncr changes everything back to normal.
+
+\def\@EQNcr{% changes definition of \EQN to & for aligned equations
+ \let\EQN=& % \EQN is alignment tab
+ \let\@eqno=\relax} % don't do \eqno in \EQNalign
+
+\def\@EQNuncr{% changes definition of \EQN back to normal
+ \let\EQN=\@EQN % \EQN is as usual
+ \let\@eqno=\eqno} % make \@eqno be \eqno
+
+
+% \EQNdoublealign makes a double equation alignment, i.e. three
+% columns. \EQN works as usual.
+
+\def\EQNdoublealign#1{% % make re-def of \EQN local
+ \@EQNcr % re-def \EQN to see label before \cr
+ \displ@y % reduce interline spacing
+ \tabskip=\centering % leftskip for LHS
+ \halign to\displaywidth{% %
+ \hfil$\relax\displaystyle{##}$% % template for LHS
+ \tabskip=0pt % no skip between LHS and middle
+ &$\relax\displaystyle{{}##}$\hfil% % template for middle
+ \tabskip=0pt % no skip between middle and RHS
+ &$\relax\displaystyle{{}##}$\hfil% % template for RHS
+ \tabskip=\centering % rightskip for RHS
+ &\llap{$\relax\@@EQN{##}$}% % eqn number template parses label
+ \tabskip=0pt\crcr % no skip at end of eqn number
+ #1\crcr}% % now apply template to argument
+ \@EQNuncr}% % put \EQN back to normal
+
+%----------------------------------------------------------------------*
+% Alternate def of \displaylines lets you put in equation numbers
+% just like \eqalignno (or use \EQNdisplaylines in eqns.tex).
+%
+%%\def\displaylines#1{%
+%% \displ@y % reduce interline spacing
+%% \halign{\hbox to \displaywidth{$\hfil\displaystyle##\hfil$}%
+%% &\llap{$##$}\crcr % then eqn number
+%% #1\crcr}} % now apply template
+
+
+%----------------------------------------------------------------------*
+% \eqn<label> $$ is like \EQN except that it uses the PHYZZX
+% protocols. It defines the control sequence \"label" to be the equation
+% number.
+
+\def\eqn#1$${\edef\tok\string#1 % expand cs name to letters
+ \xdef#1{\NX\use{Eq.\tok}}% % make cs refer to this eqn number
+ \EQNOparse \tok;;\endlist $$} % now process eqn number as usual
+
+
+%----------------------------------------------------------------------*
+% \eqnmark puts a marker at the left edge of a displayed equation to
+% show that it's important. This is better than putting a box around
+% the equation. Change \eqnmarker to be whatever symbol you want.
+% Note that this works with \eqno and \EQN and \eqalign{ }\eqno or
+% \EQN, but not \eqalignno oe \EQNalign.
+
+
+\def\eqnmarker{\triangleright} % change to whatever mark you want
+
+\def\eqnmark{\quoteoff\offparens\@eqnmark}
+\def\@eqnmark#1$${\@@eqnmark#1\eqno\eqno\endlist}
+\def\@@eqnmark#1\eqno#2\eqno#3\endlist{\def\EQN{\relax}%
+ \if ?#3? \@EQNmark#1\EQN\EQN\endlist %
+ \else\displaylines{\hbox to 0pt{$\eqnmarker$\hss}\hfill{#1}\hfill %
+ \hbox to 0pt{\hss$#2$}}\fi$$}
+\def\@EQNmark#1\EQN#2\EQN#3\endlist{%
+ \if ?#3?\displaylines{\hbox to 0pt{$\eqnmarker$\hss}\hfill{#1}\hfill}%
+ \else \let\@eqno=\relax %
+ \EQNdisplaylines{\hbox to 0pt{$\eqnmarker$\hss}\hfill{#1}\hfill %
+ \hbox to 0pt{\hss$\EQNOparse#2;;\endlist$}}\fi}
+
+%>>> EOF TXSeqns.tex <<<