summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/mh/empheq07.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/mh/empheq07.dtx')
-rw-r--r--Master/texmf-dist/source/latex/mh/empheq07.dtx1402
1 files changed, 1402 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/mh/empheq07.dtx b/Master/texmf-dist/source/latex/mh/empheq07.dtx
new file mode 100644
index 00000000000..09bb2c6f3c0
--- /dev/null
+++ b/Master/texmf-dist/source/latex/mh/empheq07.dtx
@@ -0,0 +1,1402 @@
+%\iffalse meta-comment
+% File `empheq07.dtx'.
+% Copyright 2002-2004 Morten H\o gholm.
+% moho01ab@student.cbs.dk
+%
+% 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 Morten H\o gholm.
+%
+% This work consists of the files empheq07.dtx and empheq07.ins
+% and the derived file empheq07.sty.
+%
+%<*dtx>
+ \ProvidesFile{empheq07.dtx}
+%</dtx>
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\ProvidesPackage{empheq07}
+ [2004/07/27 v0.7d Emphasizing equations (MH)]
+%<*driver>
+\documentclass[a4paper]{ltxdoc}
+\usepackage{empheq07}
+\usepackage{color,fancybox,ifpdf}
+\ifpdf\else
+ \usepackage{pstricks}
+\fi
+\definecolor{lightblue}{rgb}{.8, .8, 1}
+\OnlyDescription
+\begin{document}
+\DocInput{empheq07.dtx}
+\end{document}
+%</driver>
+% \fi
+% \DeclareRobustCommand{\mode}[1]{\texttt{#1}}
+% \DeclareRobustCommand{\env}[1]{\textsf{#1}}
+% \DeclareRobustCommand{\pkg}[1]{\texttt{#1}}
+% \DeclareRobustCommand{\EQ}{\pkg{empheq07}}
+%
+% \changes{v0.7d}{2004/07/27}{Changed name to \pkg{empheq07} by request
+% of Robin Fairbairns}
+%
+% \changes{v0.7c}{2004/04/01}{Separated \pkg{empheq} and
+% \pkg{empheq-obsolete}}
+%
+% \changes{v0.7b}{2004/03/13}{Upgraded license to LPPL version 1.3.
+% The package is still obsolete}
+%
+% \changes{v0.7a}{2004/02/15}{This package is now obsolete and has
+% changed its name to \pkg{empheq-obsolete}}
+%
+% \changes{v0.6a}{2003/01/28}{Minor updates to documentation.}
+%
+% \changes{v0.5}{2002/12/30}{First experimental and very limited release}
+% \newif\ifBonusExample
+% \ifpdf\else
+% \BonusExampletrue
+% \fi
+% \GetFileInfo{empheq07.dtx}
+% \CheckSum{1273}
+% \title{The \EQ\ package\thanks{This file
+% has version number \fileversion, last
+% revised \filedate.}\\Emphasizing equations in \LaTeXe
+% \thanks{Thanks to Lars Madsen for asking for the subtle feature
+% that evolved into this package.}}
+% \author{Morten H\o gholm}
+% \date{\filedate}
+%
+% \maketitle
+%
+%
+% \begin{abstract}
+% \noindent The \EQ\ package automatically detects several \pkg{amsmath}
+% environments and the size of the displayed math material. The user
+% interface makes it easy to add various kinds of visual markup to
+% these equations.
+% \end{abstract}
+% \tableofcontents
+% \section{Important Notice}
+%
+% This package (\EQ\ \fileversion) is no longer supported. See the
+% documentation of \pkg{empheq} for more details.
+%
+%
+% \section{Introduction}
+% Users who have wanted to put a system of equations inside boxes has
+% hitherto been forced to use the features of \pkg{fancybox} or the \cmd{\boxed} command
+% of \pkg{amsmath}. Both alternatives have serious limitations though.
+% \pkg{fancybox} allows only \env{eqnarray}-style equations and at
+% the end of the day they aren't all that pretty. Most mathematical
+% typesetting in \LaTeX\ is done with the aid of \pkg{amsmath}
+% anyway, but it only offers the single line quick-fix \cmd{\boxed}.
+% What we really want is something that will enable us to do
+% something along the likes of this:
+% \begin{subequations}\label{eq:1}
+% \begin{empheq}[boxtype=\fbox,Left= {\tilde{S}=1 \Rightarrow\empheqlbrace}]
+% \begin{align}
+% a&=\int_{-2}^3{t}b^t \, dt \quad\text{and} \label{eq:1a}\\
+% c&=d-a \label{eq:1b}
+% \end{align}
+% \end{empheq}
+% \end{subequations}
+% As you can see, \EQ\ can do all the tricks the \pkg{cases} package
+% by Donald Arseneau can do and more. It even supports
+% \env{subequations}---as shown in equations \eqref{eq:1a} and
+% \eqref{eq:1b}---from \pkg{amsmath} without complaining.
+%
+% In order to combine the best of two worlds the \EQ\ package
+% tries to take advantage of the widespread features of \pkg{amsmath}.
+% As it should be well known if you read this, \pkg{amsmath} has
+% amongst its arsenal of structures \env{align}, \env{gather}, \env{alignat} and \env{multline}.
+% \EQ\ works with these as well as their starred
+% variants.
+%
+% ``But what about \env{equation}?'' you say. \env{equation} is (in
+% my opinion) merely a poor man's \env{gather}. If you really want
+% to use \EQ's features on a one-liner (no pun intended) go with
+% \env{gather}. Anyway the real goal of this package is to do nifty
+% tricks with multi line equations \ldots
+%
+%
+% \section{Examples}
+% \changes{v0.7}{2003/05/11}{Added further examples and changed existing ones}
+% Any options given to \EQ\ is passed on to \pkg{amsmath}, thus the
+% line\par
+% \cmd{\usepackage}\oarg{options}|{empheq07}|\\
+% will load \pkg{amsmath} with exactly those options. \EQ\ doesn't
+% redefine anything so to use it in an existing document you need
+% only replace \pkg{amsmath} with \EQ---no harm done.
+%
+%
+% \EQ\ is \emph{really} easy to use; you simply put an \env{empheq}
+% environment around your \pkg{amsmath} environment:
+% \begin{verbatim}
+% \begin{empheq}
+% \begin{align}
+% E&=mc^2 \\
+% Y&= \sum_{n=1}^\infty \frac{1}{n^2}
+% \end{align}
+% \end{empheq}
+% \end{verbatim}
+% \begin{empheq}
+% \begin{align}
+% E&=mc^2 \\
+% Y&= \sum_{n=1}^\infty \frac{1}{n^2}
+% \end{align}
+% \end{empheq}
+% Impressed? No? Well then I guess it's about time I told you about
+% the \emph{optional} argument of the \env{empheq} environment. It allows
+% you control what material to put on either side of the math and
+% the sort of box to go around it all. That means that we can say
+% \begin{verbatim}
+% \begin{empheq}[boxtype=\fbox]
+% \begin{align}
+% E&=mc^2 \\
+% Y&= \sum_{n=1}^\infty \frac{1}{n^2}
+% \end{align}
+% \end{empheq}
+% \end{verbatim}
+% to obtain the display
+% \begin{empheq}[boxtype=\fbox]
+% \begin{align}
+% E&=mc^2 \\
+% Y&= \sum_{n=1}^\infty \frac{1}{n^2}
+% \end{align}
+% \end{empheq}
+% This requires the use of the \pkg{keyval} package from the tools
+% bundle, which is undoubtedly installed on your system. When using
+% the \pkg{keyval} package there are a few things we need to keep in
+% mind. In mathematical typesetting `|=|' and `|,|' are quite
+% frequently used, thus requiring the user to enclose them in
+% braces:
+% \begin{verbatim}
+% \begin{empheq}[boxtype=\fbox,
+% Left={(a,b)=(c,i) \Rightarrow\empheqlbrace}]
+% \begin{alignat}{2}
+% (a,b)&= (\cos^a c, \tan^b i)&& \quad\text{for $i>1$}\\
+% (a,b)&= (\arccos x^a, \arctan i^b)&& \quad\text{for $i\leq1$}
+% \end{alignat}
+% \end{empheq}
+% \end{verbatim}
+% \begin{empheq}[boxtype=\fbox,
+% Left={(a,b)=(c,i) \Rightarrow\empheqlbrace}]
+% \begin{alignat}{2}
+% (a,b)&= (\cos^a c, \tan^b i)&& \quad\text{for $i>1$}\\
+% (a,b)&= (\arccos c^a, \arctan i^b)&& \quad\text{for $i\leq1$}
+% \end{alignat}
+% \end{empheq}
+% The same with \env{cases} from \pkg{amsmath} for comparison:
+% \[
+% \boxed{(a,b)=(c,i) \Rightarrow
+% \begin{cases} (a,b)= (\cos^a c, \tan^b i)& \text{for $i>1$}\\
+% (a,b)= (\arccos x^a, \arctan i^b)& \text{for $i\leq1$}
+% \end{cases}}
+% \]
+% Notice that \env{cases} uses an array for the conditions, so you
+% have to force \cmd{\displaystyle} yourself. This is not needed with
+% \EQ\ as you're already using a \cmd{\displaystyle} environment such as
+% \env{gather} etc.
+%
+% \changes{v0.6b}{2003/03/04}{Added example for changing margins inside the boxtype.}
+% Observe what can be done if we replace
+% |\fbox| with another framed box and add some space on all sides:
+% \begin{verbatim}
+% \definecolor{lightblue}{rgb}{.8, .8, 1}
+% \begin{empheq}[boxtype={\setlength{\fboxsep}{10pt}%
+% \colorbox{lightblue}},
+% Right={\empheqrbrace \beta}]
+% .
+% .
+% .
+% \end{empheq}
+% \end{verbatim}
+% \begin{empheq}[boxtype={\setlength{\fboxsep}{10pt}%
+% \colorbox{lightblue}},Right={\empheqrbrace \beta}]
+% \begin{align}
+% a&=\int_{-2}^3{t}b^t \, dt \quad\text{and}\\
+% c&=d-a
+% \end{align}
+% \end{empheq}
+%
+% As a convenience for the user, it is also possible to declare
+% delimiters with the commands
+% \cmd{\DeclareRightDelimiter}\marg{delimiter} and its companion
+% \cmd{\DeclareLeftDelimiter}\marg{delimiter}. For instance the commands
+% \begin{quote}
+% |\DeclareRightDelimiter{\rangle}| defines \cmd{\empheqrangle}
+% \end{quote}
+% and
+% \begin{quote}
+% |\DeclareLeftDelimiter{\langle}| defines \cmd{\empheqlangle}.
+% \end{quote}
+% The usage is simple. \DeclareRightDelimiter{\rangle} \DeclareLeftDelimiter{\langle}
+% \begin{verbatim}
+% \begin{empheq}[Right=\empheqrangle,
+% Left=\empheqlangle]
+% \begin{gather}
+% a=b \\
+% c=d
+% \end{gather}
+% \end{empheq}
+% \end{verbatim}
+% \begin{empheq}[Right=\empheqrangle,Left=\empheqlangle]
+% \begin{gather}
+% a=b \\
+% c=d
+% \end{gather}
+% \end{empheq}
+% \cmd{\DeclareRightDelimiter} and its companion have an optional
+% argument which controls spacing (default is a negative thinspace),
+% but beware: It will simply overwrite the original definition and
+% it might not look all that pretty as the following example shows:
+% \DeclareRightDelimiter[\>]{\rangle}
+% \DeclareLeftDelimiter[\mkern-10mu]{\langle}
+% \begin{verbatim}
+% \DeclareRightDelimiter[\>]{\rangle}
+% \DeclareLeftDelimiter[\mkern-10mu]{\langle}
+% \end{verbatim}
+% \begin{empheq}[Right=\empheqrangle,Left=\empheqlangle]
+% \begin{gather}
+% a=b \\
+% c=d
+% \end{gather}
+% \end{empheq}
+%
+% These examples will have given you a glimpse of the possibilities
+% \EQ\ offers. In particular the commands \cmd{\empheqlbrace} and
+% \cmd{\empheqrbrace} produce braces just tall enough to encompass
+% the display. You can of course use \cmd{\big...} delimiters if you
+% want.
+%
+% \ifBonusExample
+% If you want you can even create your own box and use it with
+% \env{empheq}. In the following silly example I have created
+% \cmd{\ErrorBox} with \pkg{PSTricks} to achieve a disturbing
+% effect:
+% \makeatletter
+% \newcommand{\ErrorBox}[1]{%
+% \setlength{\@tempdima}{\heightof{#1}}%
+% \addtolength{\@tempdima}{\depthof{#1}}%
+% \setlength{\@tempdimb}{\widthof{#1}}%
+% \psset{yunit=\@tempdima}%
+% \psset{xunit=\@tempdimb}%
+% \psframebox[fillstyle=vlines,linestyle=none,hatchsep=.2\@tempdimb,hatchcolor=red,hatchangle=-60]{%
+% \rlap{\kern.5\@tempdimb\makebox[0pt]{{\Large\color{gray} \textbf{Error!}}}}#1}%
+% }
+% \makeatother
+% \begin{empheq}[boxtype=\ErrorBox]
+% \begin{align*}
+% E&=mc^3 \\
+% F&=G\frac{m+M}{r^2}
+% \end{align*}
+% \end{empheq}
+% Remember one thing when creating your own box: Make it
+% symmetrical.
+% \fi
+%
+% \section{Bugs and shortcomings}
+% This package (\EQ) is not supported anymore. Try with the new
+% version and see if it works; if not, then contact me. See how in
+% the manual of \pkg{empheq}.
+%
+% \StopEventually{}
+% \section{Implementation}
+% \subsection{Strategy}
+%
+% Whenever \pkg{amsmath} is typesetting a display environment it
+% actually does it twice; the first for the ``measuring'' phase and
+% the second for the ``production'' phase. The \EQ\ package uses a
+% similar approach:
+% \begin{itemize}
+% \item Collects the input in a token register for later use.
+% \item Typesets the input in the background and checks certain values to determine the kind of math structure you just typed.
+% \item Based on the given information, alterations are made to various lengths.
+% \item Then the equations are typeset again and stored in a box
+% for easy retrieval.
+% \item Finally the saved box is put into a box of the user's liking.
+% Any material to the right or left of the math structure (added with
+% the |Left| and |Right| keys) are put into the box as well.
+% \end{itemize}
+% Assuming we have found out which \pkg{amsmath} structure the
+% user typed, there are still a few things we need to sort out
+% before we proceed.
+%
+% First of all the equation number should still be aligned with
+% those of the ordinary math structures, which is a problem as soon
+% as the additions we make to the left and the right
+% differ---presumably they will. And when we are in \mode{fleqn}
+% mode, we should make sure that the structure is shifted just
+% enough to the right so that all equations still are right
+% adjusted. Therefore we need to make clever changes to the
+% line width to make sure the margins come out right.
+%
+% Then assuming we have overcome all of this there's still the final
+% step: Placing the math structure in the appropriate box at the
+% appropriate position. Once again we need to do some manipulation
+% with spacing to make it just right.
+%
+% \subsection{Preliminary actions}
+%
+% To avoid clashes with other packages, all private commands will contain the sequence \verb|@emphEQ@|.
+%
+% We will need \pkg{amsmath} of course and it would be nice if \EQ\
+% would recognize all the \pkg{amsmath} options so we make that
+% happen. To make sure the user has an updated system the newest
+% release of \pkg{amsmath} is required.
+%
+% \pkg{calc} is used to increase readability of the code
+% (thus making it \emph{far} easier to write too) and \pkg{keyval}
+% is used for user friendliness. They should all be part of any
+% \LaTeX\ system.
+% \begin{macrocode}
+%<*package>
+\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{amsmath}}
+\ProcessOptions\relax
+\RequirePackage{amsmath}[2000/07/18]
+\RequirePackage{calc,keyval}
+% \end{macrocode}
+% \begin{macro}{\if@emphEQ@FLL}\begin{macro}{\if@emphEQ@FLR}\begin{macro}{\if@emphEQ@L}\begin{macro}{\if@emphEQ@R}
+% There are four available layouts for mathematical displays:
+% |[fleqn,leqno]| (FLL), |[fleqn,reqno]| (FLR), |[leqno]| (L) and |[reqno]| (R). We create four \TeX\ conditionals
+% to make the algorithm easier to read as well as to speed up things a bit.
+% \begin{macrocode}
+\newif\if@emphEQ@FLL
+\newif\if@emphEQ@FLR
+\newif\if@emphEQ@L
+\newif\if@emphEQ@R
+% \end{macrocode}
+%\end{macro}\end{macro}\end{macro}\end{macro}
+% We then perform a simple test to determine the current mode.
+% \begin{macrocode}
+\if@fleqn
+ \iftagsleft@
+ \@emphEQ@FLLtrue
+ \else
+ \@emphEQ@FLRtrue
+ \fi
+\else
+ \iftagsleft@
+ \@emphEQ@Ltrue
+ \else
+ \@emphEQ@Rtrue
+ \fi
+\fi
+% \end{macrocode}
+% \begin{macro}{\if@emphEQ@gather}\begin{macro}{\if@emphEQ@align}\begin{macro}{\if@emphEQ@alignat}
+% \begin{macro}{\if@emphEQ@multline}\begin{macro}{\if@emphEQ@NoNumEq}
+% Since we're going to determinate which math structure the user has
+% input, we create some more conditionals to improve speed and
+% readability. Furthermore it will show crucial to know whether or
+% not the equation counter has been stepped since \env{multline$*$}
+% and \env{multline} don't have exactly the same structure.
+% \begin{macrocode}
+\newif\if@emphEQ@gather
+\newif\if@emphEQ@align
+\newif\if@emphEQ@alignat
+\newif\if@emphEQ@multline
+\newif\if@emphEQ@NoNumEq
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}
+%
+%
+%
+% \begin{macro}{\@emphEQ@Box}\begin{macro}{\@emphEQ@BoxWidth}
+% \begin{macro}{\@emphEQ@displaywidth}\begin{macro}{\@emphEQ@mathbody}
+% We need a single box to hold the math structure, a length so we
+% can remember the size of the displayed math for later use and a
+% token register for the math environment.
+% \begin{macrocode}
+\newsavebox{\@emphEQ@Box}
+\newlength{\@emphEQ@BoxWidth}
+\newlength{\@emphEQ@displaywidth}
+\newtoks\@emphEQ@mathbody
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}\end{macro}
+% \begin{macro}{\@emphEQ@Left}\begin{macro}{\@emphEQ@Right}\begin{macro}{\@emphEQ@lwd}\begin{macro}{\@emphEQ@rwd}
+% Here are some vital parts: The additional informations the user
+% want to display on either side of the math structure are saved by
+% \cmd{\@emphEQ@Left} and \cmd{\@emphEQ@Right} and \cmd{\@emphEQ@lwd} and \cmd{\@emphEQ@rwd}
+% measure the width of them for later use.
+% \begin{macrocode}
+\newcommand{\@emphEQ@Left}{}
+\newcommand{\@emphEQ@Right}{}
+\newlength{\@emphEQ@lwd}
+\newlength{\@emphEQ@rwd}
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}\end{macro}
+% \begin{macro}{\@emphEQ@boxtype}\begin{macro}{\@emphEQ@boxtypelength}
+% \begin{macro}{\@emphEQ@shadowbox}\begin{macro}{\if@emphEQ@shadowbox}
+% To make sure spacing is right when putting the math structure into
+% a box, we need to know what kind of box it is: The width is
+% extremely important. Often we will have to subtract or add half of
+% an empty (but \emph{not} zero-width) box' width to certain
+% lengths. When using an \cmd{\fbox} or \cmd{\colorbox} this is just
+% \cmd{\fboxrule}+\cmd{\fboxsep}, but when using say,
+% \cmd{\doublebox} of \pkg{fancybox} fame the necessity arises.
+% \pkg{fancybox} also defines \cmd{\shadowbox} which needs extra
+% taking care of, since it's asymmetrical unlike most other framed
+% boxes.
+%
+% Thus we test whether or not \pkg{fancybox} has been loaded at the
+% beginning of the document. If it has, we don't lift a finger; if
+% it hasn't, we let \cmd{\fbox} be an alias for \cmd{\shadowbox}.
+% Then we create a private version of \cmd{\shadowbox} for
+% testing purposes and a conditional for the algorithm.
+% \begin{macrocode}
+\newcommand{\@emphEQ@boxtype}{}
+\newlength{\@emphEQ@boxtypelength}
+\AtBeginDocument{%
+ \@ifpackageloaded{fancybox}{}{%
+ \let\shadowbox=\fbox}}
+\newcommand{\@emphEQ@shadowbox}{\shadowbox}
+\newif\if@emphEQ@shadowbox
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}\end{macro}
+% \begin{macro}{\@emphEQ@templength}\begin{macro}{@emphEQ@EqCtr}
+% We are almost ready to go. We only need two temporary little
+% helpers: one length and one counter.
+% \begin{macrocode}
+\newlength{\@emphEQ@templength}
+\newcounter{@emphEQ@EqCtr}
+% \end{macrocode}
+% \end{macro}\end{macro}
+%
+% \subsubsection{Faraway, so close}\label{sec:CloseEnough}
+% \begin{macro}{\@emphEQ@CloseEnough}
+% \changes{v0.6}{2003/01/10}{Added a test for lengths being almost identical}
+% When determining the display type we will occasionally have to check if an equation of the
+% form
+% \[
+% \cmd{\totwidth@}-\cmd{\tagshift@}=\cmd{\linewidth}
+% \]
+% is true. However small rounding errors \emph{can} occur in
+% \env{alignat} so we would rather see if the equation
+% \[
+% -\delta<\cmd{\totwidth@}-\cmd{\tagshift@}-\cmd{\linewidth}<\delta
+% \]
+% holds for some sufficiently small $\delta>\text{$0$ pt}$. I have used $\delta=\text{$5$ sp}$.
+% \begin{macrocode}
+\newcommand{\@emphEQ@CloseEnough}[4]{%
+ \setlength{\@tempdima}{#1-#2}%
+ \ifdim\@tempdima>-5sp
+ \ifdim\@tempdima<5sp
+ #3
+ \else
+ #4
+ \fi
+ \else
+ #4
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Saving the input}
+% \begin{macro}{\@emphEQ@MainEnv}
+% \changes{v0.7}{2003/05/11}{Added use of token register to remove the
+% need for an extra \cmd{\write} and \pkg{verbatim}}
+% \begin{macro}{\end@emphEQ@MainEnv}
+% \begin{macro}{\@emphEQ@get@body}\begin{macro}{\@emphEQ@findend}
+% \begin{macro}{\@emphEQ@EnvName}
+% We start out by saving the input in the token register
+% \cmd{\@emphEQ@mathbody}. The method is heavily inspired by
+% \pkg{tabularx} \dots\@ No need to copy the words of David Carlisle here---his code will do!
+% \begin{macrocode}
+\def\@emphEQ@MainEnv{%
+ \edef\@emphEQ@EnvName{\@currenvir}%
+ {\ifnum0=`}\fi
+ \@emphEQ@mathbody{}\@emphEQ@get@body
+}
+\let\end@emphEQ@MainEnv\relax
+\long\def\@emphEQ@get@body#1\end{%
+ \@emphEQ@mathbody\expandafter{\the\@emphEQ@mathbody #1}%
+ \@emphEQ@findend
+}
+\def\@emphEQ@findend#1{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\@emphEQ@EnvName
+ \expandafter\@emphEQ@PostProcess
+ \else
+ \@emphEQ@mathbody\expandafter{\the\@emphEQ@mathbody\end{#1}}%
+ \expandafter\@emphEQ@get@body
+ \fi
+}
+\def\@emphEQ@EnvName{@emphEQ@MainEnv}
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}
+% \begin{macro}{@emphEQ@PostProcess}
+% Now we can go on with the post processing, which is the real
+% workhorse in this package. The first job is to test if we're
+% using a \cmd{\shadowbox} and then we set some \pkg{amsmath}
+% dimensions to zero---\pkg{amsmath} doesn't do this by itself, and
+% for that we can be thankful. Otherwise you wouldn't be reading
+% this now~;-)
+% \begin{macrocode}
+\newcommand*{\@emphEQ@PostProcess}{%
+ \ifx\@emphEQ@boxtype\@emphEQ@shadowbox
+ \@emphEQ@shadowboxtrue
+ \else
+ \@emphEQ@shadowboxfalse
+ \fi
+ \tagshift@=0pt \tagwidth@=0pt \totwidth@=0pt
+ \eqnshift@=0pt \alignsep@=0pt
+% \end{macrocode}
+% \subsection{The first pass}
+% We then run the first pass to find out which environment we've
+% got. However we have to store the equation counter because it is
+% stepped in this pass, and we certainly don't want that to happen.
+% As a side effect this will also tell us if the equations are
+% numbered.
+%
+% If we are to put a brace to the left of the display, it would be
+% rather pleasant to know just how high the structure is, since this
+% will affect the height and more importantly the width the brace:
+% we will need to know the \emph{exact} width of such material.
+% Hence we put it in a box which is easy to measure and fiddle
+% around with. To achieve this we put the contents of the token register
+% \cmd{\@emphEQ@mathbody} in a \env{minipage} inside a \env{lrbox}. Alas,
+% \env{lrbox} won't let us escape into display math mode, so we play
+% a dirty trick on it and use a \env{minipage}, which will let us
+% have our way with it.
+%
+% The \env{minipage} starts in horizontal mode and then goes
+% straight to display math mode, thus adding some space before the
+% display math. However there was nothing on the first line in the
+% \env{minipage} thus leading \TeX\ to add a \cmd{\abovedisplayskip}
+% before the display. We subtract this as fast as we can!
+% Furthermore it showed in test runs, that an additional~1~pt had to
+% be subtracted in the top---but not in the bottom. It has nothing
+% to do with any of the standard page dimensions or parameters.
+% Strange indeed.
+% \begin{macrocode}
+ \setcounter{@emphEQ@EqCtr}{\value{equation}}%
+ \begin{lrbox}{\@emphEQ@Box}%
+ \begin{minipage}{\linewidth}%
+ \vskip-\abovedisplayskip\relax\vskip-1pt\relax
+ \the\@emphEQ@mathbody
+ \end{minipage}%
+ \end{lrbox}%
+% \end{macrocode}
+% We then look at the equation counter to see if we had any numbered
+% equations and reset it if that was the case. If we used a
+% \env{multline$*$} we can detect this by measuring |\tagwidth@|.
+% \begin{macrocode}
+ \ifnum\value{equation}=\value{@emphEQ@EqCtr}%
+ \ifdim\tagwidth@>0pt
+ \else
+ \@emphEQ@NoNumEqtrue
+ \fi
+ \else
+ \setcounter{equation}{\value{@emphEQ@EqCtr}}%
+ \fi
+% \end{macrocode}
+% Now we can determine the various math environments. Firstly we
+% measure an empty \cmd{\@emphEQ@boxtype}---we will need this
+% information when the math structure is finally put into a box of
+% this type, but we have to take it into account when calculating
+% the allowable width of \env{multline} displays because we want to
+% use the margins already set for this environment.
+% \begin{macrocode}
+ \settowidth{\@emphEQ@boxtypelength}{\@emphEQ@boxtype{}}%
+% \end{macrocode}
+% The idea is that each of the \pkg{amsmath} multiple line
+% environments can be singled out because it uses a certain
+% dimension in a way none of the others use it.
+% \begin{list}{}{}
+% \item[\env{align}:] Uses \cmd{\alignsep@} and sets it to something
+% positive. None of the others use it.
+% \item[\env{multline}:] Doesn't use \cmd{\eqnshift@}.
+% \item[\env{gather}:] Doesn't use \cmd{\tagshift@}.
+% \item[\env{alignat}:] Can be determined because some dimensions
+% will have special relations e.g., when in |[fleqn,reqno]| mode
+% the equation
+% \[
+% \cmd{\totwidth@}-\cmd{\tagshift@}=\cmd{\linewidth}
+% \]
+% holds\footnote{Well almost---they may be off by a few scaled points.
+% See section~\ref{sec:CloseEnough} for further details.}
+% and similarly for the other three display modes. See the
+% code for these equations.
+% \end{list}
+%
+% \subsubsection{\mode{[fleqn,leqno]}}
+% ~
+% \begin{macrocode}
+ \if@emphEQ@FLL % fleqn and leqno
+ \ifdim\alignsep@>0pt % => align
+ \@emphEQ@aligntrue
+ \setlength{\@emphEQ@displaywidth}{\tagshift@-\@mathmargin}%
+ \else
+ \ifdim\eqnshift@=0pt % => multline %tagwidth@>
+ \@emphEQ@multlinetrue
+ \if@emphEQ@NoNumEq
+ \setlength{\@emphEQ@displaywidth}{%
+ \linewidth-\multlinegap-\@mathmargin
+ -\@emphEQ@boxtypelength}%
+ \else
+ \setlength{\@emphEQ@displaywidth}{%
+ \linewidth-\tagwidth@-\multlinegap
+ -\multlinetaggap-\@emphEQ@boxtypelength}%
+ \fi
+ \else
+ \ifdim\tagshift@=0pt % => gather
+ \@emphEQ@gathertrue
+ \setlength{\@emphEQ@displaywidth}{%
+ \totwidth@-\@mathmargin}%
+ \else
+ \ifdim\tagshift@=\totwidth@ % => alignat
+ \@emphEQ@alignattrue
+ \setlength{\@emphEQ@displaywidth}{%
+ \totwidth@-\@mathmargin}%
+ \else
+ %Nothing thus far...
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+% \subsubsection{\mode{[fleqn,reqno]}}
+% ~
+% \begin{macrocode}
+ \if@emphEQ@FLR % fleqn and reqno
+ \ifdim\alignsep@>0pt % => align
+ \@emphEQ@aligntrue
+ \setlength{\@emphEQ@displaywidth}{%
+ \linewidth-\@mathmargin+\tagshift@}%
+ \else
+ \ifdim\eqnshift@=0pt % => multline
+ \@emphEQ@multlinetrue
+ \if@emphEQ@NoNumEq
+ \setlength{\@emphEQ@displaywidth}{%
+ \linewidth-\multlinegap-\@mathmargin
+ -\@emphEQ@boxtypelength}%
+ \else
+ \setlength{\@emphEQ@displaywidth}{%
+ \linewidth-\tagwidth@-\@mathmargin
+ -\multlinetaggap-\@emphEQ@boxtypelength}%
+ \fi
+ \else
+ \ifdim\tagshift@=0pt % => gather
+ \@emphEQ@gathertrue
+ \setlength{\@emphEQ@displaywidth}{%
+ \totwidth@-\@mathmargin}%
+ \else
+ \@emphEQ@CloseEnough{\totwidth@-\tagshift@}%
+ {\linewidth}%
+ {\@emphEQ@alignattrue
+ \setlength{\@emphEQ@displaywidth}%
+ {\totwidth@-\eqnshift@}}{}%
+ \fi
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+% \subsubsection{\mode{[reqno]}}
+% ~
+% \begin{macrocode}
+ \if@emphEQ@R % reqno
+ \ifdim\alignsep@>0pt % => align
+ \@emphEQ@aligntrue
+ \setlength{\@emphEQ@displaywidth}{\totwidth@}%
+ \else
+ \ifdim\eqnshift@=0pt % => multline
+ \@emphEQ@multlinetrue
+ \if@emphEQ@NoNumEq
+ \setlength{\@emphEQ@displaywidth}{%
+ \linewidth-2\multlinegap
+ -\@emphEQ@boxtypelength}%
+ \else
+ \setlength{\@emphEQ@displaywidth}{%
+ \linewidth-\tagwidth@-\multlinegap
+ -\multlinetaggap-\@emphEQ@boxtypelength}%
+ \fi
+ \else
+ \ifdim\tagshift@=0pt % => gather
+ \@emphEQ@gathertrue
+ \setlength{\@emphEQ@displaywidth}{\totwidth@}%
+ \else
+ \@emphEQ@CloseEnough{\tagshift@}{-\eqnshift@}%
+ {\@emphEQ@alignattrue
+ \setlength{\@emphEQ@displaywidth}{\totwidth@}}{}%
+ \fi
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+% \subsubsection{\mode{[leqno]}}
+% ~
+% \begin{macrocode}
+ \if@emphEQ@L % leqno
+ \ifdim\alignsep@>0pt % => align
+ \@emphEQ@aligntrue
+ \setlength{\@emphEQ@displaywidth}{\totwidth@}%
+ \else
+ \ifdim\eqnshift@=0pt % => multline
+ \@emphEQ@multlinetrue
+ \if@emphEQ@NoNumEq
+ \setlength{\@emphEQ@displaywidth}{%
+ \linewidth-2\multlinegap
+ -\@emphEQ@boxtypelength}%
+ \else
+ \setlength{\@emphEQ@displaywidth}{%
+ \linewidth-\tagwidth@-\multlinegap
+ -\multlinetaggap-\@emphEQ@boxtypelength}%
+ \fi
+ \else
+ \ifdim\tagshift@=0pt % => gather
+ \@emphEQ@gathertrue
+ \setlength{\@emphEQ@displaywidth}{\totwidth@}%
+ \else
+ \@emphEQ@CloseEnough{%
+ \linewidth-\eqnshift@}{\tagshift@}{%
+ \@emphEQ@alignattrue
+ \setlength{\@emphEQ@displaywidth}{\totwidth@}}%
+ {}%
+ \fi
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+% Phew! That was tedious, but necessary. I wish I could say it got
+% better further down the road, but it doesn't. Now we can measure
+% the width of the additional material on both sides of the math
+% structure. We add braces here and there to avoid any
+% \cmd{\thinmuskip}'s.
+% \begin{macrocode}
+ \settowidth{\@emphEQ@lwd}{${\@emphEQ@Left}%
+ {\vphantom{\usebox{\@emphEQ@Box}}}$}%
+ \settowidth{\@emphEQ@rwd}{${\vphantom{\usebox{\@emphEQ@Box}}}%
+ {\@emphEQ@Right}$}%
+% \end{macrocode}
+%
+% \subsection{The second pass}
+%
+% When we try to create an effect as in the preliminary example
+% there are a few things we need to tell \LaTeX\ for the overall
+% result to be acceptable. If the display math is centered, then the
+% new one should also be centered. This means that when typesetting
+% the math structure for the second time, we need to make
+% adjustments to \cmd{\linewidth}, \cmd{\@mathmargin} etc.\ for the
+% equation tag to be placed correctly.
+%
+% That process is extremely tedious, but there are only few
+% shortcuts, so we just go through each of the four environments, check
+% each of the four display modes and alter dimensions a we trudge
+% along. First we check if we are trying to put something into an
+% asymmetrical box and then make it symmetrical be removing the size
+% of the shadow.
+% \begin{macrocode}
+ \begin{lrbox}{\@emphEQ@Box}%
+ \if@emphEQ@shadowbox
+ \addtolength{\@emphEQ@boxtypelength}{-\shadowsize}%
+ \fi
+% \end{macrocode}
+% \subsubsection{\env{align}}
+% ~
+% \begin{macrocode}
+ \if@emphEQ@align
+ \if@emphEQ@FLL
+ \begin{minipage}{\linewidth+\@emphEQ@lwd
+ +.5\@emphEQ@boxtypelength}%
+ \addtolength{\@mathmargin}{\@emphEQ@lwd
+ +.5\@emphEQ@boxtypelength}%%
+ \fi
+ \if@emphEQ@FLR
+ \begin{minipage}{\linewidth}%
+ \addtolength{\@mathmargin}{\@emphEQ@lwd
+ +.5\@emphEQ@boxtypelength}%%
+ \fi
+ \if@emphEQ@L
+ \begin{minipage}{\linewidth+\@emphEQ@lwd-\@emphEQ@rwd}%
+ \fi
+ \if@emphEQ@R
+ \begin{minipage}{\linewidth-\@emphEQ@lwd+\@emphEQ@rwd}%
+ \fi
+ \fi
+% \end{macrocode}
+% \subsubsection{\env{gather}}
+% ~
+% \begin{macrocode}
+ \if@emphEQ@gather
+ \if@emphEQ@FLL
+ \begin{minipage}{\linewidth+\@emphEQ@lwd
+ +.5\@emphEQ@boxtypelength}%
+ \addtolength{\@mathmargin}{\@emphEQ@lwd
+ +.5\@emphEQ@boxtypelength}%%
+ \fi
+ \if@emphEQ@FLR
+ \begin{minipage}{\linewidth}%
+ \addtolength{\@mathmargin}{\@emphEQ@lwd
+ +.5\@emphEQ@boxtypelength}%%
+ \fi
+ \if@emphEQ@R
+ \setlength{\@emphEQ@templength}{\linewidth-\totwidth@
+ -\eqnshift@}%
+ \begin{minipage}{\linewidth-\@emphEQ@lwd+\@emphEQ@rwd
+ +\@emphEQ@templength-\eqnshift@}%
+ \fi
+ \if@emphEQ@L
+ \setlength{\@emphEQ@templength}{\linewidth-\totwidth@
+ -\eqnshift@}%
+ \begin{minipage}{\linewidth+\@emphEQ@lwd-\@emphEQ@rwd
+ -\@emphEQ@templength+\eqnshift@}%
+ \fi
+ \fi
+% \end{macrocode}
+% \subsubsection{\env{alignat}}
+% ~
+% \begin{macrocode}
+ \if@emphEQ@alignat
+ \if@emphEQ@FLL
+ \begin{minipage}{\linewidth+\@emphEQ@lwd
+ +.5\@emphEQ@boxtypelength}%
+ \addtolength{\@mathmargin}{\@emphEQ@lwd
+ +.5\@emphEQ@boxtypelength}%%
+ \fi
+ \if@emphEQ@FLR
+ \begin{minipage}{\linewidth}%
+ \addtolength{\@mathmargin}{\@emphEQ@lwd
+ +.5\@emphEQ@boxtypelength}%%
+ \fi
+ \if@emphEQ@L
+ \begin{minipage}{\linewidth+\@emphEQ@lwd-\@emphEQ@rwd}%
+ \fi
+ \if@emphEQ@R
+ \begin{minipage}{\linewidth-\@emphEQ@lwd+\@emphEQ@rwd}%
+ \fi
+ \fi
+% \end{macrocode}
+% \subsubsection{\env{multline}}
+% ~
+% \begin{macrocode}
+ \if@emphEQ@multline
+ \if@emphEQ@FLL
+ \begin{minipage}{\linewidth}%
+ \if@emphEQ@NoNumEq
+ \addtolength{\@mathmargin}{\@emphEQ@lwd
+ +.5\@emphEQ@boxtypelength}%
+ \if@emphEQ@shadowbox
+ \addtolength{\@mathmargin}{\shadowsize}
+ \fi%
+ \else
+ \addtolength{\multlinetaggap}{\@emphEQ@lwd
+ +.5\@emphEQ@boxtypelength}%
+ \if@emphEQ@shadowbox
+ \addtolength{\multlinegap}{\shadowsize}%
+ \fi
+ \fi
+ \addtolength{\multlinegap}{\@emphEQ@rwd
+ +.5\@emphEQ@boxtypelength}%
+ \fi
+ \if@emphEQ@FLR
+ \begin{minipage}{\linewidth}%
+ \if@emphEQ@NoNumEq
+ \addtolength{\multlinegap}{\@emphEQ@rwd
+ +.5\@emphEQ@boxtypelength}%
+ \if@emphEQ@shadowbox
+ \addtolength{\multlinegap}{\shadowsize}%
+ \fi
+ \else
+ \addtolength{\multlinetaggap}{\@emphEQ@rwd
+ +.5\@emphEQ@boxtypelength}%
+ \if@emphEQ@shadowbox
+ \addtolength{\multlinetaggap}{\shadowsize}%
+ \fi
+ \fi
+ \addtolength{\@mathmargin}{\@emphEQ@lwd
+ +.5\@emphEQ@boxtypelength}%
+ \fi
+ \if@emphEQ@L
+ \begin{minipage}{\linewidth}%
+ \if@emphEQ@NoNumEq
+ \addtolength{\multlinegap}{.5\@emphEQ@rwd
+ +.5\@emphEQ@lwd+.5\@emphEQ@boxtypelength}%
+ \if@emphEQ@shadowbox
+ \addtolength{\multlinegap}{.5\shadowsize}%
+ \fi
+ \else
+ \addtolength{\multlinetaggap}{\@emphEQ@lwd
+ +.5\@emphEQ@boxtypelength}%
+ \addtolength{\multlinegap}{\@emphEQ@rwd
+ +.5\@emphEQ@boxtypelength}%
+ \if@emphEQ@shadowbox
+ \addtolength{\multlinegap}{\shadowsize}%
+ \fi
+ \fi
+ \fi
+ \if@emphEQ@R
+ \begin{minipage}{\linewidth}%
+ \if@emphEQ@NoNumEq
+ \addtolength{\multlinegap}{.5\@emphEQ@rwd
+ +.5\@emphEQ@lwd+.5\@emphEQ@boxtypelength}%
+ \if@emphEQ@shadowbox
+ \addtolength{\multlinegap}{.5\shadowsize}
+ \fi
+ \else
+ \addtolength{\multlinetaggap}{\@emphEQ@rwd
+ +.5\@emphEQ@boxtypelength}%
+ \addtolength{\multlinegap}{\@emphEQ@lwd
+ +.5\@emphEQ@boxtypelength}%
+ \if@emphEQ@shadowbox
+ \addtolength{\multlinetaggap}{\shadowsize}
+ \fi
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+% Finally we get to typeset the contents of \cmd{\@emphEQ@mathbody} for
+% the second time\ldots
+% \begin{macrocode}
+ \vskip-\abovedisplayskip\relax\vskip-1pt\relax
+ \the\@emphEQ@mathbody
+ \end{minipage}%
+ \end{lrbox}%
+% \end{macrocode}
+%
+% \subsection{Putting it into the box}
+%
+% Because we were clever to start with---by measuring the width of
+% the display math and storing it in
+% \cmd{\@emphEQ@displaywidth}---we can now put it into a box of
+% width
+% \cmd{\@emphEQ@displaywidth}+\cmd{\@emphEQ@rwd}+\cmd{\@emphEQ@lwd}.
+% This doesn't apply to \env{multline} though: it has to be set in a
+% box of width \cmd{\@emphEQ@displaywidth}.
+% \begin{macrocode}
+\setlength{\@emphEQ@BoxWidth}{\@emphEQ@displaywidth+\@emphEQ@rwd
+ +\@emphEQ@lwd}%
+% \end{macrocode}
+% \subsubsection{\env{align}}
+% ~
+% \begin{macrocode}
+\if@emphEQ@align
+ \if@emphEQ@FLL
+ \savebox{\@emphEQ@Box}{\makebox[\@emphEQ@BoxWidth][l]{%
+ \if@emphEQ@shadowbox \kern.5\shadowsize \fi
+ $\@emphEQ@Left$%
+ \kern-.5\@emphEQ@boxtypelength%
+ \kern-\@mathmargin
+ \kern-\@emphEQ@lwd
+ \usebox{\@emphEQ@Box}%
+ \kern-\@emphEQ@displaywidth
+ \kern-\@emphEQ@rwd
+ \kern-\@emphEQ@lwd
+ $\@emphEQ@Right$}}%
+ \fi
+ \if@emphEQ@FLR
+ \savebox{\@emphEQ@Box}{\makebox[\@emphEQ@BoxWidth][l]{%
+ \if@emphEQ@shadowbox \kern.5\shadowsize \fi
+ $\@emphEQ@Left$%
+ \kern-.5\@emphEQ@boxtypelength%
+ \kern-\@mathmargin
+ \kern-\@emphEQ@lwd
+ \usebox{\@emphEQ@Box}%
+ \kern-\alignsep@
+ $\@emphEQ@Right$}}%
+ \fi
+ \if@emphEQ@L
+ \savebox{\@emphEQ@Box}{\makebox[\@emphEQ@BoxWidth][c]{%
+ %\kern\eqnshift@
+ %\kern-\alignsep@
+ $\@emphEQ@Left$%
+ \kern-\eqnshift@
+ %\kern-\alignsep@
+ \usebox{\@emphEQ@Box}%
+ %\kern-\eqnshift@
+ \kern-\alignsep@
+ $\@emphEQ@Right$}}%
+ \fi
+ \if@emphEQ@R
+ \savebox{\@emphEQ@Box}{\makebox[\@emphEQ@BoxWidth][c]{%
+ $\@emphEQ@Left$%
+ \kern-\eqnshift@
+ \usebox{\@emphEQ@Box}%
+ \kern-\eqnshift@
+ $\@emphEQ@Right$}}%
+ \fi
+\fi
+% \end{macrocode}
+% \subsubsection{\env{alignat}}
+% ~
+% \begin{macrocode}
+\if@emphEQ@alignat
+ \if@emphEQ@FLL
+ \savebox{\@emphEQ@Box}{\makebox[\@emphEQ@BoxWidth][l]{%
+ \if@emphEQ@shadowbox \kern.5\shadowsize \fi
+ $\@emphEQ@Left$%
+ \kern-.5\@emphEQ@boxtypelength
+ \kern-\@mathmargin
+ \kern-\@emphEQ@lwd
+ \usebox{\@emphEQ@Box}%
+ \kern\@mathmargin
+ \kern\@emphEQ@displaywidth
+ \kern-\linewidth
+ $\@emphEQ@Right$}}%
+ \fi
+ \if@emphEQ@FLR
+ \savebox{\@emphEQ@Box}{\makebox[\@emphEQ@BoxWidth][l]{%
+ \if@emphEQ@shadowbox \kern.5\shadowsize \fi
+ $\@emphEQ@Left$%
+ \kern-.5\@emphEQ@boxtypelength
+ \kern-\@mathmargin
+ \kern-\@emphEQ@lwd
+ \usebox{\@emphEQ@Box}%
+ \kern\@mathmargin
+ \kern\@emphEQ@displaywidth
+ \kern-\linewidth
+ \kern\@emphEQ@lwd
+ \kern.5\@emphEQ@boxtypelength
+ $\@emphEQ@Right$}}%
+ \fi
+ \if@emphEQ@L
+ \savebox{\@emphEQ@Box}{\makebox[\@emphEQ@BoxWidth][c]{%
+ $\@emphEQ@Left$%
+ \kern-\eqnshift@
+ \usebox{\@emphEQ@Box}%
+ \kern-\eqnshift@
+ $\@emphEQ@Right$}}%
+ \fi
+ \if@emphEQ@R
+ \savebox{\@emphEQ@Box}{\makebox[\@emphEQ@BoxWidth][c]{%
+ $\@emphEQ@Left$%
+ \kern-\eqnshift@
+ \usebox{\@emphEQ@Box}%
+ \kern-\eqnshift@
+ $\@emphEQ@Right$}}%
+ \fi
+\fi
+% \end{macrocode}
+% \subsubsection{\env{gather}}
+% ~
+% \begin{macrocode}
+\if@emphEQ@gather
+ \if@emphEQ@FLL
+ \savebox{\@emphEQ@Box}{\makebox[\@emphEQ@BoxWidth][l]{%
+ \if@emphEQ@shadowbox \kern.5\shadowsize \fi
+ $\@emphEQ@Left$%
+ \kern-.5\@emphEQ@boxtypelength
+ \kern-\@mathmargin
+ \kern-\@emphEQ@lwd
+ \usebox{\@emphEQ@Box}%
+ \kern-\linewidth
+ \kern\@mathmargin
+ \kern\@emphEQ@displaywidth
+ $\@emphEQ@Right$}}%
+ \fi
+ \if@emphEQ@FLR
+ \savebox{\@emphEQ@Box}{\makebox[\@emphEQ@BoxWidth][l]{%
+ \if@emphEQ@shadowbox \kern.5\shadowsize
+ \fi
+ $\@emphEQ@Left$%
+ \kern-.5\@emphEQ@boxtypelength
+ \kern-\@mathmargin
+ \kern-\@emphEQ@lwd
+ \usebox{\@emphEQ@Box}%
+ \kern-\linewidth
+ \kern.5\@emphEQ@boxtypelength
+ \kern\@mathmargin
+ \kern\@emphEQ@displaywidth
+ \kern\@emphEQ@lwd
+ $\@emphEQ@Right$}}%
+ \fi
+ \if@emphEQ@L
+ \setlength{\tagwidth@}{\eqnshift@+\@emphEQ@rwd}%
+ \setlength{\@emphEQ@templength}{\linewidth-\totwidth@
+ -\eqnshift@}%
+ \savebox{\@emphEQ@Box}{\makebox[\@emphEQ@BoxWidth][c]{%
+ \ifdim\@emphEQ@templength<\tagwidth@
+ \setlength{\tagwidth@}{\@emphEQ@templength
+ +\@emphEQ@lwd}%
+ \ifdim\tagwidth@<\eqnshift@
+ \kern-\@emphEQ@templength
+ \kern\eqnshift@
+ \fi
+ \else
+ \kern-\@emphEQ@lwd
+ \kern\@emphEQ@rwd
+ \kern-\@emphEQ@templength
+ \kern\eqnshift@
+ \fi
+ $\@emphEQ@Left$%
+ \kern-\eqnshift@
+ \usebox{\@emphEQ@Box}%
+ %\kern-\eqnshift@
+ \kern-\@emphEQ@lwd
+ \kern\@emphEQ@rwd
+ \kern-\@emphEQ@templength
+ $\@emphEQ@Right$}}%
+ \fi
+ \if@emphEQ@R
+ \setlength{\tagwidth@}{\eqnshift@+\@emphEQ@rwd}%
+ \setlength{\@emphEQ@templength}{\linewidth-\totwidth@
+ -\eqnshift@}%
+ \savebox{\@emphEQ@Box}{\makebox[\@emphEQ@BoxWidth][c]{%
+ \kern-\@emphEQ@lwd
+ \kern\@emphEQ@rwd
+ \kern\@emphEQ@templength
+ \kern-\eqnshift@
+ $\@emphEQ@Left$%
+ \ifdim\@emphEQ@templength>\tagwidth@
+ \kern-\eqnshift@
+ \else
+ \kern\@emphEQ@lwd
+ \kern-\@emphEQ@rwd
+ \kern-\@emphEQ@templength
+ \fi
+ \usebox{\@emphEQ@Box}%
+ \kern-\eqnshift@
+ $\@emphEQ@Right$}}%
+ \fi
+\fi
+% \end{macrocode}
+% \subsubsection{\env{multline}}
+%
+% \env{multline} is somewhat more difficult because \env{multline$*$}
+% differs on several accounts. Thus we make use of our little test
+% to see if the math structure was numbered to begin with
+% (\verb|\if@emphEQ@NoNumEq|).
+% \begin{macrocode}
+\if@emphEQ@multline
+ \if@emphEQ@FLL
+ \savebox{\@emphEQ@Box}{\makebox[\@emphEQ@displaywidth][l]{%
+ \if@emphEQ@shadowbox \kern.5\shadowsize \fi
+ $\@emphEQ@Left$%
+ \kern-.5\@emphEQ@boxtypelength
+ \kern-\@emphEQ@lwd
+ \if@emphEQ@NoNumEq
+ \if@emphEQ@shadowbox \kern-\shadowsize \fi
+ \kern-\@mathmargin
+ \else
+ \kern-\tagwidth@
+ \kern-\multlinetaggap
+ \fi
+ \usebox{\@emphEQ@Box}%
+ \kern-\@emphEQ@boxtypelength
+ \if@emphEQ@NoNumEq
+ \kern-\multlinegap
+ \else
+ \kern\multlinegap
+ \fi
+ \kern-\@emphEQ@rwd
+ \kern-\@emphEQ@lwd
+ \kern-\@mathmargin
+ $\@emphEQ@Right$}}%
+ \fi
+ \if@emphEQ@FLR
+ \savebox{\@emphEQ@Box}{\makebox[\@emphEQ@displaywidth][l]{%
+ \if@emphEQ@shadowbox \kern.5\shadowsize \fi
+ $\@emphEQ@Left$%
+ \kern-.5\@emphEQ@boxtypelength
+ \kern-\@emphEQ@lwd
+ \kern-\@mathmargin
+ \usebox{\@emphEQ@Box}%
+ \kern-\@emphEQ@boxtypelength
+ \kern-\@emphEQ@rwd
+ \kern-\@emphEQ@lwd
+ \if@emphEQ@NoNumEq
+ \kern-\multlinegap
+ \else
+ \kern-\multlinetaggap
+ \fi
+ \kern-\@mathmargin
+ \kern-\tagwidth@
+ $\@emphEQ@Right$}}%
+ \fi
+ \if@emphEQ@L
+ \savebox{\@emphEQ@Box}{\makebox[\@emphEQ@displaywidth][l]{%
+ \if@emphEQ@shadowbox \kern.5\shadowsize \fi
+ $\@emphEQ@Left$%
+ \kern-.5\@emphEQ@boxtypelength
+ \kern-\@emphEQ@lwd
+ \if@emphEQ@NoNumEq
+ \kern-\multlinegap
+ \kern.5\@emphEQ@lwd
+ \kern-.5\@emphEQ@rwd
+ \if@emphEQ@shadowbox \kern-.5\shadowsize \fi
+ \else
+ \kern-\multlinetaggap
+ \kern-\tagwidth@
+ \fi
+ \usebox{\@emphEQ@Box}%
+ \kern-.5\@emphEQ@boxtypelength
+ \if@emphEQ@NoNumEq
+ \kern.5\@emphEQ@rwd
+ \kern-.5\@emphEQ@lwd
+ \fi
+ \kern-\@emphEQ@rwd
+ \kern-\multlinegap
+ $\@emphEQ@Right$}}%
+ \fi
+ \if@emphEQ@R
+ \savebox{\@emphEQ@Box}{\makebox[\@emphEQ@displaywidth][l]{%
+ \if@emphEQ@shadowbox \kern.5\shadowsize \fi
+ $\@emphEQ@Left$%
+ \kern-.5\@emphEQ@boxtypelength
+ \if@emphEQ@NoNumEq
+ \if@emphEQ@shadowbox \kern-.5\shadowsize \fi
+ \kern-.5\@emphEQ@rwd
+ \kern.5\@emphEQ@lwd
+ \fi
+ \kern-\@emphEQ@lwd
+ \kern-\multlinegap
+ \usebox{\@emphEQ@Box}%
+ \kern-.5\@emphEQ@boxtypelength
+ \kern-\@emphEQ@rwd
+ \if@emphEQ@NoNumEq
+ \kern-\multlinegap
+ \kern-.5\@emphEQ@lwd
+ \kern.5\@emphEQ@rwd
+ \else
+ \kern-\multlinetaggap
+ \fi
+ \kern-\tagwidth@
+ $\@emphEQ@Right$}}%
+ \fi
+\fi
+% \end{macrocode}
+%
+% \subsubsection{The final step}
+%
+% At last here comes the good part! We are now ready to place the
+% box containing all of our math material. If we have used a
+% \env{multline} we have to do a few kerning tricks but at least we
+% would seem to know the drill by now\ldots To make sure vertical
+% spacing is ok, we put it all into a simple math environment
+% \verb|\[...\]|.
+% \begin{macrocode}
+\[
+ \if@emphEQ@align
+ \if@emphEQ@L
+ \kern-\alignsep@
+ \kern\eqnshift@
+ \fi
+ \fi
+ \if@emphEQ@gather
+ \if@emphEQ@L
+ \kern-\@emphEQ@templength
+ \kern\eqnshift@
+ \kern\@emphEQ@rwd
+ \kern-\@emphEQ@lwd
+ \fi
+ \if@emphEQ@R
+ \setlength{\tagwidth@}{\eqnshift@+\@emphEQ@rwd}%
+ \ifdim\@emphEQ@templength>\tagwidth@
+ \kern-\@emphEQ@templength
+ \kern\eqnshift@
+ \kern\@emphEQ@lwd
+ \else
+ \kern\@emphEQ@templength
+ \kern-\eqnshift@
+ \kern\@emphEQ@rwd
+ \kern-\@emphEQ@lwd
+ \fi
+ \fi
+ \fi
+ \if@emphEQ@multline
+ \if@emphEQ@NoNumEq
+ % naught
+ \else
+ \if@emphEQ@FLL
+ \kern-\@mathmargin
+ \kern\tagwidth@
+ \kern\multlinetaggap
+ \fi
+ \if@emphEQ@L
+ \kern\tagwidth@
+ \kern\multlinetaggap
+ \kern-\multlinegap
+ \fi
+ \if@emphEQ@R
+ \kern-\tagwidth@
+ \kern-\multlinetaggap
+ \kern\multlinegap
+ \fi
+ \fi
+ \else
+% \end{macrocode}
+% If we are using a \cmd{\shadowbox} in centered display mode, I
+% would rather that the shadowsize is ignored when placing the box.
+% Reason: I think it looks better. Judge for yourself:
+% \begin{gather}
+% a=b\\
+% \Phi(x)=\int_{-\infty}^x e^{-t^2/2}\, dt
+% \end{gather}
+%
+% \begin{empheq}[boxtype=\shadowbox]
+% \begin{gather}
+% a=b\\
+% \Phi(x)=\int_{-\infty}^x e^{-t^2/2}\, dt
+% \end{gather}
+% \end{empheq}
+% \begin{macrocode}
+ \if@emphEQ@shadowbox
+ \if@emphEQ@R
+ \kern\shadowsize
+ \fi
+ \if@emphEQ@L
+ \kern\shadowsize
+ \fi
+ \fi
+ \fi
+ \@emphEQ@boxtype{\usebox{\@emphEQ@Box}}%
+% \end{macrocode}
+% After all is done, we empty out the added material and the
+% boxtype.
+% \begin{macrocode}
+ \gdef\@emphEQ@Left{}\gdef\@emphEQ@Right{}%
+ \gdef\@emphEQ@boxtype{}%
+ \]%
+ \ifnum0=`{\fi}%
+ \expandafter\end\expandafter{\@emphEQ@EnvName}%
+}
+% \end{macrocode}
+%
+% \subsection{Going public\ldots}
+% \begin{macro}{boxtype}\begin{macro}{Left}\begin{macro}{Right}\begin{macro}{empheq}
+% In order to simplify the user interface, we make use of
+% \pkg{keyval}. We define three keys to be used along with a more
+% accessible version of \env{@emphEQ@MainEnv}.
+% \changes{v0.7}{2003/05/11}{Changed the user interface slightly}
+% \begin{macrocode}
+\define@key{empheq}{boxtype}{\renewcommand\@emphEQ@boxtype{#1}}
+\define@key{empheq}{Left}{\def\@emphEQ@Left{#1}}
+\define@key{empheq}{Right}{\def\@emphEQ@Right{#1}}
+\newenvironment{empheq}[1][]{\setkeys{empheq}{#1}\@emphEQ@MainEnv}%
+ {\end@emphEQ@MainEnv\ignorespacesafterend}%
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}\end{macro}
+% \begin{macro}{\DeclareLeftDelimiter}
+% \changes{v0.7}{2003/05/11}{Added delimiter interface}
+% \begin{macro}{\DeclareRightDelimiter}
+% \changes{v0.7}{2003/05/11}{Added delimiter interface}
+% It might come in handy to have delimiters of the appropriate size
+% available to cover the math display as in \eqref{eq:1}. Therefore
+% we define two commands that will create such delimiters once and
+% for all.
+% Use this as an inspiration for further kinds of delimiters.
+% \begin{macrocode}
+\newcommand{\DeclareLeftDelimiter}[2][\!]{%
+ \@namedef{empheq\expandafter\@gobble\string#2}{
+ \left#2
+ \vphantom{\usebox{\@emphEQ@Box}}%
+ \right.#1}}
+\newcommand{\DeclareRightDelimiter}[2][\!]{%
+ \@namedef{empheq\expandafter\@gobble\string#2}{%
+ #1\left.
+ \vphantom{\usebox{\@emphEQ@Box}}%
+ \right#2}}%
+\DeclareRightDelimiter{\rbrace}
+\DeclareLeftDelimiter{\lbrace}
+%</package>
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}
+% \Finale
+\endinput