\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
