summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/ntheorem
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/ntheorem
Initial commit
Diffstat (limited to 'macros/latex/contrib/ntheorem')
-rw-r--r--macros/latex/contrib/ntheorem/README63
-rw-r--r--macros/latex/contrib/ntheorem/ntheorem.dtx5258
-rw-r--r--macros/latex/contrib/ntheorem/ntheorem.ins18
-rw-r--r--macros/latex/contrib/ntheorem/ntheorem.pdfbin0 -> 475991 bytes
4 files changed, 5339 insertions, 0 deletions
diff --git a/macros/latex/contrib/ntheorem/README b/macros/latex/contrib/ntheorem/README
new file mode 100644
index 0000000000..9a67fabac9
--- /dev/null
+++ b/macros/latex/contrib/ntheorem/README
@@ -0,0 +1,63 @@
+ntheorem.dtx includes the style-file, a standard configuration, and the
+documentation. Additional information (including a test-file) is
+available at
+
+ http://user.informatik.uni-goettingen.de/~may/Ntheorem/
+
+We recommend placing the unpacked files (and this message) in an extra
+directory
+
+ macros/latex/contrib/ntheorem/
+
+Wolfgang May & Andreas Schedler
+
+--------------------
+
+Abstract:
+
+ntheorem.sty for LaTeX
+
+by Wolfgang May and Andreas Schedler
+
+ntheorem.sty is a package for handling theorem-like environments.
+Aditionally to several features for defining the layout of
+theorem-like environments which can be regarded to be standard
+requirements for a theorem-package, it provides solutions for two
+related problems: placement of endmarks and generation of lists
+of theorem-like environments.
+
+In contrast to former approaches, it solves the problem of
+setting endmarks of theorem-like environments (theorems,
+definitions, examples, and proofs) automatically at the right
+positions, even if the environment ends with a displaymath or
+(even nested) list environments, it also copes with the amsmath
+package. This is done in the same manner as the handling of
+labels by using the .aux file.
+
+It also introduces the generation of lists of theorem-like
+environments in the same manner as listoffigures. Additionally,
+more comfortable referencing is supported.
+
+After running LaTeX several times (depending on the complexity of
+references, in general, three runs are sufficient), the endmarks
+are set correctly, and theoremlists are generated.
+
+Since ntheorem.sty uses the standard LaTeX \newtheorem command,
+existing documents can be switched to ntheorem.sty without having
+to change the .tex file. Also, it is compatible with LaTeX files
+using theorem.sty written by Frank Mittelbach.
+
+Features:
+
+ * General Layout of Theorems:
+ different predefined theoremstyles, according to theorem.sty,
+ defining own theoremstyles by \newtheoremstyle,
+ * Placement of End Marks:
+ automatically setting end marks for theorem-like environments
+ in text, math environments, lists etc.,
+ * Generation of Theorem Lists:
+ Generation of list-of-theorem similar to list-of-figures,
+ different predefined liststyles, according to theorem.sty,
+ defining own liststyles by \newliststyle,
+ * Referencing:
+ Extended referencing feature, yielding, e.g. "Theorem 42".
diff --git a/macros/latex/contrib/ntheorem/ntheorem.dtx b/macros/latex/contrib/ntheorem/ntheorem.dtx
new file mode 100644
index 0000000000..6362cdc369
--- /dev/null
+++ b/macros/latex/contrib/ntheorem/ntheorem.dtx
@@ -0,0 +1,5258 @@
+\def\filedate{2011/08/15}
+\def\docdate{2011/08/15}
+\def\fileversion{1.33}
+\def\basename{ntheorem}
+% \iffalse
+%
+% Package 'ntheorem' to use with LaTeX2e
+% Copyright 1997 - 2011 by Wolfgang May and Andreas Schedler.
+%
+% Written and maintained by
+% Wolfgang May (Uni Goettingen, formerly Uni Freiburg)
+% [theorem-marks, general layout]
+% and Andreas Schedler (formerly TU Clausthal; formerly
+% Andreas Schlechte)
+% [theorem-lists, list layout]
+%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.2
+%% 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.2 or later is part of all distributions of LaTeX
+%% version 1999/12/01 or later.
+%
+% Please send bugreports and suggestions to
+%
+% Wolfgang May
+% Institut f"ur Informatik, Universit"at Goettingen
+% e-mail: may@informatik.uni-goettingen.de
+%
+% Andreas Schedler
+% e-mail: ntheorem@andreas-schedler.net
+%
+% \fi
+%
+% \CheckSum{2850}
+%% \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 \~}
+%
+% \RecordChanges
+% \changes{v0.80}{1997/02/11}{Started integration of `thmmarks.sty' with
+% `newthm.sty':}
+% \changes{v0.82}{1997/02/12}{included handling of theoremlists from
+% newthm.sty (WM)}
+% \changes{v0.85}{1997/02/14}{replaced `bf' by corresponding \LaTeXe-commands (AS)}
+% \changes{v0.87}{1997/02/18}{Renamed style to `ntheorem.sty' (WM)}
+% \changes{v0.88}{1997/02/18}{fixed some package-infos (AS)}
+% \changes{v0.90}{1997/02/19}{changed `addtheoremline, @nthm, @othm' (WM)}
+% \changes{v0.90}{1997/02/19}{counter only active if `if@thmmarks' (WM)}
+% \changes{v0.91}{1997/02/24}{moved things from @othm, @xnthm, @ynthm to
+% @newtheorem, introduced @@name (WM)}
+% \changes{v0.91}{1997/02/24}{added name* (no entry in list) (WM)}
+% \changes{v0.91}{1997/02/28}{included .sty in .dtx file (WM)}
+% \changes{v1.00}{1997/04/21}{First official version, not changed against 0.94 (WM)}
+% \changes{v1.01}{1997/05/01}{changed some `def' to `gdef' and `edef'
+% to `xdef' in `newtheorem' and related
+% macros (WM)}
+% \changes{v1.17}{1999/09/06}{Y2K for changes in documentation (AS)}
+% \changes{v1.17}{1999/09/06}{included option noconfig in driver (AS)}
+% \changes{v1.18}{1999/12/23}{debugged starred version of 'newtheorem'
+% (WM, reported by Jonathan King)}
+% \changes{v1.18}{1999/12/25}{adapted for complex theorem keywords
+% (WM, reported by Jonathan King)}
+% \changes{v1.19}{2001/01/12}{adapted to amsmath-2.0 (WM, several
+% solutions by Giovanni Dore)}
+% \changes{v1.19}{2001/01/13}{added handling of amsmath-labels with thref;
+% moved option thref before amsmath (amsmath needs redefinition of
+% `label') (WM)}
+% \changes{v1.21}{2002/12/30}{added theoremprework and postwork (WM)}
+% \changes{v1.32}{2011/02/28}{implemented new theorem skip scheme (WM)}
+%
+% \MakeShortVerb{\|}
+% \def\envfont{\normalfont\ttfamily}
+% \def\deflabel#1{\ttfamily #1\hfill}
+% \def\deflist#1{\begin{list}{}{\settowidth\labelwidth{\ttfamily #1}%
+% \setlength\leftmargin\labelwidth
+% \addtolength\leftmargin\labelsep
+% \let\makelabel\deflabel}}
+% \def\enddeflist{\end{list}}
+%
+% \def\packedlist#1{%
+% \begin{list}{}{\settowidth\labelwidth{#1}\setlength\leftmargin\labelwidth
+% \addtolength\leftmargin\labelsep
+% \topsep=0pt\itemsep=0.05cm\parsep=0.05cm
+% \let\makelabel\nlabel}}
+% \def\endpackedlist{\end{list}}
+% \makeatletter
+% \def\packeddescr{%
+% \begin{list}{}{\leftmargin0.5cm
+% \labelwidth\z@\itemindent-\leftmargin
+% \topsep=0pt\itemsep=0.05cm\parsep=0.05cm
+% \let\makelabel\nlabel}}
+% \def\endpackeddescr{\end{list}}
+%
+% \def\Codelabel#1{\@bsphack
+% \protected@write\@auxout{}{\string\newlabel{#1}{{\number\the
+% \c@CodelineNo}{\thepage}}}\@esphack}
+% \newcounter{tmpcount}
+% \def\Coderef#1#2{\setcounter{tmpcount}{0}\@ifundefined{r@#1}\relax
+% {\setcounter{tmpcount}{\ref{#1}}}\relax
+% \addtocounter{tmpcount}{#2}\arabic{tmpcount}}
+% \makeatother
+%
+% \def\nlabel#1{#1\hfill}
+% \def\nlist#1{\begin{list}{}{\settowidth\labelwidth{#1}%
+% \setlength\leftmargin\labelwidth
+% \addtolength\leftmargin\labelsep
+% \let\makelabel\nlabel}}
+% \def\endnlist{\end{list}}
+% \def\DANGER{{\LARGE\textbf{! }\rule{0pt}{2ex}}}
+% \def\env{\meta{env}}
+% \def\envx{\meta{env'}}
+%
+% \theoremstyle{marginbreak}
+% \theoremheaderfont{\normalfont\bfseries}\theorembodyfont{\slshape}
+% \theoremsymbol{\ensuremath{\diamondsuit}}
+% \theoremseparator{:}
+% \newtheorem{Theorem}{Theorem}
+%
+% \theoremstyle{changebreak}
+% \theoremsymbol{\ensuremath{\heartsuit}}
+% \theoremindent0.5cm
+% \theoremnumbering{greek}
+% \newtheorem{Lemma}{Lemma}
+%
+% \theoremindent0cm
+% \theoremsymbol{\ensuremath{\spadesuit}}
+% \theoremnumbering{arabic}
+% \newtheorem{Corollary}[Theorem]{Corollary}
+%
+% \theoremstyle{change}
+% \theorembodyfont{\upshape}
+% \theoremsymbol{\ensuremath{\ast}}
+% \theoremseparator{}
+% \newtheorem{Example}{Example}
+%
+% \theoremstyle{plain}
+% \theoremsymbol{\ensuremath{\clubsuit}}
+% \theoremseparator{.}
+% \theoremprework{\bigskip\hrule}
+% \theorempostwork{\hrule\bigskip}
+% \newtheorem{Definition}{Definition}
+%
+% \theoremheaderfont{\sc}\theorembodyfont{\upshape}
+% \theoremstyle{nonumberplain}
+% \theoremseparator{}
+% \theoremsymbol{\rule{1ex}{1ex}}
+% \newtheorem{Proof}{Proof}%
+%
+%
+% \title{An Extension of the \LaTeX-Theorem Evironment\thanks{This
+% file has version number \fileversion{}, last revised \filedate.}}
+% \author{\setcounter{footnote}{2}%
+% Wolfgang May\thanks{\texttt{may@informatik.uni-goettingen.de}}\\
+% Institut f\"ur Informatik, \\
+% Universit\"at G\"ottingen \\
+% Germany
+% \and
+% Andreas Schedler\thanks{\texttt{ntheorem@andreas-schedler.net}}\\
+% }
+% \date{\filedate}
+% \maketitle
+%
+% \begin{abstract}
+% \noindent
+% |ntheorem.sty| is a package for handling theorem-like
+% environments.
+% Aditionally to several features for defining the layout of
+% theorem-like environments which can be regarded to be standard
+% requirements for a theorem-package, it provides solutions for
+% two related problems: placement of endmarks and generation of
+% lists of theorem-like environments.
+%
+% In contrast to former approaches, it solves the problem of
+% setting endmarks of theorem-like environments (theorems,
+% definitions, examples, and proofs) \emph{automatically} at the
+% right positions, even if the environment ends with a |displaymath|
+% or (even nested) list environments, it also copes with the
+% |amsmath| package.
+% This is done in the same manner as the handling of labels by
+% using the |.aux| file.
+%
+% It also introduces the generation of lists of theorem-like
+% environments in the same manner as |listoffigures|. Additionally,
+% more comfortable referencing is supported.
+%
+% After running \LaTeX\ several times (depending on the complexity
+% of references, in general, three runs are sufficient), the endmarks
+% are set correctly, and theoremlists are generated.
+%
+% Since |ntheorem.sty| uses the standard \LaTeX\ |\newtheorem|
+% command, existing documents can be switched to
+% |ntheorem.sty| without having to change the |.tex| file.
+% Also, it is compatible with \LaTeX\ files using |theorem.sty|
+% written by Frank Mittelbach.
+% \end{abstract}
+% \newpage
+%
+% \tableofcontents
+%
+%
+% \section{Introduction}
+%
+% For our purposes here, ``theorems'' are labelled enunciations,
+% often set off from the main text by extra space and a font change.
+% Theorems, corollaries, conjectures, definitions, examples,
+% remarks, and proofs are all instances of ``theorems''.
+% The ``header'' of
+% these structures is composed of the type of the structure
+% (such as \textsc{Theorem} or \textsc{Remark}), a number
+% which serializes the instances of the same type throughout the
+% document, and an optional name (such as ``Correctness Theorem'').
+%
+% The layout of theorems can be changed by parameters as the fonts
+% of the header and the body, the way how to arrange the headers,
+% the indentation, and the way of numbering it.
+% Confronted with these requirements, |theorem.sty|, a style for
+% dealing with theorem layout was developed by Frank Mittelbach
+% which was the standard theorem-environment for long time.
+%
+% But then the desire for additional features like ``endmarks''
+% and ``theorem-lists'' arose.
+% Two extensions of |theorem.sty| were developped: One for handling
+% endmarks, |thmmarks.sty| and one for generating lists, |newthm.sty|.
+% Thus, Frank Mittelbach suggested to combine the new features into
+% one ``standard-to-be'' package.
+% And now, here it is.
+%
+% \section{The User-Interface}
+% \subsection{How to include the package}
+%
+% The package |ntheorem.sty| is included by
+% \begin{quote}
+% |\usepackage[|\meta{options}|]{ntheorem}|,
+% \end{quote}
+% where the optional parameter \meta{options} selects predefined
+% configurations and special requirements.
+%
+% The following \meta{options} are available by now, concerning
+% partially independent issues:
+% \begin{description}
+% \item[Predefined environments:] (see Section~\ref{sec:standard})
+% With [standard] and [noconfig], it can be chosen, if and what
+% file is used for activating a (user-defined) standard set of
+% theorem environments.
+% \item[Fancy boxes around theorems:] The [framed] option allows
+% to use |framed.sty| that provides boxes even across pagebreaks.
+% \item[Activation of endmarks:]
+% [thmmarks] enables the automatical placement of endmarks
+% (see \ref{sec:general}); when using the |amsmath|-package,
+% [thmmarks] must be complemented by [amsmath]
+% (see Section~\ref{sec:amslatex}).
+% \item[Activation of extended reference features:]
+% [thref] enables the extended reference features
+% (see Section~\ref{sec-ExtRef}); when using the |amsmath|-package,
+% [thref] must be complemented by [amsmath]
+% (see Section~\ref{sec:amslatex}).
+% \item[Compatibility with amsthm:] option [amsthm] provides
+% compatibility with the theorem-layout
+% commands of the |amsthm|-package (see Section~\ref{sec:amslatex}).
+% \item[Compatibility with hyperref:] option [hyperref] provides
+% compability with the |hyperref|-package
+% (see Section~\ref{sec:hyperref}).
+% \end{description}
+%
+% The package itself loads |ifthen.sty|.
+%
+% \subsection{Defining New Theorem Sets}
+%
+% \DescribeMacro\newtheorem
+% The syntax and semantics is exactly the same as in standard
+% \LaTeX{}: the command |\newtheorem| defines a new ``theorem set''
+% or ``theorem-like structure''.
+% Two required arguments name the new environment set and give the
+% text to be typeset with each instance of the new ``set'', while
+% an optional argument determines how the ``set'' is enumerated:
+% \begin{description}
+% \item[\ttfamily \bslash newtheorem\{foo\}\{bar\}]
+% The theorem set {\envfont foo} (whose name is \texttt{bar})
+% uses its own counter.
+% \item[\ttfamily \bslash newtheorem\{foo2\}{[foo]}\{bar2\}]
+% The theorem set {\envfont foo2} (printed name \texttt{bar2})
+% uses the same counter as the theorem set \texttt{foo}.
+% \item[\ttfamily \bslash newtheorem\{foo3\}\{bar\}{[section]}]
+% The theorem set {\envfont foo3} (printed name \texttt{bar}) is
+% enumerated within the counter \texttt{section}, i.e.\ with every
+% new |\section| the enumeration begins again with 1, and
+% the enumeration is composed from the section-number and the
+% theorem counter itself.
+% \end{description}
+%
+% For every environment \meta{name}\ defined by |\newtheorem|,
+% \emph{two} enviroments \meta{name} and \meta{name|*|}\ are defined.
+% In the main document, they have exactly the same effect, but
+% the latter causes no entry in the respective list of theorems
+% (cf.\ |\section| and |\section*|), see also Section
+% \ref{sec:thmlists}.
+%
+% \DescribeMacro\renewtheorem
+% Theorem sets can be redefined by |\renewtheorem|, with the same arguments
+% as explained for |\newtheorem|. When redefining a theorem set, the
+% counter is not re-initialized.
+%
+% \subsection{Defining the Layout of Theorem Sets}\label{sec:general}
+%
+% For theorem-like environments, the user can set parameters
+% by setting several switches and then calling |\newtheorem|.
+% The layout of a theorem set is defined with the values of the switches
+% at the time |\newtheorem| is called.
+%
+% \subsubsection{Parameters for Individual Sets}
+% \label{se-new-skips}
+%
+% The layout of individual theorem sets can be further determined
+% by switches controlling the appearance of the headers and the
+% header-body-layout:
+%
+% \begin{itemize}
+% \item
+% \DescribeMacro\theoremstyle
+% |\theoremstyle{|\meta{style}|}|: The general structure of the
+% theorem layout is defined via its |\theoremstyle|. |\ntheorem|
+% provides several predefined styles including those of
+% Frank Mittelbach's |theorem.sty|
+% (cf.\ Section \ref{sec:predefdstyles}.
+% Additional styles can be defined by |\newtheoremstyle|
+% (cf.\ Section\ref{sec:newtheoremstyle}).
+% \item
+% \DescribeMacro\theoremheaderfont
+% |\theoremheaderfont{|\meta{fontcmds}|}|: The theorem header is set
+% in the font specified by \meta{fontcmds}.
+%
+% In contrast to |theorem.sty|, |\theoremheaderfont| can be set
+% individually for each environment type.
+% \item
+% \DescribeMacro\theorembodyfont
+% |\theorembodyfont{|\meta{fontcmds}|}|: The theorem body is set
+% in the font specified by \meta{fontcmds}.
+% \item
+% \DescribeMacro\theoremnumbering
+% |\theoremnumbering{|\meta{style}|}| specifies the appearance of
+% the numbering of the theorem set. Possible \meta{styles} are
+% |arabic| (default), |alph|, |Alph|, |roman|,
+% |Roman|, |greek|, |Greek|, and |fnsymbol|.
+%
+% Clearly, if a theorem-environment uses the counter of another
+% environment type, also the numbering style of that environment
+% is used.
+% \item
+% \DescribeMacro\theoremseparator
+% |\theoremseparator{|\meta{thing}|}|: \meta{thing} separates the
+% header from the body of the theorem-environment.
+% E.g., \meta{thing} can be
+% ``:'' or ``.''.
+% \item
+% \DescribeMacro\theorempreskip
+% \DescribeMacro\theorempostskip
+% |\theorempreskip{|\meta{skip}|}| and
+% |\theorempostskip{|\meta{skip}|}| can be used to specify the
+% vertical space before/after the theorem environment (note that
+% Section~\ref{sec-framed} that allows framed and shaded theorems
+% also defines additional skip parameters).
+% The arguments are rubber lengths,
+% (`\textsf{skips}'), and therefore can contain \texttt{plus} and
+% \texttt{minus} parts.
+% (Note that these parameters changed with version 1.32; see
+% Section~\ref{sec-old-skips}.)
+% \item
+% \DescribeMacro\theoremindent
+% |\theoremindent|\meta{dimen} can be used to indent the theorem wrt.\
+% the surrounding text (note that |\theoremindent| is specified
+% without |{|\ldots|}|).
+%
+% \DANGER It's a `\textsf(dimen)', so the user shouldn't try to specify a
+% \texttt{plus} or \texttt{minus} part, because this leads to an error.
+% \item
+% \DescribeMacro\theoremsymbol
+% |\theoremsymbol{|\meta{thing}|}|: This is only active if
+% |ntheorem.sty| is loaded with option |[thmmarks]|.
+% \meta{thing} is set as an endmark at the end of every instance
+% of the environment.
+% If no symbol should appear, say |\theoremsymbol{}|.
+% \end{itemize}
+%
+% The above properties carry over to all subsequent |\newtheorem|
+% statements until they are set differently. Initially, they have
+% default values.
+%
+% The following two properties apply only to the very next |\newtheorem|
+% and are then automatically reset:
+%
+% \begin{itemize}
+% \item
+% \DescribeMacro\theoremprework
+% \changes{v1.30}{2010/08/14}{`theoremprework': added comment on
+% `leavevmode' to documentation (WM)}
+% |\theoremprework{|\meta{thing}|}|: \meta{thing} is performed
+% before starting the theorem structure.
+% E.g., \meta{thing} can be |\bigskip\hrule\leavevmode|.
+% If the vertical space after your theoremprework does not look as
+% intended, try to put |\leavevmode| at its end (as in the above
+% example).
+% \item
+% \DescribeMacro\theorempostwork
+% |\theorempostwork{|\meta{thing}|}|: \meta{thing} is performed
+% after finishing the theorem structure.
+% E.g., \meta{thing} can be |\hrule|.
+% \end{itemize}
+%
+% The flexibility provided by these command should relieve the
+% users from the ugly hacking in |\newtheorem| to fit most of
+% the requirements stated by publishers or supervisors.
+%
+% \DescribeMacro\theoremclass
+% With the command |\theoremclass{|\meta{theorem-type}|}|
+% (where \meta{theorem-type} must be an already defined theorem type),
+% these parameters can be set to the values which were used when
+% |\newtheorem| was called for \meta{theorem-type}.
+%
+% With |\theoremclass{LaTeX}|, the standard \LaTeX\ layout can be
+% chosen.
+%
+% \subsubsection{Font Selection}
+%
+% From the document structuring point of view, theorem environments
+% are regarded as special parts inside a document. Furthermore,
+% the theorem header is only a distinguished part of a theorem
+% environment.
+% Thus, |\theoremheaderfont| inherits characteristics of
+% |\theorembodyfont| which also inherits in characteristics of
+% the font of the surrounding environment.
+% Thus, if for example |\theorembodyfont| is |\itshape| and
+% |\theoremheaderfont| is |\bfseries| the font selected for the
+% header will have the characteristics `bold extended italic'.
+% If this is not desired, the corresponding property has to be
+% explicitly overwritten in |\theoremheaderfont|, e.g.
+% by |\theoremheaderfont{\normalfont\bfseries}|
+%
+% \subsubsection{Predefined theorem styles}\label{sec:predefdstyles}
+%
+% The following theorem styles are predefined, covering those
+% from |theorem.sty|:
+% \begin{deflist}{nonumberbreak:}
+% \item[plain]
+% This theorem style emulates the original \LaTeX{} definition,
+% except that additionally the parameters
+% |\theorem...skipamount| are used.
+% \item[break]
+% In this style, the theorem header is followed by a line
+% break.
+% \item[change]
+% Header number and text are interchanged, without a line break.
+% \item[changebreak]
+% Like \texttt{change}, but with a line break after the header.
+% \item[margin]
+% The number is set in the left margin, without a line break.
+% \item[marginbreak]
+% Like \texttt{margin}, but with a line break after the header.
+% \item[nonumberplain]
+% Like \texttt{plain}, without number (e.g.\ for proofs).
+% \item[nonumberbreak]
+% Like \texttt{break}, without number.
+% \item[empty]
+% No number, no name. Only the optional argument is typeset.
+% \end{deflist}
+%
+% \subsubsection{Default Setting}
+%
+% If no option is given, i.e.\ |ntheorem.sty| is loaded by
+% |\usepackage{ntheorem.sty}|, the following default is set up:
+% \begin{quote}
+% |\theoremstyle{plain}|,\\
+% |\theoremheaderfont{\normalfont\bfseries}| and\\
+% |\theorembodyfont{\itshape}|,\\
+% |\theoremseparator{}|,\\
+% |\theorempreskip{\topsep}|, \\
+% |\theorempostskip{\topsep}|, where |\topsep| refers to the space
+% that \LaTeX\ inserts above and below lists, \\
+% |\theoremindent0cm|,\\
+% |\theoremnumbering{arabic}|, \\
+% |\theoremsymbol{}|.
+% \end{quote}
+% Thus, by only saying |\newtheorem{...}{...}|, the user gets
+% the same layout as in standard \LaTeX.
+%
+%
+% \subsubsection{Deprecated: Skips until Version 1.32}
+% \label{sec-old-skips}
+%
+% \DescribeMacro\theorempreskipamount
+% \DescribeMacro\theorempostskipamount
+% Until version 1.31, there was only a simplified handling
+% of vertical space before/after theorems that did not consider
+% framed and shaded theorems (that have been introduced with v1.21).
+% |\theorempreskipamount|\meta{skip} and
+% |\theorempostskipamount|\meta{skip} defined,
+% respectively, the spacing before and after such an environment
+% (note that both are specified without |{|\ldots|}|).
+% These parameters applied for all theorem sets and can be manipulated
+% with the ordinary length macros. They are rubber lengths,
+% (`\textsf{skips}'), and therefore can contain \texttt{plus} and
+% \texttt{minus} parts.
+%
+% Unchanged, older \LaTeX\ sources that used these commands yield the
+% same output as before since the new skip scheme described in
+% Section~\ref{se-new-skips} is only activated if one of its commands
+% is used. Otherwise, the old scheme is applied.
+%
+%
+% \subsubsection{A Standard Set of Theorems}\label{sec:standard}
+%
+% A standard configuration of theorem sets is provided within
+% the file |ntheorem.std|, which will be included by the option
+% |[standard]|. It uses the |amssymb| and |latexsym| (automatically
+% loaded) packages and defines the following sets:
+% \begin{nlist}{Definitions:}
+% \item[Theorems:] % |Theorem|, |Lemma|, |Proposition|,
+% |Corollary|, |Satz|, |Korollar|,
+% \item[Definitions:] |Definition|,
+% \item[Examples:] |Example|, |Beispiel|,
+% \item[Remarks:] |Anmerkung|, |Bemerkung|, |Remark|,
+% \item[Proofs:] |Proof| and |Beweis|.
+% \end{nlist}
+% These theorem sets seem to be the most frequently used environments
+% in english and german
+% documents.
+%
+% The layout is defined to be theoremstyle |plain|, bodyfont |\itshape|,
+% Headerfont |\bfseries|, and endmark (theoremsymbol)
+% |\ensuremath{_\Box}| for all theorem-like environments\footnote{Note,
+% that mathmode is ensured for the symbol.}.
+% For the definition-, remark- and example-like sets,
+% the above setting is used, except bodyfont |\upshape|.
+% The proof-like sets are handled a bit differently. There, the layout
+% is defined as theoremstyle |nonumberplain|, bodyfont |\upshape|,
+% headerfont |\scshape| and endmark |\ensuremath{_\blacksquare}|.
+% For a more detailed information look at
+% |ntheorem.std| or at the code-section.
+%
+% \subsubsection{Framed and Boxed Theorems}\label{sec:frames-and-boxes}
+%
+% With the advent of the |framed| package (by Donald Arseneau) in 2001,
+% a feature that has often been asked for for ntheorem could be
+% implemented: theorems that are framed, or that are put into a colored
+% box.
+% It requires to load the |framed| package; shaded theorems also
+% require the |pstricks| package.
+% Frames and colored boxes are orthogonal to the existing
+% theoremstyles -- thus, they can be combined in arbitrary ways.
+%
+% \DescribeMacro\newframedtheorem
+% A theorem type can be framed by defining it by
+% \begin{quote}
+% |\newframedtheorem{...}{...}|
+% \end{quote}
+% with the same parameters as usually for |\newtheorem|.
+% Note that the use of the |framed| package also allows to have longer
+% theorems across a page break framed (in this case, by default, there
+% are horizontal lines before and after the page break; this can
+% even be circumvented by combining with \texttt{mdframed} package
+% (since 2010)).
+%
+% \DescribeMacro\newshadedtheorem
+%
+% The same ideas hold for theorems in shaded boxes. The declaration
+% \begin{quote}
+% |\newshadedtheorem{...}{...}|
+% \end{quote}
+% declares a theorem environment that is shaded. By default, the
+% background color is |gray|. This can be changed by defining \\
+% \begin{quote}
+% |\shadecolor{|\meta{color}|}|
+% \end{quote}
+% before declaring the theorem type. Note that later declarations
+% of other shaded theorem types can use another shadecolor.
+%
+% By default, the box is given as a |\psframebox| (see |pstricks|
+% package) with shadecolor as |linecolor| and |fillcolor|. All
+% these parameters can be changed by setting
+% \begin{quote}
+% |\def\theoremframecommand{|\meta{any box command}|}|
+% \end{quote}
+% before declaring the theorem type (for examples, the
+% user is referred to section \ref{sec:examples}).
+%
+% For using pdflatex (where pstricks is not available), e.g.
+% |\usepackage{color}| and
+% |\theoremframecommand{\colorbox[rgb]{1,.9,.9}}| can be used.
+%
+% \paragraph{Vertical Spacing of Framed Theorems}
+%
+% The New Skip Scheme introduced with version 1.32 allows
+% a detailed specification of vertical space also for framed
+% theorems (specified individually for each theorem class):
+
+% \begin{itemize}
+% \item |\theorempreskip{|\meta{skip}|}| and
+% |\theorempostskip{|\meta{skip}|}| have no effect for
+% framed theorems.
+% \item
+% \DescribeMacro\theoremframepreskip
+% \DescribeMacro\theoremframepostskip
+% |\theoremframepreskip{|\meta{skip}|}| and
+% |\theoremframepostskip{|\meta{skip}|}| can be used to specify the
+% vertical space before/after the frame/box.
+% \item
+% \DescribeMacro\theoreminframepreskip
+% \DescribeMacro\theoreminframepostskip
+% |\theoreminframepreskip{|\meta{skip}|}| and
+% |\theoreminframepostskip{|\meta{skip}|}| can be used to specify the
+% vertical space around the theorem text \emph{inside} the
+% frame/box.
+% \item The arguments of the above commands are rubber lengths,
+% (`\textsf{skips}'), and therefore can contain \texttt{plus} and
+% \texttt{minus} parts.
+% \item the default values of all above skips is |\topsep|, i.e.,
+% the space \LaTeX\ normally inserts before/after lists.
+% \end{itemize}
+%
+%
+% Old Skip Scheme (until v 1.31):
+% |\theorempreskipamount| and |\theorempostskipamount| are
+% applied \emph{inside} the frame/box.
+% To obtain vertical space \emph{before} and \emph{after} the
+% frame/box in versions 1.30--v.1.31, |\theoremframepreskipamount| and
+% |\theoremframepostskipamount| could be used (both defined by default to
+% 0pt) analogously (i.e., they are also common to all theorem types.)
+%
+% \subsubsection{Customization and Local Settings}
+%
+% Since the user should not change |ntheorem.std|,
+% we've added the possibility to use an own configuration-file.
+% If one places the file |ntheorem.cfg| in the path searched by
+% \TeX, this file is read automatically (if |[standard]|
+% is not given). The usage of |ntheorem.cfg| can be prevented by the
+% |[noconfig]| option. Thus, just
+% a copy of |ntheorem.std| to |ntheorem.cfg| must be made
+% which then can freely be modified by the user. Note, that if a
+% configuration-file exists, this will always be used (I.e.\ with
+% option |standard| and an existing configuration-file, the |.cfg|
+% file will be used and the |.std| file won't.
+%
+% \subsection{Generating Theoremlists}\label{sec:thmlists}
+%
+% \DescribeMacro\listtheorems
+% Similar to the \LaTeX\ command |\listoffigures|,
+% any theorem set defined with a |\newtheorem| statement
+% may be listed at any place in your document by
+% \begin{quote}
+% |\listtheorems{|\meta{list}|}|
+% \end{quote}
+% The argument \meta{list} is a comma-separated list
+% of the theorem sets to be listed.
+% For a theorem set \meta{name}, only the instances are listed
+% which are instantiated by |\begin{|\meta{name}|}|. Those
+% instantiated by |\begin{|\meta{name}|*}| are omitted
+% (cf.\ |\section| and |\section*|).
+%
+% For example,
+% |\listtheorems{Corollary,Lemma}|
+% leads to a list of all instances of one of the theorem sets
+% ``Corollary'' or ``Lemma''.
+% Note, that the set name given to the command is the first
+% argument which is specified by |\newtheorem| which is also
+% the one to be used in |\begin{theorem} ... \end{theorem}|.
+%
+% If |\listtheorems| is called for a set name which is not defined
+% via |\newtheorem|, the user is informed that a list is generated,
+% but there will be no typeset output at all.
+%
+% Note that in contrast to similar \LaTeX\ commands like
+% |\listoffigures| etc.\, there is no automatically created
+% heading. Users have to write it themselves -- but are free
+% to choose what they want to have.
+%
+% \subsubsection{Defining the List Layout}
+%
+% \DescribeMacro\theoremlisttype
+% Theoremlists can be formatted in different ways. Analogous to
+% theorem layout, there are several predefined types which can be
+% selected by
+% \begin{quote}
+% |\theoremlisttype{|\meta{type}|}|
+% \end{quote}
+% The following four \meta{type}s are available (for examples, the
+% user is referred to section \ref{sec:examples}).
+% \begin{deflist}{allname}
+% \item[all] List any theorem of the specified set by number,
+% (optional) name and pagenumber. This one is also the
+% default value.
+% \item[allname] Like |all|, additionally with leading theoremname.
+% \item[opt] Analogous to |all|, but only the theorems which have an
+% optional name are listed.
+% \item[optname] Like |opt|, with leading theoremname.
+% \end{deflist}
+%
+% \subsubsection{Writing Extra Stuff to the Theorem File}
+%
+% Similar to |\addcontentsline| and |\addtocontents|,
+% additional entries to theoremlists are supported.
+% Since entries to theoremlists are a bit more intricate than
+% entries to the lists maintained by standard \LaTeX\,
+% |\addcontentsline| and |\addtocontents| cannot be used in a
+% straightforward way\footnote{for a theorem, its number has
+% to be stored explicitly since different theorem sets can use
+% the same counter. Also, it is optional to reset the counter for
+% each section.}.
+%
+% \DescribeMacro\addtheoremline
+% Analogous to |\addcontentsline|, an extra entry for a theorem
+% list can be made by
+% \begin{quote}
+% |\addtheoremline{|\meta{name}|}{|\meta{text}|}|
+% \end{quote}
+% where \meta{name} is the name of a valid theorem set and \meta{text}
+% is the text, which should appear in the list. For example,
+% \begin{quote}
+% |\addtheoremline{Example}{Extra Entry with number}|
+% \end{quote}
+% \addtheoremline{Example}{Extra Entry with number}
+% generates an entry with the following characteristics:
+% \begin{itemize}
+% \item The Label of the theorem ``Example'' is used.
+% \item The current value of the counter for ``Example'' is used
+% \item The current pagenumber is used.
+% \item The specified text is the optional text for the theorem.
+% \end{itemize}
+% Thus, the above command has the same effect as it would be for
+% \begin{quote}
+% |\begin{Example}[Extra Entry with number] \end{Example}|
+% \end{quote}
+% except, that there would be no output of the theorem, and the counter
+% isn't advanced.
+%
+% \DescribeMacro{\addtheoremline*}
+% Alternatively you can use
+% \begin{quote}
+% |\addtheoremline*{Example}{Extra Entry}|
+% \end{quote}
+% \addtheoremline*{Example}{Extra Entry}
+% which is the same as above, except that the entry appears without
+% number.
+%
+% \DescribeMacro\addtotheoremfile
+% Sometimes, e.g.\ for long lists, special control sequences
+% (e.g.\ a pagebreak) or additional text should be inserted into a
+% list. This is done by
+% \begin{quote}
+% |\addtotheoremfile[|\meta{name}|]{|\meta{text}|}|
+% \end{quote}
+% where \meta{name} is the name of a theorem set and
+% \meta{text} is the text to be written into the theorem file.
+% If the optional argument \meta{name} is omitted, the given
+% text is inserted in every list, otherwise it is only inserted
+% for the given theorem set.
+%
+% \subsection{For Experts: Defining Layout Styles}
+% \subsubsection{Defining New Theorem Layouts}\label{sec:newtheoremstyle}
+%
+% \DescribeMacro\newtheoremstyle
+% Additional layout styles for theorems can be defined by
+% \begin{quote}
+% |\newtheoremstyle{|\meta{name}|}{|\meta{head}|}{|\meta{opt-head}|}|.
+% \end{quote}
+% After this, |\theoremstyle{|\meta{name}|}| is a valid
+% |\theoremstyle|.
+% Here, \meta{head} has to be a statement using two arguments,
+% |##1|, containing the keyword, and |##2|, containing the number.
+% \meta{opt-head} has to be a statement using three arguments where
+% the additional argument |##3| contains the optional parameter.
+%
+% Since \LaTeX\ implements theorem-like environments by |\trivlist|s,
+% both header declarations must be of the form
+% |\item[... \theorem@headerfont ...]...|, where
+% the dotted parts can be formulated by the user.
+% If there are some statements producing
+% output after the |\item[...]|, you have to care about implicit
+% spaces.
+%
+% Because of the |@|, if |\newtheoremstyle| is used in a
+% |.tex| file, it has to be put between |\makeatletter| and
+% |\makeatother|.
+%
+% For details, look at the code documentation or the
+% definitions of the predefined theoremstyles.
+%
+% \DescribeMacro\renewtheoremstyle
+% Theorem styles can be redefined by |\renewtheoremstyle|, with the
+% same arguments as explained for |\newtheoremstyle|.
+%
+% \subsubsection{Defining New Theorem List Layouts}\label{sec:listtypes}
+%
+% \DescribeMacro\newtheoremlisttype
+% Analogous, additional layouts for theorem lists can be defined by
+% \begin{quote}
+% |\newtheoremlisttype{|\meta{name}|}{|\meta{start}|}{|\meta{line}%
+% |}{|\meta{end}|}|.
+% \end{quote}
+% The first argument, \meta{name}, is the name of the listtype,
+% which can the be used as a valid |\theoremlisttype|.
+% \meta{start} is the sequence of commands to be executed at
+% the very beginning of the list.
+% Corresponding, \meta{end} will be executed at the end of the list.
+% These two are set to do nothing in the standard-types.
+% \meta{line} is the part to be called for every entry of the list.
+% It has to be a statement using four arguments: |##1| will be
+% replaced with the name of the theorem, |##2| with the number,
+% |##3| with the theorem's optional text and |##4| with the pagenumber.
+%
+% WARNING: Self-defined Layouts will break with the |hyperref|-package.
+%
+% \DescribeMacro\renewtheoremlisttype
+% Theorem list types can be redefined by |\renewtheoremlisttype|, with
+% the same arguments as explained for |\newtheoremlisttype|.
+%
+% \subsection{Setting End Marks}
+%
+% The automatic placement of endmarks is activated by calling
+% |ntheorem.sty| with the option |[thmmarks]|.
+% Since then, the endmarks are set automatically, there are only
+% a few commands for dealing with very special situations.
+%
+% \DescribeMacro\qed
+% \DescribeMacro\qedsymbol
+% If in a single environment, the user wants to replace the standard
+% endmark by some other, this can be done by saying |\qed|,
+% if |\qedsymbol| has been defined by |\qedsymbol{|\meta{something}|}|
+% (in option standard, |\qedsymbol| is defined to be the symbol
+% used for proofs, since a potential use of this features is to
+% close trivial corollaries without explicitly proving them).
+%
+% Additionally, if in a single environment of a theorem set, that
+% is defined without an endmark, the user wants to set an endmark,
+% this is done with |\qedsymbol| and |\qed| as described above.
+% |\qedsymbol| can be redefined everywhere in the document.
+%
+% \DescribeMacro\NoEndMark
+% \DescribeMacro\TheoremSymbol
+% On the other hand, if in some situation, the user decides to set
+% the endmark manually (e.g.\ inside a figure or a minipage), the
+% automatic handling can be turned off by |\NoEndMark| for the
+% current environment.
+% Then -- assumed that he current environment is of type \meta{name},
+% the endmark can manually be set by just saying
+% |\|\meta{name}|Symbol|.
+%
+% Note that there must be no empty line in the input before the
+% |\end{theorem}|, since then, the end mark is ignored (cf.\
+% Theorem~\ref{ex-empty-line} in Section~\ref{sec:examples}).
+%
+% \subsection{Extended Referencing Features}
+%
+% The extended referencing features are activated by calling
+% |ntheorem.sty| with the option |[thref]|.
+%
+% Often, when writing a paper, one changes propositions into
+% theorems, theorems into corollaries, lemmata into remarks
+% an so on. Then, it is necessary to adjust also the references,
+% i.e., from ``|see Proposition~\ref{completeness}|'' to
+% ``|see Theorem~\ref{completeness}|''. For relieving the user
+% from this burden, the type of the respective labeled entities
+% can be associated with the label itself:
+%
+% \begin{quote}
+% |\label{|\meta{label}|}[|\meta{type}|]|
+% \end{quote}
+% associates the type \meta{type} with \meta{label}. \\
+% This task is automated for theorem-like environments:
+%
+% \begin{quote}
+% |\begin{Theorem}[|\meta{name}|]\label{|\meta{label}|}|
+% \end{quote}
+% is equivalent to
+% \begin{quote}
+% |\begin{Theorem}[|\meta{name}|]\label{|\meta{label}|}[Theorem]|
+% \end{quote}
+%
+% The additional information is used by
+% \DescribeMacro\thref
+% \begin{quote}
+% |\thref{|\meta{label}|}|
+% \end{quote}
+% which outputs the respective environment-type \emph{and} the number,
+% e.g., ``Theorem~42''. Note that \LaTeX\ has to be run twice after
+% changing labels (similar to getting references OK; in the
+% intermediate run, warnings about undefined reference types can
+% occur).
+%
+% The |[thref]| option interferes with the |babel| package, thus in
+% this case, |ntheorem| has to be loaded \emph{after} |babel|. It also
+% interferes with |amsmath|; see Section~\ref{sec:amslatex}.
+%
+%
+% \subsection{Miscellaneous}
+%
+% Inside a theorem-like environment \meta{env}, the name given as optional
+% argument is accessible by |\|\meta{env}|name|.
+%
+% \section{Possible Interferences}
+% Since |ntheorem| reimplements the handling of theorem-environments
+% completely, it is incompatible with every package also concerning
+% those macros.
+%
+% Additionally, the |thmmarks| algorithm for placing endmarks
+% requires modifications of several environments (cf.\ Section
+% \ref{sec:code}).
+% Thus, environments which are reimplemented or additionally defined
+% by document options or styles are not covered by the endmark
+% algorithm of |ntheorem.sty|.
+%
+% The |[thref]| option changes the |\label| command and the treatment
+% of labels when reading the |.aux| file. Thus it is potentially
+% incompatible with all packages also changing |\label| (or
+% |\newlabel|). Compatibility with babel's |\newlabel| isa
+% achieved if babel is loaded before ntheorem.
+%
+% \subsection{Interfering Document Options.}
+%
+% |ntheorem.sty| also copes with the usual document options
+% |leqno| and |fleqn|\footnote{although for \texttt{fleqn} and
+% long formulas
+% reaching to the right margin, equation numbers and endmarks can
+% be smashed over the formula since \texttt{fleqn} does not use
+% \texttt{\bslash eqno} for controlling the setting of the equation
+% number.}.
+% If one of those options is used in the |\documentclass|
+% declaration, it is automatically recognized by the |thmmarks| part
+% of |ntheorem.sty|.
+%
+% If one of those options is not used in |\documentclass|, but
+% with |amsmath| (see next section), it must not be specified
+% for |ntheorem|, since all |amsmath| environments detect this option
+% by themselves.
+%
+% \subsection{Combination with amslatex.}\label{sec:amslatex}
+%
+% |ntheorem.sty| interferes with |amsmath.sty| and |amsthm.sty|.
+%
+% Note, that the LaTeX amstex package |amstex.sty| (\LaTeX2.09) is
+% obsolete and you should use |amsmath| and |amstext| for
+% \LaTeXe\ instead. Up to |ntheorem-1.18|, it is compatible with
+% |amsmath-1.x|. Since |ntheorem-1.19|, it is (hopefully) compatible
+% with |amsmath-2.x|.
+%
+% We would be happy if someone knowing and using |amsmath| would
+% join the development and maintenance of this style.
+%
+% \subsubsection{amsmath}
+%
+% Compatibility with amsmath (end marks for math environments, and
+% handling of labels in math environments) is provided in the option
+% |[amsmath]|, (i.e., if |\usepackage{amsmath}| is used then
+% \begin{itemize}
+% \item |\usepackage[thmmarks]{ntheorem}| must be completed to \\
+% |\usepackage[amsmath,thmmarks]{ntheorem}|), and also
+% \item |\usepackage[thref]{ntheorem}| must be completed to \\
+% |\usepackage[amsmath,thref]{ntheorem}|).
+% \end{itemize}
+% Note, that |amsmath| has to be loaded \emph{before} |ntheorem|
+% since the definitions have to be overwritten.
+%
+% \subsubsection{amsthm}
+%
+% |amsthm.sty| conflicts with the definition of theorem
+% layouts in |theorem.sty|, some features of |amsthm.sty|
+% have been incorporated into option |[amsthm]| which has
+% to be used \emph{instead of} |\usepackage{amsthm}|.
+%
+% The option provides theoremstyles |plain|, |definition|, and
+% |remark|, and a |proof| environment as in |amsthm.sty|.
+%
+% The |\newtheorem*| command is defined even without this
+% option. Note that |\newtheorem*| always switches to the
+% nonumbered version of the current theoremstyle which
+% thus must be defined.
+%
+% The command |\newtheoremstyle| is not taken over from
+% |amsthm.sty|. Also, |\swapnumbers| is not implemented.
+% Here, the user has to express his definitions by the
+% |\newtheoremstyle| command provided by |ntheorem.sty|,
+% including the use of |\theoremheaderfont| and |\theorembodyfont|.
+% The options |[amsthm]| and |[standard]| are in conflict
+% since they both define an environment |proof|.
+%
+% Thus, we recommend not to use
+% |amsthm|, since the features for defining theorem-like
+% environments in |ntheorem.sty|---following
+% |theorem.sty|---seem to be more intuitive and user-friendly.
+%
+% \subsection{Babel}\label{sec:babel}
+%
+% The |[thref]| option interferes with the |babel| package, thus in
+% case that |babel| is used, |ntheorem| has to be loaded \emph{after}
+% |babel|.
+%
+% \subsection{Hyperref}\label{sec:hyperref}
+%
+% Since |hyperref| redefines the \LaTeX\ |\contentsline|-command, it
+% breaks with |ntheorem| below version 1.17. Since version 1.17, the
+% option |[hyperref]| makes |ntheorem| work with |hyperref|.
+% The entries of theoremlists then act as hyperlinks to the actual
+% theorems. Version 1.31 incorporated some bugfixes wrt.\ hyperref
+% for theorem lists and for the |thref| option. One should always
+% load |\usepackage{hyperref}| \emph{before} the first use of
+% |\newtheorem| to obtain correct handling and referencing of
+% counters.
+% \medskip
+%
+% WARNING: The definition and redefinition of Theorem List Layouts
+% (see Section~\ref{sec:listtypes}) isn't yet working with
+% the |hyperref|-package.
+%
+% \subsection{Mathtools and Empheq}\label{sec:mathtools}
+%
+% The |mathtools| and |empheq| packages should be loaded \emph{before}
+% |ntheorem| as follows:
+% \begin{verbatim}
+% \usepackage[ntheorem]{empheq} % this loads amsmath as well
+% \usepackage[thmmarks,amsmath]{ntheorem} \end{verbatim}
+% Note that |empheq| provides an enhanced vertical placement
+% of the endmarks (see the paragraph on |ntheorem| in the
+% documentation of the |empheq| package) in math environments.
+%
+% \section{Examples}\label{sec:examples}
+%
+% The setting is as follows.
+% \begin{itemize}
+% \item For Theorems:
+% \begin{verbatim}
+% \theoremstyle{marginbreak}
+% \theoremheaderfont{\normalfont\bfseries}\theorembodyfont{\slshape}
+% \theoremsymbol{\ensuremath{\diamondsuit}}
+% \theoremseparator{:}
+% \newtheorem{Theorem}{Theorem}\end{verbatim}
+% \item For Lemmas:
+% \begin{verbatim}
+% \theoremstyle{changebreak}
+% \theoremsymbol{\ensuremath{\heartsuit}}
+% \theoremindent0.5cm
+% \theoremnumbering{greek}
+% \newtheorem{Lemma}{Lemma}\end{verbatim}
+% \item For Corollaries:
+% \begin{verbatim}
+% \theoremindent0cm
+% \theoremsymbol{\ensuremath{\spadesuit}}
+% \theoremnumbering{arabic}
+% \newtheorem{Corollary}[Theorem]{Corollary}\end{verbatim}
+% \item For Examples:
+% \begin{verbatim}
+% \theoremstyle{change}
+% \theorembodyfont{\upshape}
+% \theoremsymbol{\ensuremath{\ast}}
+% \theoremseparator{}
+% \newtheorem{Example}{Example}\end{verbatim}
+% \item For Definitions:
+% \begin{verbatim}
+% \theoremstyle{plain}
+% \theoremsymbol{\ensuremath{\clubsuit}}
+% \theoremseparator{.}
+% \theoremprework{\bigskip\hrule}
+% \theorempostwork{\hrule\bigskip}
+% \newtheorem{Definition}{Definition}\end{verbatim}
+% \item For Proofs (note that |\theoremprework| and
+% |\theorempostwork| are automatically reset with the next
+% |\newtheorem| -- proofs do not have lines above and below):
+% \begin{verbatim}
+% \theoremheaderfont{\sc}\theorembodyfont{\upshape}
+% \theoremstyle{nonumberplain}
+% \theoremseparator{}
+% \theoremsymbol{\rule{1ex}{1ex}}
+% \newtheorem{Proof}{Proof}\end{verbatim}
+% \end{itemize}
+% Note, that parts of the setting are inherited. For instance, the
+% fonts are not reset before defining ``Lemma'', so the font setting
+% of ``Theorem'' is used.
+%
+% \begin{Example}[Simple one]
+% The first example is just a text.
+%
+% In the next examples, it is shown how an endmark is put at a
+% displaymath, a single equation and both types of eqnarrays.
+% \end{Example}
+%
+% \begin{Theorem}[Long Theorem]
+% The examples are put into this theorem environment.
+%
+% The next example will not appear in the list of examples since
+% it is written as
+% \begin{quote}
+% |\begin{Example*} ... \end{Example*}|
+% \end{quote}
+% \begin{Example*}[Ending with a displayed formula]
+% Look, the endmark is really at the bottom of the line:
+% \[ f^{(n)}(z) =
+% \frac{n!}{2\pi i} \int \limits _{\partial D}
+% \frac{f(\zeta)}{(\zeta-z)^{n+1}} d\zeta \]
+% \end{Example*}
+% At this point, we add an additional entry without number
+% in the Example list:
+% \begin{verbatim}
+% \addtheoremline*{Example}{Extra Entry}\end{verbatim}
+% \addtheoremline*{Example}{Extra Entry}
+% \begin{Lemma}[Display with array]
+% Lemmata are indented and numbered with greek symbols.
+% Also for displayed arrays of this form, it looks good:
+% \begin{verbatim}
+% \[\begin{array}{l}
+% a = \begin{array}[t]{l}
+% first\ line \\
+% second\ line
+% \end{array}%
+% \mbox{try to put this text in the lowest line}\end{array}\] \end{verbatim}
+% Just try to get this with the presented array structure ... without
+% using dirty tricks, you can position the outer array either [t], [c],
+% or [b], and you will not get the desired effect.
+% \[\begin{array}{l}
+% a = \begin{array}[t]{l}
+% first\ line \\
+% second\ line
+% \end{array} \mbox{try to put this text in the lowest line}
+% \end{array}\]
+% \end{Lemma}
+% \begin{Lemma}[Equation]
+% For |equation|s, we decided to put the endmark after the equation
+% number, which is vertically centered.
+% Currently, we do not know, how to get the equation number centered and
+% the endmark at the bottom (one has to know the internal height of the
+% math material) ... If anyone knows, please inform us.
+% \begin{equation}
+% \int_{\gamma} f(z)\, dz := \int_a^b f(\gamma (t)) \gamma'(t) \, dt
+% \end{equation}
+% \end{Lemma}
+%
+% With the |break|-theoremstyles, if the environment is labeled and
+% written as
+% \begin{quote}
+% |\begin{Lemma}[Breakstyle]\label{breakstyle}|
+% \end{quote}
+% \begin{Lemma}[Breakstyle]\label{breakstyle}
+% you see, there is a leading space \dots \\
+% If a percent (comment) (or an explicit |\ignorespaces|) is put directly
+% after the label, e.g.
+% \begin{quote}
+% |\begin{Lemma}[Breakstyle]\label{breakstyle}%|,
+% \end{quote}
+% the space disappears.
+%
+% From the predefined styles, this is exactly the case for the break-styles.
+% That's no bug, it's \LaTeX-immanent.
+%
+% The example goes on with an |eqnarray|:
+% \begin{eqnarray}
+% f(z) &=&
+% \frac{1}{2\pi i}
+% \int \limits_{\partial D} \frac{f(\zeta)}{\zeta-z} d\zeta \\
+% &= &
+% \frac{1}{2\pi}
+% \int \limits_0^{2\pi}
+% f(z_0 + re^{it}) dt
+% \end{eqnarray}
+% \end{Lemma}
+%
+% \begin{Proof}[of nothing]
+% \begin{eqnarray*}
+% f(z) &=&
+% \frac{1}{2\pi i}
+% \int \limits_{\partial D} \frac{f(\zeta)}{\zeta-z} d\zeta \\
+% &= &
+% \frac{1}{2\pi}
+% \int \limits_0^{2\pi}
+% f(z_0 + re^{it}) dt
+% \end{eqnarray*}
+% \end{Proof}
+% That's it (the end of the Theorem).
+% \end{Theorem}
+%
+%
+% If there are some environments in the same thm-environment,
+% the last one gets the endmark:
+% \begin{Definition}[With a list]
+% \begin{equation}
+% \int_{\gamma} f(z)\, dz := \int_a^b f(\gamma (t)) \gamma'(t) \, dt
+% \end{equation}
+% \begin{itemize}
+% \item you've seen, how it works for text and
+% \item math environments,
+% \item and it works for lists.
+% \end{itemize}
+% \end{Definition}
+%
+% \begin{Corollary}[Q.E.D.]
+% And here is a trivial corollary, which is ended by
+% |\qedsymbol{\textrm{q.e.d}}| and |\qed|.
+% \qedsymbol{q.e.d}\qed
+% \end{Corollary}
+%
+% \begin{Example}
+% \[ f^{(n)}(z) =
+% \frac{n!}{2\pi i} \int \limits _{\partial D}
+% \frac{f(\zeta)}{(\zeta-z)^{n+1}} d\zeta \]
+% If there is some text after an environment, the endmark is put
+% after the text.
+% \end{Example}
+%
+% The next one is done by the following sequence. Note, that
+% |~\hfill~| is inserted to prevent \LaTeX\ from using its nested list
+% management (a verbatim is also a trivlist),
+% i.e.\ this causes \LaTeX\ to start the |verbatim|-Part in a new line.
+% \begin{quote}
+% |\begin{Example}| \\
+% |~\hfill~| \\
+% |\begin{verbatim}| \\
+% |And, it also works for verbatim|\\
+% |... when the \end{verbatim} is in the|\\
+% |same line as the text ends. \end{verbatim}|\\
+% | ^| this space is important !!\\
+% |\end{Example}|
+% \end{quote}
+%
+% \begin{Example}[Using |verbatim|]
+% ~\hfill~
+% \begin{verbatim}
+% And, it also works for verbatim
+% ... when the end{verbatim} is in the
+% same line as the text ends. \end{verbatim}
+% \end{Example}
+%
+% There must be no empty line in the input before the |\end{theorem}|
+% (since then, the end mark is ignored) \\
+% \begin{quote}
+% |\begin{Theorem}| \\
+% |some text ... but no end mark| \\
+% | | \\
+% |\end{Theorem}|
+% \end{quote}
+%
+% \begin{Theorem}\label{ex-empty-line}
+% some text ... but no end mark
+%
+% \end{Theorem}
+%
+%
+% Now, there is a corollary which should appear with a different
+% name in the list of corollaries:
+% \begin{quote}
+% |\begin{Corollary*}[title in text]\label{otherlabel}| \\
+% |...|\\
+% |\end{Corollary*}|
+% |\addtheoremline{Corollary}{title in list}| \\
+% \end{quote}
+% \begin{Corollary*}[title in text]\label{otherlabel}\ignorespaces
+% let's do something weird:
+% \begin{center}
+% It also works in the \\
+% center \\
+% environment.
+% \end{center}
+% \end{Corollary*}
+% \addtheoremline{Corollary}{title in list}
+%
+% \begin{Theorem}[Quote]
+% \begin{quote}
+% In quote environments, the text is normally indented from left
+% and right by the same space. The endmark is not indented from the
+% right margin, i.e., it is typeset to the right margin of the
+% surrounding text.
+% \end{quote}
+% \end{Theorem}
+%
+% Here is an example for turning off the endmark automatics and
+% manual handling:
+%
+% \begin{verbatim}
+% \begin{Theorem}[Manual End Mark]\label{somelabel}
+% a line of text with a manually set endmark \hfill\TheoremSymbol \\
+% some more text, but no automatic endmark set. \NoEndMark
+% \end{Theorem}\end{verbatim}
+%
+% \begin{Theorem}[Manual End Mark]\label{somelabel}
+% a line of text with a manually set endmark \hfill\TheoremSymbol \\
+% some more text, but no automatic endmark set. \NoEndMark
+% \end{Theorem}
+% Also, one should note, that |\hfill| is inserted to set
+% the endmark at the right margin.
+%
+% \begin{Example}[Quickie] It also works for short one's.
+% \end{Example}
+%
+% If you are tired of the greek numbers and the indentation for lemmata ...
+% you can redefine it:
+% \theoremstyle{changebreak}
+% \theoremheaderfont{\normalfont\bfseries}\theorembodyfont{\slshape}
+% \theoremsymbol{\ensuremath{\heartsuit}}
+% \theoremsymbol{\ensuremath{\diamondsuit}}
+% \theoremseparator{:}
+% \theoremindent0cm
+% \theoremnumbering{arabic}
+% \renewtheorem{Lemma}{Lemma}
+% \begin{quote}
+% |\theoremstyle{changebreak}| \\
+% |\theoremheaderfont{\normalfont\bfseries}\theorembodyfont{\slshape}| \\
+% |\theoremsymbol{\ensuremath{\heartsuit}}|\\
+% |\theoremsymbol{\ensuremath{\diamondsuit}}|\\
+% |\theoremseparator{:}|\\
+% |\theoremindent0.5cm|\\
+% |\theoremnumbering{arabic}|\\
+% |\renewtheorem{Lemma}{Lemma}|
+% \end{quote}
+% \begin{Lemma}
+% another lemma, with arabic numbering ... note that the numbering
+% continues.
+% \end{Lemma}
+%
+% the optional argument (i.e.\ the `theorem'-name) can be accessed by
+% |\|\meta{env}|name|.
+%
+% \begin{quote}
+% |\begin{Theorem}[somename]|\\
+% |Obviously, we are in Theorem~\Theoremname|.\\
+% |\end{Theorem}|
+% \end{quote}
+% \begin{Theorem}[somename]
+% Obviously, we are in Theorem~\Theoremname.
+% \end{Theorem}
+%
+% This feature can e.g.\ be used for automatically generating
+% executable code and a commented solution sheet:
+% \begin{quote}
+% |\begin{exercise}[quicksort]| \\
+% \meta{the exercise text} \\
+% |\begin{verbatimwrite}{solutions/\exercisename.c}|\\
+% \meta{C-code} \\
+% |\end{verbatimwrite}|\\
+% |\verbatiminput{solutions/\exercisename.c}|\\
+% |\end{exercise}|
+% \end{quote}
+% This will write the C-code to a file |solutions/quicksort.c| and
+% type it also on the solution sheet.
+%
+% Now, we define an environment |KappaTheorem| which uses the same
+% style parameters as Theorems and is numbered together with
+% Corollaries (Theorems are also numbered with Corollaries).
+% Note that we define a complex header text and a complex end mark.
+%
+% |\theoremclass{Theorem}|\\
+% |\theoremsymbol{\ensuremath{a\atop b}}| \\
+% |\newtheorem{KappaTheorem}[Corollary]{\(\kappa\)-Theorem}|
+%
+% \theoremclass{Theorem}
+% \theoremsymbol{\ensuremath{a\atop b}}
+% \newtheorem{KappaTheorem}[Theorem]{\(\kappa\)-Theorem}
+%
+% \begin{KappaTheorem}[1st \(\kappa\)-Theorem]\label{kappatheorem1}
+% That's the first Kappa-Theorem.
+% \end{KappaTheorem}
+%
+% \subsection{Extended Referencing Features}\label{sec-ExtRef}[Section]
+%
+% The standard |\label| command is extended by an optional argument
+% which is intended to contain the ``name'' of the structure which
+% is labeled, allowing more comfortable referencing; e.g., this
+% section has been started with
+%
+% \begin{quote}
+% |\subsection*{Extended Referencing Features}%|\\
+% |\label{sec-ExtRef}[Section]|
+% \end{quote}
+%
+% As already stated, for theorem-like environments the optional
+% argument is filled in automatically, i.e.,
+% \begin{quote}
+% |\begin{Theorem}[Manual End Mark]\label{somelabel}|
+% \end{quote}
+% (cf.\ page~\pageref{somelabel}) is equivalent to
+% \begin{quote}
+% |\begin{Theorem}[Manual End Mark]\label{somelabel}[Theorem]|
+% \end{quote}
+%
+% |\thref{|\meta{label}|}| additionally outputs the contents
+% of the optional argument which has been associated with \meta{label}:
+%
+% \begin{quote}
+% |This is \thref{sec-ExtRef}| \\
+% |A theorem end mark has been set manually in \thref{somelabel}.| \\
+% |A center environment has been shown in \thref{otherlabel}.| \\
+% |The first Kappa-Theorem has been given in \thref{kappatheorem1}.|
+% \end{quote}
+%
+% generates
+% \begin{quote}
+% This is \thref{sec-ExtRef}. \\
+% A theorem end mark has been set manually in \thref{somelabel}.
+% A center environment has been shown in \thref{otherlabel}.
+% The first Kappa-Theorem has been given in \thref{kappatheorem1}.
+% \end{quote}
+%
+% Here one must be careful that the handling of the optional
+% argument is automated
+% only for environments defined by |\newtheorem|, i.e., \emph{not}
+% for sectioning, equations, or enumerations.
+%
+% Calling |\thref{|\meta{label}|}| for a label which has been
+% set without an optional argument can result in different unintended
+% results: If \meta{label} is not inside a theorem-like environment, an
+% error message is obtained, otherwise the type of the surrounding
+% theorem-like environment is output, e.g., calling |\thref{label}|
+% then results in ``Theorem~\meta{number}''!
+% Additionally, currently there is no support for multiple references
+% such as ``see Theorems~5 and~7'' (this would require plural-forms
+% for different languages and handling of |\ref|-lists, probably
+% splitting into different sublists for different environments)\footnote{If
+% someone is interested in programming this, please contact us; it
+% seems to be algorithmically easy, but tedious.}.
+%
+% \subsection{Framed and Shaded Theorems}
+% \label{sec-framed}
+%
+% Framed theorem classes are defined as follows:
+% \begin{quote}
+% |\theoremclass{Theorem}| \\
+% |\theoremstyle{break}| \\
+% |\newframedtheorem{importantTheorem}[Theorem]{Theorem}|
+% \end{quote}
+% \theoremclass{Theorem}
+% \theoremstyle{break}
+% \newframedtheorem{importantTheorem}[Theorem]{Theorem}
+% defines important theorems to use the same design as for theorems
+% (except that the break header style is used except the margin header
+% style), number them with the same counter, and put a frame around
+% them:
+%
+% An instance is created by
+% \begin{quote}
+% |\begin{importantTheorem}[Important Theorem]| \\
+% |This is an important theorem.| \\
+% |\end{importantTheorem}|
+% \end{quote}
+% \begin{importantTheorem}[Important Theorem]
+% This is an important theorem.
+% \end{importantTheorem}
+%
+% Note that all skips have their default values (e.g.\
+% |\theoreminframepreskip| is |\topsep|).
+% More important theorems are shaded -- by default in grey:
+%
+% \begin{quote}
+% |\theoremclass{Theorem}| \\
+% |\theoremstyle{break}| \\
+% |\newshadedtheorem{moreImportantTheorem}[Theorem]{Theorem}| \\
+% |\begin{moreImportantTheorem}[More Important Theorem]| \\
+% |This is a more important theorem.| \\
+% |\end{moreImportantTheorem}|
+% \end{quote}
+% \theoremclass{Theorem}
+% \theoremstyle{break}
+% \newshadedtheorem{moreImportantTheorem}[Theorem]{Theorem}
+% \begin{moreImportantTheorem}[More Important Theorem]
+% This is a more important theorem.
+% \end{moreImportantTheorem}
+%
+% Even more important theorems are shaded in red, with 1/2cm
+% space inside the frame before and 1 cm space after the text,
+% but no additional space before/after the frame:
+%
+% \begin{quote}
+% |\theoremclass{Theorem}| \\
+% |\theoremstyle{break}| \\
+% |\theoreminframepreskip{0.5cm}| \\
+% |\theoreminframepostskip{1cm}| \\
+% |\theoremframepreskip{0cm}| \\
+% |\theoremframepostskip{0cm}| \\
+% |\shadecolor{red}| \\
+% |\newshadedtheorem{evenMoreImportantTheorem}[Theorem]{Theorem}| \\
+% |\begin{evenMoreImportantTheorem}[Even More Important Theorem]| \\
+% |This is an even more important theorem. | \\
+% |\end{evenMoreImportantTheorem}|
+% \end{quote}
+% \theoremclass{Theorem}
+% \theoremstyle{break}
+% \theoreminframepreskip{0.5cm}
+% \theoreminframepostskip{1cm}
+% \theoremframepreskip{0cm}
+% \theoremframepostskip{0cm}
+% \shadecolor{red}
+% \newshadedtheorem{evenMoreImportantTheorem}[Theorem]{Theorem}
+% \begin{evenMoreImportantTheorem}[Even More Important Theorem]
+% This is an even more important theorem.
+% \end{evenMoreImportantTheorem}
+%
+% Most important theorems get a framed, blue colored box with a shadow,
+% no space inside the frame, and 1cm before and after the frame.
+% Here, |\def\theoremframecommand| is used:
+%
+% \begin{quote}
+% |\theoremclass{Theorem}| \\
+% |\theoremstyle{break}| \\
+% |\theoreminframepreskip{0pt}| \\
+% |\theoreminframepostskip{0pt}| \\
+% |\theoremframepreskip{1cm}| \\
+% |\theoremframepostskip{1cm}| \\
+% |\theoremstyle{break}| \\
+% |\def\theoremframecommand{%| \\
+% | \psshadowbox[fillstyle=solid,fillcolor=blue,linecolor=black]}| \\
+% |\newshadedtheorem{MostImportantTheorem}[Theorem]{Theorem}| \\
+% |\begin{MostImportantTheorem}[Most Important Theorem]| \\
+% |This is a most important theorem. | \\
+% |\end{MostImportantTheorem}|
+% \end{quote}
+% \theoremclass{Theorem}
+% \theoreminframepreskip{0pt}
+% \theoreminframepostskip{0pt}
+% \theoremframepreskip{1cm}
+% \theoremframepostskip{1cm}
+% \theoremstyle{break}
+% \def\theoremframecommand{%
+% \psshadowbox[fillstyle=solid,fillcolor=blue,linecolor=black]}
+% \newshadedtheorem{MostImportantTheorem}[Theorem]{Theorem}
+% \begin{MostImportantTheorem}[Most Important Theorem]
+% This is a most important theorem.
+% \end{MostImportantTheorem}
+%
+% \subsection{Lists of Theorems and Friends}
+%
+% Note, that we put the following lists into the |quote|-environment
+% to emphazise them from the surrounding text. So the lists
+% are indented slightly at the margin.
+%
+% With
+% \begin{quote}
+% |\addtotheoremfile{Added into all theorem lists}|,
+% \end{quote}
+% in every list, an additional line of text would be inserted.
+% But it isn't actually done in this documentation since we want
+% to use different list formats.
+%
+% Only for the list of Examples, this one is added:
+% \begin{quote}
+% |\addtotheoremfile[Example]{Only concerning Example lists}|
+% \end{quote}
+% \addtotheoremfile[Example]{Only concerning Example lists}
+%
+% With
+% \begin{quote}
+% |\theoremlisttype{all}| \\
+% |\listtheorems{Lemma}|,
+% \end{quote}
+% all lemmas are listed:
+% \begin{quote}
+% \theoremlisttype{all}
+% \listtheorems{Lemma}
+% \end{quote}
+%
+% From the examples, only those are listed which have an optional name:
+% \begin{quote}
+% |\theoremlisttype{opt}| \\
+% |\listtheorems{Example}|
+% \end{quote}
+% leads to
+% \begin{quote}
+% \theoremlisttype{opt}
+% \listtheorems{Example}
+% \end{quote}
+% One should note the line \emph{Only concerning example lists}, which
+% was added by the |\addtotheoremfile|-statement above.
+%
+% For the next list, another layout, using the |tabular|-environment,
+% is defined:
+% \begin{verbatim}
+% \newtheoremlisttype{tab}%
+% {\begin{tabular*}{\linewidth}{@{}lrl@{\extracolsep{\fill}}r@{}}}%
+% {##1&##2&##3&##4\\}%
+% {\end{tabular*}}\end{verbatim}
+% Thus, by saying
+% \begin{quote}
+% |\theoremlisttype{tab}|\\
+% |\listtheorems{Theorem,importantTheorem,moreImportantTheorem,|
+% | evenMoreImportantTheorem,MostImportantTheorem,Lemma},|
+% \end{quote}
+% theorems (of all importance levels) and lemmata are listed:
+% \begin{quote}
+% \DeleteShortVerb{\|}
+% \newtheoremlisttype{tab}%
+% {\begin{tabular*}{\linewidth}{@{}lrl@{\extracolsep{\fill}}r@{}}}%
+% {##1&##2&##3&##4\\}%
+% {\end{tabular*}}
+% \theoremlisttype{tab}
+% \listtheorems{Theorem,importantTheorem,moreImportantTheorem,evenMoreImportantTheorem,MostImportantTheorem,Lemma}
+% \MakeShortVerb{\|}
+% \end{quote}
+%
+% \LaTeX-lists can also be used to format the theoremlist.
+% The input
+% \begin{verbatim}
+% \newtheoremlisttype{list}%
+% {\begin{trivlist}\item}
+% {\item[##2 ##1:]\ ##3\dotfill ##4}%
+% {\end{trivlist}}
+% \theoremlisttype{list}
+% \listtheorems{Corollary}\end{verbatim}
+% leads to%
+% \begin{quote}%
+% \DeleteShortVerb{\|}%
+% \newtheoremlisttype{list}%
+% {\begin{trivlist}}%
+% {\item[##2 ##1:]\ ##3\dotfill ##4}%
+% {\end{trivlist}}%
+% \theoremlisttype{list}\listtheorems{Corollary}%
+% \MakeShortVerb{\|}%
+% \end{quote}%
+% In this example, after the item, \verb*!\ ! is used instead of
+% \verb*! !, because in the latter case, |\dotfill| will produce an
+% error if the optional argument (|##3|)
+% is missing.
+%
+% \section{The End Mark Algorithm}
+%
+% \subsection{The Idea}
+%
+% The handling of endmarks with |thmmarks.sty| is based on the same
+% two-pass principle as the handling of labels: the necessary information
+% about endmarks is contained in the |.aux| file.
+%
+% With |thmmarks.sty|, \TeX\ is always aware whether it is in
+% some theorem-like environment.
+% There, potential positions for endmarks can be
+% \begin{enumerate}
+% \item\label{elist:1} at the end of simple text lines in open text,
+% \item\label{elist:2} at the end of displaymaths,
+% \item\label{elist:3} at the end of equations or equationarrays, or
+% \item\label{elist:4} at the end of text lines at the end of lists (or, more general,
+% |trivlists|, such as |verbatim| or |center|).
+% \end{enumerate}
+%
+% The problem is, that in the cases (\ref{elist:2})--(\ref{elist:4}), the endmarks has to
+% be placed in a box which is already shipped out, when
+% |\end{...}| is processed.
+% Thus, in those situations, \TeX\ needs to know from the |.aux|
+% file, whether is has to put an endmark.
+%
+% When \TeX\ is in a theorem-like environment and comes to one of
+% the points mentioned in (\ref{elist:2})--(\ref{elist:4}),
+% and the |.aux| file says that there is an endmark, then
+% it is put there.
+% Anyway, it maintains a counter of the potential positions of an end
+% mark in the current theorem-like environment.
+% When it comes to an |\end{theorem}|, it looks if it is in
+% situation (\ref{elist:1}) (then the endmark is simply put at the end of the
+% current line).
+% Otherwise, the last horizontal box is already shipped out
+% (thus it contains a situation (\ref{elist:2})--(\ref{elist:4})) and the endmark must be
+% set in it.
+% In this case, a note is written in the |.aux| file, where the
+% endmark actually has to be set (ie, at the latest potential point for
+% setting an endmark inside the theorem).
+%
+% \subsection{The Realization}
+%
+% Let \env\ be a theorem-like environment. Then, additional to
+% the counter \env, \TeX\ maintains two counters
+% |curr|\env|ctr| and |end|\env|ctr|.
+% In the $i$th environment of type \env, |curr|\env|ctr|$=i$
+% (the \LaTeX\ counter \env\ cannot be used since a)
+% environments can use the counter of other environments, and b)
+% often counters are reinitialized inside a document).
+% |end|\env|ctr| counts the potential situations for
+% putting an endmark inside an environment.
+% It is set to 1 when starting an environment. Each time, when
+% a situation (\ref{elist:2})--(\ref{elist:4}) is reached, the command
+% \begin{quote}
+% |\mark|$<$|\thm@romannum{curr|env|ctr}|$>$\env
+% $<$|\thm@romannum{end|\env|ctr}|$>$
+% \end{quote}
+% is called (where |\thm@romannum| just writes the value of a counter
+% as its roman numeral representation, e.g., 17 as xvii). \\
+% ($<$|\thm@romannum{curr|\env|ctr}|$>$\env
+% $<$|\thm@romannum{end|\env|ctr}|$>$
+% uniquely identifies all situations (\ref{elist:2})--(\ref{elist:4}) in a document).
+%
+% If at this position an endmark has to be set,
+% \begin{quote}
+% |\mark|$<$|\thm@romannum{curr|\env|ctr}|$>$\env
+% $<$|\thm@romannum{end|\env|ctr}|$>$
+% \end{quote}
+% is defined in the |.aux| file to be |\end|\env|Symbol|,
+% otherwise it is undefined and simply ignored.
+%
+% When \TeX\ comes to an |\end{|\env|}|, it looks if it is in
+% situation (\ref{elist:1}). If so, the endmark is simply put at the end of the
+% current line.
+% Otherwise,
+% \begin{quote}
+% |\def\mark|$<$|\thm@romannum{curr|env|ctr}|$>$\env|%|\\
+% $<$|\thm@romannum{end|\env|ctr}|$>$|{|\env|Symbol}|
+% \end{quote}
+% is written to the |.aux| file for setting the endmark
+% at the latest potential position inside the theorem in the next run.
+%
+% \begin{Theorem}[Correctness]
+% \begin{enumerate}
+% \item For a |.tex| file, which does not contain nested theorem-like
+% environments of the same type, in the above situation, the following
+% holds:
+% When compiling, at the $i$th situation in the $j$th environment of type
+% \env, |mark|$\;j\,$\env$\;i$ is handled.
+%
+% For |.tex| files which contain nested theorem-like environments of
+% the same type, |mark|$\;k\,$\env$\;l$ is handled, where
+% $k$ is the number of the latest environment of type \env\ which
+% has been called at this moment, and $l$ is the number of situations
+% (\ref{elist:2})--(\ref{elist:4}) which have occurred in
+% environments of type \env\ since
+% the the $k$th |\begin{|\env|}|.
+%
+% \item When finishing an environment, either an endmark is set directly
+% (when in a text line) or an order to put the end symbol at the latest
+% potential position is written to the |.aux| file.
+% \end{enumerate}
+% \end{Theorem}
+%
+% \begin{Theorem}[Completeness]
+% The handling of endmarks is complete wrt.\ plain text, |displaymath|,
+% |equation|,\\ |eqnarray|, |eqnarray*|, and all environments
+% ended by |endtrivlist|, including |center| and
+% |verbatim|.
+% \end{Theorem}
+%
+% So, where can be bugs ?
+% \begin{itemize}
+% \item in the plain \TeX\ handling of endmarks,
+% \item in some special situations which have not been tested yet,
+% \item in some special environments which have not been tested yet.
+% \item in the |amsmath| environments. We seldom use them, so we do not
+% know their pitfalls, and we ran only general test cases.
+% \end{itemize}
+%
+% \section{Problems and Questions}
+% \subsection{Known Limitations}
+%
+% \begin{itemize}
+% \item Since |ntheorem.sty| uses the |.aux| file for storing
+% information about the positions of endmarks, \LaTeX\ must be
+% run twice for correctly setting the endmarks.
+% \item Since |ntheorem.sty| uses the |.aux| file for storing
+% information about lists in the |.thm| file, a minimum of
+% two runs is needed. If theorems move in any of these
+% runs up to five runs can be needed to generate correct lists.
+% \item Since we need to expand the optional argument of theorems
+% in various ways for the lists, we decided to copy the text verbatim
+% into the |.thm| file. Thus, if you use things like |\thesection|
+% etc., the list won't show the correct text. Therefore you shouldn't
+% use any command that needs to be expanded.
+% \item In nested environments ending at the same time,
+% only the endmark for the inner environment is set, as the following
+% example shows:
+% \begin{verbatim}
+% \begin{Lemma}
+% Some text.
+% \begin{Proof} The Proof \end{Proof}
+% \end{Lemma}\end{verbatim}
+% yields to
+% \begin{Lemma}
+% Some text.
+% \begin{Proof} The Proof \end{Proof}
+% \end{Lemma}
+%
+% You can handle this by specifying something invisible after the end
+% of the inner theorem. Then the endmark for the outer theorem is
+% set in the next line:
+% \begin{verbatim}
+% \begin{Lemma}
+% Some text.
+% \begin{Proof} The Proof \end{Proof}~
+% \end{Lemma}\end{verbatim}
+% yields to
+% \begin{Lemma}
+% Some text.
+% \begin{Proof} The Proof \end{Proof}~
+% \end{Lemma}
+%
+% \item Document option |fleqn| is problematic: |fleqn| handles
+% equations not by |$$| but by lists (check what happens for
+% \begin{quote}
+% |\begin{theorem} \[ displaymath \] \end{theorem}|
+% \end{quote}
+% in standard \LaTeX:
+% The displaymath is \emph{not} set in an own line).
+% Also, for long formulas, the equation number and the endmark are
+% smashed into the formula at the right text margin.
+% \item Naturally, |ntheorem.sty| will not work correctly in
+% combination with other styles which change the handling
+% of
+% \begin{enumerate}
+% \item theorem-like environments, or
+% \item environments concerned with the handling of endmarks, e.g.
+% |\[...\]|, |eqnarray|, etc.
+% \end{enumerate}
+% \item |ntheorem.sty| is compatible with Frank Mittelbach's
+% |theorem.sty|, which is the most widespread style for setting
+% theorems.
+%
+% It cannot be used \emph{with} |theorem.sty|, but it can be
+% used instead of it.
+% \end{itemize}
+%
+% \subsection{Known ``Bugs'' and Problems}
+%
+% \begin{itemize}
+% \item Ending a theorem \emph{directly} after the text, e.g.
+% \begin{quote}
+% |\begin{Theorem} text\end{Theorem}|
+% \end{quote}
+% suppresses the endmark:
+% \begin{Theorem} text\end{Theorem}
+% Therefore a space or a newline should be inserted
+% before |\end{...}|.
+% \item With theoremstyle break, if the linebreak would cause
+% ugly linebreaking in the following text, it is suppressed.
+% \end{itemize}
+%
+% \subsection{Open Questions}
+% \begin{itemize}
+% \item
+% For |equation|s, we decided to put the endmark after the equation
+% number, which is vertically centered.
+% Currently, we do not know, how to get the equation number centered and
+% the endmark at the bottom (one has to know the internal height of the
+% math material).
+% \item
+% The placement of endmarks is mainly based on a check whether \LaTeX\
+% is in an ordinary text line when encountering an end-of-environment.
+% This question is \emph{partially} answered by |\ifhmode|: In a text
+% line, \LaTeX\ is always in |\hmode|.
+% But, after an displaymath, \LaTeX\ is also in |\hmode|. Thus,
+% additionally |\lastskip| is checked: after a displaymath,
+% |\lastskip|=0 holds.
+% In most situations, when text has been written into a line,
+% |\lastskip| $\neq$ 0. But, this does not hold, if the source code
+% is of the following form: |...text\label{bla}|: then, |\lastskip|=0.
+% In those situations, the endmark is suppressed. \\
+% ?? How can it be detected whether \LaTeX\ has just ended a displaymath?
+% \item
+% The above problem with the label: The break style enforces a linebreak
+% by |\hfill\penalty-8000| after the |\trivlist|-item. Thus, \TeX\
+% gets back into the horizontal mode. The label places a ``whatsit''
+% somewhere ... and, it seems that the ``whatsit'' makes \TeX\ think
+% that there is a line of text.
+% \end{itemize}
+% If someone has a solution to one of those questions, please inform us.
+% (You can be sure to be mentioned in the Acknowledgements.)
+%
+% \section{Code Documentation}\label{sec:code}
+% \iffalse
+% \subsection{The documentation driver file}
+%
+% The next bit of code contains the documentation driver file for
+% \TeX{}, i.e., the file that will produce the documentation you are
+% currently reading. It will be extracted from this file by the
+% \texttt{docstrip} program. Since it is the first code in the file
+% one can alternatively process this file directly with \LaTeXe{} to
+% obtain the documentation.
+%
+% \begin{macrocode}
+%<*driver>
+\documentclass{ltxdoc} \usepackage{latexsym}
+\usepackage{framed} \usepackage{pstricks}
+\usepackage[thmmarks,thref,noconfig,framed]{ntheorem} \parindent0pt\hfuzz2pt
+\setlength{\textwidth}{360pt}
+\begin{document}
+ \DocInput{ntheorem.dtx}
+\end{document}
+%</driver>
+% \end{macrocode}
+%\fi
+% \subsection{Documentation of the Macros}
+% \setcounter{CodelineNo}{0}
+%\iffalse
+%<*package>\fi
+% \begin{macrocode}
+\typeout{Style `\basename', Version \fileversion\space <\filedate>}
+\ProvidesPackage{ntheorem}[\filedate \space\fileversion]
+\RequirePackage{ifthen}%
+\newif\if@thmmarks\@thmmarksfalse
+\newif\if@thref\@threffalse
+\newif\ifthm@inframe\thm@inframefalse
+\newif\ifthm@tempif
+% \end{macrocode}
+%
+% general setup. \medskip
+%
+% \subsubsection{Thmmarks-Related Stuff}
+%
+% \setcounter{CodelineNo}{0}
+% \changes{v0.87}{1997/02/18}{option 'thmmarks' added (WM)}
+% \begin{macrocode}
+\DeclareOption{thmmarks}{%*********************************
+\PackageInfo{\basename}{Option `thmmarks' loaded}%
+%
+\@thmmarkstrue
+\newcounter{endNonectr}
+\newcounter{currNonectr}
+\newif\ifsetendmark\setendmarktrue
+% \end{macrocode}
+%
+% activate placement of endmarks and define counters for upper
+% level. \\
+% |\ifsetendmark|: true if an endmark has to be set in a complex
+% situation which must be handled by the |.aux| file.
+% For further comments see |\@endtheorem|.
+%
+%
+% \begin{macro}{\thm@romannum}
+% \changes{v1.28}{2009/07/02}{duplicate latex's definition (WM),
+% reported by Ch. Garcia Duarte}
+% The functionality of |latex.ltx|'s |\roman| command converts
+% numbers into strings, e.g., 17 into xvii. It is used to put
+% notes into the |.aux| file. It must be
+% locally defined, just duplicating the definition of |\roman| in
+% latex.ltx since some packages redefine |\roman|:
+% \begin{macrocode}
+\gdef\thm@romannum#1{\expandafter\thm@roman@num\csname c@#1\endcsname}%
+\gdef\thm@roman@num#1{\romannumeral #1}%
+% \end{macrocode}
+% \end{macro}
+%
+% In the following, all relevant environments are changed for
+% handling potential end mark positions:
+%
+% \paragraph{Changes to List Environment}\ \\
+% Original: ltlists.dtx
+%
+% \begin{macro}{\endtrivlist}
+% \changes{v1.19}{2001/01/13}{changed hbox into unskip (OK/WM)}
+% Replaces \LaTeX's |\endtrivlist|. An augmented functionality of
+% \LaTeX's |\endtrivlist| is contained in |\@endtrivlist|.
+%
+% \begin{macrocode}
+\gdef\endtrivlist{%
+ \@endtrivlist{\PotEndMark{\unskip\nobreak\hfill\nobreak}}}
+% \end{macrocode}
+%
+% At an |\endtrivlist| (which is called at the end
+% of |\list| environments and several other environments),
+% |\@endtrivlist| is called to end the |\trivlist| and
+% set a potential position for an endmark at the end of the line if
+% \TeX\ is in a text line.
+% \end{macro}
+%
+%
+% \begin{macro}{\@endtrivlist}
+% A new command] which augments \LaTeX's functionality of
+% |\endtrivlist| by checking if an end mark has to be set:
+%
+% \Codelabel{atendtrivlist}
+% \begin{macrocode}
+\gdef\@endtrivlist#1{% % from \endtrivlist
+ \if@inlabel \indent\fi
+ \if@newlist \@noitemerr\fi
+ \ifhmode
+ \ifdim\lastskip >\z@ #1\unskip \par %<<<<<<<<<<<<<<<<<<<<<<
+ \else \unskip \par \fi
+ \fi
+ \if@noparlist \else
+ \ifdim\lastskip >\z@
+ \@tempskipa\lastskip \vskip -\lastskip
+ \advance\@tempskipa\parskip \advance\@tempskipa -\@outerparskip
+ \vskip\@tempskipa
+ \fi
+ \@endparenv
+ \fi}
+% \end{macrocode}
+%
+% New: parameter |#1|. \\
+% |#1| is executed when the |\trivlist| ends with a text line (ie the
+% endmark can be put simply at the end of the line): \\
+% Line \Coderef{atendtrivlist}{5}:
+% case split: if in |hmode| and |\lastskip| $>$ 0,
+% then \TeX\ is in a text line, the endmark is set here.
+% \end{macro}
+%
+% \paragraph{Changes to Math Environments}\ \\
+% Original: ltmath.dtx
+%
+% \begin{macro}{\endequation}
+% For equations, end marks are placed behind the equation number:
+% \Codelabel{standard-endequation}
+% \begin{macrocode}
+\gdef\SetMark@endeqn{\quad}% as default, cf. option leqno
+\gdef\endequation{\eqno \hbox{\@eqnnum \PotEndMark{\SetMark@endeqn}}%
+ $$\global\@ignoretrue}
+% \end{macrocode}
+%
+% \begin{packeddescr}
+% \item[Line \Coderef{standard-endequation}{1}:]
+% As default, work for equation numbers at the right:
+% Then, a |\quad| is placed between equation number and endmark.
+% \item[Line \Coderef{standard-endequation}{2}:]
+% In addition to the equation number (set by |\@eqnnum| at the
+% right of the line) |\SetMark@endeqn| is carried out.
+% \end{packeddescr}\end{macro}
+%
+% \begin{macro}{\[}
+% \changes{v1.27}{2008/06/18}{fixed: start array with no additional
+% space (WM, reported by Tillmann Berg)}
+% \changes{v1.28}{2009/07/02}{replaced roman by thm@romannum (WM)}
+% If an end mark is set, a displaymath is put into box such that
+% the end marks appears at its bottom level at the right. Thus, also
+% the definition of |\[| has to be changed:
+% \Codelabel{st-b-displ}
+% \begin{macrocode}
+\gdef\[{%
+ \relax\ifmmode
+ \@badmath
+ \else
+ \ifvmode
+ \nointerlineskip
+ \makebox[.6\linewidth]%
+ \fi
+ $$\stepcounter{end\InTheoType ctr}%
+ \@ifundefined{mark\thm@romannum{curr\InTheoType ctr}%
+ \InTheoType\thm@romannum{end\InTheoType ctr}}{\relax}%
+ {\ifx\csname\InTheoType Symbol\endcsname\@empty\else
+ \boxmaxdepth=.5ex\begin{array}[b]{@{}l}%
+ \boxmaxdepth=\maxdimen\displaystyle\fi}%
+ \addtocounter{end\InTheoType ctr}{-1}%
+ %%$$ BRACE MATCH HACK
+ \fi}
+% \end{macrocode}
+%
+% \begin{packeddescr}
+% \item[Lines \Coderef{st-b-displ}{2}--\Coderef{st-b-displ}{8},
+% \Coderef{st-b-displ}{16}, \Coderef{st-b-displ}{17}:]
+% the old definition.
+% \item[Lines \Coderef{st-b-displ}{9}--\Coderef{st-b-displ}{12}:]
+% The end position of a displaymath inside a theorem-environment
+% corresponds to |end\InTheoType ctr|+1.
+% An endmark has to be set there, if \\
+% \hspace*{0.5cm} |\mark|$<$|\thm@romannum{curr#1ctr}|$>$|#1|%
+% $<$|\thm@romannum{end#1ctr}|$+1>$
+% is defined and not the empty symbol.
+% \item[Lines \Coderef{st-b-displ}{13}--\Coderef{st-b-displ}{14}:]
+% If so, the whole displayed stuff is put in an array with
+% maximal depth 0.5|ex| and vertically adjusted with its bottom line
+% (then, the endmarks will appear adjusted to its bottom line).
+% \item[Line \Coderef{st-b-displ}{15}:]The counter has to be re-decremented.
+% \end{packeddescr}\end{macro}
+%
+% \begin{macro}{\]}
+% \changes{v1.28}{2009/07/02}{replaced roman by thm@romannum (WM)}
+% At the end of a displaymath, the end marks is set at its bottom level:
+% \Codelabel{st-e-displ}
+% \begin{macrocode}
+\gdef\]{%
+ \stepcounter{end\InTheoType ctr}%
+ \@ifundefined{mark\thm@romannum{curr\InTheoType ctr}%
+ \InTheoType\thm@romannum{end\InTheoType ctr}}{\relax}%
+ {\ifx\csname\InTheoType Symbol\endcsname\@empty\else
+ \end{array}\fi}%
+ \addtocounter{end\InTheoType ctr}{-1}%
+ \relax\ifmmode
+ \ifinner
+ \@badmath
+ \else
+ \PotEndMark{\eqno}\global\@ignoretrue$$%%$$ BRACE MATCH HACK
+ \fi
+ \else
+ \@badmath
+ \fi
+ \ignorespaces}
+% \end{macrocode}
+%
+% \begin{packeddescr}
+% \item[Lines \Coderef{st-e-displ}{2}--\Coderef{st-e-displ}{7}:]
+% Look, if an endmark has to be set in this displaymath
+% (analogous to lines
+% \Coderef{st-b-displ}{9}--\Coderef{st-b-displ}{15} of |\def\[|)
+% If so, there is an inner array which has to be closed
+% (line \Coderef{st-e-displ}{6}).
+% \item[Lines \Coderef{st-e-displ}{8}--\Coderef{st-e-displ}{17}:]
+% the old definition.
+% \item[Line \Coderef{st-e-displ}{12}:] changed to set an endmark at
+% the right of the line if necessary (this is done by |\eqno|).
+% \end{packeddescr}\end{macro}
+%
+% \begin{macro}{\endeqnarray}
+% For |\eqnarray|s, the end marks is set below the number
+% of the last equation:
+% \changes{v0.90}{1997/02/19}{fixed endmark for `eqnarrays' (WM)}
+% \changes{v0.91}{1997/02/22}{fixed `endeqnarray' (WM)}
+% \Codelabel{st-endeqnarray}
+% \begin{macrocode}
+\gdef\SetMark@endeqnarray#1{\llap{\raisebox{-1.3em}{#1}}}
+\gdef\endeqnarray{%
+ \global\let\Oldeqnnum=\@eqnnum
+ \gdef\@eqnnum{\Oldeqnnum\PotEndMark{\SetMark@endeqnarray}}%
+ \@@eqncr
+ \egroup
+ \global\advance\c@equation\m@ne
+ $$\global\@ignoretrue
+ \global\let\@eqnnum\Oldeqnnum}
+% \end{macrocode}
+%
+% \begin{packeddescr}
+% \item[Line \Coderef{st-endeqnarray}{1}:]
+% As default work for equation numbers at the right:
+% Then, the endmark is placed below the last equation number at the
+% right margin.
+% \item[New: Lines \Coderef{st-endeqnarray}{3},%
+% \Coderef{st-endeqnarray}{4}, \Coderef{st-endeqnarray}{9}:]\
+% \item[Line \Coderef{st-endeqnarray}{3}:] save |\@eqnnum|.
+% \item[Line \Coderef{st-endeqnarray}{4}:]
+% define |\@eqnnum| to carry out |\Oldeqnnum|, then a potential endmark
+% position is handled:
+% if an endmark is set, between the equation number and the endmark,
+% the command sequence |\SetMark@endeqnarray| is carried out --
+% there, since |\SetMark@endeqnarray| is a function of one
+% argument, the endmark will be this argument.
+% \item[Lines \Coderef{st-endeqnarray}{5}--\Coderef{st-endeqnarray}{8}:]
+% from |latex.ltx|.
+% Line \Coderef{st-endeqnarray}{5} sets the equation number.
+% \item[Line \Coderef{st-endeqnarray}{9}:] restore |\@eqnnum|.
+% \end{packeddescr}\end{macro}
+%
+% \begin{macro}{\endeqnarray*}
+% In an |\eqnarray*|, the end mark is set at the right of the
+% last equation:
+% \Codelabel{st-endeqnarray-star}
+% \begin{macrocode}
+\@namedef{endeqnarray*}{%
+ % from \@@eqncr:
+ \let\reserved@a\relax
+ \ifcase\@eqcnt \def\reserved@a{& & &}\or \def\reserved@a{& &}%
+ \or \def\reserved@a{&}\else
+ \let\reserved@a\@empty
+ \@latex@error{Too many columns in eqnarray environment}\@ehc\fi
+ \reserved@a {\normalfont \normalcolor \PotEndMark{}}%
+ \global\@eqnswtrue\global\@eqcnt\z@\cr
+ %
+ \egroup
+ \global\advance\c@equation\m@ne
+ $$\global\@ignoretrue}
+% \end{macrocode}
+%
+% This is just \LaTeX's |\endeqnarray| where lines
+% \Coderef{st-endeqnarray-star}{3}--\Coderef{st-endeqnarray-star}{9}
+% are inserted from |\@@eqncr| and augmented (line
+% \Coderef{st-endeqnarray-star}{8}) to set a potential endmark
+% (with no additional commands) at the end of the current line.
+% \end{macro}
+%
+% \paragraph{Changes to Tabbing Environment}\ \\
+% Original: lttab.dtx
+%
+%\begin{macro}{\endtabbing}%
+% \changes{v1.04}{1998/05/26}{added 'endtabbing' (WM)}
+% Here, the |\endtrivlist| modification is not sufficient: \LaTeX\ is
+% not in hmode when it calls |\endtrivlist| from |\endtabbing|;
+% additionally, |\@stopline| already outputs a linebreak.
+% Thus, the end mark is inserted \emph{before} |\@stopline| at
+% the right margin (using |\`|).
+% \begin{macrocode}
+\gdef\endtabbing{%
+ \PotEndMark{\`}\@stopline\ifnum\@tabpush >\z@ \@badpoptabs
+ \fi\endtrivlist}
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{Changes to Center Environment}\ \\
+% Original: ltmiscen.dtx
+%
+%\begin{macro}{\endcenter}%
+% \changes{v1.28}{2009/07/02}{replaced roman by thm@romannum (WM)}
+% In \LaTeX, |\endcenter| just calls |\endtrivlist|.
+% Here, the situation is more complex since the the endmark has
+% to be put in the last line without affecting its centering:
+% if in a text line (only then, here is a potential endmark
+% position):
+% \begin{macrocode}
+\gdef\endcenter{%
+ \@endtrivlist
+ {\PotEndMark{\rightskip0pt%
+ \settowidth{\leftskip}%
+ { \csname mark\thm@romannum{curr\InTheoType ctr}\InTheoType
+ \thm@romannum{end\InTheoType ctr}\endcsname}%
+ \advance\leftskip\@flushglue\hskip\@flushglue}}}
+% \end{macrocode}
+%
+% The |\rightskip| of the line is set to 0, |\leftskip|
+% is set to the width of one space (since on the right, one space is
+% added after the text) plus the endmark and infinitely stretchable glue
+% (|\@flushglue|), and also the line is continued with
+% |\@flushglue| (the actual position is one space after the text),
+% and then the endmark is placed (by |\PotEndMark|).
+% \end{macro}
+%
+% \paragraph{Handling of Endmarks}
+%
+% \begin{macro}{\@endtheorem-thmmarks}
+% |\@endtheorem| is called for every |\end{|\env|}|, where \env\ is a
+% theorem-like environment. |\@endtheorem| is extended to organize
+% the placement of the corresponding end mark
+% (|\InTheoType| gives the innermost theorem-like environment,
+% i.e.\ the one to be ended):
+%
+% \Codelabel{atendtheorem}
+% \begin{macrocode}
+\gdef\@empty{}
+\gdef\@endtheorem{%
+ \expandafter
+ \ifx\csname\InTheoType Symbol\endcsname\@empty\setendmarkfalse\fi
+ \@endtrivlist
+ {\ifsetendmark
+ \unskip\nobreak\hfill\nobreak\csname\InTheoType Symbol\endcsname
+ \setendmarkfalse \fi}%
+ \ifsetendmark\OrganizeTheoremSymbol\else\global\setendmarktrue\fi
+ \csname\InTheoType @postwork\endcsname
+ }
+% \end{macrocode}
+% \changes{v0.91}{1997/02/27}{'@empty' fixed (WM)}
+% \changes{v0.94}{1997/03/19}{'setendmarktrue' globalized (WM)}
+% \changes{v1.19}{2001/01/13}{changed hbox into unskip (OK/WM)}
+% \changes{v1.21}{2002/12/30}{added handling of 'theorempostwork' (WM)}
+%
+% \begin{packeddescr}
+% \item[Lines \Coderef{atendtheorem}{3}, \Coderef{atendtheorem}{4}:]
+% if the end symbol of the environment $\env$ to be closed is
+% empty, simply no end symbol has to be set (it makes a difference, if no
+% end symbol is set, or if an empty end symbol is set).
+% \item[Lines \Coderef{atendtheorem}{5}, \Coderef{atendtheorem}{9}:]
+% (originally, it calls |\endtrivlist|):
+% \item[Lines \Coderef{atendtheorem}{5}, \Coderef{atendtheorem}{7},
+% \Coderef{atendtheorem}{8}:]
+% |\@endtrivlist| is called to put $\env$|Symbol|
+% at the end of the line and set |setendmark| to false
+% if \TeX\ is in a text line and |setendmark| is true. \\
+% At this point, |setendmark| is false iff the user has disabled
+% it locally or the end symbol is empty.
+% \item[Line \Coderef{atendtheorem}{6}:] the endmark is not set,
+% if |setendmark| is false.
+% \item[Line \Coderef{atendtheorem}{9}:]
+% if |setendmark| is true, the correct placement of the end
+% symbol is organized, else (ie either |setendmarkfalse| is set
+% by the user, or the endmark is already set by |\@endtrivlist|)
+% reset |setendmark| to true.\\
+% For further comments see |\@endtrivlist| and
+% |\OrganizeTheoremSymbol|.
+% \end{packeddescr}
+% The construction in line \Coderef{atendtheorem}{7} guarantees that
+% the endmark is put at the end of the line, even if it is the only
+% letter in this line.
+% \end{macro}
+%
+% \begin{macro}{\NoEndMark}
+% By |\NoEndMark|, the automatical setting of an end mark is blocked
+% for the \emph{current} environment.
+% \begin{macrocode}
+\gdef\NoEndMark{\global\setendmarkfalse}
+% \end{macrocode}
+% \changes{v0.94}{1997/03/19}{'NoEndMark' introduced (WM)}
+% \end{macro}
+%
+% set |setendmark| to false. It is automatically reset to |true| after
+% the end of the current environment.
+%
+% \begin{macro}{\qed}
+% With |\qed|, the user can locally change the end symbol to appear:
+% \begin{macrocode}
+\gdef\qed{\expandafter\def\csname \InTheoType Symbol\endcsname
+ {\the\qedsymbol}}%
+% \end{macrocode}\end{macro}
+%
+% When calling |\qed|, the end symbol of the innermost theorem-like
+% environment at that time is set to the value stored in |\qedsymbol|
+% at that time.
+%
+% \begin{macro}{\PotEndMark}
+% Handling a potential endmark position:
+%
+% \changes{v1.32}{2011/24/02}{added optional argument (WM)}
+% \begin{macrocode}
+\gdef\PotEndMark#1{
+ \@ifnextchar[%]
+ {\PotEndMark@opt{#1}}{\SetEndMark{\InTheoType}{#1}{\relax}}}%
+\gdef\PotEndMark@opt#1[#2]{\SetEndMark{\InTheoType}{#1}{#2}}%
+% \end{macrocode}
+%
+% Arguments: \meta{cmd\_seq}:=|#1| is a command sequence to be
+% executed when setting the endmark. \\
+% \meta{else\_cmd\_seq}= |#2|: a command sequence that is executed
+% when no end mark is set (default is |\relax|; differs only in
+% amsmath equation*). \\
+% It adds the current theorem type \env\ to the parameters, and
+% calls \\
+% |\SetEndMark{|\env|}{|\meta{cmd\_seq}|}{|\meta{else\_cmd\_seq}|}|.
+% \end{macro}
+%
+% \begin{macro}{\SetEndMark}
+% |\SetEndMark| sets an endmark for an environment. It is
+% called by |\PotEndMark|.
+% \changes{v1.16}{1999/08/05}{extended for handling right indents (quote) (WM)}
+% \changes{v1.16}{2001/11/28}{removed tilde in hbox (WM)}
+% \changes{v1.28}{2009/07/02}{replaced roman by thm@romannum (WM)}
+% \changes{v1.32}{2011/24/02}{added third argument (WM)}
+% \Codelabel{SetEndMark}
+% \begin{macrocode}
+\gdef\SetEndMark#1#2#3{%
+ \stepcounter{end#1ctr}%
+ \@ifundefined{mark\thm@romannum{curr#1ctr}#1\thm@romannum{end#1ctr}}%
+ {#3}%
+ {#2{\csname mark\thm@romannum{curr#1ctr}#1\thm@romannum{end#1ctr}\endcsname
+ \ifdim\rightmargin>\z@\hskip-\rightmargin\fi
+ \hbox to 0cm{}}}}%
+% \end{macrocode}
+%
+% Arguments: \\
+% \env:=|#1|: current theorem-environment. \\
+% \meta{cmd\_seq}:= |#2|: is a command sequence to be executed when setting
+% the endmark. \\
+% \meta{else\_cmd\_seq}= |#3|: a command sequence that is executed
+% when no end mark is set (usually |\relax|; differs only in amsmath tags). \\
+% All three arguments are transmitted by |\PotEndMark|. \\
+% \begin{packeddescr}
+% \item[Line \Coderef{SetEndMark}{2}:]
+% increments |end|\env|ctr| for preparing the next situation
+% for setting a potential endmark.
+% \item[Line \Coderef{SetEndMark}{3}, \Coderef{SetEndMark}{4}:]
+% if
+% \begin{quote}
+% |\mark|$<$|\thm@romannum{curr|\env|ctr}|$>$\env%
+% $<$|\thm@romannum{end|\env|ctr}|$>$
+% \end{quote}
+% is undefined
+% -- which is the case iff at this position no endmark has to be set --,
+% \meta{else\_cmd\_seq} is executed,
+% \item[Line \Coderef{SetEndMark}{5}:]
+% otherwise, \meta{cmd\_seq} and then
+% \begin{quote}
+% |\mark|$<$|\thm@romannum{curr|\env|ctr}|$>$|\env|%
+% $<$|\thm@romannum{end|\env|ctr}|$>$,
+% \end{quote}
+% which is defined in the |.aux| file to be the end symbol are called. \\
+% The construction \meta{cmd\_seq}|{|\ldots|}| in line
+% \Coderef{SetEndMark}{5} allows the handling of the end symbol as an
+% argument of \meta{cmd\_seq} as needed for |\endeqnarray|.
+% \item[Line \Coderef{SetEndMark}{6}:]
+% By |\hskip-\rightmargin\hbox to 0cm{}|, a negative hspace of
+% amount |\rightmargin| is added \emph{after} the end symbol -- thus,
+% the symbol is set as there were no right margin (this concerns,
+% e.g., |\quote| environments). \\
+% (applied only if |\rightmargin| is more than 0 -- otherwise bug
+% if preceding line ends with hyphenation.)
+% \end{packeddescr}
+% \changes{v1.20}{2001/12/30}{apply negative hskip only if more than 0 (WM)}
+%\end{macro}
+%
+% \paragraph{Writing to .aux file.}
+% (copied from |\def\label| (ltxref.dtx))
+%
+% \changes{v0.91}{1997/02/20}{fixed `OrganizeTheoremSymbol' (WM)}
+% \changes{v1.20}{2001/10/09}{check that not in vmode in bbsphack (WM)}
+% \Codelabel{bbsphack}
+% \begin{macrocode}
+\newskip\mysavskip
+\gdef\@bbsphack{%
+ \ifvmode\else\mysavskip\lastskip
+ \unskip\fi}
+%
+\gdef\@eesphack{%
+ \ifdim\mysavskip>\z@
+ \vskip\mysavskip \else\fi}
+% \end{macrocode}
+% \begin{packeddescr}
+% \item[Lines \Coderef{bbsphack}{2}--\Coderef{bbsphack}{4} and
+% \Coderef{bbsphack}{5}--\Coderef{bbsphack}{7}]
+% are similar to |\@bsphack| and |\@bsphack|
+% of latex.ltx. They undo resp.\ redo the last |skip|.
+% \end{packeddescr}
+% Note that |@bbsphack| and |@eesphack| are also part of the
+% thref option. Change both if you change them.
+%
+% \begin{macro}{\OrganizeTheoremSymbol}
+% \changes{v1.28}{2009/07/02}{replaced roman by thm@romannum (WM)}
+% The information for setting the end marks is written to the .aux file:
+%
+% \Codelabel{OrgThSymb}
+% \begin{macrocode}
+\gdef\OrganizeTheoremSymbol{%
+ \@bbsphack
+ \edef\thm@tmp{\expandafter\expandafter\expandafter\thm@meaning
+ \expandafter\meaning\csname\InTheoType Symbol\endcsname\relax}%
+ \protected@write\@auxout{}%
+ {\string\global\string\def\string\mark%
+ \thm@romannum{curr\InTheoType ctr}\InTheoType \thm@romannum{end\InTheoType ctr}%
+ {\thm@tmp}}%
+ \@eesphack}
+% \end{macrocode}
+%
+% \begin{packeddescr}
+% \item[Lines \Coderef{OrgThSymb}{5}--\Coderef{OrgThSymb}{7}:]
+% Write \\
+% |\global\def\mark|$<$|\thm@romannum{curr|\env|ctr}|$>\env
+% <$|\thm@romannum{end|\env|ctr}|$>$%
+% |{<|\env|Symbol>}|
+% to the |.aux| file. \\
+% \env :=|\InTheoType| gives the innermost theorem-like environment,
+% i.e. the one the end symbol has to be set for.
+% \end{packeddescr}\end{macro}
+%
+% \begin{macrocode}
+} % end of option [thmmarks]
+% \end{macrocode}
+%
+% \subsubsection{Option leqno to Thmmarks}
+%
+% \Codelabel{Optleqno}
+% \begin{macrocode}
+\DeclareOption{leqno}{% *********************************************
+ \if@thmmarks
+ \PackageInfo{\basename}{Option `leqno' loaded}%
+ \gdef\SetMark@endeqn#1{\hss\llap{#1}}
+ \gdef\SetMark@endeqnarray#1{\hss\llap{#1}}
+ \fi}%
+% \end{macrocode}
+% |leqno| is only active it |thmmarks| is also active. \\
+% \begin{packeddescr}
+% \item[Line \Coderef{Optleqno}{4}, \Coderef{Optleqno}{5}:]
+% Since with |leqno|, the equation number is placed on
+% the left, after infinitely stretchable glue, the endmark can be
+% set straight at the right margin.
+% \end{packeddescr}
+%
+% \subsubsection{Option fleqn to Thmmarks}
+%
+% \begin{macrocode}
+\DeclareOption{fleqn}{% *********************************************
+\if@thmmarks
+ \PackageInfo{\basename}{Option `fleqn' loaded}%
+% \end{macrocode}
+%
+% |fleqn| is only active it |thmmarks| is also active.
+%
+% \begin{macro}{\[}
+% \changes{v1.27}{2008/06/18}{fixed: start array with no additional
+% space (WM, reported by Tillmann Berg)}
+% Since |fleqn| treats displayed math as trivlists, it's quite
+% another thing:
+%
+% \Codelabel{fleqn-b-displ}
+% \changes{v1.28}{2009/07/02}{replaced roman by thm@romannum (WM)}
+% \begin{macrocode}
+ \renewcommand\[{\relax
+ \ifmmode\@badmath
+ \else
+ \begin{trivlist}%
+ \@beginparpenalty\predisplaypenalty
+ \@endparpenalty\postdisplaypenalty
+ \item[]\leavevmode
+ \hb@xt@\linewidth\bgroup $\m@th\displaystyle %$
+ \hskip\mathindent\bgroup
+ \stepcounter{end\InTheoType ctr}%
+ \@ifundefined{mark\thm@romannum{curr\InTheoType ctr}%
+ \InTheoType\thm@romannum{end\InTheoType ctr}}{\relax}%
+ {\ifx\csname\InTheoType Symbol\endcsname\@empty\else
+ \boxmaxdepth=.5ex\begin{array}[b]{@{}l}%
+ \boxmaxdepth=\maxdimen\displaystyle\fi}%
+ \addtocounter{end\InTheoType ctr}{-1}%
+ \fi}
+% \end{macrocode}
+%
+% \begin{packeddescr}
+% \item[Lines \Coderef{fleqn-b-displ}{1}--\Coderef{fleqn-b-displ}{9},%
+% \Coderef{fleqn-b-displ}{17}:]
+% the old definition.
+% \item[Line \Coderef{fleqn-b-displ}{10}--\Coderef{fleqn-b-displ}{16}:]
+% if an endmark has to be set in this displaymath, it
+% is put into an array with depth $\le 0.5$|ex|, and vertically
+% adjusted to the bottom line.
+% \end{packeddescr}\end{macro}
+%
+% \begin{macro}{\]}
+% \changes{v1.28}{2009/07/02}{replaced roman by thm@romannum (WM)}
+% Here, the end mark is placed after a |\hfil| ate the end of the line
+% containing the displaymath:
+%
+% \Codelabel{fleqn-e-displ}
+% \begin{macrocode}
+ \renewcommand\]{%
+ \stepcounter{end\InTheoType ctr}%
+ \@ifundefined{mark\thm@romannum{curr\InTheoType ctr}%
+ \InTheoType\thm@romannum{end\InTheoType ctr}}{\relax}%
+ {\ifx\csname\InTheoType Symbol\endcsname\@empty\else
+ \end{array}\fi}%
+ \addtocounter{end\InTheoType ctr}{-1}%
+ \relax\ifmmode
+ \egroup $\hfil\PotEndMark{}% $
+ \egroup
+ \end{trivlist}%
+ \else \@badmath
+ \fi}
+% \end{macrocode}
+%
+% \begin{packeddescr}
+% \item[Lines \Coderef{fleqn-e-displ}{2}--\Coderef{fleqn-e-displ}{6}:]
+% Look, if an endmark has to be set in this displaymath.
+% If so, close the inner array.
+% \item[Lines \Coderef{fleqn-e-displ}{8}--\Coderef{fleqn-e-displ}{13}:]
+% the old definition.
+% \item[Line \Coderef{fleqn-e-displ}{9}:] Added |\PotEndMark|.
+% \end{packeddescr}\end{macro}
+%
+% \begin{macro}{\endequation}
+% for equations, the end mark is also set with the equation number:
+% \Codelabel{fleqn-endeqn}
+% \begin{macrocode}
+\gdef\endequation{%
+ $\hfil % $
+ \displaywidth\linewidth\hbox{\@eqnnum \PotEndMark{\SetMark@endeqn}}%
+ \egroup
+ \endtrivlist}
+% \end{macrocode}
+%
+% \begin{packeddescr}
+% \item[Line \Coderef{fleqn-endeqn}{3}:]
+% When the equation number is set, also the endmark is set with
+% the same trick as for |\endequation| without |fleqn|.
+% \end{packeddescr}\end{macro}
+%
+% \begin{macro}{\endeqnarray}
+% When the equation number is set, also the endmark is set with
+% the same trick as for |\endeqnarray| without |fleqn| (see
+% Lines \Coderef{fleqn-endeqnarray}{2}, \Coderef{fleqn-endeqnarray}{3},%
+% \Coderef{fleqn-endeqnarray}{8}):
+%
+% \Codelabel{fleqn-endeqnarray}
+% \begin{macrocode}
+\gdef\endeqnarray{%
+ \global\let\Oldeqnnum=\@eqnnum
+ \gdef\@eqnnum{\Oldeqnnum\PotEndMark{\SetMark@endeqnarray}}%
+ \@@eqncr
+ \egroup
+ \global\advance\c@equation\m@ne$$% $$
+ \global\@ignoretrue
+ \global\let\@eqnnum\Oldeqnnum}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\fi}% end of option fleqn
+% \end{macrocode}
+%
+% \subsubsection{Extended Referencing Facilities}\label{sec:Referencing}
+%
+% \begin{macrocode}
+\DeclareOption{thref}{%**********************************************
+ \PackageInfo{\basename}{Option `thref' loaded}%
+\@threftrue
+% \end{macrocode}
+%
+% Option |thref| needs a special handling when combined with amsmath.
+% This is also a reason why it is handled first.
+%
+% \begin{macro}{\bbsphack(2)}
+% \changes{v1.19}{2001/01/12}{added to thref option (error if thref
+% was used without thmmarks; OK/WM)}
+% \changes{v1.20}{2001/10/09}{check that not in vmode in bbsphack; (WM)}
+% \begin{macrocode}
+\newskip\mysavskip
+\gdef\@bbsphack{%
+ \ifvmode\else\mysavskip\lastskip
+ \unskip\fi}
+%
+\gdef\@eesphack{%
+ \ifdim\mysavskip>\z@
+ \vskip\mysavskip \else\fi}
+% \end{macrocode}
+% Note that |@bbsphack| and |@eesphack| are also part of the
+% thmmarks option. Change both if you change them.
+% \end{macro}
+%
+% \paragraph{Communication of theorem types for references.}
+%
+% The |thref| functionality needs to know the respective theorem type
+% of the referenced
+% labels. This is incorporated as additional arguments in |label| and
+% |newlabel/@newl@abel|. Note that if the |hyperref| package is used,
+% the handling is different (see Option |hyperref|).
+%
+% \begin{macro}{\label}
+% \changes{v1.1}{1998/08/30}{added optional argument to 'label'. (WM)}
+% \changes{v1.18}{1999/12/25}{Adapted for complex keywords (WM)}
+% The original |\label| macro is extended (cf.\ ltxref.dtx) with an
+% optional argument, containing the type of the labeled construct.
+% (when option |hyperref| is used, )
+% \Codelabel{label}
+% \begin{macrocode}
+\def\label#1{%
+ \@ifnextchar[%]
+ {\label@optarg{#1}}%
+ {\thm@makelabel{#1}}}
+%
+\def\thm@makelabel#1{%
+ \@bbsphack
+ \edef\thm@tmp{\expandafter\expandafter\expandafter\thm@meaning
+ \expandafter\meaning\csname\InTheoType Keyword\endcsname\relax}%
+ \protected@write\@auxout{}%
+ {\string\newlabel{#1}{{\@currentlabel}{\thepage}}[\thm@tmp]}%
+ \@eesphack}
+%
+\def\label@optarg#1[#2]{%
+ \@bsphack
+ \protected@write\@auxout{}%
+ {\string\newlabel{#1}{{\@currentlabel}{\thepage}}[#2]}%
+ \@esphack}
+% \end{macrocode}
+%
+% \begin{packeddescr}
+% \item[|thm@makelabel|:]
+% If no optional argument is given, the keyword of the current
+% environment type is used instead.
+% \item[|label@optarg|:]
+% The original definition, extended with the optional argument
+% which is appended to the |\newlabel|-command to be written
+% to the .aux-file.
+% \end{packeddescr}
+% \end{macro}
+%
+% \begin{macro}{\newlabel}
+% \changes{v1.1}{1998/08/30}{added modified macro '@newl@bel'. (WM)}
+% The original behavior of |\newlabel| (called when evaluating
+% the .aux-file) is also adapted. \\
+% Original syntax:
+% |\newlabel{|\meta{label}|}{{|\meta{section}|}{|\meta{page}|}}|\\
+% Modified syntax:
+% |\newlabel{|\meta{label}|}|%
+% |{{|\meta{section}|}{|\meta{page}|}}[|\meta{type}|]|\\
+% Definition of |\newlabel|: |\def\newlabel{\@newl@bel r}|. \\
+% Therefore, the modification is encoded into the |\@newl@bel| macro:
+%
+% \Codelabel{newlabel}
+% \changes{v1.18}{1999/12/26}{adapted to babel-3.6 (WM)}
+% \begin{macrocode}
+\def\@newl@bel#1#2#3{%
+ \@ifpackageloaded{babel}{\@safe@activestrue}\relax%
+ \@ifundefined{#1@#2}%
+ \relax
+ {\gdef \@multiplelabels {%
+ \@latex@warning@no@line{There were multiply-defined labels}}%
+ \@latex@warning@no@line{Label `#2' multiply defined}}%
+ \global\@namedef{#1@#2}{#3}%
+ \@ifnextchar[{\set@label@type{#1}{#2}}%]
+ \relax}%
+\def\set@label@type#1#2[#3]{%
+ \global\@namedef{#1@#2@type}{#3}}
+% \end{macrocode}
+%
+% the macro is called with three arguments (same as originally):\\
+% |#1|=|r|, \\
+% \meta{labelname} := |#2| is the label name,\\
+% |#3| is a pair (section, page-number) consisting of the values
+% needed for |\ref| and |\pageref|, respectively.
+%
+% \begin{packeddescr}
+% \item[Line \Coderef{newlabel}{2}:] adaptation to babel
+% \item[Lines \Coderef{newlabel}{3}--\Coderef{newlabel}{8}:]
+% The original definition (both standard \LaTeX\ and babel).
+% \item[Line \Coderef{newlabel}{9}:] if an optional argument
+% follows (containing the environment-type), continue with
+% |\set@label@type|, otherwise return (the original behavior).
+% \item[Lines \Coderef{newlabel}{11}, \Coderef{newlabel}{12}:]
+% set |\r@|\meta{labelname}|@type| to the type of the
+% respective environment.
+% \end{packeddescr}
+% \end{macro}
+
+
+% \begin{macro}{\thref}
+% \changes{v1.1}{1998/08/30}{added macro 'thref'. (WM)}
+% \changes{v1.13}{1998/12/01}{made 'thref' an option. (WM)}
+%
+% |\thref| is an adaptation of |\ref|:
+% \Codelabel{thref}
+% \begin{macrocode}
+\def\thref#1{%
+ \expandafter\ifx\csname r@#1@type\endcsname\None
+ \PackageWarning{\basename}{thref: Reference Type of `#1' on page
+ \thepage \space undefined}\G@refundefinedtrue
+ \else\csname r@#1@type\endcsname~\fi
+ \expandafter\@setref\csname r@#1\endcsname\@firstoftwo{#1}}
+% \end{macrocode}
+%
+% \begin{packeddescr}
+% \item[Lines \Coderef{thref}{1}, \Coderef{thref}{6}:]
+% similar to |\ref|.
+% \item[Line \Coderef{newlabel}{2}:] if a legal theorem type
+% is given, then output
+% |\r@|\meta{labelname}|@type| and avoid linebreaking
+% between the type and the number.
+% \end{packeddescr}
+% \end{macro}
+
+% \begin{macro}{\testdef}
+% \changes{v1.19}{2001/01/12}{added (HO/WM, reported by Hans-Christoph Wirth)}
+% \changes{v1.31}{2011/02/08}{changed '@gobbleopt' into 'thm@gobbleopt' after
+% nameclash with hyperref (AS/WM)}
+% A problem occurred, when about 250 labels to theorem-like
+% environments have been defined: after the end of a document,
+% the .aux file is read once more (to check if references changed).
+% Here, \LaTeX\ redefines |\@newl@bel| into |\@testdef| -- and
+% \LaTeX\ does not know that ntheorem's |\label| has an additional
+% optional argument. Thus, the argument values are not processed,
+% but are output as normal text. Normally, this did not matter
+% since output has already been finished by a |\clearpage| in
+% |\end{document}|. For so many labels, a page gets filled
+% and the output routine is called.
+%
+% \Codelabel{testdef}
+% \begin{macrocode}
+\newcommand\org@testdef{}
+\let\org@testdef\@testdef
+\def\@testdef#1#2#3{%
+ \org@testdef{#1}{#2}{#3}%
+ \@ifnextchar[{\thm@gobbleopt}{}%
+}
+\newcommand\thm@gobbleopt{}
+\long\def\thm@gobbleopt[#1]{}
+% \end{macrocode}
+% \begin{packeddescr}
+% \item[Line \Coderef{testdef}{4}:]
+% process the optional argument.
+% \end{packeddescr}
+% \end{macro}
+%
+% \begin{macrocode}
+}% end of option thref ************************************************
+% \end{macrocode}
+%
+% \subsubsection{Option amsmath to Thmmarks}
+% Most of the commands are extensions of commands in |amsmath.sty|.
+%
+% \begin{macrocode}
+\DeclareOption{amsmath}{% ***************************************************
+\if@thref
+ \PackageInfo{\basename}{option `amsmath' handling for `thref' loaded}%
+% \end{macrocode}
+%
+% if |thref| is active, the handling of labels in amsmath equations has also
+% to be adapted.
+%
+% \begin{macro}{ams-thref}
+% \changes{v1.19}{2001/01/12}{added handling of thref in ams-equations
+% (reported by Lars Relund).}
+% \begin{macrocode}
+\let\ltx@label\label
+% \end{macrocode}
+% keep the handling of |\label| ... (the one defined above in the thref option).
+%
+% amsmath implements a special handling of |\label| inside of displaymath
+% environments. It is extended to process the optional argument provided
+% be the thref option:
+%
+% \begin{macrocode}
+\global\let\thm@df@label@optarg\@empty
+\def\label@in@display#1{%
+ \ifx\df@label\@empty\else
+ \@amsmath@err{Multiple \string\label's:
+ label '\df@label' will be lost}\@eha
+ \fi
+ \gdef\df@label{#1}%
+ \@ifnextchar[{\thm@label@in@display@optarg}{\thm@label@in@display@noarg}%]
+}
+\def\thm@label@in@display@noarg{%
+ \global\let\thm@df@label@optarg\@empty
+}
+\def\thm@label@in@display@optarg[#1]{%
+ \gdef\thm@df@label@optarg{#1}%
+}
+% \end{macrocode}
+% \changes{v1.22}{2003/06/25}{fixed thm@df@label@optarg (WM, reported by
+% Marija Kulas)}
+%
+% The contents of |\df@label| is handled when the equation is finished.
+% (Currently) this happens in three macros. The modification consists
+% of the check if |\thm@df@label@optarg| is non-empty (i.e., holds the
+% optional argument), and to handle it.
+%
+% \begin{macrocode}
+\def\endmathdisplay@a{%
+ \if@eqnsw \gdef\df@tag{\tagform@\theequation}\fi
+ \if@fleqn \@xp\endmathdisplay@fleqn
+ \else \ifx\df@tag\@empty \else \veqno \alt@tag \df@tag \fi
+ \ifx\df@label\@empty \else
+ \ifx\thm@df@label@optarg\@empty \@xp\ltx@label\@xp{\df@label}%
+ \else \@xp\ltx@label\@xp{\df@label}[\thm@df@label@optarg]\fi
+ \fi
+ \fi
+ \ifnum\dspbrk@lvl>\m@ne
+ \postdisplaypenalty -\@getpen\dspbrk@lvl
+ \global\dspbrk@lvl\m@ne
+ \fi
+}
+\def\make@display@tag{%
+ \if@eqnsw
+ \refstepcounter{equation}%
+ \tagform@\theequation
+ \else
+ \iftag@
+ \df@tag
+ \global\let\df@tag\@empty
+ \fi
+ \fi
+ \ifmeasuring@
+ \else
+ \ifx\df@label\@empty\else
+ \ifx\thm@df@label@optarg\@empty \@xp\ltx@label\@xp{\df@label}%
+ \else \@xp\ltx@label\@xp{\df@label}[\thm@df@label@optarg]\fi
+ \global\let\df@label\@empty
+ \fi
+ \fi
+}
+\def\endmathdisplay@fleqn{%
+ $\hfil\hskip\@mathmargin\egroup
+ \ifnum\badness<\inf@bad \let\too@wide\@ne \else \let\too@wide\z@ \fi
+ \ifx\@empty\df@tag
+ \else
+ \setbox4\hbox{\df@tag
+ \ifx\thm@df@label@optarg\@empty \@xp\ltx@label\@xp{\df@label}%
+ \else \@xp\ltx@label\@xp{\df@label}[\thm@df@label@optarg]\fi
+ }%
+ \fi
+ \csname emdf@%
+ \ifx\df@tag\@empty U\else \iftagsleft@ L\else R\fi\fi
+ \endcsname
+}
+% \end{macrocode}
+% \changes{v1.29}{2010/06/24}{fixed endmathdisplay@fleqn, make@display@tag,
+% endmathdisplay@fleqn (WM, reported by Claas Hemig)}
+% \end{macro}
+% \begin{macrocode}
+\fi
+% end of if-thref in option amsmath ******************************************
+\if@thmmarks
+ \PackageInfo{\basename}{option `amsmath' handling for `thmmarks' loaded}%
+\newdimen\thm@amstmpdepth
+% \end{macrocode}
+% A temporarily used register.
+%
+% \begin{macro}{\TagsPlusEndmarks}
+% \changes{v1.03}{1997/07/15}{Fixed 'TagsPlusEndMarks', introduced
+% 'SetOnlyEndMark' and 'SetTagPlusEndMark' (WM)}
+% Since |amsmath| uses ``tags'' for setting end marks,
+% some macros are defined which prepare tags which include endmarks:
+% \Codelabel{EndTags}
+% \begin{macrocode}
+\gdef\TagsPlusEndmarks{%
+ \global\let\Old@maketag@@@=\maketag@@@
+ \global\let\Old@df@tag=\df@tag
+ \if@eqnsw\SetTagPlusEndMark
+ \else
+ \iftag@\SetTagPlusEndMark
+ \else\SetOnlyEndMark
+ \fi
+ \fi}
+% \end{macrocode}
+% \begin{packeddescr}
+% \item[Lines \Coderef{EndTags}{2}, \Coderef{EndTags}{3}:]
+% store the original macros.
+% \item[Line \Coderef{EndTags}{4}:]
+% if equation numbers are set as default, call
+% |\SetTagPlusEndMark| to set tag and end mark.
+% \item[Lines \Coderef{EndTags}{5}, \Coderef{EndTags}{6}:]
+% if a tag is set manually, call
+% |\SetTagPlusEndMark| to set tag and end mark.
+% \item[Line \Coderef{EndTags}{7}:]
+% otherwise, call |\SetOnlyEndMark| to set only an end mark.
+% \end{packeddescr}
+% \end{macro}
+%
+% \begin{macro}{\SetOnlyEndMark}
+% \changes{v1.32}{2011/24/02}{added second argument to call of
+% PotEndMark in else case (WM, reported by Rolf Theunissen)}
+% \Codelabel{OnlyEnd}
+% \begin{macrocode}
+\gdef\SetOnlyEndMark{%
+ \global\tag@true
+ \iftagsleft@
+ \gdef\df@tag{\hbox
+ to \displaywidth{\hss\PotEndMark{\maketag@@@}}}%
+ \else
+ \gdef\df@tag{\PotEndMark{\maketag@@@}[\ifhmode\else\hbox to .1pt{}\fi]}%
+ \fi}
+% \end{macrocode}
+% Set only an end mark:
+%
+% \begin{packeddescr}
+% \item[Line \Coderef{OnlyEnd}{2}:]
+% force setting the end mark as a tag:
+% \item[Lines \Coderef{OnlyEnd}{4}, \Coderef{OnlyEnd}{5}:]
+% if tags are set to the left, the tag consists of a
+% |\hbox| over the whole displaywidth, with the (potential) endmark
+% at its right.
+% \item[Line \Coderef{OnlyEnd}{7}:]
+% if tags are set to the right, the tag consists only of the
+% (potential) endmark. If no endmark is set and \TeX\ is not in hmode,
+% an empty hbox is output (otherwise |\abovedisplayskip| will be
+% ignored in |equation*|; this is executed in |endmathdisplay@a| when
+% it comes to |\veqno\alt@tag\df@tag|).
+% \end{packeddescr}
+% \end{macro}
+%
+% \begin{macro}{\SetTagPlusEndMark}
+% \Codelabel{TagPlus}
+% \changes{v1.26}{2007/10/17}{fixed: box to tagwidth (problem with leqno; WM)}
+% \begin{macrocode}
+\newdimen{\tagwidth}
+\gdef\SetTagPlusEndMark{%
+ \iftagsleft@
+ \gdef\maketag@@@##1{%
+ \settowidth{\tagwidth}{$##1$}%% %% WM 17.10.2007
+ \hbox to \tagwidth{%
+ \hbox to \displaywidth{\m@th\normalfont##1%
+ \hss\PotEndMark{\hss}}\hss}}%
+ \else
+ \gdef\maketag@@@##1{\hbox{\m@th\normalfont##1%
+ \llap{\hss\PotEndMark{\raisebox{-1.3em}}}}}%
+ \fi}
+% \end{macrocode}
+%
+% Set a tag \emph{and} an end mark:
+% \begin{packeddescr}
+% \item[Lines \Coderef{TagPlus}{2}--\Coderef{TagPlus}{11}:]
+% redefine the |\maketag@@@| macro:
+% \item[Lines \Coderef{TagPlus}{3}--\Coderef{TagPlus}{7}:]
+% if tags are set to the left, build a box of the whole
+% displaywidth and put the original tag on the left, and the (potential)
+% endmark at the right. Put this box with width 0 and continue.
+% \item[Lines \Coderef{TagPlus}{8}, \Coderef{TagPlus}{9}:]
+% if the tags are set to the right, the (potential) end
+% mark is put below it.
+% \end{packeddescr}
+% \changes{v1.20}{2001/12/29}{added hss if tags left (GD/WM)}
+% \end{macro}
+%
+% \begin{macro}{\tagform@}
+% \begin{packeddescr}
+% \item |\maketag@@@| is also used via |\tagform@| in |\eqref| that may be
+% called inside an environment. There, the original functionality must
+% be used. The (small) commands |\th@ams@tagopen{(}| and
+% |\th@ams@tagopen{(}| are provided as a hook for the |empheq| package.
+% \end{packeddescr}
+% \changes{v1.30}{2010/08/16}{added (WM), bug reported by Martin Schulze}
+% \changes{v1.32}{2011/03/10}{revised (WM), bug reported by Lars Madsen}
+% \begin{macrocode}
+\let\th@ams@@maketag@@@\maketag@@@
+\gdef\th@ams@tagopen{(}
+\gdef\th@ams@tagclose{)}
+\gdef\th@ams@tagform@#1{%
+ \th@ams@@maketag@@@{\th@ams@tagopen\ignorespaces#1%
+ \unskip\@@italiccorr\th@ams@tagclose}}
+\gdef\eqref#1{\textup{\th@ams@tagform@{\ref{#1}}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\RestoreTags}
+% \Codelabel{RestoreTags}
+% \begin{macrocode}
+\gdef\RestoreTags{%
+ \global\let\maketag@@@=\Old@maketag@@@
+ \global\let\df@tag=\Old@df@tag}
+% \end{macrocode}
+%
+% \begin{packeddescr}
+% \item[Lines \Coderef{RestoreTags}{2}, \Coderef{RestoreTags}{3}:]
+% restore the original macros.
+% \end{packeddescr}\end{macro}
+%
+% \begin{macro}{\endgather}
+% \changes{v1.19}{2001/01/12}{adapted to amsmath-2.0 (GD/WM)}
+% In the |gather| environment, just the augmented tag is used:
+% \Codelabel{endgather}
+% \begin{macrocode}
+\gdef\endgather{%
+ \TagsPlusEndmarks % <<<<<<<<<
+ \math@cr
+ \black@\totwidth@
+ \egroup
+ $$%
+ \RestoreTags % <<<<<<<<<
+ \ignorespacesafterend}
+%
+\expandafter\let\csname endgather*\endcsname\endgather
+% \end{macrocode}
+%
+% New:
+% \begin{packeddescr}
+% \item[Line \Coderef{endgather}{2}:]
+% the last tag contains the potential endmark.
+% \item[Line \Coderef{endgather}{7}:]
+% restore the original macros.
+% \item[Line \Coderef{endgather}{10}:]
+% Since |let| always takes the expansion of a macro when the
+% let is executed, all let's have to be adjusted (this is the same
+% for all subsequent let-statements).
+% \end{packeddescr}\end{macro}
+%
+% \begin{macro}{\math@cr@@@align}
+% \changes{v1.12}{1998/11/15}{dropped redefinition of 'math@cr@@@align' (WM,
+% reported by Frank-Christian Otto)}
+% \end{macro}
+%
+% \begin{macro}{\endalign}
+% |\endalign| also uses the augmented tags:
+% \Codelabel{endalign}
+% \begin{macrocode}
+\def\endalign{%
+ \ifingather@\else % <<<<<<<<<
+ \TagsPlusEndmarks\fi % <<<<<<<<<
+ \math@cr
+ \black@\totwidth@
+ \egroup
+ \ifingather@
+ \restorealignstate@
+ \egroup
+ \nonumber
+ \ifnum0=`{\fi\iffalse}\fi
+ \else
+ $$%
+ \RestoreTags % <<<<<<<<<
+ \fi
+ \ignorespacesafterend}
+% \end{macrocode}
+%
+% \changes{v1.19}{2001/01/12}{adapted to amsmath-2.0 (GD/WM)}
+% New:
+% \begin{packeddescr}
+% \item[Lines \Coderef{endalign}{2}, \Coderef{endalign}{3}:]
+% if the |align| is not inside another environment,
+% its tags have to contain the endmarks.
+% \item[Line \Coderef{endalign}{14}:]
+% this case, the original macros have to be restored.
+% \end{packeddescr}\end{macro}
+%
+% \begin{macrocode}
+\expandafter\let\csname endalign*\endcsname\endalign
+\let\endxalignat\endalign
+\expandafter\let\csname endxalignat*\endcsname\endalign
+\let\endxxalignat\endalign
+\let\endalignat\endalign
+\expandafter\let\csname endalignat*\endcsname\endalign
+\let\endflalign\endalign
+\expandafter\let\csname endflalign*\endcsname\endalign
+% \end{macrocode}
+%
+% Adjust let-statements.
+%
+% \begin{macro}{\lendmultline}
+% The |multline| environment has two different |\end| commands,
+% depending if the equation numbers are set on the left or on the right:
+% \Codelabel{lendmultline}
+% \begin{macrocode}
+\def\lendmultline@{%
+ \global\@eqnswfalse\tag@false\tagsleft@false
+ \rendmultline@}
+% \end{macrocode}
+%
+% End of |multline| environment if tags are set to the left:
+% in this case, the last line of a |multline| does not contain a tag.
+% Thus the situation of setting an endmark tag at the right is faked:
+% \begin{packeddescr}
+% \item[Lines \Coderef{lendmultline}{2}, \Coderef{lendmultline}{3}:]
+% display no equation number, don't set an equation tag
+% (but use the tag mechanism for the end mark - see |\TagsPlusEndmarks|
+% and |\SetOnlyEndMark|), set it at the right,
+% and call |\rendmultline|.
+% \end{packeddescr}
+% \changes{v1.20}{2001/12/29}{debugged (GD/WM)}
+% \end{macro}
+%
+% \begin{macro}{\rendmultline}
+% |\rendmultline| also uses the augmented tags:
+% \Codelabel{rendmultline}
+% \begin{macrocode}
+\def\rendmultline@{%
+ \TagsPlusEndmarks % <<<<<<<<<
+ \iftag@
+ $\let\endmultline@math\relax
+ \ifshifttag@
+ \hskip\multlinegap
+ \llap{\vtop{%
+ \raise@tag
+ \normalbaselines
+ \setbox\@ne\null
+ \dp\@ne\lineht@
+ \box\@ne
+ \hbox{\strut@\make@display@tag}%
+ }}%
+ \else
+ \hskip\multlinetaggap
+ \make@display@tag
+ \fi
+ \else
+ \hskip\multlinegap
+ \fi
+ \hfilneg
+ \math@cr
+ \egroup$$%
+ \RestoreTags} % <<<<<<<<<
+% \end{macrocode}
+%
+% New: \\
+% Line \Coderef{rendmultline}{2}:
+% last tag contains the potential endmark. \\
+% Line \Coderef{rendmultline}{26}:
+% restore the original macros
+% \changes{v1.19}{2001/01/12}{adapted to amsmath-2.0 (GD/WM)}
+% \end{macro}
+%
+% \begin{macro}{\endmathdisplay}
+%
+% \Codelabel{ams-e-displ}
+% \begin{macrocode}
+\def\endmathdisplay#1{%
+ \ifmmode \else \@badmath \fi
+ \TagsPlusEndmarks % <<<<<<<<<
+ \endmathdisplay@a
+ $$%
+ \RestoreTags % <<<<<<<<<
+ \global\let\df@label\@empty \global\let\df@tag\@empty
+ \global\tag@false \global\let\alt@tag\@empty
+ \global\@eqnswfalse
+}
+% \end{macrocode}
+% \changes{v0.94}{1997/03/19}{end mark with raisebox (WM)}
+% \changes{v1.19}{2001/01/12}{completely new for amsmath-2.0, begin[ deleted (GD/WM)}
+% \end{macro}
+%
+% Added Line \Coderef{ams-e-displ}{4}: set potential end mark at
+% bottom niveau of displaymath.
+%
+% \begin{macro}{equation}
+% \changes{v1.19}{2001/01/12}{adapted to amsmath-2.0 (WM)}
+% \changes{v1.32}{2011/02/24}{adapted to amsmath-2.13 (WM)}
+% \begin{macrocode}
+\renewenvironment{equation}{%
+ \incr@eqnum
+ \mathdisplay@push
+ \st@rredfalse \global\@eqnswtrue
+ \mathdisplay{equation}%
+}{%
+ \endmathdisplay{equation}%
+ \mathdisplay@pop
+ \ignorespacesafterend
+}
+\renewenvironment{equation*}{%
+ \mathdisplay@push
+ \st@rredtrue \global\@eqnswfalse
+ \mathdisplay{equation*}%
+}{%
+ \endmathdisplay{equation*}%
+ \mathdisplay@pop
+ \ignorespacesafterend
+}
+% \end{macrocode}
+% unchanged from |amsmath.sty|.
+% \end{macro}
+%
+% \begin{macrocode}
+\fi
+}% end of option amsmath/thmmarks **************************************
+% \end{macrocode}
+%
+%
+% \subsubsection{Theorem-Layout Stuff}
+%
+% \changes{v1.11}{1998/10/26}{added 'noconfig' option (AS/WM)}
+% \begin{macrocode}
+\let\thm@usestd\@undefined
+\DeclareOption{standard}{\let\thm@usestd\relax}
+\let\thm@noconfig\@undefined
+\DeclareOption{noconfig}{\let\thm@noconfig\relax}
+% \end{macrocode}
+%
+% Options for selection of a configuration: if no such option is given
+% |ntheorem.cfg| will be loaded (which has to be provided by the
+% user), |[standard]| will load |ntheorem.std|, a predefined setting,
+% and |[noconfig]| does not preload any configuration.
+%
+% \begin{macrocode}
+\gdef\InTheoType{None}
+\gdef\NoneKeyword{None}
+\gdef\NoneSymbol{None}
+\gdef\None{None}
+% \end{macrocode}
+%
+% Set |\InTheoType| to |none| on the upper document level.
+%
+% \begin{macro}{\newtheoremstyle}
+% \changes{v0.93}{1997/03/12}{'newtheoremstyle' only if not yet defined (WM)}
+% With |\newtheoremstyle|, new theorem-layout styles are defined.
+% \Codelabel{newthmstyle}
+% \begin{macrocode}
+\gdef\newtheoremstyle#1#2#3{%
+ \expandafter\@ifundefined{th@#1}%
+ {\expandafter\gdef\csname th@#1\endcsname{%
+ \def\@begintheorem####1####2{#2}%
+ \def\@opargbegintheorem####1####2####3{#3}}}%
+ {\PackageError{\basename}{Theorem style #1 already defined}\@eha}}
+% \end{macrocode}
+%
+% Arguments: \\
+% \meta{style}:=|#1|: the name of the theoremstyle to be defined, \\
+% \meta{cmd\_seq1}:=|#2|: command sequence for setting the header
+% for environment instances with no optional text, \\
+% \meta{cmd\_seq2}:=|#3|: command sequence for setting the header
+% for environment instances with optional text. \\
+% Line \Coderef{newthmstyle}{2}: if this style is not yet defined, define
+% it. \\
+% Line \Coderef{newthmstyle}{3}:
+% define |\th@|\meta{style} to be a macro which defines \\
+% Line \Coderef{newthmstyle}{4}:
+% a) the two-argument macro |\@begintheorem#1#2| to be \meta{cmd\_seq1}, \\
+% Line \Coderef{newthmstyle}{5}:
+% b) |\@opargbegintheorem#1#2#3| to be \meta{cmd\_seq2}.
+% \end{macro}
+%
+% The predefined theorem styles use this command.%
+%
+% \begin{macro}{\renewtheoremstyle}
+% \changes{v0.93}{1997/03/12}{introduced 'renewtheoremstyle' (WM)}
+% \Codelabel{renewthmstyle}
+% \begin{macrocode}
+\gdef\renewtheoremstyle#1#2#3{%
+ \expandafter\@ifundefined{th@#1}%
+ {\PackageError{\basename}{Theorem style #1 undefined}\@ehc}%
+ {}%
+ \expandafter\let\csname th@#1\endcsname\relax
+ \newtheoremstyle{#1}{#2}{#3}}
+% \end{macrocode}
+% \end{macro}
+% Arguments: \\
+% \meta{style}:=|#1|: the name of the theoremstyle to be defined, \\
+% |#2|, |#3| as for |\newtheoremstyle|. \\
+% Checks, if theoremstyle \meta{style} is already defined. If so,
+% |\th@|\meta{style} is made undefined and |\newtheoremstyle| is called
+% with the same arguments.
+%
+% \paragraph{Predefined Theorem Styles}
+% \begin{macro}{theoremstyles}
+% |th@plain|, |th@change|, and |th@margin| taken from theorem.sty by
+% Frank Mittelbach; the break-styles have been changed.
+%
+% \changes{v1.03}{1997/07/15}{break styles changed (WM)}
+% \changes{v1.15}{1999/02/01}{fixed nonumberbreak (WM)}
+% \changes{v1.19}{2001/01/13}{break styles and empty style changed,
+% now it is analogous to theorem.sty (OK/WM)}
+% \begin{macrocode}
+\newtheoremstyle{plain}%
+ {\item[\hskip\labelsep \theorem@headerfont ##1\ ##2\theorem@separator]}%
+ {\item[\hskip\labelsep \theorem@headerfont ##1\ ##2\ (##3)\theorem@separator]}
+%
+\newtheoremstyle{break}%
+ {\item[\rlap{\vbox{\hbox{\hskip\labelsep \theorem@headerfont
+ ##1\ ##2\theorem@separator}\hbox{\strut}}}]}%
+ {\item[\rlap{\vbox{\hbox{\hskip\labelsep \theorem@headerfont
+ ##1\ ##2\ (##3)\theorem@separator}\hbox{\strut}}}]}
+%
+\newtheoremstyle{change}%
+ {\item[\hskip\labelsep \theorem@headerfont ##2\ ##1\theorem@separator]}%
+ {\item[\hskip\labelsep \theorem@headerfont ##2\ ##1\ (##3)\theorem@separator]}
+%
+\newtheoremstyle{changebreak}%
+ {\item[\rlap{\vbox{\hbox{\hskip\labelsep \theorem@headerfont
+ ##2\ ##1\theorem@separator}\hbox{\strut}}}]}%
+ {\item[\rlap{\vbox{\hbox{\hskip\labelsep \theorem@headerfont
+ ##2\ ##1\ (##3)\theorem@separator}\hbox{\strut}}}]}
+%
+\newtheoremstyle{margin}%
+ {\item[\theorem@headerfont \llap{##2}\hskip\labelsep ##1\theorem@separator]}%
+ {\item[\theorem@headerfont \llap{##2}\hskip\labelsep ##1\ (##3)\theorem@separator]}
+%
+\newtheoremstyle{marginbreak}%
+ {\item[\rlap{\vbox{\hbox{\theorem@headerfont
+ \llap{##2}\hskip\labelsep\relax ##1\theorem@separator}\hbox{\strut}}}]}
+ {\item[\rlap{\vbox{\hbox{\theorem@headerfont
+ \llap{##2}\hskip\labelsep\relax ##1\
+ (##3)\theorem@separator}\hbox{\strut}}}]}
+%
+\newtheoremstyle{nonumberplain}%
+ {\item[\theorem@headerfont\hskip\labelsep ##1\theorem@separator]}%
+ {\item[\theorem@headerfont\hskip \labelsep ##1\ (##3)\theorem@separator]}
+%
+\newtheoremstyle{nonumberbreak}%
+ {\item[\rlap{\vbox{\hbox{\hskip\labelsep \theorem@headerfont
+ ##1\theorem@separator}\hbox{\strut}}}]}%
+ {\item[\rlap{\vbox{\hbox{\hskip\labelsep \theorem@headerfont
+ ##1\ (##3)\theorem@separator}\hbox{\strut}}}]}
+%
+\newtheoremstyle{empty}%
+ {\item[]}%
+ {\item[\theorem@headerfont \hskip\labelsep\relax ##3]}
+\newtheoremstyle{emptybreak}%
+ {\item[]}%
+ {\item[\rlap{\vbox{\hbox{\hskip\labelsep\relax \theorem@headerfont
+ ##3\theorem@separator}\hbox{\strut}}}]}
+%
+\@namedef{th@nonumbermargin}{\th@nonumberplain}
+\@namedef{th@nonumberchange}{\th@nonumberplain}
+\@namedef{th@nonumbermarginbreak}{\th@nonumberbreak}
+\@namedef{th@nonumberchangebreak}{\th@nonumberbreak}
+\@namedef{th@plainNo}{\th@nonumberplain}
+\@namedef{th@breakNo}{\th@nonumberplain}
+\@namedef{th@marginNo}{\th@nonumberplain}
+\@namedef{th@changeNo}{\th@nonumberplain}
+\@namedef{th@marginbreakNo}{\th@nonumberbreak}
+\@namedef{th@changebreakNo}{\th@nonumberbreak}
+% \end{macrocode}
+% \changes{v0.81}{1997/02/12}{`theoremnumbering' and styles ...No added
+% (WM)}
+% \changes{v1.04}{1998/05/26}{theoremstyle empty added (WM)}
+%\end{macro}
+%
+% For instance, |break| is commented:
+%
+% |\newtheoremstyle{break}| results in
+% \begin{quote}
+% |\gdef\th@break{%| \\
+% | \def\@begintheorem##1##2{%| \\
+% | \item[\hskip\labelsep \theorem@headerfont| \\
+% | ##1\ ##2\theorem@separator]%| \\
+% | \hfill\penalty-8000}%| \\
+% | \def\@opargbegintheorem##1##2##3{%| \\
+% | \item[\hskip\labelsep \theorem@headerfont| \\
+% | ##1\ ##2\ (##3)\theorem@separator]%| \\
+% | \hfill\penalty-8000}}|
+% \end{quote}
+%
+% Then, calling |\th@break| sets |\@begintheorem| as follows: \\
+% Since each theorem environment is basically a trivlist,
+% the header is set as the item contents: |\theorem@headerfont|
+% holds the font commands for the header font, |##1| is the
+% keyword to be displayed, and |##2| its environment number.
+% The linebreak after the header is achieved by offering to fill the
+% line with space and the distinct wish to put a linebreak after it.
+% Thus, if plain text follows, the line break is executed, but if
+% a list or a display follows, it is not executed.
+%
+% Note: The |\hfill\penalty-8000| causes \TeX\ to leave vertical mode,
+% setting the item contents (ie the header) and entering horizontal mode
+% to perform the |\hfill|.
+%
+% \begin{macro}{\theoremstyle}
+% The handling of |\theoremstyle|, |\theorembodyfont|, and
+% |\theoremskipamounts| is taken from theorem.sty by Frank Mittelbach:
+% \changes{v0.80}{1997/02/11}{`theoremseparator' added (WM)}
+% \changes{v1.20}{2002/12/30}{`theoremprework' and `theorempostwork'
+% added (WM)}
+% \begin{macrocode}
+\gdef\theoremstyle#1{%
+ \@ifundefined{th@#1}{\@warning
+ {Unknown theoremstyle `#1'. Using `plain'}%
+ \theorem@style{plain}}%
+ {\theorem@style{#1}}}
+\newtoks\theorem@style
+\newtoks\theorem@@style
+\global\theorem@style{plain}
+% \end{macrocode}\end{macro}
+%
+% If |\theoremstyle| is called, it is checked if the argument
+% is a valid |theoremstyle|, and if so, it is stored in the token
+% |\theorem@style|. It is initialized to |plain|.
+%
+% \begin{macro}{\theorembodyfont}
+% \begin{macrocode}
+\newtoks\theorembodyfont
+\global\theorembodyfont{\itshape}
+% \end{macrocode}\end{macro}
+%
+% \begin{macro}{\theoremnumbering}
+% \begin{macrocode}
+\newtoks\theoremnumbering
+\global\theoremnumbering{arabic}
+% \end{macrocode}\end{macro}
+%
+% \begin{macro}{theoremskips}
+% \changes{v0.94}{1997/03/20}{'theorem...skip' fixed (WM)}
+% \changes{v1.32}{2011/02/28}{implemented new skip scheme (WM)}
+% \begin{macrocode}
+\newskip\theorempreskipamount
+\newskip\theorempostskipamount
+\newskip\theoremframepreskipamount
+\newskip\theoremframepostskipamount
+\newskip\theoreminframepreskipamount
+\newskip\theoreminframepostskipamount
+\global\theorempreskipamount\topsep
+\global\theorempostskipamount\topsep
+\global\theoremframepreskipamount\topsep
+\global\theoremframepostskipamount\topsep
+\global\theoreminframepreskipamount\topsep
+\global\theoreminframepostskipamount\topsep
+% \end{macrocode}
+% \changes{v1.32}{2011/02/28}{implemented new skip scheme (WM)}
+% \Codelabel{thmskips}
+% \begin{macrocode}
+\newif\ifuse@newframeskips\global\use@newframeskipsfalse
+\newtoks\theorem@preskip
+\global\theorem@preskip{\topsep}
+\def\theorempreskip#1{%
+ \theorem@preskip{#1}\global\use@newframeskipstrue}
+\newtoks\theorem@postskip
+\global\theorem@postskip{\topsep}
+\def\theorempostskip#1{%
+ \theorem@postskip{#1}\global\use@newframeskipstrue}
+\newtoks\theorem@framepreskip
+\global\theorem@framepreskip{\topsep}
+\def\theoremframepreskip#1{%
+ \theorem@framepreskip{#1}\global\use@newframeskipstrue}
+\newtoks\theorem@framepostskip
+\global\theorem@framepostskip{\topsep}
+\def\theoremframepostskip#1{%
+ \theorem@framepostskip{#1}\global\use@newframeskipstrue}
+\newtoks\theorem@inframepreskip
+\global\theorem@inframepreskip{\topsep}
+\def\theoreminframepreskip#1{%
+ \theorem@inframepreskip{#1}\global\use@newframeskipstrue}
+\newtoks\theorem@inframepostskip
+\global\theorem@inframepostskip{\topsep}
+\def\theoreminframepostskip#1{%
+ \theorem@inframepostskip{#1}\global\use@newframeskipstrue}
+% \end{macrocode}
+% \end{macro}
+% \begin{packeddescr}
+% \item[Line \Coderef{thmskips}{1}:]
+% switch whether new skip scheme is used (default for compatibility,
+% with old versions: no)
+% \item[Line \Coderef{thmskips}{2}, \Coderef{thmskips}{3}:]
+% define and initialize internal token (not a skip, just a token),
+% \item[Line \Coderef{thmskips}{4}, \Coderef{thmskips}{5}:]
+% define command to assign argument to token, and activate use
+% of new skip scheme,
+% \item[Line \Coderef{thmskips}{6}--\Coderef{thmskips}{25}:]
+% analogously for the other skips.
+% \end{packeddescr}
+
+% The new theoremskip scheme is automatically activated if one
+% of the above commands is invoked (for that, they are not directly
+% implemented as |\newtoks|, but as complex commands).
+%
+% \begin{macro}{\theoremindent}
+% \begin{macrocode}
+\newdimen\theoremindent
+\global\theoremindent0cm
+\newdimen\theorem@indent
+\newdimen\theoremrightindent
+\global\theoremrightindent0cm
+\newdimen\theorem@rightindent
+% \end{macrocode}\end{macro}
+%
+% \begin{macro}{\theoremheaderfont}
+% \begin{macrocode}
+\newtoks\theoremheaderfont
+\global\theoremheaderfont{\normalfont\bfseries}
+\def\theorem@headerfont{\normalfont\bfseries}
+% \end{macrocode}\end{macro}
+%
+% \begin{macro}{\theoremseparator}
+% \begin{macrocode}
+\newtoks\theoremseparator
+\global\theoremseparator{}
+\def\theorem@separator{}
+% \end{macrocode}\end{macro}
+%
+% \begin{macro}{\theoremprework}
+% \begin{macro}{\theorempostwork}
+% \begin{macrocode}
+\newtoks\theoremprework
+\global\theoremprework{\relax}
+\newtoks\theorempostwork
+\global\theorempostwork{\relax}
+\def\theorem@prework{}
+% \end{macrocode}\end{macro}
+% \end{macro}
+%
+% \begin{macro}{\theoremsymbol}
+% \begin{macrocode}
+\newtoks\theoremsymbol
+\global\theoremsymbol{}
+% \end{macrocode}\end{macro}
+%
+% \begin{macro}{\qedsymbol}
+% \begin{macrocode}
+\newtoks\qedsymbol
+\global\qedsymbol{}
+% \end{macrocode}\end{macro}
+%
+% \begin{macro}{\theoremkeyword}
+% \begin{macrocode}
+\newtoks\theoremkeyword
+\global\theoremkeyword{None}
+% \end{macrocode}\end{macro}
+%
+% \begin{macro}{\theoremclass}
+% \changes{v1.16}{1999/08/07}{introduced 'theoremclass' and
+% defined 'th@class@LaTeX' (WM)}
+% \changes{v1.32}{2011/02/28}{adapted to new skip scheme (WM)}
+% \begin{macrocode}
+\gdef\theoremclass#1{%
+ \csname th@class@#1\endcsname}
+\gdef\th@class@LaTeX{%
+ \theoremstyle{plain}%
+ \theoremheaderfont{\normalfont\bfseries}%
+ \theorembodyfont{\itshape}%
+ \theoremseparator{}%
+ \theoremprework{\relax}%
+ \theorempostwork{\relax}%
+ \ifuse@newframeskips
+ \theorempreskip{0cm}%
+ \theorempostskip{0cm}%
+ \theoremframepreskip{0cm}%
+ \theoremframepostskip{0cm}%
+ \theoreminframepreskip{0cm}%
+ \theoreminframepostskip{0cm}%
+ \fi
+ \theoremindent0cm
+ \theoremrightindent0cm
+ \theoremnumbering{arabic}%
+ \theoremsymbol{}}
+% \end{macrocode}\end{macro}
+% Calling |\theoremclass{|\env|}| calls |\th@class@|\env\ (which is
+% defined in |\@newtheorem| in Lines
+% \Coderef{atnewthm}{31}--\Coderef{atnewthm}{45}).
+% |\th@class@|\env\ restores all style parameters to their values
+% given for \env.
+% Especially, |\th@class@LaTeX| restores the standard LaTeX parameters.
+%
+% \begin{macro}{\qedsymbol}
+% \begin{macrocode}
+\newtoks\qedsymbol
+\global\qedsymbol{}
+% \end{macrocode}\end{macro}
+%
+% \paragraph{Compatibility with amsthm.}
+%
+% \begin{macro}{amsthm}
+% \changes{v1.02}{1997/05/31}{proof-environment fixed (WM)}
+% \begin{macrocode}
+\DeclareOption{amsthm}{% *********************************************
+ \PackageInfo{\basename}{Option `amsthm' loaded}%
+\def\swapnumbers{\PackageError{\basename}{swapnumbers not implemented.
+ Use theoremstyle change instead.}\@eha}
+
+\gdef\th@plain{%
+ \def\theorem@headerfont{\normalfont\bfseries}\itshape%
+ \def\@begintheorem##1##2{%
+ \item[\hskip\labelsep \theorem@headerfont ##1\ ##2.]}%
+ \def\@opargbegintheorem##1##2##3{%
+ \item[\hskip\labelsep \theorem@headerfont ##1\ ##2\ (##3).]}}
+\gdef\th@nonumberplain{%
+ \def\theorem@headerfont{\normalfont\bfseries}\itshape%
+ \def\@begintheorem##1##2{%
+ \item[\hskip\labelsep \theorem@headerfont ##1.]}%
+ \def\@opargbegintheorem##1##2##3{%
+ \item[\hskip\labelsep \theorem@headerfont ##1\ (##3).]}}
+\gdef\th@definition{%
+ \th@plain\def\theorem@headerfont{\normalfont\bfseries}\normalfont}
+\gdef\th@nonumberdefinition{%
+ \th@nonumberplain\def\theorem@headerfont{\normalfont\bfseries}\normalfont}
+\gdef\th@remark{%
+ \th@plain\def\theorem@headerfont{\itshape}\normalfont}
+\gdef\th@nonumberremark{%
+ \th@nonumberplain\def\theorem@headerfont{\itshape}\normalfont}
+%%% TODO skips initialisieren
+\newcounter{proof}%
+\if@thmmarks
+ \newcounter{currproofctr}%
+ \newcounter{endproofctr}%
+\fi
+\newcommand{\openbox}{\leavevmode
+ \hbox to.77778em{%
+ \hfil\vrule
+ \vbox to.675em{\hrule width.6em\vfil\hrule}%
+ \vrule\hfil}}
+\gdef\proofSymbol{\openbox}
+\newcommand{\proofname}{Proof}
+\newenvironment{proof}[1][\proofname]{
+ \th@nonumberplain
+ \def\theorem@headerfont{\itshape}%
+ \normalfont
+ \theoremsymbol{\ensuremath{_\blacksquare}}
+ \@thm{proof}{proof}{#1}}%
+ {\@endtheorem}
+}% end of option amsthm **********************************************
+% \end{macrocode}
+% \end{macro}
+%
+% Defines theorem styles |plain|, |definition|, and
+% |remark|, and environment |proof| according to
+% |amsthm.sty|.
+%
+% \subsubsection{Theorem-Environment Handling Stuff}
+% Original: ltthm.dtx
+%
+% \begin{macrocode}
+\newskip\thm@topsep
+\newskip\thm@topsepadd
+% \end{macrocode}
+%
+% Two auxiliary variables.
+%
+% \paragraph{Defining New Theorem-Environments.}
+%
+% \begin{macro}{\newtheorem}
+% \changes{v1.18}{1999/12/23}{debugged starred version of 'newtheorem' (WM)}
+% \changes{v1.23}{2004/06/13}{moved normal 'newtheorem' into 'newtheorem@i' (WM)}
+% \changes{v1.23}{2004/06/13}{normal 'newtheorem': reset theoremprework and
+% theorempostwork, then call 'newtheorem@i' (WM, reported by Christoph Kluss)}
+% \changes{v1.24}{2004/09/20}{debugged: reset after call, moved downwards (WM)}
+% \begin{macrocode}
+\gdef\newtheorem{%
+ \newtheorem@i%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\newtheorem@i}
+% \changes{v1.23}{2004/06/13}{moved normal 'newtheorem' into 'ntheorem@i' (WM)}
+% The syntax of the original |\newtheorem| is retained. The macro is extended
+% to deal with the additional requirements:
+% \begin{macrocode}
+\gdef\newtheorem@i{%
+ \@ifstar
+ {\expandafter\@ifundefined{th@nonumber\the\theorem@style}%
+ {\PackageError{\basename}{Theorem style {nonumber\the\theorem@style}
+ undefined (you need it here for newtheorem*) }\@ehc}%
+ {}%
+ \edef\@tempa{{nonumber\the\theorem@style}}%
+ \expandafter\theorem@@style\@tempa\@newtheorem}%
+ {\edef\@tempa{{\the\theorem@style}}%
+ \expandafter\theorem@@style\@tempa\@newtheorem}}
+% \end{macrocode}
+% \end{macro}
+%
+% Defines |\theorem@@style| to be the current |\theoremstyle|
+% or -- in case of |\newtheorem*| -- to be its non-numbered
+% equivalent (which has to be defined!), and then calls |\@newtheorem|.
+
+% \begin{macro}{\renewtheorem}
+% \changes{v0.93}{1997/03/12}{introduced 'renewtheorem' (WM)}
+% \changes{v1.18}{1999/12/23}{debugged starred version of 'renewtheorem' (WM)}
+% \Codelabel{renewthm}
+% \begin{macrocode}
+\gdef\renewtheorem{%
+ \@ifstar
+ {\expandafter\@ifundefined{th@nonumber\the\theorem@style}%
+ {\PackageError{\basename}{Theorem style {nonumber\the\theorem@style}
+ undefined (you need it here for newtheorem*) }\@ehc}%
+ {}%
+ \edef\@tempa{{nonumber\the\theorem@style}}%
+ \expandafter\theorem@@style\@tempa\@renewtheorem}%
+ {\edef\@tempa{{\the\theorem@style}}%
+ \expandafter\theorem@@style\@tempa\@renewtheorem}}
+% \end{macrocode}
+% Analogous to |\newtheorem|.
+% \end{macro}
+%
+% \begin{macro}{\@newtheorem}
+% |\@newtheorem| does the main job for initializing a new theorem
+% environment type. It is called by |\newtheorem|.
+%
+% \Codelabel{atnewthm}
+% \changes{v0.83}{1997/02/13}{fixed, for bold math in headers (AS)}
+% \changes{v0.93}{1997/03/12}{check ifdefinable star-env. added (WM)}
+% \changes{v0.93}{1997/03/12}{newcounters only if not yet defined (WM)}
+% \changes{v1.02}{1997/05/31}{fixed collision at '@thm', introduced
+% 'setparms' and 'mkheader' (WM)}
+% \changes{v1.16}{1999/08/07}{introduced 'th@class' (WM)}
+% \changes{v1.18}{1999/12/23}{'protected@xdef' for Symbol (WM)}
+% \changes{v1.21}{2002/12/30}{added handling of 'theoremprework' and
+% 'theorempostwork' (WM)}
+% \changes{v1.24}{2004/09/20}{debugged: reset theorempre/postwork (WM)}
+% \changes{v1.32}{2011/02/28}{adapted to new skip scheme (WM)}
+% \begin{macrocode}
+\gdef\@newtheorem#1{%
+ \thm@tempiffalse
+ \expandafter\@ifdefinable\csname #1\endcsname
+ {\expandafter\@ifdefinable\csname #1*\endcsname
+ {\thm@tempiftrue
+ \thm@definelthm{#1}% for lists
+ \if@thmmarks
+ \expandafter\@ifundefined{c@curr#1ctr}%
+ {\newcounter{curr#1ctr}}{}%
+ \expandafter\@ifundefined{c@end#1ctr}%
+ {\newcounter{end#1ctr}}{}%
+ \fi
+ \expandafter\protected@xdef\csname #1Symbol\endcsname{\the\theoremsymbol}%
+ \expandafter\protected@xdef\csname #1@postwork\endcsname{%
+ \the\theorempostwork}%
+ \expandafter\gdef\csname#1\endcsname{%
+ \let\thm@starredenv\@undefined
+ \csname mkheader@#1\endcsname}%
+ \expandafter\gdef\csname#1*\endcsname{%
+ \let\thm@starredenv\relax
+ \csname mkheader@#1\endcsname}%
+ \def\@tempa{\expandafter\noexpand\csname end#1\endcsname}%
+ \expandafter\xdef\csname end#1*\endcsname{\@tempa}%
+ \expandafter\xdef\csname setparms@#1\endcsname
+ {\noexpand \def \noexpand \theorem@headerfont
+ {\the\theoremheaderfont\noexpand\theorem@checkbold}%
+ \noexpand \def \noexpand \theorem@separator
+ {\the\theoremseparator}%
+ \noexpand \def \noexpand \theorem@prework
+ {\the\theoremprework}%
+ \noexpand\ifuse@newframeskips
+ \noexpand \theorempreskipamount \the\theorem@preskip
+ \noexpand \theoremframepreskipamount \the\theorem@framepreskip
+ \noexpand \theoreminframepreskipamount \the\theorem@inframepreskip
+ \noexpand \theorempostskipamount \the\theorem@postskip
+ \noexpand \theoremframepostskipamount \the\theorem@framepostskip
+ \noexpand \theoreminframepostskipamount \the\theorem@inframepostskip
+ \noexpand\fi
+ \noexpand \def \noexpand \theorem@indent
+ {\the\theoremindent}%
+ \noexpand \def \noexpand \theorem@rightindent
+ {\the\theoremrightindent}%
+ \the \theorembodyfont
+ \noexpand\csname th@\the \theorem@@style \endcsname}%
+ \expandafter\xdef\csname th@class@#1\endcsname
+ {\noexpand\theoremstyle{\the\theorem@style}%
+ \noexpand\theoremheaderfont{\the\theoremheaderfont}%
+ \noexpand\theorembodyfont{\the \theorembodyfont}%
+ \noexpand\theoremseparator{\the\theoremseparator}%
+ \noexpand\theoremprework{\the\theoremprework}%
+ \noexpand\theorempostwork{\the\theorempostwork}%
+ \noexpand\ifuse@newframeskips
+ \noexpand\theorempreskip {\the\theorem@preskip}%
+ \noexpand\theoremframepreskip {\the\theorem@framepreskip}%
+ \noexpand\theoreminframepreskip {\the\theorem@inframepreskip}%
+ \noexpand\theorempostskip {\the\theorem@postskip}%
+ \noexpand\theoremframepostskip {\the\theorem@framepostskip}%
+ \noexpand\theoreminframepostskip {\the\theorem@inframepostskip}%
+ \noexpand\fi
+ \noexpand\theoremindent\the\theoremindent%
+ \noexpand\theoremrightindent\the\theoremrightindent%
+ \noexpand\theoremnumbering{\the\theoremnumbering}%
+ \noexpand\theoremsymbol{\the\theoremsymbol}}%
+ }}%
+ \theoremprework{\relax}%
+ \theorempostwork{\relax}%
+ \@ifnextchar[{\@othm{#1}}{\@nthm{#1}}}% MUST NOT BE IN ANY IF !!!
+% \end{macrocode}
+%
+% Argument: \env:=|#1| is the (internal) environment name to be defined,
+% which is read from the \LaTeX\ source.
+% \begin{packeddescr}
+% \item[Line \Coderef{atnewthm}{3}:]
+% check if \env\ is not yet defined (or is redefined).
+% \item[Lines \Coderef{atnewthm}{5}--\Coderef{atnewthm}{30}]
+% are executed exactly if \env\ and \env * are not yet defined.
+% \item[Line \Coderef{atnewthm}{5}:]
+% |\thm@tempif=true| iff \env\ and \env * are not yet defined.
+% \item[Line \Coderef{atnewthm}{6}:]
+% Initialize theorem list handling for \env.
+% \item[Lines \Coderef{atnewthm}{7}--\Coderef{atnewthm}{12}:]
+% if |thmmarks| is active and the counters are not yet defined,
+% for every theorem-like, define \\
+% |curr|\env|ctr|: in the $i$th environment of type \env,
+% $|curr|\env|ctr|=i$, and \\
+% |end|\env|ctr|: when the innermost environment is of
+% type \env, in the $j$th potential position for an end
+% mark in this environment, $|end|\env|ctr|=j$.
+% (if the counters are already defined, \env\ is redefined,
+% and these internal counters have to be continued).
+% \item[Lines \Coderef{atnewthm}{13}--\Coderef{atnewthm}{61}:]
+% define several commands:
+% (|\xdef| expands the definition at the time it is called and
+% makes it global):
+% \item[Line \Coderef{atnewthm}{13}:]
+% store the current value of |\theoremsymbol| as |\|\env|Symbol|.
+% \item[Line \Coderef{atnewthm}{14}, \Coderef{atnewthm}{15}:]
+% store the current value of |\theorempostwork| as |\|\env|postwork|.
+% \item[Lines \Coderef{atnewthm}{16}--\Coderef{atnewthm}{18},
+% \Coderef{atnewthm}{19}--\Coderef{atnewthm}{21}:]
+% Define the commands |\env| and |\env*| to set the header
+% of \env\ by calling |\mkheader@|\env.
+% (using a switch |\thm@starredenv|: |\relax| iff starred).
+% \item[Lines \Coderef{atnewthm}{22}, \Coderef{atnewthm}{23}:]
+% Set |\end|\env|*| to |\end|\env.
+% \item[Lines \Coderef{atnewthm}{24}--\Coderef{atnewthm}{42}:]
+% define |\setparms@|\env\ to set the style parameters of the
+% header for every \env\ environment (in the sequel,
+% \emph{current} means, at the moment |\@newtheorem| is called):
+% \item[Lines \Coderef{atnewthm}{25}, \Coderef{atnewthm}{26}:]
+% setting |\theorem@headerfont| to the \emph{current}
+% value of |\theoremheaderfont|, followed by a check if
+% it is a bold style,
+% \item[Lines \Coderef{atnewthm}{27}, \Coderef{atnewthm}{28}:]
+% setting |\theorem@separator| to the \emph{current}
+% value of |\theoremseparator|,
+% \item[Lines \Coderef{atnewthm}{29}, \Coderef{atnewthm}{30}:]
+% setting |\theorem@prework| to the \emph{current}
+% value of |\theoremprework|,
+% \item[Lines \Coderef{atnewthm}{31}--\Coderef{atnewthm}{38}:]
+% if new skip schema is used: setting the skips to the
+% \emph{current} values hold in the respective tokens,
+% \item[Line \Coderef{atnewthm}{39}, \Coderef{atnewthm}{40}:]
+% setting |\theorem@indent| to the \emph{current}
+% value of |\theoremindent|,
+% \item[Line \Coderef{atnewthm}{41}:]
+% executing the command sequence currently stored in
+% |\theorembodyfont|, and
+% \item[Line \Coderef{atnewthm}{42}:]
+% calling |th@\the\theorem@@style| (which initializes
+% |\@begintheorem| and |\@opargbegintheorem| according to the
+% \emph{current} value of |\theoremstyle| by calling
+% |th@\the\theorem@@style|).
+% \item [Line \Coderef{atnewthm}{43}--\Coderef{atnewthm}{60}:]
+% define |\th@class@|\env\ to initialize all style
+% parameters as they are set for the \env\ environment.
+% (call skip-initializing commands only if new skip scheme
+% is activated).
+% \item[Note,] that the |\@ifdefinable| from lines
+% \Coderef{atnewthm}{3}/\Coderef{atnewthm}{4}
+% end in line \Coderef{atnewthm}{59}.
+% \item[Line \Coderef{atnewthm}{62}, \Coderef{atnewthm}{63}:]
+% reset |\@theoremprework/postwork|.
+% \item[Line \Coderef{atnewthm}{64}:]
+% According to the next character, call |\@othm{|\env|}|
+% (if another counter is used) or |\@nthm{|\env|}|.
+% \end{packeddescr}
+%
+% Thus, when calling |\@newthm| with |#1|=\env,
+% for current values |\theoremstyle=plain|,
+% |\theorembodyfont=\upshape|, |\theoremheaderfont=\bf|,
+% |\theoremseparator=:|, |\theoremindent=1cm|,
+% |\theoremnumbering=arabic|, and |\theoremsymbol=\Box|,
+%
+% the macro |\setparms@|\env\ is defined as
+% \begin{quote}
+% |\setparms@|\env| == \def\theorem@headerfont{\bf\theorem@checkbold}| \\
+% | \def\theorem@separator{:}| \\
+% | \def\theorem@indent{1cm}| \\
+% | \upshape| \\
+% | \th@plain|
+% \end{quote}
+% and the macro |\th@class@|\env\ is defined as
+% \begin{quote}
+% |\th@class@|\env| == \def\theoremstyle{plain}|\\
+% | \def\theoremheaderfont{\bf}| \\
+% | \def\theorembodyfont{\upshape}| \\
+% | \def\theoremseparator{:}| \\
+% | \def\theoremindent{1cm}| \\
+% | \def\theoremnumbering{arabic}| \\
+% | \def\theoremsymbol{\Box}|
+% \end{quote}
+% Note, that line \Coderef{atnewthm}{64} must not be inside
+% \emph{any} |\if...\fi| construct.
+% \end{macro}
+%
+% \begin{macro}{\@renewtheorem}
+% \changes{v0.93}{1997/03/12}{introduced 'renewtheorem' (WM)}
+% \changes{v1.18}{1999/12/23}{calls '@newtheorem' instead of
+% 'newtheorem' (WM)}
+% \changes{v1.25}{2005/07/07}{error message: 'keyword' (WM)}
+% \Codelabel{atrenewthm}
+% \begin{macrocode}
+\gdef\@renewtheorem#1{%
+ \expandafter\@ifundefined{#1}%
+ {\PackageError{\basename}{Theorem keyword #1 undefined}\@ehc}%
+ {}%
+ \expandafter\let\csname #1\endcsname\relax
+ \expandafter\let\csname #1*\endcsname\relax
+ \@newtheorem{#1}}
+% \end{macrocode}
+% Argument: \env:=|#1| is the (internal) environment name to be
+% redefined, which is read from the \LaTeX\ source. \\
+% If \env\ is already defined, make it (and \env*, too) undefined
+% and call |\@newtheorem{|\env|}|.
+% \end{macro}
+%
+% \begin{macro}{\@nthm}
+% \changes{v1.1}{1998/08/30}{added 'output@' to '@nthm' and '@othm'. (WM)}
+% \changes{v1.18}{1999/12/25}{'protected@xdef' instead of 'xdef' (WM)}
+% \changes{v1.18}{1999/12/25}{'output' changed and modified into
+% 'Keyword' (WM)}
+% \Codelabel{nthm}
+% |\@nthm| is called by |\@newtheorem| if the environment to be defined
+% has a counter of its own.
+% \begin{macrocode}
+\gdef\@nthm#1#2{%
+ \expandafter\protected@xdef\csname num@addtheoremline#1\endcsname{%
+ \noexpand\@num@addtheoremline{#1}{#2}}%
+ \expandafter\protected@xdef\csname nonum@addtheoremline#1\endcsname{%
+ \noexpand\@nonum@addtheoremline{#1}{#2}}%
+ \theoremkeyword{#2}%
+ \expandafter\protected@xdef\csname #1Keyword\endcsname
+ {\the\theoremkeyword}%
+ \@ifnextchar[{\@xnthm{#1}{#2}}{\@ynthm{#1}{#2}}}
+% \end{macrocode}
+%
+% Arguments: \\
+% \env:=|#1| is the (internal) environment name to be defined
+% (transmitted from |\@newtheorem|). \\
+% \meta{output\_name}:=|#2| is its keyword to be used in the
+% output (read from the \LaTeX\ source).
+% \begin{packeddescr}
+% \item[Lines \Coderef{nthm}{2}--\Coderef{nthm}{5}:]
+% Define |\|(no)|num@addtheoremline|\env\ to call \\
+% |\@|(no)|num@addtheoremline{|\env|}{|\meta{output\_name}|}|. \\
+% For comments on |\@num@addtheoremline| and
+% |\@nonum@addtheoremline| see Section \ref{sec:CodeLists}.
+% \item[Lines \Coderef{nthm}{6}--\Coderef{nthm}{8}:]
+% Define |\|\env|Keyword|\env\ to typeset/output \meta{output\_name}.
+% (note the similarity with the handling of |\theoremsymbol|
+% for handling complex keywords)
+% \item[Line \Coderef{nthm}{9}:]
+% According to the next character, call
+% |\@xnthm{|\env|}{|\meta{output\_name}|}| (if \env-environments
+% should be numbered relative to some structuring level) or
+% |\@ynthm{|\env|}{|\meta{output\_name}|}|.
+% \end{packeddescr}
+% \end{macro}
+%
+% \begin{macro}{\@othm}
+% \changes{v1.02}{1997/05/31}{fixed collision at '@thm', introduced
+% 'setparms' and 'mkheader' (WM)}
+% \changes{v1.1}{1998/08/30}{added 'output@' to '@nthm' and '@othm'. (WM)}
+% \changes{v1.12}{1998/11/15}{fixed a bug in '@output' (WM, reported by
+% David Epstein)}
+% \changes{v1.18}{1999/12/25}{'protected@xdef' instead of 'xdef' (WM)}
+% \changes{v1.18}{1999/12/25}{'output' changed and modified into
+% 'Keyword' (WM)}
+% |\@othm| is called by |\@newtheorem| if the environment to be defined
+% uses another counter.
+% \Codelabel{othm}
+% \begin{macrocode}
+\gdef\@othm#1[#2]#3{%
+ \@ifundefined{c@#2}{\@nocounterr{#2}}%
+ {\ifthm@tempif
+ \global\@namedef{the#1}{\@nameuse{the#2}}%
+ \expandafter\protected@xdef\csname num@addtheoremline#1\endcsname{%
+ \noexpand\@num@addtheoremline{#1}{#3}}%
+ \expandafter\protected@xdef\csname nonum@addtheoremline#1\endcsname{%
+ \noexpand\@nonum@addtheoremline{#1}{#3}}%
+ \theoremkeyword{#3}%
+ \expandafter\protected@xdef\csname #1Keyword\endcsname
+ {\the\theoremkeyword}%
+ \expandafter\gdef\csname mkheader@#1\endcsname
+ {\csname setparms@#1\endcsname
+ \@thm{#1}{#2}{#3}}%
+ \global\@namedef{end#1}{\@endtheorem}\fi}}
+% \end{macrocode}
+%
+% Arguments: \\
+% \env:=|#1| is the (internal) environment name to be defined
+% (transmitted from |\@newtheorem|). \\
+% \meta{use\_ctr}:=|#2| is the internal name of the theorem which counter
+% is used, and \\
+% \meta{output\_name}:=|#3| is its ``name'' to be used in the
+% output (both read from the \LaTeX\ source).
+%
+% \begin{packeddescr}
+% \item[Line \Coderef{othm}{2}:]
+% if the counter to be used is undefined, goto error, else
+% set |\the|\env\ to use |\the|\meta{use\_ctr} and do the following:
+% \item[Lines \Coderef{othm}{4}--\Coderef{othm}{12}]
+% happen only if \env\ is not yet defined or gets redefined:
+% \item[Line \Coderef{othm}{4}:] (from latex.ltx)
+% make \env\ use the counter \meta{use\_ctr}.
+% \item[Lines \Coderef{othm}{5}--\Coderef{othm}{11}]
+% similar to lines \Coderef{nthm}{2}--\Coderef{nthm}{8}
+% of |\@nthm|.
+% \item[Lines \Coderef{othm}{12}--\Coderef{othm}{14}]
+% define |\mkheader@|\env\ to set the style parameters of the header
+% and set the header (by |\@thm|):
+% \begin{quote}
+% |\mkheader@|\env\ ==
+% |\setparms@|\env|\@thm{|\env|}{|\meta{use\_ctr}|}{|\meta{output\_name}|}|.
+% \end{quote}
+% (|\setparms@|\env\ is defined when |\@newtheorem{|\env|}| is
+% carried out).
+% \item[Line \Coderef{othm}{15}:]
+% (from latex.ltx): |\end|\env\ calls |\@endtheorem|.
+% \end{packeddescr}
+% \end{macro}
+%
+% \begin{macro}{\@xnthm}
+% \changes{v0.93}{1997/03/12}{@definecounter only if not yet defined (WM)}
+% \changes{v1.02}{1997/05/31}{fixed collision at '@thm', introduced
+% 'setparms' and 'mkheader' (WM)}
+% |\@xnthm| is called by |\@nthm| if the numbering is relative to some
+% structuring level.
+% \Codelabel{xnthm}
+% \begin{macrocode}
+\gdef\@xnthm#1#2[#3]{%
+ \ifthm@tempif
+ \expandafter\@ifundefined{c@#1}%
+ {\@definecounter{#1}}{}%
+ \@newctr{#1}[#3]%
+ \expandafter\xdef\csname the#1\endcsname{%
+ \expandafter\noexpand\csname the#3\endcsname \@thmcountersep
+ {\noexpand\csname\the\theoremnumbering\endcsname{#1}}}%
+ \expandafter\gdef\csname mkheader@#1\endcsname
+ {\csname setparms@#1\endcsname
+ \@thm{#1}{#1}{#2}}%
+ \global\@namedef{end#1}{\@endtheorem}\fi}
+% \end{macrocode}
+%
+% Arguments: \\
+% \env:=|#1| is the (internal) environment name to be defined
+% (transmitted from |\@newtheorem|). \\
+% \meta{output\_name}:=|#2| is its keyword to be used in the
+% output, \\
+% \meta{level}:=|#3| is the structuring level relative to which \env\
+% has to be numbered (both read from the \LaTeX\ source).
+%
+% \begin{packeddescr}
+% \item[Lines \Coderef{xnthm}{3}--\Coderef{xnthm}{12}]
+% happen only if \env\ is not yet defined or gets redefined:
+% \item[Lines \Coderef{xnthm}{3}, \Coderef{xnthm}{4}:]
+% in not yet defined, define \env- counter (otherwise, \env\
+% is redefined).
+% \item[Line \Coderef{xnthm}{6}:]
+% (from latex.ltx): define the counter for \env\ and add
+% \meta{level} to its reset-triggers.
+% \item[Lines \Coderef{xnthm}{7}, \Coderef{xnthm}{8}:]
+% define |\the|\env\ to be the command sequence
+% \begin{quote}
+% |\the|\meta{level}|\@thmcountersep|\meta{numbering}|{|\env|}|~,
+% \end{quote}
+% where \meta{numbering} is the value of |\theoremnumbering| when
+% |\@xnthm| (and thus, |\newtheorem{|\env|}|) is called.
+% \item[Lines \Coderef{xnthm}{9}--\Coderef{xnthm}{11}:]
+% define |\mkheader@|\env\ to set the style parameters of the header
+% and set the header (by |\@thm|):
+% \begin{quote}
+% |\mkheader@|\env\ ==
+% |\setparms@|\env|\@thm{|\env|}{|\env|}{|\meta{output\_name}|}|.
+% \end{quote}
+% (|\setparms@|\env\ is defined when |\@newtheorem{|\env|}| is
+% carried out).
+% \item[Line \Coderef{xnthm}{12}:]
+% (from latex.ltx): |\end|\env\ calls |\@endtheorem|.
+% \end{packeddescr}
+% \end{macro}
+%
+% \begin{macro}{\@ynthm}
+% \changes{v0.93}{1997/03/12}{'@definecounter' only if not yet defined (WM)}
+% \changes{v1.02}{1997/05/31}{fixed collision at '@thm', introduced
+% 'setparms' and 'mkheader' (WM)}
+% |\@ynthm| is called by |\@nthm| if the counter is not relative to any
+% structuring level.\\
+% \Codelabel{ynthm}
+% \begin{macrocode}
+\gdef\@ynthm#1#2{%
+ \ifthm@tempif
+ \expandafter\@ifundefined{c@#1}%
+ {\@definecounter{#1}}{}%
+ \expandafter\xdef\csname the#1\endcsname
+ {\noexpand\csname\the\theoremnumbering\endcsname{#1}}%
+ \expandafter\gdef\csname mkheader@#1\endcsname
+ {\csname setparms@#1\endcsname
+ \@thm{#1}{#1}{#2}}%
+ \global\@namedef{end#1}{\@endtheorem}\fi}
+% \end{macrocode}
+%
+% Arguments: \\
+% \env:=|#1| is the (internal) environment name to be defined
+% (transmitted from |\@newtheorem|). \\
+% \meta{output\_name}:=|#2| is its keyword to be used in the
+% output. \\
+% |\@ynthm| works analogous to |\@xnthm|.
+% \end{macro}
+%
+% \paragraph{Notes on vertical spacing}
+%
+% In \LaTeX\ and in |ntheorem|, theorems are organized as
+% |\trivlist|s, using the following skips:
+%
+% \begin{packeddescr}
+% \item[$\bullet$] |\@topsep|: above,
+% \item[$\bullet$] |\@topsepadd|: below (the name is misleading).
+% \end{packeddescr}
+%
+% In \LaTeX (cf.\ |latex.ltx| and its sources), the handling is as follows:
+%
+% \begin{packeddescr}
+% \item[$\bullet$] |\@begintheorem|: calls |\trivlist| and afterwards |\item|.
+% \item[$\bullet$] |\trivlist|: calls |\@trivlist|.
+% \item[$\bullet$] |\@trivlist|: sets
+% |\@topsepadd := \topsep + ifvmode: \partopsep|, \\
+% |\@topsep := \@topsepadd|, and
+% |\@topsep += \parskip| -- this latter will be undone later in |\@item|!
+% \item[$\bullet$] |\item|: calls |\@item|.
+% \item[$\bullet$] |\@item|: does |\addvspace\@topsep| and |\addvspace{-\parskip}|.
+% \item[$\Rightarrow$] only |\@topsep| must be set to \meta{value}+|\parskip|
+% before the actual text is output by |\@item|
+% \item[$\bullet$] |\@endtheorem|: calls |\endtrivlist|.
+% \item[$\bullet$] |\endtrivlist|: note |\@noparlist| is only true if list is
+% itself at the beginning of a list item -- this is (usually) not the case
+% for theorems. \\
+% The |\ifdim\lastskip ...| part actually leaves skips unchanged in
+% default cases (|\@outerparskip := \parskip| in |\@trivlist|). \\
+% Afterwards, it calls |\@endparenv|
+% \item[$\bullet$] |\@endparenv|: does |\addvspace\@topsepadd|.
+% \end{packeddescr}
+%
+% In |ntheorem|, |\|\env is used instead of a common |\@begintheorem|
+% (defined by |\newtheorem| in Lines
+% \Coderef{atnewthm}{16}--\Coderef{atnewthm}{18},
+% \Coderef{atnewthm}{19}--\Coderef{atnewthm}{21}) that
+% call |\mkheader@|\env.
+% The actual definition of |\mkheader@|\env\ is done in |\@othm|,
+% |\@xnthm|, or |\@ynthm| as |\mkheader@|\env\ ==
+% |\setparms@|\env|\@thm{...}{...}{...}|. \\
+% Amongst this, |\@thm{...}{...}{...}|, whose code is given next,
+% \begin{packeddescr}
+% \item[$\bullet$] generates the actual output of the theorem header
+% (via |\@xthm|/|\@begintheorem| or |\@ythm|/|\@opargbegintheorem|)
+% where |\@begintheorem| and |\@opargbegintheorem| are redefined
+% by |ntheorem|:
+% \item[$\bullet$] |\@begintheorem| and |\@opargbegintheorem|
+% do \emph{not} contain the |\trivlist| command, but only set the
+% |\item| (internally |\@item| that adds space |\@topsep-\parskip|).
+% \item[$\bullet$] the |\trivlist| command itself is contained in
+% |\@thm|, recall that as described above, it is not concerned
+% with skips at all.
+% \item[$\Rightarrow$] |\@thm| has to set
+% |\@topsep := |\meta{value}|+\parskip| for the space \emph{above}
+% the theorem.
+% \item[$\bullet$] |\end|\env is defined in |\@othm|, |\@xnthm|, or |\@ynthm|
+% as |\@endtheorem| which is defined in Lines
+% \Coderef{atendtheorem}{0} (thmmarks active) and
+% \Coderef{atendtheorem-without}{0} (thmmarks off).
+% \item[$\bullet$] |\@endtheorem| with thmmarks on calls
+% ntheorem's |\@endtrivlist| (Line \Coderef{atendtrivlist}{0})
+% which calls |\@endparenv|.
+% \item[$\bullet$] |\@endtheorem| with thmmarks off calls
+% the original |\endtrivlist| which calls the original
+% |\@endtrivlist| which calls |\@endparenv|.
+% \item[$\Rightarrow$] |\@topsepadd| is used for the vertical space
+% after the theorem as usual.
+% \end{packeddescr}
+%
+% \paragraph{Handling Instances of Theorem-Environments.}
+%
+%
+% \begin{macro}{\@thm}
+% |\@thm| is called by |\@|\env\ (which is defined by
+% |\@othm|/|\@xnthm|/|\@ynthm|).
+% \changes{v1.21}{2002/12/30}{added handling of 'theoremprework' (WM)}
+% \changes{v1.32}{2011/02/28}{adapted to new skip scheme (WM)}
+% \Codelabel{atthm}
+% \begin{macrocode}
+\gdef\@thm#1#2#3{%
+ \if@thmmarks
+ \stepcounter{end\InTheoType ctr}%
+ \fi
+ \renewcommand{\InTheoType}{#1}%
+ \if@thmmarks
+ \stepcounter{curr#1ctr}%
+ \setcounter{end#1ctr}{0}%
+ \fi
+ \refstepcounter{#2}%
+ \theorem@prework
+ \trivlist % latex's \trivlist, calling latex's \@trivlist unchanged
+ \ifuse@newframeskips % cf. latex.ltx for topsepadd: \@trivlist
+ \ifthm@inframe
+ \thm@topsep\theoreminframepreskipamount
+ \thm@topsepadd\theoreminframepostskipamount
+ \else
+ \thm@topsep\theorempreskipamount
+ \thm@topsepadd\theorempostskipamount
+ \fi
+ \else% oldframeskips
+ \thm@topsep\theorempreskipamount
+ \thm@topsepadd \theorempostskipamount
+ \ifvmode\advance\thm@topsepadd\partopsep\fi
+ \fi
+ \@topsep\thm@topsep
+ \@topsepadd\thm@topsepadd
+ \advance\linewidth -\theorem@indent
+ \advance\linewidth -\theorem@rightindent
+ \advance\@totalleftmargin \theorem@indent
+ \parshape \@ne \@totalleftmargin \linewidth
+ \@ifnextchar[{\@ythm{#1}{#2}{#3}}{\@xthm{#1}{#2}{#3}}}
+% \end{macrocode}
+% \changes{v0.91}{1997/02/27}{'theorem...skip' fixed (WM)}
+%
+% Changed to three instead of two parameters (the first one is new): \\
+% \env:=|#1|: (added) internal name of the theorem environment, \\
+% \meta{use\_ctr}:=|#2|: internal name of the theorem which counter
+% is used, \\
+% \meta{output\_name}:=|#3|: keyword to be displayed in the output;
+% all arguments are transmitted from |\@othm|/|\@xnthm|/|\@ynthm|.
+% \begin{packeddescr}
+% \item[Lines \Coderef{atthm}{2}--\Coderef{atthm}{4}:]
+% if |thmmarks| is active, the counter for the current
+% environment \envx\ is incremented, since the last endmark in
+% environment \envx\ is definitely not the position for its endmark
+% (necessary for nested environments ending at the same time).
+% \item[Line \Coderef{atthm}{5}:]
+% set |\InTheoType| to \env.
+% \item[Lines \Coderef{atthm}{6}--\Coderef{atthm}{9}:]
+% if |thmmarks| is active, increment |curr|\env|ctr| and
+% set |end|\env|ctr| to 0.
+% \item[Line \Coderef{atthm}{10}:]
+% adapted from latex.ltx: increment the corresponding counter.
+% \item[Line \Coderef{atthm}{11}:]
+% perform |prework| (before theorem structure is generated).
+% \item[Line \Coderef{atthm}{12}:]
+% call \LaTeX's original |\trivlist|. It does just organizational
+% things, no actual skips! The skip is added later when the first
+% |\item| is typeset.
+% \item[Lines \Coderef{atthm}{13}--\Coderef{atthm}{25}:]
+% handle |\theorempreskipamount|, |\theorempostskipamount|, \\
+% |\theoreminframepreskipamount|, and
+% |\theoreminframepostskipamount|
+% (old skip schema: if in |vmode|, there is additional space,
+% cf.\ |\trivlist| and |\@trivlist| in latex.ltx).
+% \item[Lines \Coderef{atthm}{26}--\Coderef{atthm}{27}:]
+% initialize |\@topsep| (the space before the first item) and
+% |\@topsepadd| (the space after the first item). (see explanation
+% of spacing in the note preceding this macro.)
+% \item[Lines \Coderef{atthm}{28}--\Coderef{atthm}{30}:]
+% handle |\theoremindent|.
+% \item[Line \Coderef{atthm}{31}:]
+% if there is an optional argument, call \\
+% |\@ythm{|\env|}{|\meta{use\_ctr}|}{|\meta{output\_name}|}|,
+% otherwise call \\
+% |\@xthm{|\env|}{|\meta{use\_ctr}|}{|\meta{output\_name}|}|.
+% \end{packeddescr}\end{macro}
+%
+% \begin{macro}{\@xthm}
+% |\@xthm| is called by |\@thm| if there is no optional text in
+% the theorem header.
+% \Codelabel{xthm}
+% \begin{macrocode}
+\def\@xthm#1#2#3{%
+ \@begintheorem{#3}{\csname the#2\endcsname}%
+ \ifx\thm@starredenv\@undefined
+ \thm@thmcaption{#1}{{#3}{\csname the#2\endcsname}{}}\fi
+ \ignorespaces}
+% \end{macrocode}
+%
+% Changed to three instead of two parameters (the first one is new): \\
+% \env:=|#1|: (added) internal name of the theorem environment, \\
+% \meta{use\_ctr}:=|#2|: internal name of the theorem which counter
+% is used, \\
+% \meta{output\_name}:=|#3|: keyword to be displayed in the output. \\
+% All arguments are transmitted from |\@thm|. \\
+% For comments, see |\@ythm|.
+% \end{macro}
+%
+% \begin{macro}{\@ythm}
+% \changes{v1.1}{1998/03/31}{added definition of 'env\-name' (WM)}
+% |\@ythm| is called by |\@thm| if there is an optional text in
+% the theorem header.
+% \Codelabel{ythm}
+% \begin{macrocode}
+\def\@ythm#1#2#3[#4]{%
+ \expandafter\global\expandafter\def\csname#1name\endcsname{#4}%
+ \@opargbegintheorem{#3}{\csname the#2\endcsname}{#4}%
+ \ifx\thm@starredenv\@undefined
+ \thm@thmcaption{#1}{{#3}{\csname the#2\endcsname}{#4}}\fi
+ \ignorespaces}
+% \end{macrocode}
+%
+% Changed to four instead of three parameters (the first one is new): \\
+% \env:=|#1|: (added) internal name of the theorem environment, \\
+% \meta{use\_ctr}:=|#2|: internal name of the theorem which counter
+% is used, \\
+% \meta{output\_name}:=|#3|: keyword to be displayed in the output. \\
+% \meta{opt\_text}:=|#4|: optional text to appear in the header. \\
+% |#1|--|#3| are transmitted from |\@thm|, |#4| is read from the \LaTeX\
+% source.
+% \begin{packeddescr}
+% \item[Line \Coderef{ythm}{2}:]
+% define |\|\meta{env}|name| to be the optional argument.
+% \item[Line \Coderef{ythm}{3}:] call
+% \begin{quote}
+% |\@opargbegintheorem{|\meta{output\_name}|}{\the|\meta{use\_ctr}|}{|\meta{opt\_text}|}|
+% \end{quote}
+% which outputs the header.
+% \item[Line \Coderef{ythm}{4}, \Coderef{ythm}{5}:]
+% if \env\ is not the starred version, call
+% \begin{quote}
+% |\thm@thmcaption{|\meta{env}|}{{|\meta{output\_name}|}|\ignorespaces
+% |{\the|\meta{use\_ctr}|}{|\meta{opt\_text}|}}|
+% \end{quote}
+% which makes an entry into the theorem list.
+% \end{packeddescr} \end{macro}
+%
+% \begin{macro}{\@endtheorem}
+% \changes{v1.21}{2002/12/30}{added changes to '@endtheorem' in case that
+% [thmmarks] is not active (WM)}
+%
+% |\@endtheorem| is called for every |\end{|\env|}|, where \env\ is a
+% theorem-like environment.
+% (note that |\@endtheorem| it is also changed by option [thmmarks]
+% to organize the placement of the corresponding end mark).
+% |\InTheoType| gives the innermost theorem-like environment,
+% i.e.\ the one to be ended:
+%
+% \Codelabel{atendtheorem-without}
+% \begin{macrocode}
+\gdef\@endtheorem{%
+ \endtrivlist
+ \csname\InTheoType @postwork\endcsname
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Framed and Boxed Theorems}
+%
+% The option `framed' activates framed and boxed layouts.
+% It requires to load the |framed| package and the |pstricks| package.
+%
+% \changes{v1.21}{2002/12/30}{included option `framed' (WM)}
+% \begin{macro}{framed}
+%
+% \begin{macrocode}
+\DeclareOption{framed}{%*********************************
+\newtoks\shadecolor
+\shadecolor{gray}
+\let\theoremframecommand\relax
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\newshadedtheorem}
+% \changes{v1.30}{2010/08/15}{added `theoremframepre/postskipamount' (WM)}
+% \changes{v1.32}{2011/02/23}{consider lastskip in `theoremprework' (WM)}
+% \changes{v1.32}{2011/02/23}{consider lastskip in `theorempostwork' (WM)}
+% \changes{v1.32}{2011/02/28}{added thm@inframe (WM)}
+% \changes{v1.32}{2011/03/15}{separated `thm@framedprework' and `thm@framedpostwork' (WM)}
+% \begin{macrocode}
+\def\thm@framedprework{%
+ \ifdim\lastskip <\theoremframepreskipamount
+ \vskip -\lastskip
+ \vskip\theoremframepreskipamount
+ \fi
+ \ifuse@newframeskips\vspace{-\topsep}\fi
+ \thm@inframetrue
+ \framed}%
+\def\thm@framedpostwork{%
+ \endframed
+ \ifuse@newframeskips\unskip\fi
+ \vskip\theoremframepostskipamount}%
+% \end{macrocode}
+% \end{macro}
+%
+% Note: since |framed.sty| adds |\topsep| before and after a frame,
+% |\vspace{-\topsep}| and |\unskip| are used to remove it. For compatibility
+% with previous versions, this is only done if the new skip schema is used.
+%
+% \begin{macro}{\newshadedtheorem}
+% \changes{v1.21}{2002/12/30}{added (WM)}
+% \changes{v1.32}{2011/03/15}{use `thm@framedprework' and `thm@framedpostwork' (WM)}
+% \changes{v1.33}{2011/08/15}{have user-defines `thm@pre/postwork' and shading/framing
+% together (cf.\ `newshadedtheorem') (WM)}
+% \begin{macrocode}
+\def\newshadedtheorem#1{%
+ \expandafter\xdef\csname#1@shadecolor\endcsname{%
+ \the\shadecolor}%
+ \ifx\theoremframecommand\relax
+ \expandafter\global\expandafter\xdef\csname#1@framecommand\endcsname{%
+ \noexpand\psframebox[fillstyle=solid,
+ fillcolor=\csname#1@shadecolor\endcsname,
+ linecolor=\csname#1@shadecolor\endcsname]}%
+ \else
+ \expandafter\global\expandafter\let\csname#1@framecommand\endcsname%
+ \theoremframecommand%
+ \fi
+ \expandafter\xdef\csname#1@@prework\endcsname{%
+ \the\theoremprework}%
+ \theoremprework{%
+ \csname#1@@prework\endcsname
+ \def\FrameCommand{\csname#1@framecommand\endcsname}%
+ \thm@framedprework}%
+ \expandafter\xdef\csname#1@@postwork\endcsname{%
+ \the\theorempostwork}%
+ \theorempostwork{%
+ \thm@framedpostwork
+ \csname#1@@postwork\endcsname}%
+ \newtheorem@i{#1}%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\newframedtheorem}
+% \changes{v1.32}{2011/03/15}{use `thm@framedprework' and `thm@framedpostwork',
+% cf.\ `newshadedtheorem' (WM)}
+% \changes{v1.33}{2011/08/15}{have user-defined `thm@pre/postwork' and shading/framing
+% together (cf.\ `newshadedtheorem') (WM)}
+% \begin{macrocode}
+\def\newframedtheorem#1{%
+ \expandafter\xdef\csname#1@@prework\endcsname{%
+ \the\theoremprework}%
+ \theoremprework{\csname#1@@prework\endcsname\thm@framedprework}%
+ \expandafter\xdef\csname#1@@postwork\endcsname{%
+ \the\theorempostwork}%
+ \theorempostwork{\thm@framedpostwork\csname#1@@postwork\endcsname}%
+ \newtheorem@i{#1}%
+ }
+}% end of option framed **********************************************
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Generation of Theorem Lists}\label{sec:CodeLists}
+%
+% The generation of lists of theorems, definitions, etc.\ is based
+% on the |.thm| file.
+%
+% The following macros are are needed for the generation of theorem-lists.
+% We will document it for the theorem
+% |\begin{definition}[optional]|, which we assume to be the first
+% definition at all and which is placed on page 5.
+%
+% \begin{macro}{\thm@thmcaption}
+% This macro, used internally, strips of the outer brackets
+% from the second argument and calls |\thm@@thmcaption|.
+% It's typically called like this
+% \begin{quote}
+% |\thm@thmcaption{definition}{{Definition}{1}{optional}}|
+% \end{quote}
+% (internal name of the environment, output keyword, running number,
+% optional text)
+% \begin{macrocode}
+\def\thm@thmcaption#1#2{\thm@@thmcaption{#1}#2}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\thm@@thmcaption}
+% \changes{v1.18}{1999/12/25}{'thm@parseforwriting' also for \#2 (WM)}
+% |\thm@caption| is called from |\thm@caption|; it writes an
+% appropriate entry to the |.thm|-file.
+% \Codelabel{thmcaption}
+% \begin{macrocode}
+\def\thm@@thmcaption#1#2#3#4{%
+ \thm@parseforwriting{#2}%
+ \let\thm@tmpii\thm@tmp
+ \thm@parseforwriting{#4}%
+ \edef\thm@t{{\thm@tmpii}{#3}{\thm@tmp}}%
+ \addcontentsline{thm}{#1}{\thm@t}}
+% \end{macrocode}
+%
+% Arguments:
+% \env:=|#1| is the internal environment name,
+% \meta{output\_name}:=|#2| is its keyword to be used in the
+% output, |#3| is the running number, and |#4| is the optional
+% text argument in the header.
+%
+% \begin{packeddescr}
+% \item[Lines \Coderef{thmcaption}{1}, \Coderef{thmcaption}{2}:]
+% the command sequence for the output keyword is prepared by
+% |\thm@parseforwriting| (which returns |\thm@tmpii|) and then
+% stored in |\thm@tmpii|.
+% \item[Line \Coderef{thmcaption}{3}:]
+% the optional text is also prepared by |\thm@parseforwriting|
+% \item[Lines \Coderef{thmcaption}{4}, \Coderef{thmcaption}{5}:]
+% The output is collected and written into the |.aux| file,
+% which will forward it to the theorem-file.
+% \end{packeddescr}
+% \end{macro}
+%
+% The following two macros are just shortcuts, often needed
+% for the output of one single line in the theorem-lists. The
+% first one is used in unnamed lists, the second one in named.
+% Warning: Don't remove the leading |\let|, since you will get
+% wrong |\if|-|\fi|-nesting without it, if you don't use
+% |hyperref|.
+% \begin{macro}{\thm@@thmline@noname}
+% \changes{v1.17}{1999/09/06}{intruduced shortcuts for single lines in lists (AS)}
+% \changes{v1.17}{1999/09/07}{hyperref adjustment (AS)}
+% \begin{macrocode}
+\def\thm@@thmline@noname#1#2#3#4{%
+ \@dottedtocline{-2}{0em}{2.3em}%
+ {\protect\numberline{#2}#3}%
+ {#4}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\thm@@thmline@name}
+% \begin{macrocode}
+\def\thm@@thmline@name#1#2#3#4{%
+ \@dottedtocline{-2}{0em}{2.3em}%
+ {#1 \protect\numberline{#2}#3}%
+ {#4}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\thm@thmline}
+% This is another short one, which only discards the outer brackets
+% from the first argument and calls |\thm@@thmline|. It's normally
+% called like this:
+% \begin{quote}
+% |\thm@@thmline{{Definition}{1}{optional}}{5}|
+% \end{quote}
+% \begin{macrocode}
+\def\thm@thmline#1#2{\thm@@thmline#1{#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\thm@lgobble}
+% \changes{v1.31}{2011/02/14}{split 'thm@lgobble' into 'thm@lgobble@entry'
+% and 'thm@lgobble@freetext' (WM)}
+% The following macros are used to ignore entries for theorem sets, that
+% should not occur in a given list:
+% \begin{macrocode}
+\long\def\thm@lgobble@entry#1#2{\ignorespaces}
+\long\def\thm@lgobble@freetext#1#2{\ignorespaces}
+% \end{macrocode}
+% \end{macro}
+%
+% The following four macros set up the predefined list-types. To do so,
+% they define the internal macros |\thm@@thmlstart| (containing the code
+% to be executed at the beginning of the list), |\thm@@thmlend| (code
+% to be executed at the end of the list) and |\thm@@thmline| (code to
+% be executed for every line). In order to gain compatibility with
+% |newthm.sty|, we decided not to make this commands inaccessible
+% to the user. But we recommend not using these commands, because they may
+% disappear in later distributions.
+%
+% \begin{macro}{\theoremlistall}
+% This one implements the type |all|.
+% \begin{macrocode}
+\def\theoremlistall{%
+ \let\thm@@thmlstart=\relax
+ \let\thm@@thmlend=\relax
+ \let\thm@@thmline=\thm@@thmline@noname}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\theoremlistallname}
+% And here's the type |allname|.
+% \begin{macrocode}
+\def\theoremlistallname{%
+ \let\thm@@thmlstart=\relax
+ \let\thm@@thmlend=\relax
+ \let\thm@@thmline=\thm@@thmline@name}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\theoremlistoptional}
+% This one is the list-type |opt|. In case of |[hyperref]|, the fifth
+% argument, which is provided by |hyperref.sty| is automatically
+% given to |\thm@@thmline@noname|.
+% \begin{macrocode}
+\def\theoremlistoptional{%
+ \let\thm@@thmlstart=\relax
+ \let\thm@@thmlend=\relax
+ \def\thm@@thmline##1##2##3##4{%
+ \ifx\empty ##3%
+ \else
+ \thm@@thmline@noname{##1}{##2}{##3}{##4}%
+ \fi}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\theoremlistoptname}
+% And the last type, |optname|. In case of |[hyperref]|, the fifth
+% argument, which is provided by |hyperref.sty| is automatically
+% given to |\thm@@thmline@name|.
+% \begin{macrocode}
+\def\theoremlistoptname{%
+ \let\thm@@thmlstart=\relax
+ \let\thm@@thmlend=\relax
+ \def\thm@@thmline##1##2##3##4{%
+ \ifx\empty ##3%
+ \else%
+ \thm@@thmline@name{##1}{##2}{##3}{##4}%
+ \fi}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\theoremlisttype}
+% \changes{v0.92}{1997/03/03}{added error-handling (AS)}
+% The next one is the user-interface for selecting the list-type. It simply
+% calls |\thm@thml@|\meta{type}, if the given \meta{type} is defined.
+% \begin{macrocode}
+\def\theoremlisttype#1{%
+ \@ifundefined{thm@thml@#1}%
+ {\PackageError{\basename}{Listtype #1 not defined}\@eha}%
+ {\csname thm@thml@#1\endcsname}}
+% \end{macrocode}
+% \end{macro}
+% Now, here is the code, which maps the types -- selected by
+% |\theoremlisttype| -- to the defined macros.
+% \begin{macrocode}
+\def\thm@thml@all{\theoremlistall}
+\def\thm@thml@opt{\theoremlistoptional}
+\def\thm@thml@optname{\theoremlistoptname}
+\def\thm@thml@allname{\theoremlistallname}
+% \end{macrocode}
+%
+% \begin{macro}{\newtheoremlisttype}
+% \changes{v0.86}{1997/02/15}{added (AS)}
+% \changes{v0.92}{1997/03/03}{added error-handling (AS)}
+% According to the given documentation, this one can be used to define
+% new list-types. It's done by defininig the macro
+% |\thm@thml@|\meta{type}, which \emph{locally} redefines
+% the commands |\thm@thmlstart|, |\thm@@thmline| and |\thm@@thmlend|.
+% \begin{macrocode}
+\def\newtheoremlisttype#1#2#3#4{%
+ \@ifundefined{thm@thml@#1}%
+ {\expandafter\gdef\csname thm@thml@#1\endcsname{%
+ \def\thm@@thmlstart{#2}%
+ \def\thm@@thmline####1####2####3####4{#3}%
+ \def\thm@@thmlend{#4}}%
+ }{\PackageError{\basename}{list type #1 already defined}\@eha}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\renewtheoremlisttype}
+% \changes{v0.93}{1997/03/12}{introduced newtheoremlisttype (WM)}
+% \begin{macrocode}
+\def\renewtheoremlisttype#1#2#3#4{%
+ \@ifundefined{thm@thml@#1}%
+ {\PackageError{\basename}{List type #1 not defined}\@ehc}{}%
+ \expandafter\let\csname thm@thml@#1\endcsname\relax
+ \newtheoremlisttype{#1}{#2}{#3}{#4}}
+% \end{macrocode}
+% if the list type to be redefined is already defined, make it undefined
+% and define it.
+% \end{macro}
+%
+%
+% \begin{macro}{\thm@definelthm}
+% For each theorem-set, we need to initialize two commands:
+% \begin{itemize}
+% \item how to typeset entries in the list, |\l@|\meta{theorem-set}.
+% it is called for each theorem when the list is generated.
+% \item how to typeset additional text in the list,
+% |\thm@listdo|\meta{theorem-set}. It is called, when something is
+% to a list with |\addtotheoremfile|.
+% \end{itemize}
+% These macros are initially defined by |\newtheorem| to
+% discard the input by calling |\thm@lgobble@entry| (for actual
+% entries) and |\thm@lgobble@freetext| (for free text added by the user).
+% These macros must be adapted if a package uses another format for
+% |\contentsline| entries in the |.aux| file (e.g., |hyperref|).
+% \begin{macrocode}
+\def\thm@definelthm#1{%
+ \expandafter\gdef\csname l@#1\endcsname{\thm@lgobble@entry}%
+ \expandafter\gdef\csname thm@listdo#1\endcsname{\thm@lgobble@freetext}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\thm@inlistdo}
+% When additional text is added to a theorem list via |\addtotheoremfile|,
+% this is typeset by the following is macro. It simply discards
+% the first argument and strips of the outer brackets from the second one.
+% \begin{macrocode}
+\long\def\thm@inlistdo#1#2{#2}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\listtheorems}
+% \changes{v0.89}{1997/02/18}{fixed a bug for lists (AS)}
+% \changes{v0.92}{1997/03/02}{made commands global in order to handle
+% tabular-lists (AS)}
+% The following macro provides the user interface:
+% \Codelabel{listtheorems}
+% \begin{macrocode}
+\def\listtheorems#1{\begingroup
+ \c@tocdepth=-2%
+ \def\thm@list{#1}\thm@processlist
+ \endgroup}
+% \end{macrocode}
+%
+% \begin{packeddescr}
+% \item[Line \Coderef{listtheorems}{1}:]
+% |#1| is a list of theorem sets, i.e., of the form |Theorem| or
+% |Theorem, Definition, ...|.
+% \item[Line \Coderef{listtheorems}{2}:] set |tocdepth| to $-2$ to assure
+% that the predefined list-types work.
+% \item[Line \Coderef{listtheorems}{3}:] store the list of names in |thm@list|
+% and call |\thm@processlist|, which actually generates the list.
+% \end{packeddescr}
+% \end{macro}
+% \begin{macro}{\thm@processlist}
+%
+% \changes{v1.17}{1999/09/06}{Switch to normal contentsline-behaviour for
+% lists (hyperref) (AS)}
+% \changes{v1.19}{2001/01/13}{check for yet undefined theoremsets (WM)}
+% The file \meta{jobname}|.thm| contains commands of the form \\
+% \hspace*{0.5cm}
+% |\contentsline{|\meta{list-of-theoremsets}|}{{|\meta{header}|}{|\meta{number}|}}{|\meta{page}|}|.\\
+% Thus, dependent on which theoremsets should be listed,
+% |\contentsline| must be defined to evaluate the first argument and then
+% to output all arguments, or to discard the second and third one.
+%
+% This is done as follows:
+% The commands |\l@|\meta{theorem-set} and |\thm@listdo|\meta{theorem-set}
+% (which initially were set to ignore everything by |\newtheorem|)
+% are redefined for the theorem sets which should be listed to
+% generate output.
+% |\contentsline| is defined to call |\l@|\meta{theorem-set}, adding a
+% line to the list or ignoring the entry.
+% Since for theorem sets which are not yet known (i.e., if the list
+% is created at the beginning of the document, and the theoremset is
+% only defined later), |\l@|\meta{theorem-set} is not yet defined,
+% |\contentsline| has to check if the command is defined, otherwise
+% ignore the arguments.
+%
+% Then, the |.thm| file is processed, evaluating the |\contentsline|
+% commands.
+% After processing the |.thm| file, the mentioned commands are
+% again redefined to discard everything. We need to define the macros
+% globally for dealing with complex, user-defined, list-types.
+%
+% \changes{v1.31}{2011/02/14}{split 'thm@lgobble' into 'thm@lgobble@entry'
+% and 'thm@lgobble@freetext' (WM, reported by Barbara Santa)}
+% \begin{macrocode}
+\def\thm@processlist{%
+ \begingroup
+ \typeout{** Generating table of \thm@list}%
+ \def\contentsline##1{%
+ \expandafter\@ifundefined{l@##1}%
+ {\thm@lgobble@entry}{\csname l@##1\endcsname}}%
+ \thm@@thmlstart
+ \@for\thm@currentlist:=\thm@list
+ \do{%
+ \ifx\thm@currentlist\@empty\else
+ \expandafter\gdef\csname l@\thm@currentlist\endcsname{\thm@thmline}%
+ \expandafter\gdef\csname thm@listdo\thm@currentlist\endcsname{\thm@inlistdo}%
+ \fi
+ }%
+ \@input{\jobname .thm}%
+ \thm@@thmlend
+ \@for\thm@currentlist:=\thm@list
+ \do{%
+ \ifx\thm@currentlist\@empty\else
+ \expandafter\gdef\csname l@\thm@currentlist\endcsname
+ {\thm@lgobble@entry}%
+ \expandafter\gdef\csname thm@listdo\thm@currentlist\endcsname
+ {\thm@lgobble@freetext}%
+ \fi
+ }%
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\thm@enablelistoftheorems}
+% \changes{v0.92}{1997/03/02}{renamed (AS)}
+% Up to now, we've set up various macros for writing and reading the
+% theorem-file.
+% Thus, it's time to set up the file itself. This is done by the next macro.
+% We simply took the lines for |\@starttoc| from the \LaTeX-base and
+% changed some things. The main intention to copy |\@starttoc| is that
+% we don't want the file to be input when it is set up -- like it's done
+% by |\@starttoc|.
+% \begin{macrocode}
+\def\thm@enablelistoftheorems{%
+ \begingroup
+ \makeatletter
+ \if@filesw
+ \expandafter\newwrite\csname tf@thm\endcsname%
+ \immediate\openout \csname tf@thm\endcsname \jobname.thm\relax%
+ \fi
+ \@nobreakfalse
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\addtheoremline}
+% \changes{v0.89}{1997/02/18}{added (AS)}
+% By |\addtheoremline{|\meta{theorem-set}|}{|\meta{entry}|}|,
+% the user can insert an extra entry into the theorem-file.
+% |\addtheoremline*| calls the internal macro
+% |\nonum@addtheoremline|, otherwise |\num@addtheoremline| is called.
+% |\num/nonum@addtheoremline{|\meta{theorem-set}|}{|\meta{entry}|}|
+% calls
+% |\num/nonum@addtheoremline|\meta{theorem-set}|{|\meta{entry}|}|
+% which are
+% defined when \meta{theorem-set} is declared (cf.\ |\@nthm|).
+% These in turn call |\@num/nonum@addtheoremline{|\meta{theorem-set}%
+% |}{|\meta{keyword}|}{|\meta{entry}|}|
+% which write information to the theorem file.
+%
+% \begin{macrocode}
+\def\addtheoremline{\@ifstar{\nonum@addtheoremline}{\num@addtheoremline}}
+\def\nonum@addtheoremline#1{\csname nonum@addtheoremline#1\endcsname}%
+\def\num@addtheoremline#1{\csname num@addtheoremline#1\endcsname}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@nonum@addtheoremline}
+% |\@num@addtheoremline| and |\@nonum@addtheoremline| write the
+% actual entries to the |.thm| file. \\
+% Syntax: |\@num/nonum@addtheoremline{|%
+% \meta{theorem-set}|}{|\meta{keyword}|}{|\meta{entry}|}|
+% \begin{macrocode}
+\def\@nonum@addtheoremline#1#2#3{%
+ \thm@parseforwriting{#3}%
+ \edef\thm@t{{#2}{}{\thm@tmp}}%
+ \addcontentsline{thm}{#1}{\thm@t}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@num@addtheoremline}
+% \begin{macrocode}
+\def\@num@addtheoremline#1#2#3{%
+ \thm@parseforwriting{#3}%
+ \edef\thm@t{{#2}{\csname the#1\endcsname}{\thm@tmp}}%
+ \addcontentsline{thm}{#1}{\thm@t}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\addtotheoremfile}
+% \changes{v0.89}{1997/02/18}{added (AS)}
+% To write any additional stuff into the theorem-file, the next macro
+% is used. It first checks, if the optional name of a theorem-set is given.
+% In that case, the macro |\@@addtotheoremfile|, otherwise
+% |\@addtotheoremfile| is used to write the stuff into the file.
+% \begin{macrocode}
+\long\def\addtotheoremfile{%
+ \@ifnextchar[{\@@addtotheoremfile}{\@addtotheoremfile}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@addtotheoremfile}
+% Write additional stuff for all theorems.
+% \begin{macrocode}
+\long\def\@addtotheoremfile#1{%
+ \thm@parseforwriting{#1}%
+ \protected@write\@auxout%
+ {}{\string\@writefile{thm}{\thm@tmp}}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@addtotheoremfile}
+% Write additional stuff for a given theorem-set.
+% \begin{macrocode}
+\long\def\@@addtotheoremfile[#1]#2{%
+ \thm@parseforwriting{#2}%
+ \protected@write\@auxout%
+ {}{\string\@writefile{thm}{\string\theoremlistdo{#1}{\thm@tmp}}}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\theoremlistdo}
+% \changes{v1.19}{2001/01/13}{check for yet undefined theoremsets (WM)}
+% This one is called from the theorem-file to insert the additional
+% stuff for a theorem-set.
+% \begin{macrocode}
+\long\def\theoremlistdo#1#2{\expandafter\@ifundefined{thm@listdo#1}%
+ \relax{\csname thm@listdo#1\endcsname{#1}{#2}}}
+% \end{macrocode}
+% \end{macro}
+%
+% Now we assure, that the theorem-file is activated. This is done by
+% inserting a hook at the end of the document.
+% \changes{v0.83}{1997/02/13}{added `AtEndDocument'-Hook for lists (AS)}
+% \begin{macrocode}
+\AtEndDocument{\thm@enablelistoftheorems}
+% \end{macrocode}
+%
+% \paragraph{Theoremlists and Hyperref}
+%
+% Since the |hyperref|-package redefines |\contentsline|, some
+% commands are redefined:
+% \begin{enumerate}
+% \item Let the different versions of |\thm@@thmline@..| take a 5th
+% argument, the one provided by |hyperref|.
+% \item handle contentsline: restore the normal
+% definition at the beginning of |\thm@processlist| (see there),
+% that calls |l@|\meta{theorem-set} that in turn calls the
+% adapted commands for typestting the entries (see below). .
+% \item Let |\thm@lgobble@entry| take one more argument,
+% the one provided by hyperref.
+% \item Do the hyperlinks manually in the different versions of
+% |\thm@@thmline| as defined by the theoremtypes.
+% \end{enumerate}
+%
+% \begin{macro}{hyperref}
+% \changes{v1.17}{1999/09/07}{added 'hyperref' option
+% (AS, based on a proposal by Didier Verna)}
+% \begin{macrocode}
+\DeclareOption{hyperref}{% **********************************************
+ \def\thm@@thmline@noname#1#2#3#4#5{%
+ \ifx\\#5\\%
+ \@dottedtocline{-2}{0em}{2.3em}%
+ {\protect\numberline{#2}#3}%
+ {#4}%
+ \else
+ \ifHy@linktocpage\relax\relax
+ \@dottedtocline{-2}{0em}{2.3em}%
+ {\protect\numberline{#2}#3}%
+ {\hyper@linkstart{link}{#5}{#4}\hyper@linkend}
+ \else
+ \@dottedtocline{-2}{0em}{2.3em}%
+ {\hyper@linkstart{link}{#5}{\protect\numberline{#2}#3}%
+ \hyper@linkend}%
+ {#4}%
+ \fi
+ \fi}%
+ \def\thm@@thmline@name#1#2#3#4#5{%
+ \ifx\\#5\\%
+ \@dottedtocline{-2}{0em}{2.3em}%
+ {#1 \protect\numberline{#2}#3}%
+ {#4}
+ \else
+ \ifHy@linktocpage\relax\relax
+ \@dottedtocline{-2}{0em}{2.3em}%
+ {#1 \protect\numberline{#2}#3}%
+ {\hyper@linkstart{link}{#5}{#4}\hyper@linkend}%
+ \else
+ \@dottedtocline{-2}{0em}{2.3em}%
+ {\hyper@linkstart{link}{#5}%
+ {#1 \protect\numberline{#2}#3}\hyper@linkend}%
+ {#4}%
+ \fi
+ \fi}
+ \def\thm@thmline#1#2#3{\thm@@thmline#1{#2}{#3}}
+ \long\def\thm@lgobble@entry#1#2#3{\ignorespaces}
+ \def\theoremlistoptional{%
+ \let\thm@@thmlstart=\relax
+ \let\thm@@thmlend=\relax
+ \def\thm@@thmline##1##2##3##4##5{%
+ \ifx\empty ##3%
+ \else%
+ \thm@@thmline@noname{##1}{##2}{##3}{##4}{##5}%
+ \fi}}
+ \def\theoremlistoptname{%
+ \let\thm@@thmlstart=\relax
+ \let\thm@@thmlend=\relax
+ \def\thm@@thmline##1##2##3##4##5{%
+ \ifx\empty ##3%
+ \else%
+ \thm@@thmline@name{##1}{##2}{##3}{##4}{##5}%
+ \fi}}
+% \end{macrocode}
+% \changes{v1.20}{2002/01/07}{replaced ifhy by ifHy (AS, reported by J.J.Bataille)}
+% \end{macro}
+%
+% \paragraph{Theorem References and Hyperref}
+%
+% \begin{macro}{hyperref-thref}
+% When |hyperref| is active, the handling of |thref| described above via
+% the |.aux| file redefinition of |\@newl@bel| is not possible (|hyperref|
+% forces its definitions at |\AtBeginDocument|). Instead, an internal
+% identifier of the form |Theorem.1.1| is used in the |.aux| file for
+% the hypertarget (using the type of the counter; thus when a theorem type
+% uses another counter, this does not give the theorem type itself).
+% The same id is stored in the |.thm| file for
+% the respective theorem. by this, given the id from the |\newlabel| in
+% the |.aux| file, the |.thm| file can be searched for the actual type
+% information.
+%
+% \changes{v1.31}{2011/02/15}{added for fixing problems (WM, reported by
+% Gunner Gewiss)}
+% \Codelabel{hyperthref}
+% \begin{macrocode}
+\if@thref
+\def\@firstofthree#1#2#3{#1}%
+\def\getKeywordOf#1{%
+ \let\thm@oldcontentsline\contentsline
+ \def\contentsline##1##2##3##4{%
+ \ifthenelse{\equal{#1}{##4}}{\@firstofthree##2}{}%
+ \ignorespaces}%
+ \@input{\jobname .thm}%
+ \let\contentsline\thm@oldcontentsline
+}
+\def\thm@fmt@hyplabel@i#1#2#3#4#5{%
+ \getKeywordOf{#4}~\thm@fmt@hyplabel@ii#4}
+\def\thm@fmt@hyplabel@ii#1.#2{#2}%
+\def\thref#1{%
+ \expandafter\@setref\csname r@#1\endcsname\thm@fmt@hyplabel@i{#1}}%
+\fi % end of \if@thref
+}% end of option hyperref *********************************************
+% \end{macrocode}
+% \begin{packeddescr}
+% \item[Lines \Coderef{hyperthref}{2}-\Coderef{hyperthref}{10}:]
+% given an id |#1| of the form |Theorem.1.1|, scan the |.thm| file
+% for a |\contentsline| whose 4th argument equals the id. If found,
+% the third component of its second argument gives its theorem type.
+% \item[Lines \Coderef{hyperthref}{11}-\Coderef{hyperthref}{13}:]
+% this command must have 5 arguments because it is applied to
+% the information stored with |\newlabel| in the |.aux| file. The
+% 4th argument is the id |#4| of the form |Theorem.1.1|. \\
+% Get the correct keyword by |\getKeywordOf{#4}| and its number
+% (which is the part following the first ``.'').
+% \item[Lines \Coderef{hyperthref}{14}-\Coderef{hyperthref}{15}:]
+% create a hyperlink via |\@setref| (see |hyperref.sty|): |\@setref|
+% takes three arguments: |r@|\meta{label} := $arg_1$ is the information
+% from |\newlabel| in the |.aux| file (consisting of 5 components).
+% The 2nd argument $arg_2$ must be a command that uses 5 arguments,
+% here |\thm@fmt@hyplabel@i{#1}| as defined in Lines
+% \Coderef{hyperthref}{11}-\Coderef{hyperthref}{13}. The
+% 3rd one is the label, and is only used for error messages.
+% |\@setref| then --roughly-- applies $arg_2$ on $arg_1$.
+% \end{packeddescr}
+% \end{macro}
+%
+% \subsubsection{Auxiliary macros}
+%
+% For generating theorem-lists, we need to write information into
+% a separate file. Beause we don't want to expand this information,
+% we parse it specially for writing.
+% \begin{macrocode}
+\def\thm@meaning#1->#2\relax{#2}% remove "macro: ->"
+\long\def\thm@parseforwriting#1{%
+ \def\thm@tmp{#1}%
+ \edef\thm@tmp{\expandafter\thm@meaning\meaning\thm@tmp\relax}}
+% \end{macrocode}
+%
+% In some countries it's usual to number theorems with greek letters:
+%
+% \begin{macro}{\theorem@checkbold}
+% \changes{v0.83}{1997/02/13}{fixed greek numbering for bold headers (AS)}
+% For correctness, we need to check if a bold font is active. This
+% is done by the following macro:
+% \begin{macrocode}
+\def\theorem@checkbold{\if b\expandafter\@car\f@series\@nil\boldmath\fi}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@greek}
+% Accoding to \LaTeX-base, this is the internal command for generating
+% lowercase greek numberings.
+% \begin{macrocode}
+\def\@greek#1{\theorem@checkbold%
+ \ifcase#1\or$\alpha$\or$\beta$\or$\gamma$\or$\delta$\or$\varepsilon$%
+ \or$\zeta$\or$\eta$\or$\vartheta$\or$\iota$\or$\kappa$\or$\lambda$\or$%
+ \mu$\or$\nu$\or$\xi$\or$ o$\or$\varpi$\or$\varrho$\or$\varsigma$\or$\tau$%
+ \or$\upsilon$\or$\varphi$\or$\chi$\or$\psi$\or$\omega$\else\@ctrerr\fi}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@Greek}
+% According to \LaTeX-base, this is the internal command for generating
+% uppercase greek numberings.
+% \begin{macrocode}
+\def\@Greek#1{\theorem@checkbold%
+ \ifcase#1\or A\or B\or$\Gamma$\or$\Delta$\or E%
+ \or Z\or H\or$\Theta$\or I\or K\or$\Lambda$\or M%
+ \or N\or$\Xi$\or O\or$\Pi$\or P\or$\Sigma$\or T%
+ \or$\Upsilon$\or$\Phi$\or X\or$\Psi$\or$\Omega$\else\@ctrerr\fi}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\greek}
+% According to \LaTeX-base, this is the user interface for lowercase
+% greek numberings.
+% \begin{macrocode}
+\def\greek#1{\@greek{\csname c@#1\endcsname}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Greek}
+% According to \LaTeX-base, this is the user interface for uppercase
+% greek numberings.
+% \begin{macrocode}
+\def\Greek#1{\@Greek{\csname c@#1\endcsname}}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Other Things}
+%
+% After declaring several package-options, we need to process the
+% specified ones. The additional |\relax| was mentioned by Rainer Sch\"opf
+% at DANTE'97.
+% \begin{macrocode}
+\ProcessOptions\relax
+% \end{macrocode}
+% Now we set up the default theorem listtype. Make sure this is called after
+% processing the options. Otherwise, |ntheorem| will break with |hyperref|.
+% \begin{macrocode}
+\theoremlistall
+% \end{macrocode}
+%
+% If automatical configuration is not disabled by |[noconfig]|, it is
+% checked if the file |ntheorem.cfg| exists and in this case
+% the definitions in this file are read. If it does not exist and the
+% option |standard| was specified, the file |ntheorem.std| is used.
+%
+% \changes{v0.84}{1997/02/13}{added 'ntheorem.cfg' feature (AS)}
+% \changes{v1.11}{1998/10/26}{added 'noconfig' option (AS/WM)}
+% \begin{macrocode}
+\ifx\thm@noconfig\@undefined
+\InputIfFileExists{ntheorem.cfg}%
+ {\PackageInfo{\basename}{Local config file ntheorem.cfg used}}%
+ {\ifx\thm@usestd\@undefined%
+ \else%
+ \InputIfFileExists{ntheorem.std}%
+ {\PackageInfo{\basename}{Standard config file ntheorem.std used}}{}
+ \fi}
+\fi
+% \end{macrocode}
+%\iffalse
+%</package>\fi
+%
+% \subsection{The Standard Configuration}
+%
+% \changes{v0.84}{1997/02/13}{moved standard-theorems to extra file (AS)}
+% \setcounter{CodelineNo}{0}
+%\iffalse
+%<*standard>\fi
+% \begin{macrocode}
+\theoremnumbering{arabic}
+\theoremstyle{plain}
+\RequirePackage{latexsym}
+\theoremsymbol{\ensuremath{_\Box}}
+\theorembodyfont{\itshape}
+\theoremheaderfont{\normalfont\bfseries}
+\theoremseparator{}
+\newtheorem{Theorem}{Theorem}
+\newtheorem{theorem}{Theorem}
+\newtheorem{Satz}{Satz}
+\newtheorem{satz}{Satz}
+\newtheorem{Proposition}{Proposition}
+\newtheorem{proposition}{Proposition}
+\newtheorem{Lemma}{Lemma}
+\newtheorem{lemma}{Lemma}
+\newtheorem{Korollar}{Korollar}
+\newtheorem{korollar}{Korollar}
+\newtheorem{Corollary}{Corollary}
+\newtheorem{corollary}{Corollary}
+
+\theorembodyfont{\upshape}
+\newtheorem{Example}{Example}
+\newtheorem{example}{Example}
+\newtheorem{Beispiel}{Beispiel}
+\newtheorem{beispiel}{Beispiel}
+\newtheorem{Bemerkung}{Bemerkung}
+\newtheorem{bemerkung}{Bemerkung}
+\newtheorem{Anmerkung}{Anmerkung}
+\newtheorem{anmerkung}{Anmerkung}
+\newtheorem{Remark}{Remark}
+\newtheorem{remark}{Remark}
+\newtheorem{Definition}{Definition}
+\newtheorem{definition}{Definition}
+
+\theoremstyle{nonumberplain}
+\theoremheaderfont{\scshape}
+\theorembodyfont{\normalfont}
+\theoremsymbol{\ensuremath{_\blacksquare}}
+\RequirePackage{amssymb}
+\newtheorem{Proof}{Proof}
+\newtheorem{proof}{Proof}
+\newtheorem{Beweis}{Beweis}
+\newtheorem{beweis}{Beweis}
+\qedsymbol{\ensuremath{_\blacksquare}}
+\theoremclass{LaTeX}
+% \end{macrocode}
+%\iffalse
+%</standard>\fi
+%
+% \section{History and Acknowledgements}
+%
+% \subsection{The endmark-Story (Wolfgang May)}
+%
+% In 1995, I started a hack for setting endmarks semiautomatically
+% at the end of displayed formulas.
+% The work on |thmmarks.sty| begun in October 1996
+% by a thread asking for a routine for setting endmarks in
+% \emph{de.comp.tex}
+% initiated by Boris Piwinger.
+% Version 0.1 incorporated the main features for setting endmarks
+% automagically by using the |.aux| file. Version 0.2 included
+% some bugfixes and was the first one accessible on the internet.
+% Boris suggested to include |fleqn| and |leqno| which has been
+% done in version 0.3 (which was never made public).
+% Since at this point, |thmmarks.sty| was incompatible to the widely
+% used |theorem.sty| written by Frank Mittelbach, in Version 0.4,
+% the features of theorem.sty have been integrated.
+%
+% With version 0.5, the case of ``empty'' end symbols has been handled,
+% |\qed| has been added (also suggested by Boris), and
+% the handling of theoremstyles by |\newtheoremstyle| has been
+% included.
+%
+% For version 0.6, the handling of endmarks in displaymaths has been
+% changed in order to adjust them with the bottom of the displayed
+% math.
+%
+% Version 0.6 was the first one announced in \emph{comp.text.tex}.
+% For version 0.7, I added the handling of |amsmath| features,
+% suggested by my colleague Peter Neuhaus.
+%
+% Versions 0.71 and 0.72 incorporated minor bugfixes.
+%
+% \subsection{Lists, Lists, Lists (Andreas Schedler)}
+%
+% I often saw questions on theoremlists in the
+% german newsgroup \emph{de.comp.text.tex}, but I never
+% spent any attention on those postings. This changed in
+% summer 1996, when I needed those lists for myself. Thus, I
+% asked the holy question. But none of the given answers
+% satisfied my wish for a simple, easy to use and short
+% solution.
+%
+% I decided to take a look at Frank Mittelbachs
+% |theorem.sty|. First I didn't understand much of the code,
+% but Bernd Raichle helped me a lot by answering my
+% boring questions and I finally understood it.
+%
+% I started the coding and within a few days, a first
+% experimental version was born. Not only that I had implemented
+% the lists, I also inserted a separator and a flexible numbering
+% of the theorems.
+%
+% After a long period of
+% testing, I wanted to share the new features with other
+% \TeX-Freaks and wrote an article for the ``Die \TeX nische Kom\"odie''
+% (Journal of german tug, DANTE e.V.). As soon as I had sent
+% the article to DANTE, I got first reactions on the style.
+% Gerd Neugebauer gave me many hints. I hided several
+% cryptical notations in easy definitions and improved the
+% user interface.
+%
+% In January 1997, I released ``newthm'' to the world and it
+% was uploaded to the CTAN-Archives. Few days later I sent
+% my files to Frank Mittelbach in order to show him my extensions.
+% He told me, that already other extensions were made, and that
+% it would be good to combine alltogether.
+%
+% \subsection{Let's come together}
+%
+% With version 0.8, in February 1997, the combination of
+% |thmmarks.sty| with |newthm.sty| to |ntheorem.sty| has been started.
+% On April 21, 1997, version 0.94 beta has been made public as
+% version 1.0.
+%
+% In course of the development, the following changes were made:
+%
+% \GlossaryPrologue{}
+%
+% \IfFileExists{ntheorem.gls}{\PrintChanges}
+% {\begin{quote}You should create the list of changes by
+%
+% ~~~ \texttt{makeindex -s gglo.ist -o ntheorem.gls ntheorem.glo}
+%
+% and running \texttt{latex ntheorem.drv} again.\end{quote}}
+%
+%
+% \subsection{Acknowledgements}
+%
+% This place is dedicated to all those, who helped us developing
+% our separate styles and this combined package. Thanks to
+% (listed in alphabetical order):
+% \begin{quote}
+% Donald Arseneau,
+% Giovanni Dore,
+% Oliver Karch,
+% Frank Mittelbach,
+% Gerd Neugebauer,
+% Heiko Oberdiek,
+% Boris Piwinger,
+% Bernd Raichle,
+% Rainer Sch\"opf,
+% Didier Verna.
+% \end{quote}
+%
+% \Finale
+\endinput
+
+% Local Variables:
+% TeX-command-default: "LaTeX"
+% TeX-master: t
+% End:
+% mode: latex
diff --git a/macros/latex/contrib/ntheorem/ntheorem.ins b/macros/latex/contrib/ntheorem/ntheorem.ins
new file mode 100644
index 0000000000..6f8d87d4b5
--- /dev/null
+++ b/macros/latex/contrib/ntheorem/ntheorem.ins
@@ -0,0 +1,18 @@
+\def\filedate{1997/04/21}
+\def\batchfile{ntheorem.ins}
+\input docstrip.tex
+\generateFile{ntheorem.drv}{t}{\from{ntheorem.dtx}{driver}}
+\generateFile{ntheorem.sty}{t}{\from{ntheorem.dtx}{package}}
+\generateFile{ntheorem.std}{t}{\from{ntheorem.dtx}{standard}}
+%
+\Msg{***************************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the following}
+\Msg{* files into a directory searched by TeX:}
+\Msg{*}
+\Msg{* All the files with the extension '.sty' and '.std'}
+\Msg{*}
+\Msg{* To produce the documentation run the .drv File through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{***************************************************************}
diff --git a/macros/latex/contrib/ntheorem/ntheorem.pdf b/macros/latex/contrib/ntheorem/ntheorem.pdf
new file mode 100644
index 0000000000..2dfe1507d4
--- /dev/null
+++ b/macros/latex/contrib/ntheorem/ntheorem.pdf
Binary files differ