From a9409c96664c73e4fd0586f358845df19b1afd62 Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Mon, 21 Feb 2022 03:01:01 +0000
Subject: CTAN sync 202202210301

---
 .../contrib/caption/fallback/v3.1/caption.dtx      | 7985 ++++++++++++++++++++
 1 file changed, 7985 insertions(+)
 create mode 100644 macros/latex/contrib/caption/fallback/v3.1/caption.dtx

(limited to 'macros/latex/contrib/caption/fallback/v3.1/caption.dtx')

diff --git a/macros/latex/contrib/caption/fallback/v3.1/caption.dtx b/macros/latex/contrib/caption/fallback/v3.1/caption.dtx
new file mode 100644
index 0000000000..4bc736fdb9
--- /dev/null
+++ b/macros/latex/contrib/caption/fallback/v3.1/caption.dtx
@@ -0,0 +1,7985 @@
+% \iffalse meta-comment
+% 
+% This is file `caption.dtx'.
+% 
+% Copyright (C) 1994-2010 Axel Sommerfeldt (caption@sommerfee.de)
+% 
+% --------------------------------------------------------------------------
+% 
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+%   http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+% 
+% This work has the LPPL maintenance status "maintained".
+% 
+% This Current Maintainer of this work is Axel Sommerfeldt.
+% 
+% This work consists of the files caption.ins, caption.dtx, caption2.dtx,
+% ltcaption.dtx, and subcaption.dtx, the derived files caption.sty,
+% caption2.sty, caption3.sty, ltcaption.sty, and subcaption.sty, and the
+% user manuals caption-deu.tex, caption-eng.tex, and caption-rus.tex.
+% 
+% \fi
+% \CheckSum{7218}
+%
+% \iffalse
+%<*driver>
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\ProvidesFile{caption.drv}[2010/01/14 v3.1m Implementation of the caption package]
+\hbadness=9999 \newcount\hbadness \hfuzz=100pt % Make TeX shut up.
+%\errorcontextlines=3
+%
+\documentclass{ltxdoc}
+\setlength\parindent{0pt}
+\setlength\parskip{\smallskipamount}
+%
+%\let\ORIsubsection\subsection
+%\def\subsection{\clearpage\ORIsubsection}
+%
+\makeatletter % make room for subsections like 2.16.14 in the TOC
+%\newcommand*\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\renewcommand*\l@subsubsection{\@dottedtocline{3}{3.8em}{3.6em}}
+\makeatother
+%
+\usepackage{ifpdf}
+\ifpdf
+  \usepackage{mathptmx,courier}
+  \usepackage[scaled=0.90]{helvet}
+  \addtolength\marginparwidth{15pt}
+\fi
+%
+\usepackage{hypdoc}
+\ifpdf\usepackage{hypdestopt}\fi
+\hypersetup{pdfkeywords={LaTeX, package, caption},pdfstartpage={},pdfstartview={}}
+%
+\usepackage[debug]{caption}[2009/10/09]
+%
+\DeclareRobustCommand*\eTeX{\texorpdfstring
+  {\leavevmode\hbox{$\varepsilon$}-\TeX}%
+  {e-TeX}}
+\DeclareRobustCommand*\AmS{\texorpdfstring
+  {{\protect\usefont{OMS}{cmsy}{m}{n}A\kern-.1667em\lower.5ex\hbox{M}\kern-.125emS}}%
+  {AMS}}
+\DeclareRobustCommand*\KOMAScript{\texorpdfstring
+  {\textsf{K\kern.05em O\kern.05em M\kern.05em A\kern.1em-\kern.1em Script}}%
+  {KOMA-Script}}
+\DeclareRobustCommand*\NTG{NTG}
+\DeclareRobustCommand*\SmF{SMF}
+%
+\begin{document}
+  \DocInput{caption.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \newcommand*\purerm[1]{{\upshape\mdseries\rmfamily #1}}
+% \newcommand*\puresf[1]{{\upshape\mdseries\sffamily #1}}
+% \newcommand*\purett[1]{{\upshape\mdseries\ttfamily #1}}
+% \let\class\puresf \let\package\puresf
+% \let\env\purett \let\opt\purett
+%
+% \def\thispackage{the \package{caption} package}
+% \def\Thispackage{The \package{caption} package}
+%
+% \newcommand*\csmarg[1]{\texttt{\char`\{#1\char`\}}}
+% \newcommand*\csoarg[1]{\texttt{\char`\[#1\char`\]}}
+% \newcommand*\version[2][]{\textit{v#2}}
+% \newcommand*\x{\discretionary{-}{}{}}
+% \newcommand*\xx{\discretionary{}{}{}}
+%
+% \GetFileInfo{caption.drv}
+% \let\docdate\filedate
+% \GetFileInfo{caption.sty}
+%
+% \title{The Implementation of
+%        \texorpdfstring{\thispackage\thanks{%^^A
+%          This package has version number \fileversion, last revised \filedate.}}%^^A
+%        {the caption package}}
+% \author{Axel Sommerfeldt\\
+%         \href{mailto:caption@sommerfee.de}{\texttt{caption@sommerfee.de}}}
+% \date{\docdate}
+% \maketitle
+%
+% \begin{abstract}
+% \Thispackage\ consists of two parts -- the kernel
+% (|caption3.sty|) and the main package (|caption.sty|).
+%
+% The kernel provides all the user commands and internal macros which are
+% necessary for typesetting captions and setting parameters regarding these.
+% While the standard \LaTeX\ document classes provide an internal command
+% called |\@makecaption| and no options to control its behavior (except the
+% vertical skips above and below the caption itself), we provide similar
+% commands called |\caption@make| and |\caption@@make|, but with a lot of
+% options which can be selected with |\captionsetup|.
+% Loading the kernel part do not change the output of a \LaTeX\ document
+% -- it just provides functionality which can be used by \LaTeXe\ packages
+% which typesets captions, for example the \package{caption} and
+% \package{subfig} packages.
+%
+% \Thispackage\ redefines the \LaTeX\ commands
+% |\caption|, |\@caption|, and |\@makecaption| and maps the latter one to
+% |\caption@@make|, giving the user the possibility to control the look \& feel
+% of the captions from floating environments like |figure| and |table|.
+% Furthermore it does similar to the caption stuff coming from other packages
+% (like the \package{longtable} or \package{supertabular} package):
+% Mapping the appropriate internal commands (like |\LT@makecaption| or
+% |\ST@caption|) to the ones offered by the \package{caption3} kernel.
+% So you can think of \thispackage\ as a layer package, it
+% simply provides adaptation layers between the caption stuff coming from
+% \LaTeXe\ or packages, and the caption stuff offered by the
+% \package{caption3} kernel.
+% \end{abstract}
+% 
+% \section*{User manuals}
+%
+% This document is describing the code implementation only. The user
+% documentation can be found in
+% \nopagebreak\begin{quote}
+% \begin{tabular}{ll}
+% \href{ftp://ctan.tug.org/tex-archive/macros/latex/contrib/caption/caption-eng.pdf}%
+%      {\texttt{caption-eng.pdf}} & The English documentation \\
+% \href{ftp://ctan.tug.org/tex-archive/macros/latex/contrib/caption/caption-rus.pdf}%
+%      {\texttt{caption-rus.pdf}} & The Russian documentation\footnotemark \\
+% \href{ftp://dante.ctan.org/tex-archive/macros/latex/contrib/caption/caption-deu.pdf}%
+%      {\texttt{caption-deu.pdf}} & The German documentation \\
+% \end{tabular}
+% \footnotetext{Thanks a lot to Olga Lapko for this translation}
+% \end{quote}
+%
+% \StopEventually{}
+% \clearpage
+% \tableofcontents
+% 
+% \iffalse
+% --------------------------------------------------------------------------- %
+% \fi
+%
+% \DoNotIndex{\\,\_,\ ,\@@par}
+% \DoNotIndex{\@bsphack}
+% \DoNotIndex{\@car,\@cdr,\@classoptionslist,\@cons,\@currext,\@currname}
+% \DoNotIndex{\@ehc,\@ehd,\@empty,\@esphack,\@expandtwoargs}
+% \DoNotIndex{\@for,\@firstofone,\@firstoftwo}
+% \DoNotIndex{\@gobble,\@gobblefour,\@gobbletwo,\@hangfrom}
+% \DoNotIndex{\if@minipage\@ifnextchar,\@ifpackagelater,\@ifpackageloaded}
+% \DoNotIndex{\@ifstar,\@ifundefined,\@latex@error,\@minipagefalse,\@minipagetrue}
+% \DoNotIndex{\@namedef,\@nameuse}
+% \DoNotIndex{\@onlypreamble,\@parboxrestore,\@plus,\@ptionlist}
+% \DoNotIndex{\@removeelement,\@restorepar,\@secondoftwo,\@setminipage,\@setpar}
+% \DoNotIndex{\@tempa,\@tempboxa,\@tempdima,\@tempdimb,\@tempdimc,\@tempb,\@tempc}
+% \DoNotIndex{\@testopt}
+% \DoNotIndex{\@undefined,\@unprocessedoptions,\@unusedoptionlist}
+% \DoNotIndex{\p@,\z@}
+% \DoNotIndex{\active,\addtocounter,\addtolength,\advance,\aftergroup}
+% \DoNotIndex{\baselineskip,\begin,\begingroup,\bfseries,\box}
+% \DoNotIndex{\catcode,\centering,\changes,\csname,\def,\divide,\do,\downarrow}
+% \DoNotIndex{\edef,\else,\empty,\end,\endcsname,\endgraf,\endgroup,\expandafter}
+% \DoNotIndex{\fi,\footnotesize,\global}
+% \DoNotIndex{\hangindent,\hbox,\hfil,\hsize,\hskip,\hspace,\hss}
+% \DoNotIndex{\ifcase,\ifdim,\ifnum,\ifodd,\ifvoid,\ifvmode}
+% \DoNotIndex{\ifx,\ignorespaces,\itshape}
+% \DoNotIndex{\Large,\large,\leavevmode,\leftmargini,\leftskip,\let,\linewidth}
+% \DoNotIndex{\llap,\long,\m@ne,\margin,\mdseries,\message}
+% \DoNotIndex{\newcommand,\newdimen,\newlength,\newline,\newif,\newsavebox}
+% \DoNotIndex{\next,\nobreak,\nobreakspace,\noexpand,\noindent,\numberline}
+% \DoNotIndex{\normalcolor,\normalfont,\normalsize,\or,\par,\parbox,\parfillskip}
+% \DoNotIndex{\parindent,\parskip,\prevdepth,\protect,\protected@edef,\protected@write}
+% \DoNotIndex{\providecommand,\quad}
+% \DoNotIndex{\raggedleft,\raggedright,\relax,\renewcommand,\RequirePackage}
+% \DoNotIndex{\rightskip,\rmfamily}
+% \DoNotIndex{\sbox,\scriptsize,\scshape,\setbox,\setlength,\sffamily,\slshape}
+% \DoNotIndex{\small,\string,\space,\strut}
+% \DoNotIndex{\textheight,\the,\toks@,\typeout,\ttfamily}
+% \DoNotIndex{\unvbox,\uparrow,\upshape,\usebox,\usepackage}
+% \DoNotIndex{\value,\vbox,\vsize,\vskip,\wd,\width,\z@skip}
+% \DoNotIndex{\AtBeginDocument,\AtEndOfPackage,\CurrentOption,\DeclareOption}
+% \DoNotIndex{\ExecuteOptions,\GenericWarning,\IfFileExists,\InputIfFileExists}
+% \DoNotIndex{\NeedsTeXFormat,\MessageBreak}
+% \DoNotIndex{\PackageError,\PackageInfo,\PackageWarning,\PackageWarningNoLine}
+% \DoNotIndex{\PassOptionsToPackage,\ProcessOptions,\ProvidesPackage}
+%
+% \iffalse
+% --------------------------------------------------------------------------- %
+% \fi
+%
+% \setlength{\parskip}{0pt plus 1pt}
+%
+% \changes{v1.0}{1994/10/27}{First release}
+% \changes{v1.1}{1994/11/03}{New option \cs{centerlast}}
+% \changes{v1.2}{1994/11/28}{Support of the \package{float} package}
+% \changes{v1.3}{1995/01/09}{Support of \cs{captionlabelfont} in subcaptions}
+% \changes{v1.4}{1995/01/30}{New option \cs{nooneline}}
+% \changes{v1.4b}{1995/04/05}{Bugfix release}
+% \changes{v3.0}{2003/12/20}{Rewritten; many new commands and features}
+% \changes{v3.0d}{2004/11/28}{Split into two packages:
+%                             \package{caption} \& \package{caption3}}
+%
+% \newcommand*\Note[2][Note]{\par{\small\emph{#1:} #2}\par}
+%
+% \iffalse
+% --------------------------------------------------------------------------- %
+% \fi
+%
+% \clearpage
+% \section{Kernel}
+% \iffalse
+%<*kernel>
+% \fi
+%
+% \subsection{Identification}
+%
+%    \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\ProvidesPackage{caption3}[2010/01/14 v1.1m caption3 kernel (AR)]
+%    \end{macrocode}
+%
+% \subsection{Generic helpers}
+%
+% \begin{macro}{\@nameundef}
+%  This is the opposite to |\@namedef| which is offered by the \LaTeX\ kernel.
+%  We use it to remove the definition of some commands and keyval options after
+%  |\begin{document}| (to save \TeX\ memory) and to remove caption options defined
+%  with |\captionsetup|\oarg{type}.
+%    \begin{macrocode}
+\providecommand*\@nameundef[1]{%
+  \expandafter\let\csname #1\endcsname\@undefined}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@addto@macro}
+%  The \LaTeXe\ kernel offers the internal helper macro |\g@addto@macro| which
+%  globally adds tokens to existing macros, like in |\AtBeginDocument|.
+%  This is the same but it works local, not global
+%  (using \cs{edef} instead of \cs{xdef}).
+%    \begin{macrocode}
+\providecommand\l@addto@macro[2]{%
+  \begingroup
+    \toks@\expandafter{#1#2}%
+    \edef\@tempa{\endgroup\def\noexpand#1{\the\toks@}}%
+  \@tempa}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bothIfFirst}
+% \begin{macro}{\bothIfSecond}
+%  |\bothIfFirst| tests if the first argument is not empty, |\bothIfSecond|
+%  tests if the second argument is not empty. If yes both arguments get
+%  typeset, otherwise none of them.
+%    \begin{macrocode}
+\def\bothIfFirst#1#2{%
+  \protected@edef\caption@tempa{#1}%
+  \ifx\caption@tempa\@empty \else
+    #1#2%
+  \fi}
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\bothIfSecond#1#2{%
+  \protected@edef\caption@tempa{#2}%
+  \ifx\caption@tempa\@empty \else
+    #1#2%
+  \fi}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\caption@ifinlist}
+% \changes{v3.1}{2007/07/29}{Rewritten}
+%  This helper macro checks if the first argument is in the comma separated
+%  list which is offered as second argument. So for example
+%  \begin{quote}
+%    |\caption@ifinlist{frank}{axel,frank,olga,steven}{yes}{no}|
+%  \end{quote}
+%  would expand to |yes|.
+%    \begin{macrocode}
+\newcommand*\caption@ifinlist{%
+  \@expandtwoargs\caption@@ifinlist}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@@ifinlist[2]{%
+  \begingroup
+  \def\@tempa##1,#1,##2\@nil{%
+    \endgroup
+    \ifx\relax##2\relax
+      \expandafter\@secondoftwo
+    \else
+      \expandafter\@firstoftwo
+    \fi}%
+  \@tempa,#2,#1,\@nil}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@ifin@list}
+% \changes{v3.1}{2007/08/12}{This macro added}
+% |\caption@ifin@list|\marg{cmd}\marg{list entry}\marg{yes}\marg{no}
+%    \begin{macrocode}
+\newcommand*\caption@ifin@list[2]{%
+  \caption@ifempty@list#1%
+    {\@secondoftwo}%
+    {\@expandtwoargs\caption@@ifinlist{#2}{#1}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@g@addto@list}
+% \changes{v3.1}{2007/07/29}{This macro added}
+% |\caption@g@addto@list|\marg{cmd}\marg{list entry}
+%    \begin{macrocode}
+\newcommand*\caption@g@addto@list[2]{%
+  \caption@ifempty@list#1{\gdef#1{#2}}{\g@addto@macro#1{,#2}}}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\caption@l@addto@list}
+% \changes{v3.1}{2007/07/29}{This macro added}
+% |\caption@l@addto@list|\marg{cmd}\marg{list entry}
+%    \begin{macrocode}
+\newcommand*\caption@l@addto@list[2]{%
+  \caption@ifempty@list#1{\def#1{#2}}{\l@addto@macro#1{,#2}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@g@removefrom@list}
+% \changes{v3.1}{2007/07/29}{This macro added}
+% |\caption@g@removefrom@list|\marg{cmd}\marg{list entry}
+%    \begin{macrocode}
+\newcommand*\caption@g@removefrom@list[2]{%
+  \caption@l@removefrom@list#1{#2}%
+  \global\let#1#1}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\caption@l@removefrom@list}
+% \changes{v3.1}{2007/07/29}{This macro added}
+% |\caption@l@removefrom@list|\marg{cmd}\marg{list entry}\par
+% \Note[Caveat]{\meta{cmd} will be expanded during this process since
+%               \cs{@removeelement} is using \cs{edef} to build the new list!}
+%    \begin{macrocode}
+\newcommand*\caption@l@removefrom@list[2]{%
+  \caption@ifempty@list#1{}{\@expandtwoargs\@removeelement{#2}#1#1}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@for@list}
+% \changes{v3.1}{2007/07/29}{This macro added}
+% |\caption@for@list|\marg{cmd}\marg{code with \#1}
+%    \begin{macrocode}
+\newcommand*\caption@for@list[2]{%
+  \caption@ifempty@list#1{}{%
+    \def\caption@tempb##1{#2}%
+    \@for\caption@tempa:=#1\do{%
+      \expandafter\caption@tempb\expandafter{\caption@tempa}}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@ifempty@list}
+% \changes{v3.1}{2007/07/29}{This macro added}
+% |\caption@ifempty@list|\marg{cmd}\marg{true}\marg{false}
+%    \begin{macrocode}
+\newcommand*\caption@ifempty@list[1]{%
+  \ifx#1\@undefined
+    \expandafter\@firstoftwo
+  \else\ifx#1\relax
+    \expandafter\expandafter\expandafter\@firstoftwo
+  \else\ifx#1\@empty
+    \expandafter\expandafter\expandafter\expandafter
+      \expandafter\expandafter\expandafter\@firstoftwo
+  \else
+    \expandafter\expandafter\expandafter\expandafter
+      \expandafter\expandafter\expandafter\@secondoftwo
+  \fi\fi\fi}
+%    \end{macrocode}
+% \end{macro}
+%
+% \pagebreak[3]
+% \begin{macro}{\caption@setbool}
+% \begin{macro}{\caption@set@bool}
+% \changes{v3.1}{2007/04/05}{\cs{caption@set@bool}\marg{cmd}\marg{value} added}
+% \begin{macro}{\caption@ifbool}
+% \begin{macro}{\caption@undefbool}
+%  For setting and testing boolean options we offer these three helper macros:
+%  \begin{quote}
+%  |\caption@setbool|\marg{name}\marg{value}\\
+%  |                |(with |value = false/true/no/yes/off/on/0/1|)\\
+%  |\caption@ifbool|\marg{name}\marg{if-clause}\marg{else-clause}\\
+%  |\caption@undefbool|\marg{name}
+%  \end{quote}
+%    \begin{macrocode}
+\newcommand*\caption@setbool[1]{%
+  \expandafter\caption@set@bool\csname caption@if#1\endcsname}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@set@bool[2]{%
+  \caption@ifinlist{#2}{1,true,yes,on}{%
+    \let#1\@firstoftwo
+  }{\caption@ifinlist{#2}{0,false,no,off}{%
+    \let#1\@secondoftwo
+  }{%
+    \caption@Error{Undefined boolean value `#2'}%
+  }}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@ifbool[1]{\@nameuse{caption@if#1}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@undefbool[1]{\@nameundef{caption@if#1}}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\caption@teststar}
+% \changes{v3.1}{2007/05/08}{This macro and its usage added}
+% \changes{v3.1e}{2007/10/28}{\cs{caption@teststar@} added}
+%  |\caption@teststar|\marg{cmd}\marg{star arg}\marg{non-star arg}\\
+%  |\caption@teststar@|\marg{cmd}\marg{star arg}\marg{non-star arg}
+%    \begin{macrocode}
+\newcommand*\caption@teststar[3]{\@ifstar{#1{#2}}{#1{#3}}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@teststar@[3]{%
+  \@ifstar{#1{#2}}{\caption@ifatletter{#1{#2}}{#1{#3}}}}
+\AtBeginDocument{\let\caption@teststar@\caption@teststar}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@ifatletter{%
+  \ifnum\the\catcode`\@=11
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi}
+\AtBeginDocument{\let\caption@ifatletter\@secondoftwo}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@withoptargs}
+% \changes{v3.1}{2007/08/12}{This macro added}
+%  |\caption@withoptargs|\marg{cmd}
+%    \begin{macrocode}
+\newcommand*\caption@withoptargs[1]{%
+  \@ifstar
+    {\def\caption@tempa{*}\caption@@withoptargs#1}%
+    {\def\caption@tempa{}\caption@@withoptargs#1}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\caption@@withoptargs#1{%
+  \@ifnextchar[%]
+    {\caption@@@withoptargs#1}%
+    {\caption@@@@withoptargs#1}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\caption@@@withoptargs#1[#2]{%
+  \l@addto@macro\caption@tempa{[{#2}]}%
+  \caption@@withoptargs#1}
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\caption@@@@withoptargs#1{%
+  \expandafter#1\expandafter{\caption@tempa}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@CheckCommand}
+% \changes{v3.1}{2007/04/10}{This macro added}
+% \begin{macro}{\caption@IfCheckCommand}
+% \changes{v3.1}{2007/04/10}{This macro added}
+% \changes{v3.1i}{2008/08/02}{Revised so \cs{next} is no longer used}
+%  |\caption@CheckCommand|\marg{macro}\marg{definition of macro}\par
+%  checks if a command already exists, with the same definition.
+%  It can be used more-than-once to check if one of multiple definitions will
+%  finally match.
+%  (It redefines itself later on to |\@gobbletwo| if the two commands match
+%   fine, making further checks harmless.)\par
+%  |\caption@IfCheckCommand|\marg{true}\marg{false}\par
+%  will execute the \meta{true} code if one match was finally given,
+%  the \meta{false} code otherwise.
+%  (It simply checks if |\caption@CheckCommand| is |\@gobbletwo| and
+%   restores the starting definition of |\caption@CheckCommand|.)
+%    \begin{macrocode}
+\newcommand\caption@DoCheckCommand[2]{%
+  \begingroup
+    \let\@tempa#1%
+    #2%
+    \ifx\@tempa#1%
+      \endgroup
+      \let\caption@CheckCommand\@gobbletwo
+    \else
+      \endgroup
+    \fi}
+\@onlypreamble\caption@DoCheckCommand
+%    \end{macrocode}
+%    \begin{macrocode}
+\let\caption@CheckCommand\caption@DoCheckCommand
+\@onlypreamble\caption@CheckCommand
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@IfCheckCommand{%
+  \ifx\caption@CheckCommand\@gobbletwo
+    \let\caption@CheckCommand\caption@DoCheckCommand
+    \expandafter\@firstoftwo
+  \else
+    \expandafter\@secondoftwo
+  \fi}
+\@onlypreamble\caption@IfCheckCommand
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\caption@AtBeginDocument}
+% \changes{v3.1}{2007/04/13}{This macro and its usage added}
+% \changes{v3.1l}{2010/01/09}{Adapted to the combine document class}
+%  |\caption@AtBeginDocument*|\marg{code}\\
+%  Same as |\AtBeginDocument| but the execution of code
+%  will be surrounded by two |\PackageInfo|s.
+%  The starred variant causes the code to be executed after all code
+%  specified using the non-starred variant.
+%    \begin{macrocode}
+\let\caption@begindocumenthook\@empty
+\let\caption@@begindocumenthook\@empty
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\caption@AtBeginDocument{%
+  \caption@teststar\g@addto@macro
+    \caption@@begindocumenthook\caption@begindocumenthook}
+%\@onlypreamble\caption@AtBeginDocument
+%    \end{macrocode}
+%    \begin{macrocode}
+\AtBeginDocument{%
+   \PackageInfo{caption}{Begin \noexpand\AtBeginDocument code\@gobble}%
+%    \end{macrocode}
+%    \begin{macrocode}
+   \def\caption@AtBeginDocument{%
+     \@ifstar{\g@addto@macro\caption@@begindocumenthook}\@firstofone}%
+   \caption@begindocumenthook
+   \let\caption@begindocumenthook\relax
+%    \end{macrocode}
+%    \begin{macrocode}
+   \def\caption@AtBeginDocument{%
+     \@ifstar\@firstofone\@firstofone}%
+   \caption@@begindocumenthook
+   \let\caption@@begindocumenthook\relax
+%    \end{macrocode}
+%    \begin{macrocode}
+   \PackageInfo{caption}{End \noexpand\AtBeginDocument code\@gobble}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{Errors}
+%
+% \begin{macro}{\caption@Warning}
+% \changes{v3.1c}{2007/10/14}{This macro added, will now be used for warnings}
+% \begin{macro}{\caption@WarningNoLine}
+% \changes{v3.1c}{2007/10/14}{This macro added, will now be used for warnings}
+% \begin{macro}{\caption@Error}
+% \changes{v3.0l}{2007/01/20}{This macro added, will now be used for errors}
+% \changes{v3.0q}{2007/04/11}{Renamed from \cs{caption@error} to \cs{caption@Error}}
+% \changes{v3.1b}{2007/09/18}{Usage of \cs{caption@Package} removed}
+% \begin{macro}{\caption@KV@err}
+% \changes{v3.1b}{2007/09/18}{This macro added}
+%  |\caption@Error|\marg{message}
+%    \begin{macrocode}
+\newcommand*\caption@Warning[1]{%
+  \caption@WarningNoLine{#1\on@line}}
+\newcommand*\caption@WarningNoLine[1]{%
+  \PackageWarning{caption}{#1.^^J\caption@wh\@gobbletwo}}
+\newcommand*\caption@Error[1]{%
+  \PackageError{caption}{#1}\caption@eh}
+\let\caption@KV@err\caption@Error
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\caption@wh}
+% \begin{macro}{\caption@eh}
+%  At the moment we only offer these two simple warning resp. error helpers.
+%    \begin{macrocode}
+\newcommand*\caption@wh{%
+  See the caption package documentation for explanation.}
+\newcommand*\caption@eh{%
+  If you do not understand this error, please take a closer look\MessageBreak
+  at the documentation of the `caption' package, especially the\MessageBreak
+  section about errors.\MessageBreak\@ehc}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Using the keyval package}
+%
+% We need the \package{keyval} package for option handling, so we load it here.
+%    \begin{macrocode}
+\RequirePackage{keyval}[1997/11/10]
+%    \end{macrocode}
+%
+% \begin{macro}{\undefine@key}
+% |\undefine@key|\marg{family}\marg{key}\par
+% This helper macro is the opposite of |\define@key|, it removes a keyval
+% definition.
+%    \begin{macrocode}
+\providecommand*\undefine@key[2]{%
+  \@nameundef{KV@#1@#2}\@nameundef{KV@#1@#2@default}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@onlypreamble@key}
+% \changes{v3.1}{2007/07/22}{This macro added}
+% \changes{v3.1e}{2007/11/01}{\cs{KV@err} will be used now instead of \cs{@notprerr}}
+%  |\onlypreamble@key|\marg{family}\marg{key}\par
+%  Analogous to |\@onlypreamble| from \LaTeXe.
+%    \begin{macrocode}
+\providecommand*\@preamble@keys{}
+\providecommand*\@onlypreamble@key[2]{\@cons\@preamble@keys{{#1}{#2}}}
+\@onlypreamble\@onlypreamble@key
+\@onlypreamble\@preamble@keys
+%    \end{macrocode}
+%    \begin{macrocode}
+\providecommand*\@notprerr@key[1]{\KV@err{Can be used only in preamble}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\caption@AtBeginDocument*{%
+  \def\@elt#1#2{\expandafter\let\csname KV@#1@#2\endcsname\@notprerr@key}%
+  \@preamble@keys
+  \let\@elt\relax}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DeclareCaptionOption}
+%  |\DeclareCaptionOption|\marg{option}\oarg{default value}\marg{code}\\
+%  |\DeclareCaptionOption*|\marg{option}\oarg{default value}\marg{code}\par
+%  We declare our options using these commands (instead of using
+%  |\DeclareOption| offered by \LaTeXe), so the keyval package is used.
+%  The starred form makes the option available during the lifetime of the
+%  current package only, so they can be used with |\usepackage|, but
+%  \emph{not} with |\captionsetup| later on.
+%    \begin{macrocode}
+\newcommand*\DeclareCaptionOption{%
+  \caption@teststar\caption@declareoption\AtEndOfPackage\@gobble}
+\@onlypreamble\DeclareCaptionOption
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@declareoption[2]{%
+  #1{\undefine@key{caption}{#2}}\define@key{caption}{#2}}
+\@onlypreamble\caption@declareoption
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DeclareCaptionOptionNoValue}
+% \changes{v3.1c}{2007/10/06}{This macro added}
+%  |\DeclareCaptionOptionNoValue|\marg{option}\marg{code}\\
+%  |\DeclareCaptionOptionNoValue*|\marg{option}\marg{code}\par
+% Same as \cs{DeclareCaptionOption} but issues an error if a value is given.
+%    \begin{macrocode}
+\newcommand*\DeclareCaptionOptionNoValue{%
+  \caption@teststar\caption@declareoption@novalue\AtEndOfPackage\@gobble}
+\@onlypreamble\DeclareCaptionOptionNoValue
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand\caption@declareoption@novalue[3]{%
+  \caption@declareoption{#1}{#2}[\KV@err]{%
+    \caption@option@novalue{#2}{##1}{#3}}}
+\@onlypreamble\caption@declareoption@novalue
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@option@novalue[2]{%
+  \ifx\KV@err#2%
+    \expandafter\@firstofone
+  \else
+    \KV@err{No value allowed for #1}%
+    \expandafter\@gobble
+  \fi}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifcaptionsetup@star}
+% \changes{v3.1g}{2008/01/12}{This macro added}
+% If the starred form of |\captionsetup| is used, this will be set to |true|.
+% (It will be reset to |false| at the end of |\caption@setkeys|.)
+%    \begin{macrocode}
+\newif\ifcaptionsetup@star
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\captionsetup}
+% \changes{v3.0a}{2004/01/17}{Bugfix: Missing \% added}
+% \changes{v3.1}{2007/07/22}{Starred-variant added}
+% \changes{v3.1e}{2007/07/27}{Inside packages the starred variant will be used automatically}
+% \changes{v3.1f}{2007/11/16}{Bugfix 07-11-09: `space hack' added}
+% \changes{v3.1g}{2008/01/12}{\cs{ifcaptionsetup@star} will be set now}
+%  |\captionsetup|\oarg{type}\marg{keyval-list of options}\\
+%  |\captionsetup*|\oarg{type}\marg{keyval-list of options}\par
+%  If the optional argument `type' is specified, we simply save or append
+%  the option list, otherwise we `execute' it with |\setkeys|.
+%  (The non-starred variant issues a warning if \meta{keyval-list of options}
+%   is not used later on.)
+%  \Note{The starred variant will be used inside packages automatically.}
+%    \begin{macrocode}
+\newcommand*\captionsetup{%
+  \caption@teststar@\@captionsetup\@gobble\@firstofone}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\@captionsetup[1]{%
+  \captionsetup@startrue#1\captionsetup@starfalse
+  \@ifnextchar[\caption@setup@options\caption@setup}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@setup{\caption@setkeys{caption}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\caption@setup@options[#1]#2{%
+  \@bsphack
+    \ifcaptionsetup@star\captionsetup@starfalse\else\caption@addtooptlist{#1}\fi
+    \expandafter\caption@l@addto@list\csname caption@opt@#1\endcsname{#2}%
+  \@esphack}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\clearcaptionsetup}
+% \changes{v3.1}{2007/07/29}{Optional argument added}
+% \changes{v3.1}{2007/08/17}{Starred variant added}
+% \changes{v3.1e}{2007/07/27}{Inside packages the starred variant will be used automatically}
+% \changes{v3.1f}{2007/11/16}{Bugfix 07-11-09: `space hack' added}
+%  |\clearcaptionsetup|\oarg{option}\marg{type}\\
+%  |\clearcaptionsetup*|\oarg{option}\marg{type}\par
+%  This removes the saved option list associated with \meta{type}.
+%  If \meta{option} is given, only this option will be removed from the list.
+%  (The starred variant does not issue warnings.)
+%  \Note{The starred variant will be used inside packages automatically.}
+%    \begin{macrocode}
+\newcommand*\clearcaptionsetup{%
+  \caption@teststar@\@clearcaptionsetup\@gobble\@firstofone}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\@clearcaptionsetup[1]{%
+  \let\caption@tempa#1%
+  \@testopt\@@clearcaptionsetup{}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\@@clearcaptionsetup[#1]#2{%
+  \@bsphack
+    \expandafter\caption@ifempty@list\csname caption@opt@#2\endcsname
+      {\caption@tempa{\caption@Warning{Option list `#2' undefined}}}%
+      {\ifx,#1,%
+         \caption@clearsetup{#2}%
+       \else
+         \caption@@removefromsetup{#1}{#2}%
+       \fi}%
+  \@esphack}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@clearsetup[1]{%
+  \caption@removefromoptlist{#1}%
+  \@nameundef{caption@opt@#1}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@removefromsetup{%
+  \let\caption@tempa\@gobble
+  \caption@@removefromsetup}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@@removefromsetup[2]{%
+  \expandafter\let\expandafter\@tempa\csname caption@opt@#2\endcsname
+  \expandafter\let\csname caption@opt@#2\endcsname\@undefined
+  \def\@tempb##1=##2\@nil{##1}%
+  \edef\@tempc{#1}%
+  \@for\@tempa:=\@tempa\do{%
+    \edef\@tempd{\expandafter\@tempb\@tempa=\@nil}%
+    \ifx\@tempd\@tempc
+      \let\caption@tempa\@gobble
+    \else
+      \expandafter\expandafter\expandafter\caption@l@addto@list
+        \expandafter\csname caption@opt@#2\expandafter\endcsname
+        \expandafter{\@tempa}%
+    \fi}%
+  \expandafter\caption@ifempty@list\csname caption@opt@#2\endcsname
+    {\caption@removefromoptlist{#2}}{}%
+  \caption@tempa{\caption@Warning{%
+    Option `#1' was not in list `#2'\MessageBreak}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\showcaptionsetup}
+% \changes{v3.0e}{2005/05/03}{Optimized for memory usage}
+% \changes{v3.1}{2007/07/29}{Bugfix: Does not expand option list anymore}
+% \changes{v3.1f}{2007/11/16}{Bugfix 07-11-09: `space hack' added}
+%  |\showcaptionsetup|\oarg{package}\marg{type}\par
+%  This comes for debugging issues: It shows the saved option list which
+%  is associated with \meta{type}.
+%    \begin{macrocode}
+\newcommand*\showcaptionsetup[2][\@firstofone]{%
+  \@bsphack
+    \GenericWarning{}{%
+      #1 Caption Info: Option list on `#2'\MessageBreak
+      #1 Caption Data: \@ifundefined{caption@opt@#2}{%
+        -none-%
+      }{%
+        {\expandafter\expandafter\expandafter\strip@prefix
+           \expandafter\meaning\csname caption@opt@#2\endcsname}%
+      }}%
+  \@esphack}
+%    \end{macrocode}
+% \end{macro}
+%
+% \changes{v3.1}{2007/07/02}{Option \opt{options=} added}
+%    \begin{macrocode}
+\DeclareCaptionOption{options}{\caption@setoptions{#1}}
+%    \end{macrocode}
+%
+% \begin{macro}{\caption@setoptions}
+% \changes{v3.0i}{2006/01/03}{Optional argument added}
+% \changes{v3.0j}{2006/01/26}{Revised}
+% \changes{v3.0l}{2007/01/30}{Optional argument removed}
+% \changes{v3.1}{2007/04/11}{Usage of \cs{clearcaptionsetup} added}
+% \changes{v3.1}{2007/05/09}{Renamed from \cs{caption@settype} to \cs{caption@setoptions}}
+% \changes{v3.1f}{2007/12/03}{Definition of \cs{caption@iftypewarning} removed}
+%  |\caption@setoptions|\marg{type or environment or\ldots}\par
+%  Caption options which have been saved with |\captionsetup|\oarg{type} can
+%  be executed by using this command.
+%  It simply executes the saved option list (and clears it afterwards),
+%  if there is any.
+%    \begin{macrocode}
+\newcommand*\caption@setoptions[1]{%
+  \caption@Debug{options=#1}%
+  \expandafter\let\expandafter\caption@opt\csname caption@opt@#1\endcsname
+  \ifx\caption@opt\relax \else
+    \caption@xsetup\caption@opt
+    \caption@clearsetup{#1}%
+  \fi}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@xsetup[1]{\expandafter\caption@setup\expandafter{#1}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@addtooptlist}
+% \changes{v3.1}{2007/07/22}{This macro added}
+% \begin{macro}{\caption@removefromoptlist}
+% \changes{v3.1}{2007/07/22}{This macro added}
+% \changes{v3.1j}{2008/08/24}{Fatal typo corrected}
+% |\caption@addtooptlist|\marg{type}\\
+% |\caption@removefromoptlist|\marg{type}\par
+%  Adds or removes an \meta{type} to the list of unused caption options.
+%  Note that the catcodes of \meta{type} are sanitized here so removing
+%  \meta{type} from the list do not fail when the \package{float} package
+%  is used (since |\float@getstyle| gives a result which tokens have catcode
+%  12 $=$ ``other'').
+%    \begin{macrocode}
+\newcommand*\caption@addtooptlist[1]{%
+  \@ifundefined{caption@opt@#1@lineno}{%
+    \caption@dooptlist\caption@g@addto@list{#1}%
+    \expandafter\xdef\csname caption@opt@#1@lineno\endcsname{\the\inputlineno}%
+  }{}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@removefromoptlist[1]{%
+  \caption@dooptlist\caption@g@removefrom@list{#1}%
+  \global\expandafter\let\csname caption@opt@#1@lineno\endcsname\@undefined}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@dooptlist[2]{%
+  \begingroup
+    \edef\@tempa{#2}\@onelevel@sanitize\@tempa
+    \expandafter#1\expandafter\caption@optlist\expandafter{\@tempa}%
+  \endgroup}
+%    \end{macrocode}
+%    \begin{macrocode}
+\AtEndDocument{%
+  \caption@for@list\caption@optlist{%
+    \caption@WarningNoLine{%
+      Unused \string\captionsetup[#1]
+      on input line \csname caption@opt@#1@lineno\endcsname}}}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\caption@setkeys}
+% \changes{v3.0i}{2006/01/03}{This macro added}
+% \changes{v3.0l}{2007/01/20}{Bugfix: Usage of \cs{caption@keydepth} added}
+% \changes{v3.0l}{2007/01/30}{Optional argument added}
+% \changes{v3.0p}{2007/04/08}{\cs{caption@keydepth} is now a command instead of a counter}
+% \changes{v3.1b}{2007/09/18}{Usage of \cs{caption@Package} removed, we use \cs{caption@KV@err} instead}
+% \changes{v3.1f}{2007/11/16}{Bugfix 07-11-09: `space hack' added}
+% \changes{v3.1g}{2008/01/12}{\cs{captionsetup@starfalse} added}
+% \changes{v3.1k}{2009/09/30}{Bugfix 09-09-29: Missing error handler will be defined automatically}
+%  |\caption@setkeys|\oarg{package}\marg{family}\marg{key-values}\par
+%  This one simply calls |\setkeys|\marg{family}\marg{key-values}
+%  but lets the error messages not refer to the \package{keyval} package,
+%  but to the \meta{package} package instead.
+%    \begin{macrocode}
+\newcommand*\caption@setkeys{\@dblarg\caption@@setkeys}
+%    \end{macrocode}
+%    \begin{macrocode}
+\long\def\caption@@setkeys[#1]#2#3{%
+  \@bsphack
+%    \end{macrocode}
+%    \begin{macrocode}
+  \expandafter\let\csname ORI@KV@err\caption@keydepth\endcsname\KV@err
+  \expandafter\let\csname ORI@KV@errx\caption@keydepth\endcsname\KV@errx
+  \expandafter\let\expandafter\KV@err\csname #1@KV@err\endcsname
+  \ifx\KV@err\relax
+    \def\KV@err##1{\PackageError{#1}{##1}{%
+      See the #1 package documentation for explanation.}}%
+  \fi
+  \let\KV@errx\KV@err
+  \edef\caption@keydepth{\caption@keydepth i}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \caption@Debug{\protect\setkeys{#2}{#3}}%
+  \setkeys{#2}{#3}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \edef\caption@keydepth{\expandafter\@gobble\caption@keydepth}%
+  \expandafter\let\expandafter\KV@err\csname ORI@KV@err\caption@keydepth\endcsname
+  \expandafter\let\expandafter\KV@errx\csname ORI@KV@errx\caption@keydepth\endcsname
+%    \end{macrocode}
+%    \begin{macrocode}
+  \ifx\caption@keydepth\@empty \captionsetup@starfalse \fi
+%    \end{macrocode}
+%    \begin{macrocode}
+  \@esphack}
+%    \end{macrocode}
+%    \begin{macrocode}
+\let\caption@keydepth\@empty
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@ExecuteOptions}
+% \changes{v3.1}{2007/07/15}{This macro added}
+%  |\caption@ExecuteOptions|\marg{family}\marg{key-values}\par
+%  We execute our options using the keyval interface, so we use this one
+%  instead of |\ExecuteOptions| offered by \LaTeXe.
+%    \begin{macrocode}
+\newcommand*\caption@ExecuteOptions[2]{%
+  \@expandtwoargs\caption@setkeys{#1}{#2}}%
+\@onlypreamble\caption@ExecuteOptions
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@ProcessOptions}
+% \changes{v3.0a}{2004/01/23}{Bugfix, see
+%        \purett{news:400D360C.9678329F@gmx.net} for details}
+% \changes{v3.0i}{2006/01/03}{Improvement, uses \cs{caption@setkeys}
+%        instead of \cs{setkeys}}
+% \changes{v3.0j}{2006/02/23}{Bugfix, now processes only those global
+%        options which have a default value}
+% \changes{v3.0l}{2007/01/30}{\cs{ProcessOptionsWithKV} renamed to
+%        \cs{caption@ProcessOptions} and moved from the package to the kernel}
+% \changes{v3.1}{2007/04/17}{Star variant added}
+%  |\caption@ProcessOptions*|\marg{family}\par
+%  We process our options using the keyval package, so we use this one
+%  instead of |\ProcessOptions| offered by \LaTeXe.
+%  The starred variant do not process the global options.
+%  (This code was taken from the \package{hyperref} package\cite{hyperref}
+%   \version{6.74} and improved.)
+%    \begin{macrocode}
+\newcommand*\caption@ProcessOptions{%
+  \caption@teststar\caption@@ProcessOptions\@gobble\@firstofone}
+\@onlypreamble\caption@ProcessOptions
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@@ProcessOptions[2]{%
+  \let\@tempc\relax
+  \let\caption@tempa\@empty
+  #1{% \@firstofone -or- \@gobble
+    \@for\CurrentOption:=\@classoptionslist\do{%
+      \@ifundefined{KV@#2@\CurrentOption}{}{%
+        \@ifundefined{KV@#2@\CurrentOption @default}{%
+          \PackageInfo{#2}{Global option `\CurrentOption' ignored}%
+        }{%
+          \PackageInfo{#2}{Global option `\CurrentOption' processed}%
+          \edef\caption@tempa{\caption@tempa,\CurrentOption,}%
+          \@expandtwoargs\@removeelement\CurrentOption
+            \@unusedoptionlist\@unusedoptionlist
+        }%
+      }%
+    }%
+    \let\CurrentOption\@empty
+  }%
+  \caption@ExecuteOptions{#2}{\caption@tempa\@ptionlist{\@currname.\@currext}}%
+  \AtEndOfPackage{\let\@unprocessedoptions\relax}}
+\@onlypreamble\caption@@ProcessOptions
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{Margin resp. width}
+% \changes{v3.0p}{2007/04/01}{\cs{captionmarginx} renamed to \cs{captionmargin@}}
+% \changes{v3.0p}{2007/04/03}{Option `twoside' added}
+% \changes{v3.1}{2007/08/11}{Options `margin*', `minmargin', and `maxmargin' added}
+% \changes{v3.1f}{2007/11/10}{Option `oneside' added}
+%
+% \begin{macro}{\captionmargin}
+% \begin{macro}{\captionwidth}
+%  |\captionmargin| and |\captionwidth| contain the extra margin
+%  resp. the total width used for captions. Please never set these values in
+%  a direct way, they are just accessible in user documents to provide
+%  compatibility to \version{1.x}.\par
+%  Note that we can only set one value at a time, `margin' \emph{or} `width'.
+%  If |\captionwidth| is not zero we will take this value afterwards,
+%  otherwise |\captionmargin| and |\captionmargin@|.
+%    \begin{macrocode}
+\newdimen\captionmargin
+\newdimen\captionmargin@
+\newdimen\captionwidth
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%    \begin{macrocode}
+\DeclareCaptionOption{margin}{\setcaptionmargin{#1}}
+\DeclareCaptionOption{margin*}{\setcaptionmargin*{#1}}
+\DeclareCaptionOption{width}{\setcaptionwidth{#1}}
+\DeclareCaptionOption{twoside}[1]{\caption@set@bool\caption@iftwoside{#1}}
+\DeclareCaptionOptionNoValue{oneside}{\caption@set@bool\caption@iftwoside0}
+%    \end{macrocode}
+%    \begin{macrocode}
+\DeclareCaptionOption{minmargin}{\caption@setoptcmd\caption@minmargin{#1}}
+\DeclareCaptionOption{maxmargin}{\caption@setoptcmd\caption@maxmargin{#1}}
+%    \end{macrocode}
+%
+% \begin{macro}{\setcaptionmargin}
+% \changes{v3.0h}{2005/10/24}{Renamed from \cs{caption@setmargin} to \cs{setcaptionmargin}}
+% \changes{v3.0h}{2005/10/24}{\cs{setcaptionmargin} enhanced so it can take
+%                             left+right margin}
+% \changes{v3.1}{2007/08/11}{Starred variant added}
+% \changes{v3.1}{2007/08/12}{\cs{setlength}\cs{captionmargin} \&
+%        \cs{setlength}\cs{captionmargin@} swapped so
+%        `\texttt{margin*=}\cs{captionmargin}' works in singleline options}
+%  |\setcaptionmargin|\marg{amount}\\
+%  |\setcaptionmargin*|\marg{amount}\par
+%  Please never use them in user documents, it's just there to
+%  provide compatibility to the \package{caption2} package.
+%    \begin{macrocode}
+\newcommand*\setcaptionmargin{%
+  \caption@teststar\caption@setmargin\@gobble\@firstofone}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@setmargin[2]{%
+  #1{\captionwidth\z@}%
+  \caption@@setmargin#2,#2,\@nil}
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\caption@@setmargin#1,#2,#3\@nil{%
+  \setlength\captionmargin@{#2}%
+  \setlength\captionmargin{#1}%
+  \addtolength\captionmargin@{-\captionmargin}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\setcaptionwidth}
+% \changes{v3.0h}{2005/10/24}{Renamed from \cs{caption@setwidth} to \cs{setcaptionwidth}}
+%  |\setcaptionwidth|\marg{amount}\par
+%  Please never use this in user documents, it's just there to
+%  provide compatibility to the \package{caption2} package.
+%    \begin{macrocode}
+\newcommand*\setcaptionwidth{%
+  \captionmargin\z@
+  \captionmargin@\z@
+  \setlength\captionwidth}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@counter}
+% \changes{v3.0p}{2007/04/03}{This counter added}
+% \changes{v3.1e}{2007/10/28}{Renamed to \cs{caption@thecounter}; \cs{caption@stepcounter} added}
+% This counter numbers the captions. At the moment it will be used inside
+% |\caption@ifoddpage| only.
+%    \begin{macrocode}
+\newcommand*\caption@thecounter{0}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@stepcounter{%
+  \@tempcnta\caption@thecounter
+  \advance\@tempcnta\@ne
+  \xdef\caption@thecounter{\the\@tempcnta}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@newlabel}
+% \changes{v3.0p}{2007/04/03}{This macro added}
+%  This command is a modified version of |\newlabel| from \LaTeX2e.
+%  It will be written to the \texttt{.aux} file to
+%  pass label information from one run to another.
+%  (We use it inside |\caption@ifoddpage| and |\caption@ragged|.)
+%    \begin{macrocode}
+\newcommand*\caption@newlabel{\@newl@bel{caption@r}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@thepage}
+% \changes{v3.0p}{2007/04/03}{This macro added}
+%  This command is a modified version of |\thepage| from \LaTeX2e.
+%  It will be used inside |\caption@ifoddpage| only.
+%    \begin{macrocode}
+\newcommand*\caption@thepage{\the\c@page}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@label}
+% \changes{v3.1}{2007/09/01}{This macro added}
+% \changes{v3.1f}{2007/12/03}{Definition of \cs{caption@newlabel} in AUX file added}
+%  This command is a modified version of |\label| from \LaTeX2e.
+%  It will be used inside |\caption@ifoddpage| and |\FP@helpNote|.
+%    \begin{macrocode}
+\newcommand*\caption@label[1]{%
+  \caption@@label
+  \protected@write\@auxout{\let\caption@thepage\relax}%
+         {\string\caption@newlabel{#1}{\caption@thepage}}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@@label{%
+  \global\let\caption@@label\relax
+  \protected@write\@auxout{}%
+    {\string\providecommand*\string\caption@newlabel[2]{}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@pageref}
+% \changes{v3.1}{2007/09/01}{This macro added}
+% \changes{v3.1k}{2009/10/09}{Uses \cs{@latex@warning} instead of \cs{caption@Warning} now}
+%  This command is a modified version of |\pageref| from \LaTeX2e.
+%  It will be used inside |\caption@ifoddpage| and |\FP@helpNote|.
+%    \begin{macrocode}
+\newcommand*\caption@pageref[1]{%
+  \expandafter\ifx\csname caption@r@#1\endcsname\relax
+    \G@refundefinedtrue % => 'There are undefined references.'
+    \@latex@warning{Reference `#1' on page \thepage \space undefined}%
+  \else
+    \expandafter\let\expandafter\caption@thepage\csname caption@r@#1\endcsname
+  \fi}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@ifoddpage}
+% \changes{v3.0p}{2007/04/03}{This macro added}
+% \changes{v3.1e}{2007/10/28}{Incrementation of counter moved to \cs{caption@@make}}
+%  At the moment this macro uses an own label\ldots ref mechanism,
+%  but an alternative implementation method would be using the
+%  \package{refcount} package\cite{refcount} and |\ifodd\getpagerefnumber{|\ldots|}|.
+%  \Note{This macro re-defines itself so the \texttt{.aux} file will
+%  only be used once per group.}
+%    \begin{macrocode}
+\newcommand*\caption@ifoddpage{%
+  \caption@iftwoside{%
+    \caption@label\caption@thecounter
+    \caption@pageref\caption@thecounter
+    \ifodd\caption@thepage
+      \let\caption@ifoddpage\@firstoftwo
+    \else
+      \let\caption@ifoddpage\@secondoftwo
+    \fi
+  }{\let\caption@ifoddpage\@firstoftwo}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \caption@ifoddpage}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@setoptcmd}
+% \changes{v3.1}{2007/08/11}{This macro added}
+% |\caption@setoptcmd|\marg{cmd}\marg{off -or- value}
+%    \begin{macrocode}
+\newcommand*\caption@setoptcmd[2]{%
+  \caption@ifinlist{#2}{0,false,no,off}{\let#1\@undefined}{\def#1{#2}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{Indentions}
+%
+% \begin{macro}{\caption@indent}
+% \changes{v3.1}{2007/07/29}{Renamed from \cs{captionindent} to \cs{caption@indent}}
+% \begin{macro}{\caption@parindent}
+% \begin{macro}{\caption@hangindent}
+%  These are the indentions we support.
+%    \begin{macrocode}
+\newdimen\caption@indent
+\newdimen\caption@parindent
+\newdimen\caption@hangindent
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \changes{v3.0b}{2004/05/16}{Defaults added for options \opt{parindent=}
+%        and \opt{hangindent=}}
+% \changes{v3.0h}{2005/08/22}{Option \opt{parskip=}: \cs{AtBeginCaption}
+%        replaced by \cs{caption@@par}}
+% \changes{v3.0h}{2005/08/22}{Undocumented defaults for \opt{parindent=},
+%        \opt{hangindent=}, and \opt{parskip=} removed}
+%    \begin{macrocode}
+\DeclareCaptionOption{indent}[\leftmargini]{% obsolete!
+       \setlength\caption@indent{#1}}
+\DeclareCaptionOption{indention}[\leftmargini]{%
+       \setlength\caption@indent{#1}}
+\DeclareCaptionOption{parindent}{%
+       \setlength\caption@parindent{#1}}
+\DeclareCaptionOption{hangindent}{%
+       \setlength\caption@hangindent{#1}}
+\DeclareCaptionOption{parskip}{%
+       \l@addto@macro\caption@@par{\setlength\parskip{#1}}}
+%    \end{macrocode}
+%
+% \changes{v3.0h}{2005/08/22}{Increased compatibility to KOMA-Script:
+%        A special version of options `parindent' and `parskip' added}
+% \changes{v3.0i}{2006/01/03}{Bugfix 06-01-03: KOMA-Script variants of
+%        `parskip' and `parindent' options revised and moved into caption kernel}
+% \changes{v3.0j}{2006/02/23}{KOMA-Script variants of `parskip' and
+%        `parindent' are obsolete now, removed}
+% \changes{v3.0o}{2007/03/30}{KOMA-Script variants of `parskip' and
+%        `parindent' re-added, since they still collide with the current
+%        version of the subfig package (Sigh!)}
+%
+% There is an option clash between the \KOMAScript\ document classes
+% and the \package{caption} kernel, both define the options |parindent| and
+% |parskip| but with different meaning.
+% Furthermore the ones defined by the \package{caption} kernel take a
+% value as parameter but the \KOMAScript\ ones do not.
+% So we need special versions of the options |parindent| and |parskip| here
+% which determine if a value is given (and therefore should be treated as
+% our option) or not (and therefore should be ignored by us).\footnote{%^^A
+% This problem was completely solved due a change of \cs{caption@ProcessOptions}
+% in \thispackage\ \version{3.0j}, but we still need this workaround since
+% these options would otherwise still collide with the current version $1.3$
+% of the \package{subfig} package (Sigh!)}
+%    \begin{macrocode}
+\providecommand*\caption@ifkomaclass{%
+  \@ifundefined{scr@caption}\@gobble\@firstofone}
+\@onlypreamble\caption@ifkomaclass
+%    \end{macrocode}
+%    \begin{macrocode}
+\caption@ifkomaclass{%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \let\caption@KV@parindent\KV@caption@parindent
+  \DeclareCaptionOption{parindent}[]{%
+    \ifx,#1,%
+      \caption@Debug{Option `parindent' ignored}%
+    \else
+      \caption@KV@parindent{#1}%
+    \fi}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \let\caption@KV@parskip\KV@caption@parskip
+  \DeclareCaptionOption{parskip}[]{%
+    \ifx,#1,%
+      \caption@Debug{Option `parskip' ignored}%
+    \else
+      \caption@KV@parskip{#1}%
+    \fi}%
+%    \end{macrocode}
+%    \begin{macrocode}
+}
+%    \end{macrocode}
+%
+% \subsection{Styles}
+%
+% \begin{macro}{\DeclareCaptionStyle}
+% \changes{v3.0a}{2004/01/17}{Pass through argument \#3 so extra spaces
+%        between arguments do make any harm}
+%  |\DeclareCaptionStyle|\marg{name}\oarg{single-line-list-of-KV}\marg{list-of-KV}
+%    \begin{macrocode}
+\newcommand*\DeclareCaptionStyle[1]{%
+  \@testopt{\caption@declarestyle{#1}}{}}
+\@onlypreamble\DeclareCaptionStyle
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\caption@declarestyle#1[#2]#3{%
+  \global\@namedef{caption@sls@#1}{#2}%
+  \global\@namedef{caption@sty@#1}{#3}}
+\@onlypreamble\caption@declarestyle
+%    \end{macrocode}
+% \end{macro}
+%
+% \changes{v3.1g}{2008/01/20}{Option \opt{style*=} added}
+% \changes{v3.1i}{2008/05/06}{Option \opt{slc=} added}
+%    \begin{macrocode}
+\DeclareCaptionOption{style}{\caption@setstyle{#1}}
+\DeclareCaptionOption{style*}{\caption@setstyle*{#1}}
+\DeclareCaptionOption{singlelinecheck}[1]{\caption@set@bool\caption@ifslc{#1}}
+\DeclareCaptionOption{slc}[1]{\KV@caption@singlelinecheck{#1}}
+%    \end{macrocode}
+%
+% \begin{macro}{\caption@setstyle}
+% \changes{v3.0f}{2005/06/01}{Starred variant added}
+% \changes{v3.1}{2007/07/29}{Recursive style definitions should work now}
+% \changes{v3.1d}{2007/10/23}{`SingleLine' renamed to `singleline' for consistency}
+% \changes{v3.1f}{2007/12/03}{Definition of \cs{caption@iftypewarning} removed}
+%  |\caption@setstyle|\marg{name}\\
+%  |\caption@setstyle*|\marg{name}\par
+%  Selecting a caption style means saving the additional
+%  \meta{single-line-list-of-KV} (this will be done by |\caption@sls|),
+%  resetting the caption options to the base ones (this will be done using
+%  |\caption@resetstyle|) and executing the \meta{list-of-KV} options
+%  (this will be done using |\caption@setup|).\par
+%  The starred version will give no error message if the given style is not
+%  defined.
+%    \begin{macrocode}
+\newcommand*\caption@setstyle{%
+  \caption@teststar\caption@@setstyle\@gobble\@firstofone}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@@setstyle[2]{%
+  \@ifundefined{caption@sty@#2}%
+    {#1{\caption@Error{Undefined style `#2'}}}%
+    {\expandafter\let\expandafter\caption@sty\csname caption@sty@#2\endcsname
+     \ifx\caption@setstyle@flag\@undefined
+       \let\caption@setstyle@flag\relax
+       \caption@resetstyle
+       \caption@xsetup\caption@sty
+       \let\caption@setstyle@flag\@undefined
+     \else
+       \caption@xsetup\caption@sty
+     \fi
+     \expandafter\let\expandafter\caption@sls\csname caption@sls@#2\endcsname
+     \expandafter\caption@l@addto@list\expandafter\caption@opt@singleline
+       \expandafter{\caption@sls}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@resetstyle}
+% \changes{v3.1}{2007/02/04}{%
+%       This macro renamed from \cs{caption@setdefault} to \cs{caption@resetstyle}}
+% \changes{v3.1d}{2007/10/23}{`SingleLine' renamed to `singleline' for consistency}
+% \changes{v3.1f}{2007/11/17}{Usage of \texttt{size=} added}
+% \changes{v3.1i}{2008/05/06}{Usage of \texttt{rule} added}
+%  This resets (nearly) all caption options to the base ones.
+%  \emph{Note that this does not touch the skips and the positioning!}
+%    \begin{macrocode}
+\newcommand*\caption@resetstyle{%
+  \caption@setup{%
+    format=plain,labelformat=default,labelsep=colon,textformat=simple,%
+    justification=justified,font=,size=,labelfont=,textfont=,%
+    margin=0pt,minmargin=0,maxmargin=0,%
+    indent=0pt,parindent=0pt,hangindent=0pt,%
+    slc,rule,strut}%
+  \caption@clearsetup{singleline}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \changes{v3.0d}{2005/02/12}{\opt{indent=0pt} added to caption style \opt{default}}
+% \changes{v3.1}{2007/02/04}{Caption style `default' renamed to `base', and a new `default' added}
+% \changes{v3.1}{2007/03/31}{\opt{format=plain} added to caption style \opt{default}}
+% \changes{v3.1c}{2007/10/14}{\opt{format=plain} removed from caption style \opt{default}}
+% Currently there are two pre-defined styles, called `base' \& `default'.
+% The first one is a perfect match to the behavior of |\@makecaption| offered
+% by the standard \LaTeX\ document classes (and was called `default' in
+% \thispackage\ \version{3.0}), the second one matches the document
+% class actually used.
+%    \begin{macrocode}
+\DeclareCaptionStyle{base}[indent=0pt,justification=centering]{}
+\DeclareCaptionStyle{default}[indent=0pt,justification=centering]{%
+  format=default,labelsep=default,textformat=default,%
+  justification=default,font=default,labelfont=default,textfont=default}
+%    \end{macrocode}
+%
+% \subsection{Formats}
+%
+% \begin{macro}{\DeclareCaptionFormat}
+% \changes{v3.0a}{2004/01/17}{Pass through argument \#3 so extra spaces
+%        between arguments do make any harm}
+% \changes{v3.0d}{2005/02/09}{Starred variant added}
+% \changes{v3.1c}{2007/10/15}{Optional argument added}
+%  |\DeclareCaptionFormat|\marg{name}\marg{code with \#1, \#2, and \#3}\\
+%  |\DeclareCaptionFormat*|\marg{name}\marg{code with \#1, \#2, and \#3}\par
+%  The starred form causes the code being typeset in vertical (instead of
+%  horizontal) mode, but does not support the |indention=| option.
+%    \begin{macrocode}
+\newcommand*\DeclareCaptionFormat{%
+  \caption@teststar\caption@declareformat\@gobble\@firstofone}
+\@onlypreamble\DeclareCaptionFormat
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@declareformat[2]{%
+  \@dblarg{\caption@@declareformat#1{#2}}}
+\@onlypreamble\caption@declareformat
+%    \end{macrocode}
+%    \begin{macrocode}
+\long\def\caption@@declareformat#1#2[#3]#4{%
+  \global\expandafter\let\csname caption@ifh@#2\endcsname#1%
+  \global\long\@namedef{caption@slfmt@#2}##1##2##3{#3}%
+  \global\long\@namedef{caption@fmt@#2}##1##2##3{#4}}
+\@onlypreamble\caption@@declareformat
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+\DeclareCaptionOption{format}{\caption@setformat{#1}}
+%    \end{macrocode}
+%
+% \begin{macro}{\caption@setformat}
+%  |\caption@setformat|\marg{name}\par
+%  Selecting a caption format simply means saving the code (in |\caption@fmt|)
+%  and if the code should be used in horizontal or vertical mode (|\caption@ifh|).
+%    \begin{macrocode}
+\newcommand*\caption@setformat[1]{%
+  \@ifundefined{caption@fmt@#1}%
+    {\caption@Error{Undefined format `#1'}}%
+    {\expandafter\let\expandafter\caption@ifh\csname caption@ifh@#1\endcsname
+     \expandafter\let\expandafter\caption@slfmt\csname caption@slfmt@#1\endcsname
+     \expandafter\let\expandafter\caption@fmt\csname caption@fmt@#1\endcsname}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DeclareCaptionDefaultFormat}
+% \changes{v3.1g}{2008/01/31}{This macro added}
+%    \begin{macrocode}
+\newcommand*\DeclareCaptionDefaultFormat[1]{%
+  \expandafter\def\expandafter\caption@fmt@default\expandafter
+    {\csname caption@fmt@#1\endcsname}%
+  \expandafter\def\expandafter\caption@slfmt@default\expandafter
+    {\csname caption@slfmt@#1\endcsname}%
+  \expandafter\def\expandafter\caption@ifh@default\expandafter
+    {\csname caption@ifh@#1\endcsname}}
+\@onlypreamble\DeclareCaptionDefaultFormat
+%    \end{macrocode}
+% \end{macro}
+%
+% \changes{v3.0a}{2004/01/23}{%
+%         Caption format \opt{default} renamed to \opt{normal}}
+% \changes{v3.0f}{2005/05/12}{%
+%         Caption format \opt{normal} renamed to \opt{@normal}}
+% \changes{v3.0h}{2005/08/25}{%
+%         Caption format \opt{@normal} renamed to \opt{plain} and documented}
+% \changes{v3.1c}{2007/10/14}{%
+%         Single-line variant of caption format \opt{hang} added}
+% There are two pre-defined formats, called `plain' and `hang'.
+%    \begin{macrocode}
+\DeclareCaptionFormat{plain}{#1#2#3\par}
+%    \end{macrocode}
+%    \begin{macrocode}
+\DeclareCaptionFormat{hang}[#1#2#3\par]{%
+  \caption@ifin@list\caption@lsepcrlist\caption@lsepname
+    {\caption@Error{%
+       The option `labelsep=\caption@lsepname' does not work\MessageBreak
+       with `format=hang'}}%
+    {\@hangfrom{#1#2}%
+     \advance\caption@parindent\hangindent
+     \advance\caption@hangindent\hangindent
+     \caption@@par#3\par}}
+%    \end{macrocode}
+%
+% \changes{v3.0a}{2004/01/23}{Caption format \opt{default} linked to \opt{plain}}
+% \changes{v3.0e}{2005/04/28}{Bugfix 05-04-28: Missing \cs{caption@ifh@default} added}
+% `default' usually maps to `plain'.
+%    \begin{macrocode}
+\DeclareCaptionDefaultFormat{plain}
+%    \end{macrocode}
+%
+% \subsection{Label formats}
+%
+% \begin{macro}{\DeclareCaptionLabelFormat}
+% \changes{v3.0a}{2004/01/17}{%
+%         Pass through argument \#2 so extra spaces between arguments do make any harm}
+%  |\DeclareCaptionLabelFormat|\marg{name}\marg{code with \#1 and \#2}
+%    \begin{macrocode}
+\newcommand*\DeclareCaptionLabelFormat[2]{%
+  \global\@namedef{caption@lfmt@#1}##1##2{#2}}
+\@onlypreamble\DeclareCaptionLabelFormat
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+\DeclareCaptionOption{labelformat}{\caption@setlabelformat{#1}}
+%    \end{macrocode}
+%
+% \begin{macro}{\caption@setlabelformat}
+%  |\caption@setlabelformat|\marg{name}\par
+%  Selecting a caption label format simply means saving the code (in |\caption@lfmt|).
+%    \begin{macrocode}
+\newcommand*\caption@setlabelformat[1]{%
+  \@ifundefined{caption@lfmt@#1}%
+    {\caption@Error{Undefined label format `#1'}}%
+    {\expandafter\let\expandafter\caption@lfmt\csname caption@lfmt@#1\endcsname}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \changes{v3.1f}{2007/12/16}{Caption label format \opt{brace} added}
+% There are four pre-defined label formats, called `empty', `simple',
+% `parens', and `brace'.
+%    \begin{macrocode}
+\DeclareCaptionLabelFormat{empty}{}
+\DeclareCaptionLabelFormat{simple}{\bothIfFirst{#1}{\nobreakspace}#2}
+\DeclareCaptionLabelFormat{parens}{\bothIfFirst{#1}{\nobreakspace}(#2)}
+\DeclareCaptionLabelFormat{brace}{\bothIfFirst{#1}{\nobreakspace}#2)}
+%    \end{macrocode}
+%
+% `default' usually maps to `simple'.
+%    \begin{macrocode}
+\def\caption@lfmt@default{\caption@lfmt@simple}
+%    \end{macrocode}
+%
+% \subsection{Label separators}
+%
+% \begin{macro}{\DeclareCaptionLabelSeparator}
+% \changes{v3.0a}{2004/01/17}{Pass through argument \#2 so extra spaces
+%         between arguments do make any harm}
+% \changes{v3.0h}{2005/08/25}{Starred variant added}
+% \changes{v3.1}{2007/07/13}{Test for CR added}
+%  |\DeclareCaptionLabelSeparator|\marg{name}\marg{code}\\
+%  |\DeclareCaptionLabelSeparator*|\marg{name}\marg{code}\par
+%  The starred form causes the label separator to be typeset \emph{without} using |\captionlabelfont|.
+%    \begin{macrocode}
+\newcommand\DeclareCaptionLabelSeparator{%
+  \caption@teststar\caption@declarelabelseparator\@gobble\@firstofone}
+\@onlypreamble\DeclareCaptionLabelSeparator
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand\caption@declarelabelseparator[3]{%
+  \global\expandafter\let\csname caption@iflf@#2\endcsname#1%
+  \global\long\@namedef{caption@lsep@#2}{#3}%
+  \caption@@declarelabelseparator{#2}#3\\\@nil}
+\@onlypreamble\caption@declarelabelseparator
+%    \end{macrocode}
+%    \begin{macrocode}
+\long\def\caption@@declarelabelseparator#1#2\\#3\@nil{%
+  \def\@tempa{#3}\ifx\@tempa\@empty \else
+    \caption@g@addto@list\caption@lsepcrlist{#1}%
+  \fi}
+\@onlypreamble\caption@@declarelabelseparator
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+\DeclareCaptionOption{labelsep}{\caption@setlabelseparator{#1}}
+\DeclareCaptionOption{labelseparator}{\caption@setlabelseparator{#1}}
+%    \end{macrocode}
+%
+% \begin{macro}{\caption@setlabelseparator}
+%  |\caption@setlabelseparator|\marg{name}\par
+%  Selecting a caption label separator simply means saving the code (in |\caption@lsep|).
+%    \begin{macrocode}
+\newcommand*\caption@setlabelseparator[1]{%
+  \@ifundefined{caption@lsep@#1}%
+    {\caption@Error{Undefined label separator `#1'}}%
+    {\edef\caption@lsepname{#1}%
+     \expandafter\let\expandafter\caption@iflf\csname caption@iflf@#1\endcsname
+     \expandafter\let\expandafter\caption@lsep\csname caption@lsep@#1\endcsname}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \changes{v3.0f}{2005/06/11}{Bugfix 05-03-23: Caption label separator
+%         \opt{newline} implementation changed from \cs{newline} to \cs{\textbackslash}}
+% \changes{v3.0h}{2005/08/24}{Caption label separator \opt{endash} added}
+% There are seven pre-defined label separators, called `none', `colon', `period', `space',
+% `quad', `newline', and `endash'.
+%    \begin{macrocode}
+\DeclareCaptionLabelSeparator{none}{}
+\DeclareCaptionLabelSeparator{colon}{: }
+\DeclareCaptionLabelSeparator{period}{. }
+\DeclareCaptionLabelSeparator{space}{ }
+\DeclareCaptionLabelSeparator*{quad}{\quad}
+\DeclareCaptionLabelSeparator*{newline}{\\}
+\DeclareCaptionLabelSeparator*{endash}{\space\textendash\space}
+%    \end{macrocode}
+%
+% \begin{macro}{\caption@setdefaultlabelsep}
+% \changes{v3.1k}{2009/03/29}{This macro added}
+%    \begin{macrocode}
+\newcommand*\caption@setdefaultlabelsep[1]{%
+  \ifx\caption@lsep\caption@lsep@default
+    \caption@set@default@labelsep{#1}%
+    \caption@setlabelseparator{default}%
+  \else
+    \caption@set@default@labelsep{#1}%
+  \fi}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@set@default@labelsep[1]{%
+  \def\caption@lsep@default{\@nameuse{caption@lsep@#1}}%
+  \def\caption@iflf@default{\@nameuse{caption@iflf@#1}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% `default' usually maps to `colon'.
+%    \begin{macrocode}
+\caption@set@default@labelsep{colon}
+%    \end{macrocode}
+%
+% \subsection{Text formats}
+%
+% \begin{macro}{\DeclareCaptionTextFormat}
+% \changes{v3.0l}{2007/02/18}{This macro added}
+%  |\DeclareCaptionTextFormat|\marg{name}\marg{code with \#1}
+%    \begin{macrocode}
+\newcommand*\DeclareCaptionTextFormat[2]{%
+  \global\long\@namedef{caption@tfmt@#1}##1{#2}}
+\@onlypreamble\DeclareCaptionTextFormat
+%    \end{macrocode}
+% \end{macro}
+%
+% \changes{v3.0d}{2005/02/12}{Option \opt{strut=} added}
+%    \begin{macrocode}
+\DeclareCaptionOption{textformat}{\caption@settextformat{#1}}
+\DeclareCaptionOption{strut}[1]{\caption@set@bool\caption@ifstrut{#1}}
+%    \end{macrocode}
+%
+% \begin{macro}{\caption@settextformat}
+% \changes{v3.0l}{2007/02/18}{This macro added}
+%  |\caption@settextformat|\marg{name}\par
+%  Selecting a caption text format simply means saving the code (in |\caption@tfmt|).
+%    \begin{macrocode}
+\newcommand*\caption@settextformat[1]{%
+  \@ifundefined{caption@tfmt@#1}%
+    {\caption@Error{Undefined text format `#1'}}%
+    {\expandafter\let\expandafter\caption@tfmt\csname caption@tfmt@#1\endcsname}}
+%    \end{macrocode}
+% \end{macro}
+%
+% There are two pre-defined text formats, called `simple' and `period'.
+%    \begin{macrocode}
+\DeclareCaptionTextFormat{simple}{#1}
+\DeclareCaptionTextFormat{period}{#1.}
+%    \end{macrocode}
+%
+% `default' usually maps to `simple'.
+%    \begin{macrocode}
+\def\caption@tfmt@default{\caption@tfmt@simple}
+%    \end{macrocode}
+%
+% \subsection{Fonts}
+%
+% \begin{macro}{\DeclareCaptionFont}
+% \changes{v3.0a}{2004/01/22}{%
+%         Bugfix: Multi token arguments are allowed now}
+% \changes{v3.1}{2007/05/07}{%
+%         Internal: Uses \cs{caption@fnt} instead of \cs{caption@temp} now}
+%  |\DeclareCaptionFont|\marg{name}\marg{code}
+%    \begin{macrocode}
+\newcommand*\DeclareCaptionFont[2]{%
+  \define@key{caption@fnt}{#1}[]{\l@addto@macro\caption@fnt{#2}}}
+\@onlypreamble\DeclareCaptionFont
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DeclareCaptionDefaultFont}
+% \changes{v3.1}{2006/05/14}{This macro added}
+% \changes{v3.1g}{2008/01/31}{Renamed from \cs{DeclareDefaultCaptionFont} to \cs{DeclareCaptionDefaultFont}}
+%  |\DeclareCaptionDefaultFont|\marg{name}\marg{code}
+%    \begin{macrocode}
+\newcommand*\DeclareCaptionDefaultFont[2]{%
+  \global\@namedef{caption#1@default}{#2}}
+\@onlypreamble\DeclareCaptionDefaultFont
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+\DeclareCaptionOption{font}{\caption@setfont{font}{#1}}
+\DeclareCaptionOption{font+}{\caption@addtofont{font}{#1}}
+\DeclareCaptionDefaultFont{font}{}
+%    \end{macrocode}
+%    \begin{macrocode}
+\DeclareCaptionOption{labelfont}{\caption@setfont{labelfont}{#1}}
+\DeclareCaptionOption{labelfont+}{\caption@addtofont{labelfont}{#1}}
+\DeclareCaptionDefaultFont{labelfont}{}
+%    \end{macrocode}
+%    \begin{macrocode}
+\DeclareCaptionOption{textfont}{\caption@setfont{textfont}{#1}}
+\DeclareCaptionOption{textfont+}{\caption@addtofont{textfont}{#1}}
+\DeclareCaptionDefaultFont{textfont}{}
+%    \end{macrocode}
+%
+% \begin{macro}{\caption@setfont}
+% \changes{v3.0l}{2007/01/30}{Usage of \cs{caption@setkeys} with optional argument}
+% \changes{v3.1}{2006/05/14}{Support of \cs{DeclareDefaultCaptionFont} added}
+%  |\caption@setfont|\marg{name}\marg{keyval-list of names}\par
+%  Selecting a caption font means saving all the code snippets
+%  in |\caption|\meta{name}.
+%    \begin{macrocode}
+\newcommand*\caption@setfont[1]{%
+  \expandafter\let\csname caption#1\endcsname\@empty
+  \caption@addtofont{#1}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@addtofont}
+% \changes{v3.1f}{2007/11/17}{This macro added}
+%  |\caption@addtofont|\marg{name}\marg{keyval-list of names}\par
+%  Like |\caption@setfont|, but adds the code snippets to |\caption|\meta{name}.\par
+%  Because we use |\setkeys| recursive here we need to do this inside an
+%  extra group.
+%    \begin{macrocode}
+\newcommand*\caption@addtofont[2]{%
+  \begingroup
+    \expandafter\let\expandafter\caption@fnt\csname caption#1\endcsname
+    \define@key{caption@fnt}{default}[]{%
+      \l@addto@macro\caption@fnt{\csname caption#1@default\endcsname}}%
+    \caption@setkeys[caption]{caption@fnt}{#2}%
+    \global\let\caption@tempa\caption@fnt
+  \endgroup
+  \expandafter\let\csname caption#1\endcsname\caption@tempa}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@font}
+% \changes{v3.1}{2007/05/07}{This macro added}
+%  |\caption@font|\marg{keyval-list of names}\\
+%  |\caption@font*|\marg{keyval-code}\par
+%  Sets the given font, e.g.~|\caption@font{small,it}|
+%  is equivalent to |\small\itshape|.
+%    \begin{macrocode}
+\newcommand*\caption@font{%
+  \caption@teststar\caption@@font\@firstofone
+          {\caption@setkeys[caption]{caption@fnt}}}
+\newcommand*\caption@@font[2]{%
+  \begingroup
+  \def\caption@fnt{\endgroup}%
+  #1{#2}%
+  \caption@fnt}
+%    \end{macrocode}
+% \end{macro}
+%
+% These are the pre-defined font code snippets.
+%
+% \changes{v3.1}{2007/05/07}{Color font support added (kernel)}
+%    \begin{macrocode}
+\DeclareCaptionFont{normalcolor}{\normalcolor}
+\DeclareCaptionFont{color}{\color{#1}}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\DeclareCaptionFont{normalfont}{\normalfont}
+\DeclareCaptionFont{up}{\upshape}
+\DeclareCaptionFont{it}{\itshape}
+\DeclareCaptionFont{sl}{\slshape}
+\DeclareCaptionFont{sc}{\scshape}
+\DeclareCaptionFont{md}{\mdseries}
+\DeclareCaptionFont{bf}{\bfseries}
+\DeclareCaptionFont{rm}{\rmfamily}
+\DeclareCaptionFont{sf}{\sffamily}
+\DeclareCaptionFont{tt}{\ttfamily}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\DeclareCaptionFont{scriptsize}{\scriptsize}
+\DeclareCaptionFont{footnotesize}{\footnotesize}
+\DeclareCaptionFont{small}{\small}
+\DeclareCaptionFont{normalsize}{\normalsize}
+\DeclareCaptionFont{large}{\large}
+\DeclareCaptionFont{Large}{\Large}
+%    \end{macrocode}
+%
+% \changes{v3.0p}{2007/04/02}{\package{setspace} package support added (kernel)}
+% \changes{v3.1k}{2009/10/09}{Bugfix 09-05-18: \package{setspace} package support revised (kernel)}
+%    \begin{macrocode}
+\DeclareCaptionFont{singlespacing}{%
+  \@ifundefined{setspace@singlespace}{}{%
+    \setstretch\setspace@singlespace}}% normally 1
+\DeclareCaptionFont{onehalfspacing}{\onehalfspacing}
+\DeclareCaptionFont{doublespacing}{\doublespacing}
+\DeclareCaptionFont{stretch}{\setstretch{#1}}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%\DeclareCaptionFont{normal}{%
+%  \caption@font{normalcolor,normalfont,normalsize,singlespacing}
+\DeclareCaptionFont{normal}{%
+  \caption@font*{%
+    \KV@caption@fnt@normalcolor\@unused
+    \KV@caption@fnt@normalfont\@unused
+    \KV@caption@fnt@normalsize\@unused
+    \KV@caption@fnt@singlespacing\@unused}}
+%    \end{macrocode}
+%
+% \changes{v3.0a}{2004/01/23}{Option \opt{size=} now sets \cs{captionsize} instead of \cs{captionfont}}
+% The old versions \version{1.x} of \thispackage\ offered this
+% command to setup the font size used for captions. We still do
+% so old documents will work fine.
+%    \begin{macrocode}
+\DeclareCaptionOption{size}{\caption@setfont{size}{#1}}
+\DeclareCaptionDefaultFont{size}{}
+%    \end{macrocode}
+%
+% \subsection{Justifications}
+%
+% \begin{macro}{\DeclareCaptionJustification}
+% \changes{v3.0a}{2004/01/17}{Pass through argument \#2 so extra spaces
+%                             between arguments do make any harm}
+% \changes{v3.1}{2007/07/03}{Mapped to \cs{DeclareCaptionFont}}
+%  |\DeclareCaptionJustification|\marg{name}\marg{code}
+%    \begin{macrocode}
+\newcommand*\DeclareCaptionJustification[2]{%
+  \global\@namedef{caption@hj@#1}{#2}% for compatibility to v3.0
+  \DeclareCaptionFont{#1}{#2}}
+\@onlypreamble\DeclareCaptionJustification
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DeclareCaptionDefaultJustification}
+% \changes{v3.1}{2007/07/03}{This macro added}
+% \changes{v3.1g}{2008/01/31}{Renamed from \cs{DeclareDefaultCaptionJustification} to \cs{DeclareCaptionDefaultJustification}}
+%  |\DeclareCaptionDefaultJustification|\marg{code}
+%    \begin{macrocode}
+\newcommand*\DeclareCaptionDefaultJustification[1]{%
+  \global\@namedef{caption@hj@default}{#1}% for compatibility to v3.0
+  \DeclareCaptionDefaultFont{@hj}{#1}}
+\@onlypreamble\DeclareCaptionDefaultJustification
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+\DeclareCaptionOption{justification}{\caption@setjustification{#1}}
+\DeclareCaptionDefaultJustification{}
+%    \end{macrocode}
+%
+% \begin{macro}{\caption@setjustification}
+% \changes{v3.1}{2007/07/03}{Mapped to \cs{caption@setfont}}
+%  |\caption@setjustification|\marg{name}\par
+%  Selecting a caption justification simply means saving the code (in |\caption@hj|).
+%    \begin{macrocode}
+\newcommand*\caption@setjustification{\caption@setfont{@hj}}
+%    \end{macrocode}
+% \end{macro}
+%
+% These are the pre-defined justification code snippets.
+%    \begin{macrocode}
+\DeclareCaptionJustification{justified}{}
+\DeclareCaptionJustification{centering}{\centering}
+\DeclareCaptionJustification{centerfirst}{\centerfirst}
+\DeclareCaptionJustification{centerlast}{\centerlast}
+\DeclareCaptionJustification{raggedleft}{\raggedleft}
+\DeclareCaptionJustification{raggedright}{\raggedright}
+%    \end{macrocode}
+%
+% \begin{macro}{\centerfirst}
+% \changes{v3.0l}{2007/01/21}{Bugfix: Usage of \cs{@centercr} added (Thanks to Olga!)}
+% \changes{v3.0l}{2007/01/21}{This macro renamed from \cs{caption@centerfirst} to \cs{centerfirst}}
+%  Please blame Frank Mittelbach for the code of |\centerfirst| |:-)|
+%    \begin{macrocode}
+\providecommand\centerfirst{%
+  \let\\\@centercr
+  \edef\caption@normaladjust{%
+    \leftskip\the\leftskip
+    \rightskip\the\rightskip
+    \parfillskip\the\parfillskip\relax}%
+  \leftskip\z@\@plus -1fil%
+  \rightskip\z@\@plus 1fil%
+  \parfillskip\z@skip
+  \noindent\hskip\z@\@plus 2fil%
+  \@setpar{\@@par\@restorepar\caption@normaladjust}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\centerlast}
+% \changes{v3.0l}{2007/01/21}{Bugfix: Usage of \cs{@centercr} added (Thanks to Olga!)}
+% \changes{v3.0l}{2007/01/21}{This macro renamed from \cs{caption@centerlast} to \cs{centerlast}}
+%  This is based on code from Anne Br\"uggemann-Klein\cite{Anne}
+%    \begin{macrocode}
+\providecommand\centerlast{%
+  \let\\\@centercr
+  \leftskip\z@\@plus 1fil%
+  \rightskip\z@\@plus -1fil%
+  \parfillskip\z@\@plus 2fil\relax}
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{The ragged2e package}
+% \changes{v3.0b}{2004/05/16}{Improved \package{ragged2e} package support}
+%
+% We also support the upper-case commands offered by the \package{ragged2e}
+% package.
+% Note that these just map to their lower-case variants if the
+% \package{ragged2e} package is not available.
+%    \begin{macrocode}
+\DeclareCaptionJustification{Centering}{%
+  \caption@ragged\Centering\centering}
+\DeclareCaptionJustification{RaggedLeft}{%
+  \caption@ragged\RaggedLeft\raggedleft}
+\DeclareCaptionJustification{RaggedRight}{%
+  \caption@ragged\RaggedRight\raggedright}
+%    \end{macrocode}
+%
+% \begin{macro}{\caption@ragged}
+% \changes{v3.0p}{2007/04/07}{The `ragged2e' package will now only been
+%         loaded when needed}
+% \changes{v3.0q}{2007/04/11}{Bugfix: Usage of \cs{caption@Info} replaced
+%         by \cs{caption@Debug}}
+% \changes{v3.1}{2007/04/16}{A different warning will be given on first \LaTeX\ run}
+%  |\caption@ragged| will be basically defined as
+%  \begin{quote}
+%    |\AtBeginDocument{\IfFileExists{ragged2e.sty}%|\\
+%    |  {\RequirePackage{ragged2e}\let\caption@ragged\@firstoftwo}%|\\
+%    |  {\let\caption@ragged\@secondoftwo}}|
+%  \end{quote}
+%  but with an additional warning if the ragged2e package is not loaded (yet).
+%  (This warning will be type out only one time per option, that's why
+%  we need the |caption\string#1| stuff.)
+%  Furthermore we load the \package{ragged2e} package, if needed and available.
+%    \begin{macrocode}
+\newcommand*\caption@ragged{%
+  \caption@Debug{We need ragged2e}%
+  \protected@write\@auxout{}{\string\caption@newlabel{ragged2e}{}}%
+  \global\let\caption@ragged\caption@@ragged
+  \caption@ragged}
+%    \end{macrocode}
+%    \begin{macrocode}
+\caption@AtBeginDocument{%
+  \@ifundefined{caption@r@ragged2e}{%
+    \newcommand*\caption@@ragged{%
+      \caption@Warning{%
+        `ragged2e' support has been changed.\MessageBreak
+        Rerun to get captions right}%
+      \global\let\caption@ragged\@secondoftwo % suppress further warnings
+      \caption@ragged}%
+  }{%
+    \caption@Debug{We load ragged2e}%
+    \IfFileExists{ragged2e.sty}{%
+      \RequirePackage{ragged2e}%
+      \let\caption@@ragged\@firstoftwo
+    }{%
+      \newcommand*\caption@@ragged[2]{%
+        \@ifundefined{caption\string#1}{%
+          \caption@Warning{%
+            `ragged2e' package not loaded, therefore\MessageBreak
+            substituting \string#2 for \string#1\MessageBreak}%
+          \global\@namedef{caption\string#1}}{}%
+        #2}%
+    }%
+  }}
+%    \end{macrocode}
+%    \begin{macrocode}
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{Vertical spaces before and after captions}
+%
+% \begin{macro}{\abovecaptionskip}
+% \begin{macro}{\belowcaptionskip}
+%  Usually these skips are defined within the document class, but some
+%  document classes don't do so.
+%    \begin{macrocode}
+\@ifundefined{abovecaptionskip}{%
+  \newlength\abovecaptionskip\setlength\abovecaptionskip{10\p@}}{}
+\@ifundefined{belowcaptionskip}{%
+  \newlength\belowcaptionskip\setlength\belowcaptionskip{0\p@}}{}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \changes{v3.0d}{2005/02/12}{Option \opt{skip=} added}
+%    \begin{macrocode}
+\DeclareCaptionOption{aboveskip}{\setlength\abovecaptionskip{#1}}
+\DeclareCaptionOption{belowskip}{\setlength\belowcaptionskip{#1}}
+\DeclareCaptionOption{skip}{\setlength\abovecaptionskip{#1}}
+%    \end{macrocode}
+%
+% \begin{macro}{\caption@rule}
+% \changes{v3.1i}{2008/05/06}{This macro added}
+%  |\caption@rule|\par
+%  Draws an invisible rule to adjust the ``skip'' setting.
+%    \begin{macrocode}
+\newcommand*\caption@rule{\caption@ifrule\caption@hrule\relax}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@hrule{\hrule\@height\z@}
+%    \end{macrocode}
+% \end{macro}
+%
+% \changes{v3.1i}{2008/05/06}{Option \opt{rule=} added}
+%    \begin{macrocode}
+\DeclareCaptionOption{rule}[1]{\caption@set@bool\caption@ifrule{#1}}
+%    \end{macrocode}
+%
+% \subsection{Positioning}
+%
+% These macros handle the right position of the caption.
+% Note that the position is actually \emph{not} controlled by the
+% \package{caption3} kernel options, but by the user (or a specific package
+% like the \package{float} package) instead.
+% The user can put the |\caption| command wherever he likes! So this stuff
+% is only to give us a \emph{hint} where to put the right skips, the user
+% usually has to take care for himself that this hint actually matches the
+% right position.
+%
+%    \begin{macrocode}
+\DeclareCaptionOption{position}{\caption@setposition{#1}}
+%    \end{macrocode}
+%
+% \begin{macro}{\caption@setposition}
+% \changes{v3.0a}{2004/01/22}{Now the positions \opt{t}, \opt{above}, \opt{b},
+%                             \opt{below}, and \opt{a} are allowed, too}
+% \changes{v3.0d}{2004/08/10}{Usage of \cs{caption@defaultpos} added}
+%  |\caption@setposition|\marg{position}\par
+%  Selecting the caption position means that we put |\caption@position| to
+%  the right value. \emph{Please do \textbf{not} use the internal macro
+%  \cs{caption@position} in your own package or document, but use the wrapper
+%  macro \cs{caption@iftop} instead.}
+%    \begin{macrocode}
+\newcommand*\caption@setposition[1]{%
+  \caption@ifinlist{#1}{d,default}{%
+    \let\caption@position\caption@defaultpos
+  }{\caption@ifinlist{#1}{t,top,above}{%
+    \let\caption@position\@firstoftwo
+  }{\caption@ifinlist{#1}{b,bottom,below}{%
+    \let\caption@position\@secondoftwo
+  }{\caption@ifinlist{#1}{a,auto}{%
+    \let\caption@position\@undefined
+  }{%
+    \caption@Error{Undefined position `#1'}%
+  }}}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@defaultpos}
+% \changes{v3.1}{2007/05/08}{Default position changed from `bottom' to `auto'}
+%  The default `position' is `auto', this means that \thispackage\ will try
+%  to guess the current position of the caption.
+%  (But in many cases, for example in |longtable|s, this is doomed to fail!)\par
+%  The setting `bottom' correspondents to the |\@makecaption| implementation
+%  in the standard \LaTeX\ document classes, but `auto' should give better
+%  results in most cases.
+%    \begin{macrocode}
+%\caption@setdefaultpos{a}% default = auto
+\let\caption@defaultpos\@undefined
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@iftop}
+% \changes{v3.0a}{2004/01/23}{Split into \cs{caption@iftop} \& \cs{caption@fixposition}}
+% \changes{v3.0d}{2005/02/12}{Adapted to \cs{caption@defaultpos}}
+% \changes{v3.1}{2007/05/08}{Position will be fixed to `bottom' if `auto'}
+%  |\caption@iftop|\marg{true-code}\marg{false-code}\par
+%  (If the |position=| is set to |auto| we assume a |bottom| position here.)
+%    \begin{macrocode}
+\newcommand*\caption@iftop{%
+  \ifx\caption@position\@undefined
+    \let\caption@position\@secondoftwo
+%   = \caption@setposition b%
+  \fi
+  \caption@position}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@fixposition}
+% \changes{v3.0b}{2004/05/16}{%
+%        Split into \cs{caption@fixposition} & \cs{caption@autoposition}}
+%  |\caption@fixposition|\par
+%  This macro checks if the `position' is set to `auto'.
+%  If yes, |\caption@autoposition| will be called to
+%  set |\caption@position| to a proper value we can actually use.
+%    \begin{macrocode}
+\newcommand*\caption@fixposition{%
+  \ifx\caption@position\@undefined
+    \caption@autoposition
+  \fi}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@autoposition}
+% \changes{v3.0a}{2004/01/23}{\cs{ifvmode} added}
+%  |\caption@autoposition|\par
+%  We guess the current position of the caption by checking |\prevdepth|.\par
+%  A different solution would be setting the |\spacefactor| to something
+%  not much less than 1000 (for example 994) in |\caption@start| and
+%  checking this value here by |\ifnum\spacefactor=994|.
+%  (It's implemented in the \package{threeparttable}
+%   package\cite{threeparttable} this way.)\par
+%  Another idea would be checking |\@ifminipage|, but since some packages
+%  typeset the caption within a simple |\vbox| this does not seem to be a
+%  good one.
+%    \begin{macrocode}
+\newcommand*\caption@autoposition{%
+  \ifvmode
+    \edef\caption@tempa{\the\prevdepth}%
+    \caption@Debug{\protect\prevdepth=\caption@tempa}%
+    \ifdim\prevdepth>-\p@
+      \let\caption@position\@secondoftwo
+    \else
+      \let\caption@position\@firstoftwo
+    \fi
+%   = \caption@setposition{\ifdim\prevdepth>-\p@ b\else t\fi}%
+  \else
+    \caption@Debug{no \protect\prevdepth}%
+    \let\caption@position\@secondoftwo
+%   = \caption@setposition b%
+  \fi}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\caption@setautoposition}
+% \changes{v3.1}{2007/06/10}{This macro added}
+%  |\caption@setautoposition|\marg{position}\par
+%  replaces the above algorithm by a different one (or a fixed position setting).
+%    \begin{macrocode}
+\newcommand*\caption@setautoposition[1]{%
+  \def\caption@autoposition{\caption@setposition{#1}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{Hooks}
+%
+% \begin{macro}{\AtBeginCaption}
+% \begin{macro}{\AtEndCaption}
+%  |\AtBeginCaption| \marg{code}\\
+%  |\AtEndCaption| \marg{code}\par
+%  These hooks can be used analogous to |\AtBeginDocument| and |\AtEndDocument|.
+%    \begin{macrocode}
+\newcommand*\caption@beginhook{}
+\newcommand*\caption@endhook{}
+\newcommand*\AtBeginCaption{\l@addto@macro\caption@beginhook}
+\newcommand*\AtEndCaption{\l@addto@macro\caption@endhook}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Lists}
+%
+% \changes{v3.0b}{2004/05/16}{Option \opt{listof=} added}
+% \changes{v3.1f}{2007/11/17}{Option \opt{list=} added}
+%    \begin{macrocode}
+\DeclareCaptionOption{list}[1]{\caption@setlist{#1}}
+\DeclareCaptionOption{listof}[1]{\caption@setlist{#1}}
+%    \end{macrocode}
+%
+% \begin{macro}{\caption@setlist}
+% \changes{v3.1g}{2008/03/20}{This macro added}
+%  |\caption@setlist|\marg{boolean}
+%    \begin{macrocode}
+\newcommand*\caption@setlist{\caption@set@bool\caption@iflist}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DeclareCaptionListFormat}
+% \changes{v3.1}{2004/07/15}{This macro added}
+% \changes{v3.1f}{2007/11/17}{Renamed from \cs{DeclareCaptionListOfFormat} to \cs{DeclareCaptionListFormat}}
+%  |\DeclareCaptionListFormat|\marg{name}\marg{code with \#1 and \#2}
+%    \begin{macrocode}
+\newcommand*\DeclareCaptionListFormat[2]{%
+  \global\@namedef{caption@lstfmt@#1}##1##2{#2}}
+\@onlypreamble\DeclareCaptionListFormat
+%    \end{macrocode}
+% \end{macro}
+%
+% \changes{v3.1}{2007/07/15}{Option \opt{listofformat=} added}
+% \changes{v3.1f}{2007/11/17}{Option \opt{listofformat=} renamed to \opt{listformat=}}
+%    \begin{macrocode}
+\DeclareCaptionOption{listformat}{\caption@setlistformat{#1}}
+%    \end{macrocode}
+%
+% \begin{macro}{\caption@setlistformat}
+% \changes{v3.1}{2004/07/15}{This macro added}
+% \changes{v3.1f}{2007/11/17}{Renamed from \cs{caption@setlistofformat} to \cs{caption@setlistformat}}
+%  |\caption@setlistformat|\marg{name}\par
+%  Selecting a caption list format simply means saving the code (in |\caption@lstfmt|).
+%    \begin{macrocode}
+\newcommand*\caption@setlistformat[1]{%
+  \@ifundefined{caption@lstfmt@#1}%
+    {\caption@Error{Undefined list format `#1'}}%
+    {\expandafter\let\expandafter\caption@lstfmt
+       \csname caption@lstfmt@#1\endcsname}}
+%    \end{macrocode}
+% \end{macro}
+%
+% There are five pre-defined list formats, taken from the \package{subfig} package.
+%    \begin{macrocode}
+\DeclareCaptionListFormat{empty}{}
+\DeclareCaptionListFormat{simple}{#1#2}
+\DeclareCaptionListFormat{parens}{#1(#2)}
+\DeclareCaptionListFormat{subsimple}{#2}
+\DeclareCaptionListFormat{subparens}{(#2)}
+%    \end{macrocode}
+%
+% \begin{macro}{\caption@setdefaultlistformat}
+% \changes{v3.1k}{2009/03/29}{This macro added}
+%    \begin{macrocode}
+\newcommand*\caption@setdefaultlistformat[1]{%
+  \ifx\caption@lstfmt\caption@lstfmt@default
+    \caption@set@default@listformat{#1}%
+    \caption@setlistformat{default}%
+  \else
+    \caption@set@default@listformat{#1}%
+  \fi}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@set@default@listformat[1]{%
+  \def\caption@lstfmt@default{\@nameuse{caption@lstfmt@#1}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% `default' usually maps to `subsimple'.
+%    \begin{macrocode}
+\caption@set@default@listformat{subsimple}
+%    \end{macrocode}
+%
+% \subsection{Debug option}
+% \changes{v3.0m}{2007/03/04}{Debug option added (kernel)}
+%
+%    \begin{macrocode}
+\DeclareCaptionOption{debug}[1]{%
+  \caption@set@bool\caption@ifdebug{#1}%
+  \caption@ifdebug
+    {\def\caption@Debug{\PackageInfo{caption}}}%
+    {\let\caption@Debug\@gobble}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\DeclareOption{debug}{\setkeys{caption}{debug}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\setkeys{caption}{debug=0}
+%    \end{macrocode}
+%
+% \subsection{Document classes \& Babel support}
+%
+% \subsubsection{The standard \texorpdfstring{\LaTeX{}}{LaTeX} classes}
+%
+%    \begin{macrocode}
+\caption@CheckCommand\@makecaption{%
+  % article|report|book [2005/09/16 v1.4f Standard LaTeX document class]
+  \long\def\@makecaption#1#2{%
+    \vskip\abovecaptionskip
+    \sbox\@tempboxa{#1: #2}%
+    \ifdim \wd\@tempboxa >\hsize
+      #1: #2\par
+    \else
+      \global \@minipagefalse
+      \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
+    \fi
+    \vskip\belowcaptionskip}}
+%    \end{macrocode}
+%
+% \subsubsection{The \AmS{} \& \SmF{} classes}
+% \changes{v3.1}{2007/07/29}{\AmS\ \& \SmF\ classes support added (kernel)}
+%
+%    \begin{macrocode}
+\providecommand*\caption@ifamsclass{%
+  \@ifundefined{@captionheadfont}\@gobble\@firstofone}
+\@onlypreamble\caption@ifamsclass
+%    \end{macrocode}
+%    \begin{macrocode}
+\caption@ifamsclass{%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \caption@CheckCommand\@makecaption{%
+    % amsart|amsproc|amsbook [2004/08/06 v2.20]
+    \long\def\@makecaption#1#2{%
+      \setbox\@tempboxa\vbox{\color@setgroup
+        \advance\hsize-2\captionindent\noindent
+        \@captionfont\@captionheadfont#1\@xp\@ifnotempty\@xp
+            {\@cdr#2\@nil}{.\@captionfont\upshape\enspace#2}%
+        \unskip\kern-2\captionindent\par
+        \global\setbox\@ne\lastbox\color@endgroup}%
+      \ifhbox\@ne % the normal case
+        \setbox\@ne\hbox{\unhbox\@ne\unskip\unskip\unpenalty\unkern}%
+      \fi
+      \ifdim\wd\@tempboxa=\z@ % this means caption will fit on one line
+        \setbox\@ne\hbox to\columnwidth{\hss\kern-2\captionindent\box\@ne\hss}%
+      \else % tempboxa contained more than one line
+        \setbox\@ne\vbox{\unvbox\@tempboxa\parskip\z@skip
+            \noindent\unhbox\@ne\advance\hsize-2\captionindent\par}%
+      \fi
+      \ifnum\@tempcnta<64 % if the float IS a figure...
+        \addvspace\abovecaptionskip
+        \hbox to\hsize{\kern\captionindent\box\@ne\hss}%
+      \else % if the float IS NOT a figure...
+        \hbox to\hsize{\kern\captionindent\box\@ne\hss}%
+        \nobreak
+        \vskip\belowcaptionskip
+      \fi
+    \relax
+    }}
+%    \end{macrocode}
+%    \begin{macrocode}
+  \caption@CheckCommand\@makecaption{%
+    % smfart|smfbook [1999/11/15 v1.2f Classe LaTeX pour les articles publies par la SMF]
+    \long\def\@makecaption#1#2{%
+      \ifdim\captionindent>.1\hsize \captionindent.1\hsize \fi
+      \setbox\@tempboxa\vbox{\color@setgroup
+        \advance\hsize-2\captionindent\noindent
+        \@captionfont\@captionheadfont#1\@xp\@ifnotempty\@xp
+            {\@cdr#2\@nil}{\@addpunct{.}\@captionfont\upshape\enspace#2}%
+        \unskip\kern-2\captionindent\par
+        \global\setbox\@ne\lastbox\color@endgroup}%
+      \ifhbox\@ne % the normal case
+        \setbox\@ne\hbox{\unhbox\@ne\unskip\unskip\unpenalty\unkern}%
+      \fi
+      \ifdim\wd\@tempboxa=\z@ % this means caption will fit on one line
+        \setbox\@ne\hbox to\columnwidth{\hss\kern-2\captionindent\box\@ne\hss}%
+        \@tempdima\wd\@ne\advance\@tempdima-\captionindent
+        \wd\@ne\@tempdima
+      \else % tempboxa contained more than one line
+        \setbox\@ne\vbox{\rightskip=0pt plus\captionindent\relax
+            \unvbox\@tempboxa\parskip\z@skip
+            \noindent\unhbox\@ne\advance\hsize-2\captionindent\par}%
+      \fi
+      \ifnum\@tempcnta<64 % if the float IS a figure...
+        \addvspace\abovecaptionskip
+        \noindent\kern\captionindent\box\@ne
+      \else % if the float IS NOT a figure...
+        \noindent\kern\captionindent\box\@ne
+        \nobreak
+        \vskip\belowcaptionskip
+      \fi
+    \relax
+    }}
+%    \end{macrocode}
+%    \begin{macrocode}
+  \let\captionmargin\captionindent % set to 3pc by AMS class
+  \begingroup\edef\@tempa{\endgroup
+    \noexpand\caption@g@addto@list\noexpand\caption@sty@default
+      {margin=\the\captionmargin
+       \@ifundefined{smf@makecaption}{}{,maxmargin=.1\linewidth}}}
+  \@tempa
+  \caption@g@addto@list\caption@sls@default{margin*=.5\captionmargin}
+  \DeclareCaptionLabelSeparator{default}{.\enspace}
+  \DeclareCaptionDefaultFont{font}{\@captionfont}
+  \DeclareCaptionDefaultFont{labelfont}{\@captionheadfont}
+  \DeclareCaptionDefaultFont{textfont}{\@captionfont\upshape}
+  \captionsetup[figure]{position=b}
+  \captionsetup[table]{position=t}
+%    \end{macrocode}
+%    \begin{macrocode}
+}
+%    \end{macrocode}
+%
+% \subsubsection{The beamer class}
+% \changes{v3.1}{2007/03/10}{beamer class support added (kernel)}
+%
+%    \begin{macrocode}
+\providecommand*\caption@ifbeamerclass{%
+  \@ifclassloaded{beamer}\@firstofone\@gobble}
+\@onlypreamble\caption@ifbeamerclass
+%    \end{macrocode}
+%    \begin{macrocode}
+\caption@ifbeamerclass{%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \caption@CheckCommand\beamer@makecaption{%
+    % beamerbaselocalstructure.sty,v 1.53 2007/01/28 20:48:21 tantau
+    \long\def\beamer@makecaption#1#2{%
+      \def\insertcaptionname{\csname#1name\endcsname}%
+      \def\insertcaptionnumber{\csname the#1\endcsname}%
+      \def\insertcaption{#2}%
+      \nobreak\vskip\abovecaptionskip\nobreak
+      \sbox\@tempboxa{\usebeamertemplate**{caption}}%
+      \ifdim \wd\@tempboxa >\hsize
+        \usebeamertemplate**{caption}\par
+      \else
+        \global \@minipagefalse
+        \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
+      \fi
+      \nobreak\vskip\belowcaptionskip\nobreak}}
+%    \end{macrocode}
+%    \begin{macrocode}
+  \DeclareCaptionLabelFormat{default}{#1}
+  \DeclareCaptionDefaultJustification{\raggedright}
+  \DeclareCaptionDefaultFont{font}{%
+    \usebeamerfont*{caption}%
+    \usebeamercolor[fg]{caption}}
+  \DeclareCaptionDefaultFont{labelfont}{%
+    \usebeamercolor[fg]{caption name}%
+    \usebeamerfont*{caption name}}
+%    \end{macrocode}
+% If the \package{beamer} document class is used, we offer a beamer
+% template called `caption3' which can be used with option `beamer' or
+% |\setbeamertemplate{caption}[caption3]|.\par
+% (Note that this is of no use when \thispackage\ is used, too.)
+%    \begin{macrocode}
+  \defbeamertemplate{caption}{caption3}{%
+    \caption@make\insertcaptionname\insertcaptionnumber\insertcaption}
+%    \end{macrocode}
+%    \begin{macrocode}
+  \DeclareOption{beamer}{%
+    % \usebeamertemplate**{caption} will set font
+    \DeclareCaptionDefaultFont{font}{}%
+    \setbeamertemplate{caption}[caption3]}
+%    \end{macrocode}
+%    \begin{macrocode}
+}
+%    \end{macrocode}
+%
+% \subsubsection{The \KOMAScript{} classes}
+% \changes{v3.1}{2007/03/31}{\KOMAScript\ classes support added (kernel)}
+%
+%    \begin{macrocode}
+\providecommand*\caption@ifkomaclass{%
+  \@ifundefined{scr@caption}\@gobble\@firstofone}
+\@onlypreamble\caption@ifkomaclass
+%    \end{macrocode}
+%    \begin{macrocode}
+\caption@ifkomaclass{%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \caption@CheckCommand\@makecaption{%
+    % scrartcl|scrreprt|scrbook [2007/03/07 v2.97a KOMA-Script document class]
+    \long\def\@makecaption#1#2{%
+      \if@captionabove
+        \vskip\belowcaptionskip
+      \else
+        \vskip\abovecaptionskip
+      \fi
+      \@@makecaption\@firstofone{#1}{#2}%
+      \if@captionabove
+        \vskip\abovecaptionskip
+      \else
+        \vskip\belowcaptionskip
+      \fi}}
+%    \end{macrocode}
+%    \begin{macrocode}
+  \DeclareCaptionFormat{default}[#1#2#3\par]{%
+    \ifdofullc@p
+      \caption@ifin@list\caption@lsepcrlist\caption@lsepname
+        {\caption@Error{%
+           The option `labelsep=\caption@lsepname' does not work\MessageBreak
+           with \noexpand\setcaphanging (which is set by default)}}%
+        {\caption@fmt@hang{#1}{#2}{#3}}%
+    \else
+      #1#2%
+      \ifdim\cap@indent<\z@
+        \par
+        \noindent\hspace*{-\cap@indent}%
+      \else\if@capbreak
+        \par
+      \fi\fi
+      #3\par
+    \fi}
+  \DeclareCaptionLabelSeparator{default}{\captionformat}
+  \DeclareCaptionDefaultFont{font}{\scr@fnt@caption}
+  \DeclareCaptionDefaultFont{labelfont}{\scr@fnt@captionlabel}
+%    \end{macrocode}
+%    \begin{macrocode}
+}
+%    \end{macrocode}
+%
+% \subsubsection{The \NTG{} Dutch classes}
+% \changes{v3.1}{2007/04/06}{NTG classes support added (kernel)}
+%
+%    \begin{macrocode}
+\providecommand*\caption@ifntgclass{%
+  \@ifundefined{CaptionFonts}\@gobble\@firstofone}
+\@onlypreamble\caption@ifntgclass
+%    \end{macrocode}
+%    \begin{macrocode}
+\caption@ifntgclass{%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \caption@CheckCommand\@makecaption{%
+    % artikel|rapport|boek [2004/06/07 v2.1a NTG LaTeX document class]
+    \long\def\@makecaption#1#2{%
+      \vskip\abovecaptionskip
+      \sbox\@tempboxa{{\CaptionLabelFont#1:} \CaptionTextFont#2}%
+      \ifdim \wd\@tempboxa >\hsize
+        {\CaptionLabelFont#1:} \CaptionTextFont#2\par
+      \else
+        \global \@minipagefalse
+        \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
+      \fi
+      \vskip\belowcaptionskip}}
+%    \end{macrocode}
+%    \begin{macrocode}
+  \DeclareCaptionDefaultFont{labelfont}{\CaptionLabelFont}
+  \DeclareCaptionDefaultFont{textfont}{\CaptionTextFont}
+%    \end{macrocode}
+%    \begin{macrocode}
+}
+%    \end{macrocode}
+%
+% \subsubsection{The thesis class}
+% \changes{v3.1g}{2008/01/31}{thesis class support added (kernel)}
+% \changes{v3.1l}{2009/11/15}{Bugfix 09-11-14: thesis class support revised (kernel)}
+%
+%    \begin{macrocode}
+\providecommand*\caption@ifthesisclass{%
+  \@ifundefined{cph@font}{\@gobble}{\@ifundefined{cpb@font}\@gobble\@firstofone}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\caption@ifthesisclass{%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \caption@CheckCommand\@makecaption{%
+    % thesis.cls 1996/25/01 1.0g LaTeX document class (wm).
+    \long\def\@makecaption#1#2{%
+     \vskip\abovecaptionskip
+     \setbox\@tempboxa\hbox{{\cph@font #1:} {\cpb@font #2}}%
+     \ifdim \wd\@tempboxa >\hsize
+        \@hangfrom{\cph@font #1: }{\cpb@font #2\par}%
+     \else
+        \hbox to\hsize{\hfil\box\@tempboxa\hfil}%
+     \fi
+     \vskip\belowcaptionskip}}
+%    \end{macrocode}
+%    \begin{macrocode}
+  \DeclareCaptionDefaultFormat{hang}
+  \DeclareCaptionDefaultFont{labelfont}{\cph@font}
+  \DeclareCaptionDefaultFont{textfont}{\cpb@font}
+%    \end{macrocode}
+%    \begin{macrocode}
+}
+%    \end{macrocode}
+%
+% \subsubsection{The frenchb Babel option}
+% \changes{v3.1}{2006/05/14}{\package{frenchb} package support added (kernel)}
+%
+%    \begin{macrocode}
+\@ifundefined{FB@makecaption}{}{%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \caption@CheckCommand\@makecaption{%
+    % frenchb.ldf [2005/02/06 v1.6g French support from the babel system]
+    % frenchb.ldf [2007/10/05 v2.0e French support from the babel system]
+    \long\def\@makecaption#1#2{%
+      \vskip\abovecaptionskip
+      \sbox\@tempboxa{#1\CaptionSeparator #2}%
+      \ifdim \wd\@tempboxa >\hsize
+        #1\CaptionSeparator #2\par
+      \else
+        \global \@minipagefalse
+        \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
+      \fi
+      \vskip\belowcaptionskip}}
+%    \end{macrocode}
+%    \begin{macrocode}
+  \ifx\@makecaption\STD@makecaption
+    \DeclareCaptionLabelSeparator{default}{\CaptionSeparator}
+    \def\caption@frenchb{% supress frenchb warning
+      \let\STD@makecaption\@makecaption
+      \let\FB@makecaption\@makecaption}
+  \else
+    \ifx\@makecaption\@undefined\else
+      \PackageInfo{caption}{%
+        The definition of \protect\@makecaption\space
+        has been changed,\MessageBreak
+        frenchb will NOT customize it}%
+    \fi
+  \fi
+%    \end{macrocode}
+%    \begin{macrocode}
+}
+%    \end{macrocode}
+%
+% \subsubsection{The frenchle/pro package}
+% \changes{v3.1}{2006/05/14}{\package{frenchle/pro} package support added (kernel)}
+%
+%    \begin{macrocode}
+\@ifundefined{frenchTeXmods}{}{%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \caption@CheckCommand\@makecaption{%
+    % french(le).sty [2006/10/03 The french(le) package /V5,9991/]
+    % french(le).sty [2007/06/28 The french(le) package /V5,9994/]
+    \def\@makecaption#1#2{%
+      \ifFTY%
+        \def\@secondofmany##1##2\void{##2}%
+        \def\@tempa{\@secondofmany#2\void}%
+        \ifx\@tempa\empty%
+          \let\captionseparator\empty%
+        \fi%
+        \@mcORI{#1}{\relax\captionfont{#2}}%
+      \else
+        \@mcORI{#1}{#2}%
+      \fi}}
+%    \end{macrocode}
+%    \begin{macrocode}
+  \caption@CheckCommand\@makecaption{%
+    % french(le).sty [2007/02/11 The french(le) package /V5,9993/]
+    \def\@makecaption#1#2{%
+      \ifFTY%
+        \def\@secondofmany##1##2\void{##2}%
+        \protected@edef\@tempa{\@secondofmany#2\void}%
+        \ifx\@tempa\empty%
+          \let\captionseparator\empty%
+        \fi%
+        \@mcORI{#1}{\relax\captionfont{#2}}%
+      \else
+        \@mcORI{#1}{#2}%
+      \fi}}
+%    \end{macrocode}
+%    \begin{macrocode}
+  \DeclareCaptionDefaultFont{textfont}{\itshape}%
+  \DeclareCaptionLabelSeparator{default}{\captionseparator\space}%
+%    \end{macrocode}
+%    \begin{macrocode}
+}
+%    \end{macrocode}
+%
+% \iffalse
+% \subsubsection{The hungarian and magyar Babel option}
+% \changes{v3.2}{2009/03/29}{\package{magyar} package support added (kernel)}
+%
+%    \begin{macrocode}
+\DeclareCaptionListFormat{subperiod}{#2.}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%%% \def\caption@tempa#1{\@ifundefined{extras#1}{}{%
+%%%   \expandafter\addto\csname extras#1\endcsname{%
+%%%      % reverse changes made by magyar.ldf
+%%%      \let\@makecaption\caption@makecaption
+%%%      \babel@save\@makecaption
+%%%      \caption@redefine
+%%%      \babel@save\@caption
+%%%      % change default labelsep and listformat
+%%%      \caption@setdefaultlabelsep{period}%
+%%%      \caption@setdefaultlistformat{subperiod}}%
+%%%   \expandafter\addto\csname noextras#1\endcsname{%
+%%%      % change default labelsep and listformat
+%%%      \caption@setdefaultlabelsep{colon}%
+%%%      \caption@setdefaultlistformat{subsimple}}%
+%%% }}
+%    \end{macrocode}
+%    \begin{macrocode}
+%%% \caption@tempa{hungarian}
+%%% \caption@tempa{magyar}
+%    \end{macrocode}
+% \fi
+%
+% \subsection{Execution of options}
+%
+%    \begin{macrocode}
+\captionsetup{style=default,position=default,%
+              list,listformat=default,twoside=\if@twoside 1\else 0\fi}
+%    \end{macrocode}
+%    \begin{macrocode}
+\ProcessOptions*
+%    \end{macrocode}
+%
+% \changes{v3.1}{2007/04/10}{Check of document class added}
+%    \begin{macrocode}
+\caption@IfCheckCommand{%
+  \caption@setbool{documentclass}{1}%
+}{%
+  \caption@setbool{documentclass}{0}%
+  \PackageInfo{caption}{%
+         Unknown document class (or package),\MessageBreak
+         standard defaults will be used}%
+  \caption@Debug{\string\@makecaption\space=\space\meaning\@makecaption\@gobble}%
+}
+%    \end{macrocode}
+%
+% \subsection{Making an `List of' entry}
+%
+% \begin{macro}{\caption@addcontentsline}
+% \changes{v3.1}{2007/07/01}{This macro added}
+%  |\caption@addcontentsline|\marg{type}\marg{list entry}\par
+%  Makes an entry in the list-of-whatever, if requested,
+%  i.e.~the argument \meta{list entry} is not empty and
+%  |listof=| was set to |true|.
+%    \begin{macrocode}
+\newcommand*\caption@addcontentsline[2]{%
+  \caption@iflist
+    {\def\@tempa{#2}}%
+    {\let\@tempa\@empty}%
+  \ifx\@tempa\@empty \else
+    {\let\\\space
+     \addcontentsline{\csname ext@#1\endcsname}{#1}%
+                     {\protect\numberline
+                       {\caption@lstfmt{\@nameuse{p@#1}}{\@nameuse{the#1}}}%
+                       {\ignorespaces #2}}}%
+  \fi}
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{Typesetting the caption}
+%
+% \begin{macro}{\ifcaption@star}
+% If the starred form of |\caption| is used, this will be set to |true|.
+% (It will be reset to |false| at the end of |\caption@@make|.)
+%    \begin{macrocode}
+\newif\ifcaption@star
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@fnum}
+% \changes{v3.1}{2007/08/21}{This macro added}
+%  |\caption@fnum|\marg{float type}\par
+%  Typesets the caption label; as replacement for |\fnum@|\meta{float type}.
+%    \begin{macrocode}
+\newcommand*\caption@fnum[1]{\caption@lfmt{\@nameuse{#1name}}{\@nameuse{the#1}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@make}
+%  |\caption@make|\marg{float name}\marg{ref.\ number}\marg{text}\par
+%  Typesets the caption.
+%    \begin{macrocode}
+\newcommand\caption@make[2]{\caption@@make{\caption@lfmt{#1}{#2}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@@make}
+% \changes{v3.0b}{2004/05/16}{Bugfix 04-05-05: \cs{ifdim}\cs{captionindent=}\cs{z@} added}
+% \changes{v3.0d}{2005/02/12}{Bugfix 04-10-26: Use \cs{@tempdima} instead of
+%        \cs{captionmargin} resp. \cs{captionwidth}; check for \cs{z@} added}
+% \changes{v3.0d}{2005/02/12}{Bugfix: \cs{hskip}\cs{captionmargin} to the end
+%        of caption added}
+% \changes{v3.0d}{2005/02/12}{Bugfix: \cs{strut} moved from here to \cs{caption@@@make}}
+% \changes{v3.0d}{2005/02/12}{Single-line-check moved up so it can affect margins now}
+% \changes{v3.0d}{2005/02/09}{Improvement: \cs{caption@ifh} added}
+% \changes{v3.0d}{2005/02/09}{Bugfix: \cs{leavevmode} added}
+% \changes{v3.0h}{2005/08/24}{Uses \cs{sbox} instead of \cs{setbox} in single-line-check}
+% \changes{v3.0i}{2005/12/04}{Uses \cs{caption@slc} now}
+% \changes{v3.0i}{2006/01/11}{Bugfix: \cs{caption@calcmargin} inside
+%        single-line-check replaced by \cs{relax}}
+% \changes{v3.0i}{2006/01/11}{Bugfix: \cs{caption@startbox} will always be
+%        typeset in horizontal mode}
+% \changes{v3.0k}{2006/05/13}{Uses \cs{caption@parbox} instead of \cs{caption@start/endbox}}
+% \changes{v3.0l}{2007/01/04}{Oops, bugfix 04-05-05 got lost in v3.0j, re-added}
+% \changes{v3.0p}{2007/04/03}{Usage of \cs{caption@ifoddpage} added}
+% \changes{v3.1}{2007/07/29}{\cs{caption@calcmargin} moved below single-line-check}
+% \changes{v3.1e}{2007/10/28}{\cs{caption@stepcounter} added}
+%  |\caption@@make|\marg{caption label}\marg{caption text}
+%    \begin{macrocode}
+\newcommand\caption@@make[2]{%
+  \begingroup
+  \caption@stepcounter
+  \caption@beginhook
+%    \end{macrocode}
+%
+% Check margin, if |\caption@minmargin| or |\caption@maxmargin| is set
+%    \begin{macrocode}
+  \ifx\caption@maxmargin\@undefined \else
+    \ifdim\captionmargin>\caption@maxmargin\relax
+      \captionmargin\caption@maxmargin\relax
+    \fi
+  \fi
+  \ifx\caption@minmargin\@undefined \else
+    \ifdim\captionmargin<\caption@minmargin\relax
+      \captionmargin\caption@minmargin\relax
+    \fi
+  \fi
+%    \end{macrocode}
+%
+% Special single-line treatment (option |singlelinecheck=|)
+%    \begin{macrocode}
+  \caption@ifslc{\caption@slc{#1}{#2}\captionwidth\relax}{}%
+%    \end{macrocode}
+%
+% Typeset the left margin (option |margin=|)
+%    \begin{macrocode}
+  \caption@calcmargin
+  \@tempdima\captionmargin
+  \ifdim\captionmargin@=\z@ \else
+    \caption@ifoddpage{}{\advance\@tempdima\captionmargin@}%
+  \fi
+  \caption@ifh{\advance\@tempdima\caption@indent}%
+  \hspace\@tempdima
+%    \end{macrocode}
+%
+% We actually use a |\vbox| of width |\captionwidth - \caption@indent|
+% to typeset the caption.
+% \Note{\cs{captionindent} is \emph{not} supported if the caption format
+% was defined with \cs{DeclareCaptionFormat*}.}
+%    \begin{macrocode}
+  \@tempdima\captionwidth
+  \caption@ifh{\advance\@tempdima-\caption@indent}%
+  \caption@parbox\@tempdima{%
+%    \end{macrocode}
+%
+% Typeset the indention (option |indention=|)\\
+% {\small Bugfix 04-05-05:
+%  |\hskip-\caption@indent| replaced by |\ifdim\caption@indent=\z@|\ldots}
+%    \begin{macrocode}
+    \caption@ifh{%
+      \ifdim\caption@indent=\z@
+        \leavevmode
+      \else
+        \hskip-\caption@indent
+      \fi}%
+%    \end{macrocode}
+%
+% Typeset the caption itself and close the |\caption@parbox|
+%    \begin{macrocode}
+    \caption@@@make{#1}{#2}}%
+%    \end{macrocode}
+%
+% Typeset the right margin (option |margin=|)
+%    \begin{macrocode}
+  \@tempdima\captionmargin
+  \ifdim\captionmargin@=\z@ \else
+    \caption@ifoddpage{\advance\@tempdima\captionmargin@}{}%
+  \fi
+  \hspace\@tempdima
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \caption@endhook
+  \endgroup
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \global\caption@starfalse}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@calcmargin}
+% \changes{v3.0h}{2005/10/24}{Internal: \cs{ifcaption@width} replaced by
+%        \cs{ifdim}\cs{captionwidth=}\cs{z@}}
+% \changes{v3.0i}{2006/01/12}{Improvement: Takes care of list environment now}
+% \changes{v3.1}{2006/05/13}{Check of \cs{@listdepth} removed (not necessary anymore),
+%        use \cs{linewidth} instead of \cs{hsize}}
+%  |\caption@calcmargin|\par
+%  Calculate |\captionmargin| \& |\captionwidth|, so both contain valid
+%  values.
+%    \begin{macrocode}
+\newcommand*\caption@calcmargin{%
+  \ifdim\captionwidth=\z@
+    \captionwidth\linewidth
+    \advance\captionwidth by -2\captionmargin
+    \advance\captionwidth by -\captionmargin@
+  \else
+    \captionmargin\linewidth
+    \advance\captionmargin by -\captionwidth
+    \divide\captionmargin by 2
+    \captionmargin@\z@
+  \fi
+%    \end{macrocode}
+%    \begin{macrocode}
+  \caption@Debug{%
+    \string\hsize=\the\hsize,
+    \string\linewidth=\the\linewidth,\MessageBreak
+    \string\leftmargin=\the\leftmargin,
+    \string\rightmargin=\the\rightmargin,\MessageBreak
+    \string\margin=\the\captionmargin,
+    \string\margin@=\the\captionmargin@,
+    \string\width=\the\captionwidth}%
+%    \end{macrocode}
+%    \begin{macrocode}
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@slc}
+% \changes{v3.1}{2007/06/13}{\cs{let}\cs{caption@hj}\cs{relax} added}
+% \changes{v3.1}{2007/07/29}{\cs{caption@setup}\cs{caption@sls} added after \cs{begingroup}}
+% \changes{v3.1}{2007/07/29}{\cs{caption@calcmargin} added}
+% \changes{v3.1c}{2007/10/14}{Support of \cs{caption@slfmt} added}
+% \changes{v3.1d}{2007/10/23}{`SingleLine' renamed to `singleline' for consistency}
+%  |\caption@slc|\marg{label}\marg{text}\marg{width}\marg{extra code}\par
+%  This one does the single-line-check.
+%    \begin{macrocode}
+\newcommand\caption@slc[4]{%
+  \caption@Debug{Begin SLC}%
+  \begingroup
+  \caption@singleline
+  \let\caption@hj\@empty
+  \caption@calcmargin % calculate #3 if necessary
+  \caption@prepareslc
+  \sbox\@tempboxa{\caption@@@make{#1}{#2}}%
+  \ifdim\wd\@tempboxa>#3%
+    \endgroup
+  \else
+    \endgroup
+    \caption@singleline
+    #4%
+  \fi
+  \caption@Debug{End SLC}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@singleline{%
+  \caption@xsetup\caption@opt@singleline
+  \let\caption@fmt\caption@slfmt}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@prepareslc}
+% \changes{v3.0b}{2004/05/16}{Bugfix: Redefinition of \cs{label} \& \cs{@footnotetext} added}
+% \changes{v3.0b}{2004/05/16}{Redefine \cs{stepcounter} instead of \cs{footnote(mark)}}
+% \changes{v3.0d}{2005/02/12}{\cs{let}\cs{caption@hj}\cs{relax} added}
+% \changes{v3.0h}{2005/07/09}{Support of \package{endnotes} package added}
+% \changes{v3.1}{2007/06/13}{\cs{let}\cs{caption@hj}\cs{relax} moved to \cs{caption@slc}}
+% \changes{v3.1}{2007/06/13}{Redefinition of \cs{(H@)refstepcounter} added}
+% \changes{v3.1}{2007/08/12}{Redefinition of \cs{label} improved}
+% \changes{v3.1c}{2007/10/06}{Definition of \cs{caption@l@stepcounter} added}
+%  |\caption@prepareslc|\par
+%  Re-define anything which would disturb the single-line-check.
+%    \begin{macrocode}
+\newcommand*\caption@prepareslc{%
+  \let\@footnotetext\@gobble\let\@endnotetext\@gobble
+  \def\label{\caption@withoptargs\@gobbletwo}%
+  \let\stepcounter\caption@l@stepcounter
+  \let\refstepcounter\stepcounter\let\H@refstepcounter\stepcounter}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@l@stepcounter[1]{\advance\csname c@#1\endcsname\@ne\relax}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@parbox}
+% \changes{v3.0k}{2006/05/13}{We define \cs{caption@parbox} instead of
+%        \cs{caption@start/endbox}}
+% \changes{v3.0n}{2006/03/09}{Bugfix 07-03-09: \cs{caption@parbox} changed from
+%        \cs{parbox-t} to \cs{parbox-b}}
+% \changes{v3.1f}{2007/11/11}{Renamed from \cs{captionbox} to \cs{caption@parbox}}
+%  |\caption@parbox|\marg{width}\marg{contents}\par
+%  This macro defines the box which surrounds the caption paragraph.
+%    \begin{macrocode}
+\newcommand*\caption@parbox{\parbox[b]}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@@@make}
+% \changes{v3.0b}{2004/05/16}{Bugfix 04-05-06: \cs{allowhyphens} added}
+% \changes{v3.0d}{2005/02/12}{Bugfix 04-12-16: Use some kind of
+%        \cs{@startstrut}\cs{strutbox} instead of \cs{strut}}
+% \changes{v3.0d}{2005/02/12}{Bugfix 05-01-23: \cs{@finalstrut}\cs{strutbox} added}
+% \changes{v3.0e}{2005/05/05}{Use \cs{caption@ifempty};
+%        \cs{let}\cs{caption@ifstrut}\cs{@secondoftwo} added}
+% \changes{v3.0e}{2005/05/05}{Bugfix: Handling of \cs{ifcaption@star} changed}
+% \changes{v3.0h}{2005/08/24}{Check for empty label added}
+% \changes{v3.0h}{2005/08/25}{\cs{caption@iflf} added}
+% \changes{v3.0l}{2007/02/18}{Usage of \cs{caption@tfmt} added}
+% \changes{v3.1}{2007/05/07}{Bugfix: \cs{ifhmode} added to \cs{@finalstrut}}
+% \changes{v3.1f}{2007/11/17}{Made option \opt{size=} stronger than \opt{font=}}
+%  |\caption@@@make|\marg{caption label}\marg{caption text}\par
+%  This one finally typesets the caption paragraph, without margin and indention.
+%    \begin{macrocode}
+\newcommand\caption@@@make[2]{%
+%    \end{macrocode}
+%
+% If the label is empty, we use no caption label separator.
+%    \begin{macrocode}
+  \sbox\@tempboxa{#1}%
+  \ifdim\wd\@tempboxa=\z@
+    \let\caption@lsep\relax
+%   \@capbreakfalse
+  \fi
+%    \end{macrocode}
+%
+% If the text is empty, we use no caption label separator, too.
+%    \begin{macrocode}
+  \caption@ifempty{#2}{%
+    \let\caption@lsep\relax
+%   \@capbreakfalse
+%   \let\caption@ifstrut\@secondoftwo
+  }%
+%    \end{macrocode}
+%
+% Take care that |\caption@parindent| and |\caption@hangindent| will be used
+% to typeset the paragraph.
+%    \begin{macrocode}
+  \@setpar{\@@par\caption@@par}\caption@@par
+%    \end{macrocode}
+%
+% Finally typeset the caption.
+%    \begin{macrocode}
+  \caption@hj\captionfont\captionsize\caption@fmt
+    {\ifcaption@star\else{\captionlabelfont#1}\fi}%
+    {\ifcaption@star\else{\caption@iflf\captionlabelfont\caption@lsep}\fi}%
+    {{\captiontextfont
+      \caption@ifstrut{\vrule\@height\ht\strutbox\@width\z@}{}%
+      \nobreak\hskip\z@skip % enable hyphenation
+      \caption@tfmt{#2}%
+%     \caption@ifstrut{\vrule\@height\z@\@depth\dp\strutbox\@width\z@}{}%
+      \caption@ifstrut{\ifhmode\@finalstrut\strutbox\fi}{}%
+      \par}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@ifempty}
+% \changes{v3.0e}{2005/05/05}{This macro added}
+% \changes{v3.1}{2007/07/04}{Re-defines itself now}
+% \changes{v3.1g}{2007/01/22}{Revised so \cs{label} will be detected, too}
+% \changes{v3.1i}{2008/08/02}{Revised so \cs{index} and \cs{glossary} will be detected, too}
+%  |\caption@ifempty|\marg{text}\marg{true} (\emph{no} \meta{false})\par
+%  This one tests if the \meta{text} is actually empty.
+%  \Note{This will be done without expanding the text,
+%  therefore this is far away from being bullet-proof.}
+%  \Note{This macro is re-defining itself so only
+%  the first test (in a group) will actually be done.}
+%    \begin{macrocode}
+\newcommand\caption@ifempty[1]{%
+  \caption@if@empty{#1}%
+  \caption@ifempty\@unused}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand\caption@if@empty[1]{%
+  \def\caption@tempa{#1}%
+  \ifx\caption@tempa\@empty
+    \let\caption@ifempty\@secondoftwo
+  \else
+    \expandafter\def\expandafter\caption@tempa\expandafter{%
+      \caption@car#1\caption@if@empty\caption@nil}%
+    \def\caption@tempb{\caption@if@empty}%
+    \ifx\caption@tempa\caption@tempb
+      \let\caption@ifempty\@secondoftwo
+    \else
+      \def\caption@tempb{\ignorespaces}%
+      \ifx\caption@tempa\caption@tempb
+        \expandafter\caption@if@empty\expandafter{\@gobble#1}%
+      \else
+        \def\caption@tempb{\label}%
+        \ifx\caption@tempa\caption@tempb
+          \expandafter\caption@if@empty\expandafter{\@gobbletwo#1}%
+        \else
+          \def\caption@tempb{\index}%
+          \ifx\caption@tempa\caption@tempb
+            \expandafter\caption@if@empty\expandafter{\@gobbletwo#1}%
+          \else
+            \def\caption@tempb{\glossary}%
+            \ifx\caption@tempa\caption@tempb
+              \expandafter\caption@if@empty\expandafter{\@gobbletwo#1}%
+            \else
+              \let\caption@ifempty\@gobbletwo
+            \fi
+          \fi
+        \fi
+      \fi
+    \fi
+  \fi}
+%    \end{macrocode}
+%    \begin{macrocode}
+\long\def\caption@car#1#2\caption@nil{#1}% same as \@car, but \long
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@@par}
+% \changes{v3.0h}{2005/08/22}{Made this definition global}
+%  |\caption@@par|\par
+%  This command will be executed with every |\par| inside the caption.
+%    \begin{macrocode}
+\newcommand*\caption@@par{%
+  \parindent\caption@parindent\hangindent\caption@hangindent}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{Types \& sub-types}
+%
+% \begin{macro}{\DeclareCaptionType}
+% \changes{v3.1}{2007/08/12}{This macro added}
+% \changes{v3.1a}{2007/09/07}{Three optional arguments added}
+% \changes{v3.1f}{2007/12/06}{Renamed from \cs{DeclareFloatingEnvironment} to \cs{DeclareCaptionType}}
+% \changes{v3.1f}{2007/12/21}{Optional argument revised, uses key-value syntax now}
+% \changes{v3.1i}{2008/04/13}{Uses \cs{caption@within@default} now}
+% \changes{v3.1i}{2008/08/02}{Support of \cs{float@exts} and \cs{float@addtolists} added}
+% \changes{v3.1l}{2010/01/09}{Usage of \cs{caption@DeclareWithinOption} added}
+%  |\DeclareCaptionType|\oarg{options}\marg{environment}\oarg{name}\oarg{list name}
+%    \begin{macrocode}
+\newcommand*\DeclareCaptionType{%
+  \@testopt\@DeclareCaptionType{}}
+\@onlypreamble\DeclareCaptionType
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\@DeclareCaptionType[#1]#2{%
+  \def\caption@type{#2}%
+  \caption@Debug{New type `#2'}%
+  \newcounter{#2}\@namedef{theH#2}{}%
+  \KV@caption@DCT@within\caption@within@default
+  \caption@DeclareWithinOption{#2}%
+  \KV@caption@DCT@placement{tbp}%
+  \@ifundefined{c@float@type}%
+    {\newcounter{float@type}%
+     \setcounter{float@type}{\@ifundefined{c@figure}14}}%
+    {}%
+  \caption@Debug{float type `#2'=\the\value{float@type}}%
+  \expandafter\xdef\csname ftype@#2\endcsname{\the\value{float@type}}%
+  \addtocounter{float@type}{\value{float@type}}%
+  \KV@caption@DCT@fileext{lo#2}%
+  \@namedef{fnum@#2}{\@nameuse{#2name}\nobreakspace\@nameuse{the#2}}%
+  \newenvironment{#2}{\@float{#2}}{\end@float}%
+  \newenvironment{#2*}{\@dblfloat{#2}}{\end@dblfloat}%
+  \expandafter\newcommand\csname listof#2s\endcsname{\caption@listof{#2}}%
+  \@ifundefined{l@figure}%
+    {\@namedef{l@#2}{\@dottedtocline{1}{1.5em}{2.3em}}}%
+    {\expandafter\let\csname l@#2\endcsname\l@figure}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \expandafter\newcommand\csname #2name\endcsname{}%
+  \edef\@tempa{\def\noexpand\@tempa{\@car#2\@nil}}%
+  \uppercase\expandafter{\@tempa}%
+  \edef\@tempb{\noexpand\g@addto@macro\noexpand\@tempa{\@cdr#2\@nil}}%
+  \@tempb
+  \expandafter\let\csname #2name\endcsname\@tempa
+  \expandafter\newcommand\csname list#2name\endcsname{}%
+  \expandafter\xdef\csname list#2name\endcsname{List of \@tempa s}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \@cons\caption@typelist{{#2}}%
+  \caption@setkeys[caption]{caption@DCT}{#1}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \@ifundefined{float@exts}{\newtoks\float@exts}{}%
+  \let\float@do=\relax
+  \edef\@tempa{\noexpand\float@exts{\the\float@exts\float@do{\@nameuse{ext@#2}}}}%
+  \@tempa
+  \@ifundefined{float@addtolists}{%
+    \newcommand\float@addtolists[1]{%
+      \def\float@do####1{\addtocontents{####1}{##1}}\the\float@exts}%
+    \@ifundefined{@chapter}{}{\caption@PatchChapter}}{}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \@ifnextchar[\@@DeclareCaptionType\relax}
+\@onlypreamble\@DeclareCaptionType
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\@@DeclareCaptionType[#1]{%
+  \KV@caption@DCT@name{#1}%
+  \@ifnextchar[\@@@DeclareCaptionType\relax}
+\@onlypreamble\@@DeclareCaptionType
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\@@@DeclareCaptionType[#1]{%
+  \KV@caption@DCT@listname{#1}}
+\@onlypreamble\@@@DeclareCaptionType
+%    \end{macrocode}
+%    \begin{macrocode}
+\let\DeclareFloatingEnvironment\DeclareCaptionType % old command name
+\@onlypreamble\DeclareFloatingEnvironment
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@within@default}
+% \changes{v3.1i}{2008/04/13}{This macro added}
+%  The default `within' value.
+%    \begin{macrocode}
+\newcommand*\caption@within@default{\@ifundefined{c@chapter}{none}{chapter}}
+\@onlypreamble\caption@within@default
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@listof}
+% \changes{v3.1f}{2007/12/21}{This macro added}
+% |\caption@listof|\marg{float type}
+%    \begin{macrocode}
+\newcommand*\caption@listof[1]{%
+  \begingroup
+    \expandafter\let\expandafter\listfigurename\csname list#1name\endcsname
+    \expandafter\let\expandafter\ext@figure\csname ext@#1\endcsname
+    \let\caption@ORI@starttoc\@starttoc
+    \renewcommand*\@starttoc[1]{%
+      \expandafter\caption@ORI@starttoc\expandafter{\ext@figure}}%
+    \listoffigures
+  \endgroup}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@typelist}
+% An \cs{@elt}-list containing the caption types defined
+% with |\Declare|\x|Caption|\x|Type|.
+%    \begin{macrocode}
+\newcommand*\caption@typelist{}
+%    \end{macrocode}
+% \end{macro}
+%
+% The available \meta{options} are:
+% |fileext=|\meta{file extension},
+% |listname=|\meta{list name},
+% |name=|\meta{prosa name},
+% |placement=|\meta{htbp},
+% |within=|\meta{none,chapter,section}, and
+% |without|.
+%    \begin{macrocode}
+\define@key{caption@DCT}{fileext}{\@namedef{ext@\caption@type}{#1}}
+\@onlypreamble@key{caption@DCT}{fileext}
+\define@key{caption@DCT}{listname}{\@namedef{list\caption@type name}{#1}}
+\@onlypreamble@key{caption@DCT}{listname}
+\define@key{caption@DCT}{name}{\@namedef{\caption@type name}{#1}}
+\@onlypreamble@key{caption@DCT}{name}
+\define@key{caption@DCT}{placement}{\@namedef{fps@\caption@type}{#1}}
+\@onlypreamble@key{caption@DCT}{placement}
+\define@key{caption@DCT}{within}{%
+  \@ifundefined{c@chapter}{}{\@removefromreset\caption@type{chapter}}%
+  \@removefromreset\caption@type{section}%
+  \begingroup
+    \caption@setkeys[caption]{caption@within}{#1}%
+  \endgroup}
+%\@onlypreamble@key{caption@DCT}{within}
+\define@key{caption@DCT}{without}{\KV@caption@DCT@within{none}}
+%\@onlypreamble@key{caption@DCT}{without}
+%    \end{macrocode}
+% \changes{v3.1k}{2009/03/29}{Bugfix 08-09-25: \texttt{within=section} fixed}
+%    \begin{macrocode}
+\define@key{caption@within}{none}[]{%
+  \caption@within{}{}}
+%\@onlypreamble@key{caption@within}{none}
+\define@key{caption@within}{section}[]{%
+  \@addtoreset\caption@type{section}%
+  \caption@within{\ifnum\c@section>\z@ \thesection.\fi}{\theHsection.}}
+%\@onlypreamble@key{caption@within}{section}
+\@ifundefined{c@chapter}{}{%
+  \define@key{caption@within}{chapter}[]{%
+    \@addtoreset\caption@type{chapter}%
+    \caption@within{\ifnum\c@chapter>\z@ \thechapter.\fi}{\theHchapter.}}
+}%  \@onlypreamble@key{caption@within}{chapter}}
+%    \end{macrocode}
+% \begin{macro}{\caption@within}
+% \changes{v3.1f}{2007/12/21}{This macro added}
+% |\caption@within|\marg{thecode}\marg{theHcode}
+%    \begin{macrocode}
+\newcommand*\caption@within{%
+  \expandafter\caption@within@\expandafter{\caption@type}}
+%\@onlypreamble\caption@within
+\newcommand*\caption@within@[3]{%
+  \global\@namedef{the#1}{#2\arabic{#1}}%
+  \@ifundefined{theH#1}\caption@AtBeginDocument\@firstofone
+    {\global\@namedef{theH#1}{#3\arabic{#1}}}}
+%\@onlypreamble\caption@within@
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@removefromreset}
+% \changes{v3.1f}{2007/12/21}{This macro added}
+% This code was taken from the \package{remreset} package
+% which is part of the `carlisle' package bundle.
+% (Copyright 1997 David Carlisle)
+%    \begin{macrocode}
+\providecommand*\@removefromreset[2]{{%
+  \expandafter\let\csname c@#1\endcsname\@removefromreset
+  \def\@elt##1{%
+    \expandafter\ifx\csname c@##1\endcsname\@removefromreset
+    \else
+      \noexpand\@elt{##1}%
+    \fi}%
+  \expandafter\xdef\csname cl@#2\endcsname{%
+    \csname cl@#2\endcsname}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@PatchChapter}
+% \changes{v3.1i}{2008/08/02}{This macro added}
+% We try to patch \cs{@chapter} so \cs{float@addtolists} will be supported.
+% (Note: The \KOMAScript\ classes already support \cs{float@addtolists}.)
+%    \begin{macrocode}
+\newcommand*\caption@PatchChapter{%
+  \providecommand*\@chapterlistsgap{10\p@}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  % report.cls [2005/09/16 v1.4f Standard LaTeX document class]
+  \caption@patch@chapter{report}{%
+    \ifnum \c@secnumdepth >\m@ne
+      \refstepcounter{chapter}%
+      \typeout{\@chapapp\space\thechapter.}%
+      \addcontentsline{toc}{chapter}%
+        {\protect\numberline{\thechapter}##1}%
+    \else
+      \addcontentsline{toc}{chapter}{##1}%
+    \fi
+    \chaptermark{##1}%
+    \addtocontents{lof}{\protect\addvspace{10\p@}}%
+    \addtocontents{lot}{\protect\addvspace{10\p@}}%
+    \if@twocolumn
+      \@topnewpage[\@makechapterhead{##2}]%
+    \else
+      \@makechapterhead{##2}%
+      \@afterheading
+    \fi
+  }{%
+    \ifnum \c@secnumdepth >\m@ne
+      \refstepcounter{chapter}%
+      \typeout{\@chapapp\space\thechapter.}%
+      \addcontentsline{toc}{chapter}%
+        {\protect\numberline{\thechapter}##1}%
+    \else
+      \addcontentsline{toc}{chapter}{##1}%
+    \fi
+    \chaptermark{##1}%
+    \ifdim \@chapterlistsgap>\z@
+      \addtocontents{lof}{\protect\addvspace{\@chapterlistsgap}}%
+      \addtocontents{lot}{\protect\addvspace{\@chapterlistsgap}}%
+      \float@addtolists{\protect\addvspace{\@chapterlistsgap}}%
+    \fi
+    \if@twocolumn
+      \@topnewpage[\@makechapterhead{##2}]%
+    \else
+      \@makechapterhead{##2}%
+      \@afterheading
+    \fi}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  % book.cls [2005/09/16 v1.4f Standard LaTeX document class]
+  \caption@patch@chapter{book}{%
+    \ifnum \c@secnumdepth >\m@ne
+      \if@mainmatter
+        \refstepcounter{chapter}%
+        \typeout{\@chapapp\space\thechapter.}%
+        \addcontentsline{toc}{chapter}%
+          {\protect\numberline{\thechapter}##1}%
+      \else
+        \addcontentsline{toc}{chapter}{##1}%
+      \fi
+    \else
+      \addcontentsline{toc}{chapter}{##1}%
+    \fi
+    \chaptermark{##1}%
+    \addtocontents{lof}{\protect\addvspace{10\p@}}%
+    \addtocontents{lot}{\protect\addvspace{10\p@}}%
+    \if@twocolumn
+      \@topnewpage[\@makechapterhead{##2}]%
+    \else
+      \@makechapterhead{##2}%
+      \@afterheading
+    \fi
+  }{%
+    \ifnum \c@secnumdepth >\m@ne
+      \if@mainmatter
+        \refstepcounter{chapter}%
+        \typeout{\@chapapp\space\thechapter.}%
+        \addcontentsline{toc}{chapter}%
+          {\protect\numberline{\thechapter}##1}%
+      \else
+        \addcontentsline{toc}{chapter}{##1}%
+      \fi
+    \else
+      \addcontentsline{toc}{chapter}{##1}%
+    \fi
+    \chaptermark{##1}%
+    \ifdim \@chapterlistsgap>\z@
+      \addtocontents{lof}{\protect\addvspace{\@chapterlistsgap}}%
+      \addtocontents{lot}{\protect\addvspace{\@chapterlistsgap}}%
+      \float@addtolists{\protect\addvspace{\@chapterlistsgap}}%
+    \fi
+    \if@twocolumn
+      \@topnewpage[\@makechapterhead{##2}]%
+    \else
+      \@makechapterhead{##2}%
+      \@afterheading
+    \fi}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  % amsbook.cls [2004/08/06 v2.20]
+  % smfbook.cls [1999/11/15 v1.2f Classe LaTeX pour les monographies editees par la SMF]
+  \caption@patch@chapter{ams/smfbook}{%
+    \refstepcounter{chapter}%
+    \ifnum\c@secnumdepth<\z@ \let\@secnumber\@empty
+    \else \let\@secnumber\thechapter \fi
+    \typeout{\chaptername\space\@secnumber}%
+    \def\@toclevel{0}%
+    \ifx\chaptername\appendixname \@tocwriteb\tocappendix{chapter}{##2}%
+    \else \@tocwriteb\tocchapter{chapter}{##2}\fi
+    \chaptermark{##1}%
+    \addtocontents{lof}{\protect\addvspace{10\p@}}%
+    \addtocontents{lot}{\protect\addvspace{10\p@}}%
+    \@makechapterhead{##2}\@afterheading
+  }{%
+    \refstepcounter{chapter}%
+    \ifnum\c@secnumdepth<\z@ \let\@secnumber\@empty
+    \else \let\@secnumber\thechapter \fi
+    \typeout{\chaptername\space\@secnumber}%
+    \def\@toclevel{0}%
+    \ifx\chaptername\appendixname \@tocwriteb\tocappendix{chapter}{##2}%
+    \else \@tocwriteb\tocchapter{chapter}{##2}\fi
+    \chaptermark{##1}%
+    \ifdim \@chapterlistsgap>\z@
+      \addtocontents{lof}{\protect\addvspace{\@chapterlistsgap}}%
+      \addtocontents{lot}{\protect\addvspace{\@chapterlistsgap}}%
+      \float@addtolists{\protect\addvspace{\@chapterlistsgap}}%
+    \fi
+    \@makechapterhead{##2}\@afterheading}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  % scrreprt/scrbook.cls
+  \@ifundefined{KOMAClassName}{}{%
+    \caption@Debug{document class `\KOMAClassName' detected}%
+  	\let\caption@patch@chapter\@gobblethree}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  % rapport1/3.cls [2004/06/07 v2.1a NTG LaTeX document class]
+  \caption@patch@chapter{rapport}{%
+    \ifnum \c@secnumdepth >\m@ne
+      \refstepcounter{chapter}%
+      \typeout{\@chapapp\space\thechapter.}%
+      \addcontentsline{toc}{chapter}%
+        {\protect\numberline{\thechapter}\toc@font0 ##1}%
+    \else
+      \addcontentsline{toc}{chapter}{\toc@font0 ##1}%
+    \fi
+    \chaptermark{##1}%
+    \addtocontents{lof}{\protect\addvspace{10\p@}}%
+    \addtocontents{lot}{\protect\addvspace{10\p@}}%
+    \if@twocolumn
+      \@topnewpage[\@makechapterhead{##2}]%
+    \else
+      \@makechapterhead{##2}%
+      \@afterheading
+    \fi
+  }{%
+    \ifnum \c@secnumdepth >\m@ne
+      \refstepcounter{chapter}%
+      \typeout{\@chapapp\space\thechapter.}%
+      \addcontentsline{toc}{chapter}%
+        {\protect\numberline{\thechapter}\toc@font0 ##1}%
+    \else
+      \addcontentsline{toc}{chapter}{\toc@font0 ##1}%
+    \fi
+    \chaptermark{##1}%
+    \ifdim \@chapterlistsgap>\z@
+      \addtocontents{lof}{\protect\addvspace{\@chapterlistsgap}}%
+      \addtocontents{lot}{\protect\addvspace{\@chapterlistsgap}}%
+      \float@addtolists{\protect\addvspace{\@chapterlistsgap}}%
+    \fi
+    \if@twocolumn
+      \@topnewpage[\@makechapterhead{##2}]%
+    \else
+      \@makechapterhead{##2}%
+      \@afterheading
+    \fi}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  % boek(3).cls [2004/06/07 v2.1a NTG LaTeX document class]
+  \caption@patch@chapter{boek}{%
+    \ifnum \c@secnumdepth >\m@ne
+      \if@mainmatter
+        \refstepcounter{chapter}%
+        \typeout{\@chapapp\space\thechapter.}%
+        \addcontentsline{toc}{chapter}%
+          {\protect\numberline{\thechapter}\toc@font0 ##1}%
+      \else
+        \addcontentsline{toc}{chapter}{\toc@font0 ##1}%
+      \fi
+    \else
+      \addcontentsline{toc}{chapter}{\toc@font0 ##1}%
+    \fi
+    \chaptermark{##1}%
+    \addtocontents{lof}{\protect\addvspace{10\p@}}%
+    \addtocontents{lot}{\protect\addvspace{10\p@}}%
+    \if@twocolumn
+      \@topnewpage[\@makechapterhead{##2}]%
+    \else
+      \@makechapterhead{##2}%
+      \@afterheading
+    \fi
+  }{%
+    \ifnum \c@secnumdepth >\m@ne
+      \if@mainmatter
+        \refstepcounter{chapter}%
+        \typeout{\@chapapp\space\thechapter.}%
+        \addcontentsline{toc}{chapter}%
+          {\protect\numberline{\thechapter}\toc@font0 ##1}%
+      \else
+        \addcontentsline{toc}{chapter}{\toc@font0 ##1}%
+      \fi
+    \else
+      \addcontentsline{toc}{chapter}{\toc@font0 ##1}%
+    \fi
+    \chaptermark{##1}%
+    \ifdim \@chapterlistsgap>\z@
+      \addtocontents{lof}{\protect\addvspace{\@chapterlistsgap}}%
+      \addtocontents{lot}{\protect\addvspace{\@chapterlistsgap}}%
+      \float@addtolists{\protect\addvspace{\@chapterlistsgap}}%
+    \fi
+    \if@twocolumn
+      \@topnewpage[\@makechapterhead{##2}]%
+    \else
+      \@makechapterhead{##2}%
+      \@afterheading
+    \fi}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  % thesis.cls [1996/25/01 1.0g LaTeX document class (wm).]
+  \caption@patch@chapter{thesis}{%
+    \ifnum \c@secnumdepth >\m@ne
+      \if@mainmatter
+        \refstepcounter{chapter}%
+        \typeout{\chaptername\space\thechapter.}
+        \if@thema
+          \ifx\@shortauthor\@empty
+            \addcontentsline{toc}{chapter}{%
+            \protect\numberline{\thechapter.}##1}%
+          \else
+            \addcontentsline{toc}{chapter}{%
+            \protect\numberline{\thechapter.}%
+            \@shortauthor\hfill\mbox{}\vskip\normallineskip ##1}%
+          \fi
+        \else
+          \addcontentsline{toc}{chapter}{%
+          \protect\numberline{\thechapter.}##1}%
+        \fi
+      \else
+        \addcontentsline{toc}{chapter}{##1}
+      \fi
+    \else
+      \addcontentsline{toc}{chapter}{##1}
+    \fi
+    \chaptermark{##1}
+    \addtocontents{lof}{\protect\addvspace{10pt}}
+    \addtocontents{lot}{\protect\addvspace{10pt}}
+    \if@twocolumn
+      \@topnewpage[\@makechapterhead{##2}]
+    \else
+      \@makechapterhead{##2}
+      \@afterheading
+    \fi
+  }{%
+    \ifnum \c@secnumdepth >\m@ne
+      \if@mainmatter
+        \refstepcounter{chapter}%
+        \typeout{\chaptername\space\thechapter.}%
+        \if@thema
+          \ifx\@shortauthor\@empty
+            \addcontentsline{toc}{chapter}{%
+            \protect\numberline{\thechapter.}##1}%
+          \else
+            \addcontentsline{toc}{chapter}{%
+            \protect\numberline{\thechapter.}%
+            \@shortauthor\hfill\mbox{}\vskip\normallineskip ##1}%
+          \fi
+        \else
+          \addcontentsline{toc}{chapter}{%
+          \protect\numberline{\thechapter.}##1}%
+        \fi
+      \else
+        \addcontentsline{toc}{chapter}{##1}%
+      \fi
+    \else
+      \addcontentsline{toc}{chapter}{##1}%
+    \fi
+    \chaptermark{##1}%
+    \ifdim \@chapterlistsgap>\z@
+      \addtocontents{lof}{\protect\addvspace{\@chapterlistsgap}}%
+      \addtocontents{lot}{\protect\addvspace{\@chapterlistsgap}}%
+      \float@addtolists{\protect\addvspace{\@chapterlistsgap}}%
+    \fi
+    \if@twocolumn
+      \@topnewpage[\@makechapterhead{##2}]%
+    \else
+      \@makechapterhead{##2}%
+      \@afterheading
+    \fi}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \ifx\caption@patch@chapter\@gobblethree \else
+    \caption@Debug{%
+      Unsupported document class detected,\MessageBreak
+      or \noexpand\@chapter was redefined by another package}%
+  \fi
+  \let\caption@PatchChapter\@undefined}
+%\@onlypreamble\caption@PatchChapter
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand\caption@patch@chapter[3]{%
+  \begingroup
+%   \let\if@twocolumn\iffalse
+    \let\if@mainmatter\iffalse
+    \let\if@thema\iffalse
+    \def\@tempa[##1]##2{#2}%
+    \ifx\@tempa\@chapter
+      \caption@Debug{document class `#1' detected}%
+      \gdef\@chapter[##1]##2{#3}%
+      \global\let\caption@patch@chapter\@gobblethree
+    \fi
+  \endgroup}
+%\@onlypreamble\caption@patch@chapter
+%    \end{macrocode}
+%    \begin{macrocode}
+\long\def \@gobblethree #1#2#3{}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@stpelt}
+% We patch \cs{@stpelt} so a list of `connected' counters will be reset, too.
+% (Like \cs{stepcounter} does in |ltcounts.dtx|.)
+%    \begin{macrocode}
+\newcommand*\caption@patch@stpelt{%
+  \let\caption@stpelt\@stpelt
+  \def\@stpelt##1{%
+    \caption@stpelt{##1}%
+    \begingroup
+      \let\@elt\caption@stpelt
+      \csname caption@cl@##1\endcsname
+    \endgroup}%
+  \let\caption@patch@stpelt\relax}
+\@onlypreamble\caption@patch@stpelt
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@addtoreset}
+% \changes{v3.1k}{2009/10/09}{This macro added}
+% Like \cs{@addtoreset} from |ltcounts.dtx|
+%    \begin{macrocode}
+\newcommand*\caption@addtoreset[2]{%
+  \caption@patch@stpelt
+  \@ifundefined{caption@cl@#2}{\@namedef{caption@cl@#2}{}}{}%
+  \expandafter\@cons\csname caption@cl@#2\endcsname{{#1}}}
+\@onlypreamble\caption@addtoreset
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@addtoreset}
+% \changes{v3.1k}{2009/10/09}{This macro added}
+% Like \cs{@removefromreset} from |remreset.sty|
+%    \begin{macrocode}
+\newcommand*\caption@removefromreset[2]{%
+  \begingroup
+    \expandafter\let\csname c@#1\endcsname\caption@removefromreset
+    \def\@elt##1{%
+      \expandafter\ifx\csname c@##1\endcsname\caption@removefromreset
+      \else
+        \noexpand\@elt{##1}%
+      \fi}%
+    \expandafter\xdef\csname caption@cl@#2\endcsname{%
+      \csname caption@cl@#2\endcsname}%
+  \endgroup}
+\@onlypreamble\caption@removefromreset
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DeclareCaptionSubType}
+% \changes{v3.1f}{2007/11/16}{This macro added}
+% \changes{v3.1g}{2008/03/11}{Bugfix: \cs{subfigurename} will be defined now}
+% \changes{v3.1k}{2009/10/09}{Bugfix 08-10-01: Usage of \cs{caption@addtoreset} added}
+%  |\DeclareCaptionSubType|\oarg{numbering scheme}\marg{type}\\
+%  |\DeclareCaptionSubType*|\oarg{numbering scheme}\marg{type}\par
+%  The starred variant provides the numbering format
+%  \meta{type}|.|\meta{subtype} while the non-starred variant simply
+%  uses \meta{subtype}.
+%    \begin{macrocode}
+\newcommand*\DeclareCaptionSubType{%
+  \caption@teststar\@DeclareCaptionSubType\@firstoftwo\@secondoftwo}
+\@onlypreamble\DeclareCaptionSubType
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\@DeclareCaptionSubType[1]{%
+  \@testopt{\@@DeclareCaptionSubType{#1}}{alph}}
+\@onlypreamble\@DeclareCaptionSubType
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\@@DeclareCaptionSubType#1[#2]#3{%
+  \@ifundefined{c@#3}%
+    {\caption@Error{No float type '#3' defined}}%
+%    \end{macrocode}
+%    \begin{macrocode}
+    {\@ifundefined{c@sub#3}%
+       {\caption@Debug{New subtype `sub#3'}%
+        \newcounter{sub#3}%
+        \caption@addtoreset{sub#3}{#3}%
+        \@namedef{ext@sub#3}{\csname ext@#3\endcsname}%
+        \@ifundefined{l@chapter}%
+          {\edef\@tempa{\expandafter\expandafter\expandafter\noexpand
+                        \expandafter\@car\l@subsubsection\@nil}%
+           \def\@tempb{\@dottedtocline}%
+           \ifx\@tempa\@tempb % \l@subsubsection starts with \@dottedtocline
+             \expandafter\edef\csname l@sub#3\endcsname{%
+               \noexpand\@dottedtocline{2}%
+               \expandafter\expandafter\expandafter\noexpand
+               \expandafter\@gobbletwo\l@subsubsection}%
+           \else
+             \@namedef{l@sub#3}{\@dottedtocline{2}{3.8em}{3.2em}}%
+           \fi}%
+          {\expandafter\let\csname l@sub#3\endcsname\l@subsection}%
+        \@cons\caption@subtypelist{{#3}}}%
+       {\caption@Debug{Modify caption `sub#3'}}%
+%    \end{macrocode}
+%    \begin{macrocode}
+     \@namedef{sub#3name}{}%
+     \@namedef{sub#3autorefname}{\csname #3name\endcsname}%
+     #1% is \@firstoftwo in star form, and \@secondoftwo otherwise
+     {\@namedef{p@sub#3}{}%
+      \@namedef{thesub#3}{\csname the#3\endcsname.\@nameuse{#2}{sub#3}}}%
+     {\@namedef{p@sub#3}{\csname the#3\endcsname}%
+      \@namedef{thesub#3}{\@nameuse{#2}{sub#3}}}%
+     \@namedef{theHsub#3}{\csname theH#3\endcsname.\arabic{sub#3}}%
+    }}
+%    \end{macrocode}
+%    \begin{macrocode}
+\@onlypreamble\@@DeclareCaptionSubType
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\caption@subtypelist}
+% An \cs{@elt}-list containing the subtypes defined
+% with |\Declare|\x|Caption|\x|Sub|\x|Type|.
+%    \begin{macrocode}
+\newcommand*\caption@subtypelist{}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@For}
+% \changes{v3.1a}{2007/09/07}{This macro added}
+% \changes{v3.1f}{2007/11/16}{Renamed from \cs{ForFloatingEnvironments} to \cs{caption@For}}
+%  |\caption@For|\marg{elt-list}\marg{code with \#1}\\
+%  |\caption@For*|\marg{elt-list}\marg{code with \#1}
+%    \begin{macrocode}
+\newcommand*\caption@For{\caption@withoptargs\caption@@For}
+%\@onlypreamble\caption@For
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand\caption@@For[3]{%
+  \caption@AtBeginDocument#1{%
+    \def\@elt##1{#3}%
+    \@nameuse{caption@#2}%
+    \let\@elt\relax}}%
+%\@onlypreamble\caption@@For
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{subfig package adaptions}
+% \changes{v3.1}{2007/07/07}{Several adaptions to the \package{subfig} package added}
+%
+% We have to make several adaptions to \thispackage~\version{3.1} here.
+%    \begin{macrocode}
+\caption@AtBeginDocument{%
+  \def\@tempa{\@ifstar\sf@@subref\sf@subref}%
+  \ifx\subref\@tempa
+    \PackageInfo{caption3}{subfig package 1.2 or 1.3 is loaded\@gobble}%
+%    \end{macrocode}
+%    \begin{macrocode}
+    \let\caption@setfloattype\@gobble
+    \let\@dottedxxxline\sf@NEW@dottedxxxline
+    \let\sf@subfloat\sf@NEW@subfloat
+%    \end{macrocode}
+%    \begin{macrocode}
+  \fi
+  \let\sf@NEW@dottedxxxline\@undefined
+  \let\sf@NEW@subfloat\@undefined}
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\sf@NEW@dottedxxxline#1#2#3#4#5#6#7{%
+  \begingroup
+    \caption@setfloattype{#1}%
+    \caption@setoptions{subfloat}%
+    \caption@setoptions{sub#1}%
+    \ifnum #3>\@nameuse{c@#2depth}\else
+      \@dottedtocline{\z@}{#4}{#5}{#6}{#7}%
+    \fi
+  \endgroup}
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\sf@NEW@subfloat{%
+  \begingroup
+    \caption@setfloattype\@captype
+    \sf@ifpositiontop{%
+      \maincaptiontoptrue
+    }{%
+      \maincaptiontopfalse
+    }%
+    \caption@setoptions{subfloat}%
+    \caption@setoptions{sub\@captype}%
+    \let\sf@oldlabel=\label
+    \let\label=\subfloat@label
+    \ifmaincaptiontop\else
+      \advance\@nameuse{c@\@captype}\@ne
+    \fi
+    \refstepcounter{sub\@captype}%
+    \setcounter{sub\@captype @save}{\value{sub\@captype}}%
+    \@ifnextchar [%  %] match left bracket
+      {\sf@@subfloat}%
+      {\sf@@subfloat[\@empty]}}
+%    \end{macrocode}
+%
+% \iffalse
+%</kernel>
+% \fi
+%
+% \iffalse
+% --------------------------------------------------------------------------- %
+% \fi
+%
+% \clearpage
+% \section{Main package}
+% \iffalse
+%<*package>
+% \fi
+%
+% \subsection{Identification}
+%
+%    \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\ProvidesPackage{caption}[2010/01/09 v3.1m Customizing captions (AR)]
+%\@ifundefined{PackageRedefines}{}{\PackageRedefines{caption}{caption}}
+%    \end{macrocode}
+%
+% \begin{macro}{\caption@Info}
+%  \Note{The \cs{@gobble} at the end of the 2nd argument of
+%   \cs{PackageInfo} suppresses the line number info.
+%   See TLC2\cite{TLC2}, A.4.7, p885 for details.}
+%    \begin{macrocode}
+\newcommand*\caption@Info[1]{\PackageInfo{caption}{#1\@gobble}}
+\@onlypreamble\caption@Info
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{Loading the kernel}
+%
+%    \begin{macrocode}
+\RequirePackage{caption3}[=2008/08/24] % needs v1.1j or newer
+%    \end{macrocode}
+%
+% \subsection{Check against incompatible document classes}
+%
+%    \begin{macrocode}
+\caption@ifbool{documentclass}{}{%
+  \caption@WarningNoLine{%
+    Unsupported document class (or package) detected,\MessageBreak
+    usage of the caption package is not recommended}%
+  \caption@Info{\string\@makecaption\space=\space\meaning\@makecaption}%
+}
+%    \end{macrocode}
+%
+% \subsection{Check against incompatible packages}
+%
+% \changes{v3.0p}{2007/04/06}{Check against obsolete \package{caption2} package added}
+%    \begin{macrocode}
+\@ifpackageloaded{caption2}{%
+  \caption@Error{%
+    You can't use both, the (obsolete) caption2 *and*\MessageBreak
+    the (current) caption package}%
+  \endinput
+}{}
+%    \end{macrocode}
+%
+% \changes{v3.1}{2007/06/15}{Check against incompatible \package{ftcap} package added}
+% \changes{v3.1}{2007/06/15}{Check against incompatible \package{nonfloat} package added}
+% \changes{v3.1}{2007/06/18}{Check against incompatible \package{topcapt} package added}
+%    \begin{macrocode}
+\caption@AtBeginDocument{%
+  \@ifpackageloaded{ftcap}{\caption@DisablePositionOption{ftcap}}{}%
+  \@ifpackageloaded{nonfloat}{\caption@DisablePositionOption{nonfloat}}{}%
+  \@ifpackageloaded{topcapt}{\caption@DisablePositionOption{topcapt}}{}}
+%    \end{macrocode}
+% \begin{macro}{\caption@DisablePositionOption}
+% \changes{v3.1g}{2008/03/20}{\texttt{position=b} added}
+% \changes{v3.1h}{2008/03/29}{%
+%   Name changed from \cs{caption@IncompatiblePackage} to \cs{caption@DisablePositionOption};
+%   moved from package to kernel; disables the `position' option now instead of issuing a warning}
+% |\caption@DisablePositionOption|\marg{package}\par
+% disables the `position' option.
+%    \begin{macrocode}
+\newcommand*\caption@DisablePositionOption[1]{%
+  \caption@Info{%
+    `#1' package detected; setting `position=b' for compatibility reasons}%
+  \caption@setposition b%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \DeclareCaptionOption{position}{%
+    \caption@Error{Usage of the `position' option is incompatible\MessageBreak
+      to the `#1' package}}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\@onlypreamble\caption@DisablePositionOption
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{Declaration of options}
+%
+% \subsubsection{Options for figure and table}
+%
+% \changes{v3.0a}{2004/01/09}{Options \opt{figureposition} and \opt{tableposition} added}
+%    \begin{macrocode}
+\DeclareCaptionOption{figureposition}{%
+  \captionsetup*[figure]{position=#1}}
+\@onlypreamble@key{caption}{figureposition}
+%    \end{macrocode}
+%    \begin{macrocode}
+\DeclareCaptionOption{tableposition}{%
+  \captionsetup*[table]{position=#1}}
+\@onlypreamble@key{caption}{tableposition}
+%    \end{macrocode}
+%
+% \changes{v3.0d}{2004/08/03}{Options \opt{figurename} and \opt{tablename} added}
+% \changes{v3.1}{2007/07/04}{Options \opt{figurename} and \opt{tablename} re-written}
+% \changes{v3.1f}{2007/11/18}{Options \opt{figurename} and \opt{tablename} are now
+%        available after the document preamble, too.}
+% \changes{v3.1f}{2007/11/18}{Option \opt{name} added}
+%    \begin{macrocode}
+\DeclareCaptionOption{figurename}{\caption@SetName{figure}{#1}}
+\DeclareCaptionOption{tablename}{\caption@SetName{table}{#1}}
+\DeclareCaptionOption{name}{\caption@setname\@captype{#1}}
+%    \end{macrocode}
+%
+% \changes{v3.1g}{2008/02/28}{Options \opt{listfigurename} and \opt{listtablename} added}
+%    \begin{macrocode}
+\DeclareCaptionOption{listfigurename}{\caption@SetName{listfigure}{#1}}
+\DeclareCaptionOption{listtablename}{\caption@SetName{listtable}{#1}}
+%    \end{macrocode}
+%
+% \begin{macro}{\caption@SetName}
+% \changes{v3.1}{2007/07/04}{This macro added}
+% \changes{v3.1f}{2007/11/18}{After-preamble variant added}
+% \changes{v3.1g}{2008/02/28}{Renamed from \cs{caption@SetFloatName} to \cs{caption@SetName}}
+% \changes{v3.1i}{2008/08/02}{Bugfix: Works now without \cs{addto}, too}
+%  |\caption@SetName|\marg{cmd}\marg{value}
+%    \begin{macrocode}
+\newcommand*\caption@SetName[2]{%
+  \caption@setname{#1}{#2}%
+  \begingroup
+    \@ifundefined{languagename}{}{%
+      \@ifundefined{captions\languagename}{}{%
+        \expandafter\g@addto@macro\csname captions\languagename\endcsname
+          {\caption@setname{#1}{#2}}}}%
+  \endgroup}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@setname[2]{\@namedef{#1name}{#2}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\caption@AtBeginDocument{\let\caption@SetName\caption@setname}
+%    \end{macrocode}
+% \end{macro}
+%
+% \changes{v3.1f}{2007/12/21}{Options \opt{figurewithin} and \opt{tablewithin} added}
+% \changes{v3.1i}{2008/04/13}{Option \opt{within} added}
+% \changes{v3.1l}{2010/01/09}{The \opt{within} options are now available within the document, too}
+% \changes{v3.1l}{2010/01/09}{The global \opt{within} option will now affect user-defined floats
+%                             declared with \cs{DeclareCaptionType}, too}
+%
+% \begin{macro}{\caption@DeclareWithinOption}
+% \changes{v3.1l}{2010/01/09}{This macro and its usage added}
+%    \begin{macrocode}
+\newcommand*\caption@DeclareWithinOption[1]{%
+  \DeclareCaptionOption{#1within}{\caption@Within{#1}{##1}}%
+  \DeclareCaptionOption{#1without}{\caption@Within{#1}{none}}}
+%    \end{macrocode}
+% \end{macro}
+%    \begin{macrocode}
+\caption@DeclareWithinOption{figure}
+\caption@DeclareWithinOption{table}
+%    \end{macrocode}
+%    \begin{macrocode}
+\DeclareCaptionOption{within}{%
+  \@ifundefined{c@figure}{}{\caption@Within{figure}{#1}}%
+  \@ifundefined{c@table}{}{\caption@Within{table}{#1}}%
+  \caption@For{typelist}{\caption@Within{##1}{#1}}%
+  \def\caption@within@default{#1}}
+\DeclareCaptionOption{without}{\KV@caption@within{none}}
+%    \end{macrocode}
+% \begin{macro}{\caption@within}
+% \changes{v3.1}{2007/12/21}{This macro added}
+%    \begin{macrocode}
+\newcommand*\caption@Within[1]{\def\caption@type{#1}\KV@caption@DCT@within}
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Miscellaneous options}
+%
+%    \begin{macrocode}
+\DeclareCaptionOption*{config}[caption]{%
+   \InputIfFileExists{#1.cfg}%
+     {\typeout{*** Local configuration file #1.cfg used ***}}%
+     {\caption@Warning{Configuration file #1.cfg not found}}}
+%    \end{macrocode}
+%
+% \changes{v3.1f}{2007/11/28}{Option \opt{@minipage=} added}
+%    \begin{macrocode}
+\DeclareCaptionOption{@minipage}{%
+  \caption@ifinlist{#1}{auto,default}%
+    {\let\caption@if@minipage\@gobbletwo}%
+    {\caption@set@bool\caption@if@minipage{#1}}}
+\captionsetup{@minipage=default}
+%    \end{macrocode}
+%
+% \subsubsection{caption v1.x compatibility options}
+% \changes{v3.1}{2007/07/21}{Option `compatibility' added}
+% \changes{v3.1}{2007/09/01}{caption v1.x compatibility options revised}
+% \changes{v3.1d}{2007/10/24}{Bugfix 07-10-24 in caption v1.x$ compatibility options}
+%
+%    \begin{macrocode}
+\DeclareCaptionOption{compatibility}[1]{\caption@setbool{compatibility}{#1}}
+\@onlypreamble@key{caption}{compatibility}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\DeclareCaptionOptionNoValue*{normal}{%
+  \caption@setformat{plain}%
+  \caption@setjustification{justified}}
+\DeclareCaptionOptionNoValue*{isu}{%
+  \caption@setformat{hang}%
+  \caption@setjustification{justified}}
+\DeclareCaptionOptionNoValue*{hang}{%
+  \caption@setformat{hang}%
+  \caption@setjustification{justified}}
+\DeclareCaptionOptionNoValue*{center}{%
+  \caption@setformat{plain}%
+  \caption@setjustification{centering}}
+\DeclareCaptionOptionNoValue*{anne}{%
+  \caption@setformat{plain}%
+  \caption@setjustification{centerlast}}
+\DeclareCaptionOptionNoValue*{centerlast}{%
+  \caption@setformat{plain}%
+  \caption@setjustification{centerlast}}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\DeclareCaptionOptionNoValue*{scriptsize}{\def\captionfont{\scriptsize}}
+\DeclareCaptionOptionNoValue*{footnotesize}{\def\captionfont{\footnotesize}}
+\DeclareCaptionOptionNoValue*{small}{\def\captionfont{\small}}
+\DeclareCaptionOptionNoValue*{normalsize}{\def\captionfont{\normalsize}}
+\DeclareCaptionOptionNoValue*{large}{\def\captionfont{\large}}
+\DeclareCaptionOptionNoValue*{Large}{\def\captionfont{\Large}}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\DeclareCaptionOptionNoValue*{up}{\l@addto@macro\captionlabelfont\upshape}
+\DeclareCaptionOptionNoValue*{it}{\l@addto@macro\captionlabelfont\itshape}
+\DeclareCaptionOptionNoValue*{sl}{\l@addto@macro\captionlabelfont\slshape}
+\DeclareCaptionOptionNoValue*{sc}{\l@addto@macro\captionlabelfont\scshape}
+\DeclareCaptionOptionNoValue*{md}{\l@addto@macro\captionlabelfont\mdseries}
+\DeclareCaptionOptionNoValue*{bf}{\l@addto@macro\captionlabelfont\bfseries}
+\DeclareCaptionOptionNoValue*{rm}{\l@addto@macro\captionlabelfont\rmfamily}
+\DeclareCaptionOptionNoValue*{sf}{\l@addto@macro\captionlabelfont\sffamily}
+\DeclareCaptionOptionNoValue*{tt}{\l@addto@macro\captionlabelfont\ttfamily}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\DeclareCaptionOptionNoValue*{nooneline}{\caption@setbool{slc}{0}}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\caption@setbool{ruled}{0}
+\DeclareCaptionOptionNoValue*{ruled}{\caption@setbool{ruled}{1}}
+%    \end{macrocode}
+%
+% \subsubsection{caption2 v2.x compatibility options}
+% \changes{v3.0h}{2005/07/08}{caption2 \version{2.x} compatibility options added}
+% \changes{v3.1}{2007/09/01}{caption2 v2.x compatibility options revised}
+% \changes{v3.1d}{2007/10/24}{Bugfix 07-10-24 in caption v2.x$ compatibility options}
+%
+%    \begin{macrocode}
+\DeclareCaptionOptionNoValue*{flushleft}{%
+  \caption@setformat{plain}%
+  \caption@setjustification{raggedright}}
+\DeclareCaptionOptionNoValue*{flushright}{%
+  \caption@setformat{plain}%
+  \caption@setjustification{raggedleft}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\DeclareCaptionOptionNoValue*{oneline}{\caption@setbool{slc}{1}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\DeclareCaptionOptionNoValue*{ignoreLTcapwidth}{%
+  \caption@WarningNoLine{Obsolete option `ignoreLTcapwidth' ignored}}
+%    \end{macrocode}
+%
+% \subsubsection{Obsolete caption v3.0 options}
+% \changes{v3.1}{2007/05/07}{Package option \opt{caption} marked as obsolete,
+%        gives error now}
+%
+%    \begin{macrocode}
+\DeclareCaptionOption*{caption}{%
+  \caption@setbool{temp}{#1}%
+  \caption@ifbool{temp}{}{%
+    \caption@Error{%
+      The package option `caption=#1' is obsolete.\MessageBreak
+      Please pass this option to the subfig package instead\MessageBreak
+      and do *not* load the caption package anymore}}}
+%    \end{macrocode}
+%
+% \subsubsection{fltpage package support options}
+%
+% \changes{v3.1}{2007/09/01}{Options `FPlist' \& `FPref' added}
+% With these options is controlled where the list-of entry and |\ref| resp.
+% |\pageref| or |\autoref| will link to.
+% Defaults are |FPlist=caption| and |FPref=figure| which is inconsistent,
+% but compatible to the usual behaviour of the \package{fltpage} package.
+%    \begin{macrocode}
+\DeclareCaptionOption{FPlist}[1]{\caption@setFPoption{list}{#1}}
+\DeclareCaptionOption{FPref}[1]{\caption@setFPoption{ref}{#1}}
+\@onlypreamble@key{caption}{FPlist}
+\@onlypreamble@key{caption}{FPref}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@setFPoption[2]{%
+  \edef\caption@tempa{\@car#2\@nil}%
+  \caption@setbool{FP#1cap}{\if c\caption@tempa 1\else 0\fi}}
+\@onlypreamble\caption@setFPoption
+%    \end{macrocode}
+%    \begin{macrocode}
+\captionsetup{FPlist=caption,FPref=figure}
+%    \end{macrocode}
+%
+% \subsubsection{hyperref package support options}
+%
+% \changes{v3.1}{2007/06/21}{Options `hypcap' \& `hypcapspace' added}
+% With |hypcap=off| one can turn the \package{hypcap} support off
+% (default is |on|).
+%    \begin{macrocode}
+\DeclareCaptionOption{hypcap}[1]{\caption@setbool{hypcap}{#1}}
+\DeclareCaptionOption{hypcapspace}{\def\caption@hypcapspace{#1}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\captionsetup{hypcap=1,hypcapspace=.5\baselineskip}
+%    \end{macrocode}
+%
+% \subsection{\AmS{} \& \SmF{} document classes support}
+% \changes{v3.1}{2007/07/29}{\AmS\ \& \SmF\ document classes support added (package)}
+%
+%    \begin{macrocode}
+\caption@ifamsclass{%
+  \caption@Info{AMS or SMF document class}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \setlength\belowcaptionskip{0pt}% set to 12pt by AMS class
+%    \end{macrocode}
+%    \begin{macrocode}
+}
+%    \end{macrocode}
+%
+% \subsection{\KOMAScript{} document classes support}
+% \changes{v3.0a}{2004/01/18}{Minimum adaptation to \KOMAScript\ added (package)}
+% \changes{v3.0h}{2005/08/22}{\KOMAScript\ compatibility options added (package)}
+% \changes{v3.0i}{2005/11/17}{\KOMAScript\ compatibility commands added (package)}
+% \changes{v3.0l}{2007/02/18}{\KOMAScript\ compatibility revised (package)}
+% \changes{v3.1}{2007/03/17}{\KOMAScript\ compatibility options removed (package)}
+% \changes{v3.1}{2007/04/05}{\KOMAScript\ compatibility revised \& enhanced (package)}
+%
+%    \begin{macrocode}
+\caption@ifkomaclass{%
+  \caption@Info{KOMA-Script document class}%
+%    \end{macrocode}
+%
+% Here we emulate the caption related commands and take over the caption 
+% related settings from the \KOMAScript\ classes.
+%
+% \begin{macro}{\@tablecaptionabovetrue}
+% \begin{macro}{\@tablecaptionabovefalse}
+% \changes{v3.1g}{2008/03/01}{\cs{def} changed to \cs{g@addto@macro}}
+%    \begin{macrocode}
+  \g@addto@macro\@tablecaptionabovetrue{\captionsetup*[table]{position=t}}
+  \g@addto@macro\@tablecaptionabovefalse{\captionsetup*[table]{position=b}}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%    \begin{macrocode}
+  \if@tablecaptionabove
+    \@tablecaptionabovetrue
+  \else
+    \@tablecaptionabovefalse
+  \fi
+%    \end{macrocode}
+%
+% \begin{macro}{\onelinecaptionstrue}
+% \begin{macro}{\onelinecaptionsfalse}
+% \changes{v3.1g}{2008/03/01}{\cs{def} changed to \cs{g@addto@macro}}
+%    \begin{macrocode}
+  \g@addto@macro\onelinecaptionstrue{\let\caption@ifslc\@firstoftwo}
+  \g@addto@macro\onelinecaptionsfalse{\let\caption@ifslc\@secondoftwo}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%    \begin{macrocode}
+  \ifonelinecaptions
+    \onelinecaptionstrue
+  \else
+    \onelinecaptionsfalse
+  \fi
+%    \end{macrocode}
+%
+% \begin{macro}{\@captionabovetrue}
+% \begin{macro}{\@captionabovefalse}
+% \changes{v3.0j}{2006/03/21}{Bugfix 06-03-21:
+%        \cs{let}\cs{caption@setposition}\cs{@gobble} added}
+% \changes{v3.0n}{2006/03/09}{Accidentally this got broken in \version{3.0m}, fixed}
+% \changes{v3.1}{2007/03/31}{We redefine \cs{captionabovetrue/false} now
+%        instead of \cs{captionabove/below}}
+% \changes{v3.1g}{2008/03/01}{\cs{def} changed to \cs{g@addto@macro}}
+% \changes{v3.1k}{2009/10/09}{\opt{figureposition} and \opt{tableposition} will issue a warning now}
+%  Please note that these are stronger than the \opt{position} setting, therefore we
+%  override the options \opt{figureposition} and \opt{tableposition} to typeout a warning.
+%    \begin{macrocode}
+  \g@addto@macro\@captionabovetrue{\let\caption@position\@firstoftwo}
+  \g@addto@macro\@captionabovefalse{\let\caption@position\@secondoftwo}
+%    \end{macrocode}
+%    \begin{macrocode}
+  \DeclareCaptionOption{figureposition}{%
+    \caption@WarningNoLine{Option `figureposition=#1' has no effect\MessageBreak
+    when used with a KOMA script document class}}
+  \DeclareCaptionOption{tableposition}{%
+    \caption@WarningNoLine{Option `tableposition=#1' has no effect\MessageBreak
+    when used with a KOMA script document class}}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\setcapindent}
+%    \begin{macrocode}
+  \let\caption@KOMA@setcapindent\@setcapindent
+  \renewcommand*\@setcapindent[1]{%
+    \caption@KOMA@setcapindent{#1}\caption@setcapindent}
+%    \end{macrocode}
+%    \begin{macrocode}
+  \let\caption@KOMA@@setcapindent\@@setcapindent
+  \renewcommand*\@@setcapindent[1]{%
+    \caption@KOMA@@setcapindent{#1}\caption@setcapindent}
+%    \end{macrocode}
+%    \begin{macrocode}
+  \newcommand*\caption@setcapindent{%
+    \captionsetup{indent=\ifdim\cap@indent<\z@\z@\else\cap@indent\fi}}
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+  \@ifundefined{cap@indent}{}{\caption@setcapindent}
+%    \end{macrocode}
+%
+% \begin{macro}{\setcapwidth}
+%  \Note{The optional argument of \cs{setcapwidth} if not supported (yet),
+%  so we issue a warning if used.
+%  (Since this does not seem to have an negative effect when used
+%   by the \texttt{captionbeside} environment, we suppress the warning here.)}
+%    \begin{macrocode}
+  \expandafter\let\expandafter\caption@KOMA@setcapwidth
+                  \csname\string\setcapwidth\endcsname
+  \@namedef{\string\setcapwidth}[#1]#2{%
+    \caption@KOMA@setcapwidth[#1]{#2}\caption@setcapwidth{#1}}
+%    \end{macrocode}
+%    \begin{macrocode}
+  \newcommand*\caption@setcapwidth[1]{%
+    \ifx\\#1\\\else
+      \@ifundefined{cap@margin}{}{%
+        \def\@tempa{captionbeside}%
+        \ifx\@tempa\@currenvir\else\caption@Warning{%
+          Ignoring optional argument [#1] of \string\setcapwidth\MessageBreak}%
+        \fi}%
+    \fi
+    \captionsetup{width=\cap@width}}
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+  \def\caption@tempa{\hsize}%
+  \ifx\caption@tempa\cap@width \else
+    \caption@setcapwidth{?}
+  \fi
+%    \end{macrocode}
+%
+% \begin{macro}{\setcapmargin}
+%    \begin{macrocode}
+  \expandafter\let\expandafter\caption@KOMA@setcapmargin
+                  \csname\string\@setcapmargin\endcsname
+  \@namedef{\string\@setcapmargin}[#1]#2{%
+    \caption@KOMA@setcapmargin[#1]{#2}\caption@setcapmargin}
+%    \end{macrocode}
+%    \begin{macrocode}
+  \expandafter\let\expandafter\caption@KOMA@@setcapmargin
+                  \csname\string\@@setcapmargin\endcsname
+  \@namedef{\string\@@setcapmargin}[#1]#2{%
+    \caption@KOMA@@setcapmargin[#1]{#2}\caption@setcapmargin}
+%    \end{macrocode}
+%    \begin{macrocode}
+  \newcommand*\caption@setcapmargin{%
+    \begingroup
+      \let\onelinecaptionsfalse\relax
+      \def\@twoside{0}%
+      \def\if@twoside{\def\@twoside{1}\iffalse}%
+      \cap@margin
+      \def\@tempa{\endgroup}%
+      \ifx\cap@left\hfill\else\ifx\cap@right\hfill\else
+        \def\hspace##1##{\@firstofone}%
+        \edef\@tempa{\endgroup
+          \noexpand\captionsetup{%
+            twoside=\@twoside,slc=0,%
+            margin={\cap@left,\cap@right}}}%
+      \fi\fi
+      \@tempa}
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+  \ifx\cap@margin\relax \else
+    \caption@setcapmargin
+  \fi
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+}
+%    \end{macrocode}
+%
+% \subsection{Processing of options}
+%
+% \changes{v3.0m}{2007/03/04}{Verbose option added (package)}
+% \changes{v3.1}{2007/07/02}{Verbose option removed from package}
+%
+% \changes{v3.1}{2007/03/17}{We do not process global options anymore}
+%    \begin{macrocode}
+\caption@ProcessOptions*{caption}
+%    \end{macrocode}
+%
+% \subsection{\cs{captionof} and \cs{captionlistentry}}
+%
+% \changes{v3.0d}{2004/08/03}{Option \opt{type=} added}
+% \changes{v3.1}{2007/06/25}{Option \opt{type*=} added}
+% \changes{v3.1f}{2007/11/16}{Option \opt{subtype} \& \opt{subtype*} added}
+%
+%    \begin{macrocode}
+\caption@AtBeginDocument{%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \DeclareCaptionOption{type}{\caption@settype{#1}}%
+  \DeclareCaptionOption{type*}{\caption@settype*{#1}}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \DeclareCaptionOption{subtype}[sub\@captype]{\caption@setsubtype{#1}}%
+  \DeclareCaptionOption{subtype*}[sub\@captype]{\caption@setsubtype*{#1}}%
+%    \end{macrocode}
+%    \begin{macrocode}
+}
+%    \end{macrocode}
+%
+% \emph{Important Note:}
+% Like |\captionof| the option |type=| should only be used inside a
+% group, box, or environment and does not check if the argument is a valid
+% floating environment or not.
+%
+% \begin{macro}{\caption@settype}
+% \changes{v3.1}{2007/05/09}{This macro added}
+% \changes{v3.1b}{2007/09/22}{Usage of \cs{caption@xlabel} added}
+% \changes{v3.1d}{2007/10/23}{Error message for \cs{caption@checkgrouplevel} revised}
+% \changes{v3.1f}{2007/11/16}{\cs{caption@setsubtype} added}
+% \changes{v3.1f}{2007/12/03}{Crappy \cs{caption@iftypewarning} replaced}
+% \changes{v3.1g}{2008/01/12}{Usage of \cs{ifcaptionsetup@star} added}
+%  |\caption@settype*|\marg{type}\par
+%  sets |\@captype| and executes the options associated with it
+%  (using |\caption@setoptions|).
+%  Furthermore we check |\currentgrouplevel| (if avail),
+%  redefine |\@currentlabel| so a |\label| before |\caption| will result
+%  in a hint instead of a wrong reference, and
+%  use the macro |\caption@|(|sub|)|typehook| (which will be used by our
+%  \package{float} package support).\par
+%  The non-starred version sets a \package{hyperref} anchor additionally
+%  (if |hypcap=true| and the \package{hypcap} package is not loaded).
+%    \begin{macrocode}
+\newcommand*\caption@settype{%
+  \caption@@settype{}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@setsubtype{%
+  \caption@iftype
+    {\caption@@settype{sub}}%
+    {\caption@Error{Option `subtype=' outside float}}}%
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@@settype[1]{%
+  \caption@teststar{\caption@@@settype{#1}}\@firstoftwo\@secondoftwo}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@@@settype[3]{%
+% #1 = "" or "sub"
+% #2 = \@firstoftwo in star form, \@secondoftwo otherwise
+% #3 = <type>, e.g. "figure" or "table"
+  \@ifundefined{c@#3}%
+    {\caption@Error{No float type '#3' defined}}%
+    {\caption@Debug{#1type=#3}%
+     \caption@checkgrouplevel{#1}{%
+       \captionsetup{#1type#2*\@empty=...}#2{ or
+                     \@backslashchar#1captionof}{}}%
+%    \end{macrocode}
+%    \begin{macrocode}
+     \edef\caption@tempa{#3}%
+     \expandafter\ifx\csname @#1captype\endcsname\caption@tempa \else
+       \ifcaptionsetup@star\else\@nameuse{caption@#1type@warning}\fi
+     \fi
+     \expandafter\let\csname @#1captype\endcsname\caption@tempa
+%    \end{macrocode}
+%    \begin{macrocode}
+     \@nameuse{caption@#1typehook}%
+%    \end{macrocode}
+%    \begin{macrocode}
+     \caption@setoptions{#3}%
+     \ifx\caption@opt\relax
+       \@nameundef{caption@#1type@warning}%
+     \else
+       \@namedef{caption@#1type@warning}{\caption@Warning{%
+         The #1caption type was already set to
+         `\csname @#1captype\endcsname'\MessageBreak}}%
+     \fi
+%    \end{macrocode}
+%    \begin{macrocode}
+     \let\caption@ifrefstepcounter\@secondoftwo
+     #2{}{%
+       \let\@currentlabel\caption@undefinedlabel
+%      \let\@currentHlabel\@undefined
+       \ifx\caption@ORI@label\@undefined
+         \let\caption@ORI@label\label
+         \let\label\caption@xlabel
+       \fi
+       \caption@start}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@typehook}
+% Hook, will be extended later on, e.g.~by our \package{float} package
+% support.
+%    \begin{macrocode}
+\newcommand*\caption@typehook{}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@iftype}
+% \changes{v3.1}{2007/04/11}{This macro and its usage added}
+%  Since we often need to check if |\@captype| is defined (means: we
+%  are inside a floating environment) this helper macro was introduced.
+%    \begin{macrocode}
+\newcommand*\caption@iftype{%
+  \@ifundefined{@captype}{\let\@captype\@undefined\@secondoftwo}\@firstoftwo}
+%    \end{macrocode}
+% \iffalse
+% \newcommand*\caption@iftype{%
+%   \begingroup
+%     \@ifundefined{@captype}%
+%       {\aftergroup\@secondoftwo}%
+%       {\aftergroup\@firstoftwo}%
+%   \endgroup}
+% \fi
+% \end{macro}
+%
+% \begin{macro}{\caption@checkgrouplevel}
+% \changes{v3.1}{2007/07/15}{This macro and its usage added}
+% \changes{v3.1f}{2007/11/28}{Error changed to warning (compatibility)}
+%  Checks if |\captionsetup{type=|\ldots|}| or |\caption| is done
+%  inside a group or not -- in the latter case a warning message will
+%  be issued. (needs \eTeX)
+%    \begin{macrocode}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname currentgrouplevel\endcsname\relax
+  \caption@Debug{TeX engine: TeX}
+  \let\caption@checkgrouplevel\@gobbletwo
+\else
+  \caption@Debug{TeX engine: e-TeX}
+  \newcommand*\caption@checkgrouplevel[2]{%
+    \@ifundefined{#1caption@grouplevel}{%
+       \@ifundefined{caption@grouplevel}{\let\caption@grouplevel\z@}{}%
+       \ifnum\currentgrouplevel>\caption@grouplevel\relax
+         \expandafter\edef\csname #1caption@grouplevel\endcsname{%
+           \the\currentgrouplevel}%
+       \else
+         \caption@Warning{\string#2\MessageBreak outside box or environment}%
+       \fi
+    }{}}
+\fi
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@undefinedlabel}
+% \changes{v3.1}{2007/07/03}{This macro and its usage added}
+% \changes{v3.1b}{2007/09/22}{Contents changed to \texttt{??}}
+% \changes{v3.1i}{2008/04/13}{Contents changed to \cs{caption@xref}(\ldots)}
+% \changes{v3.1k}{2009/03/30}{Bugfix 08-12-08: \cs{caption@xref} is robust now}
+%  This label will be used for |\currentlabel| inside (floating) environments
+%  as default. (see above)
+%  \iffalse\Note{All commands used have to be robust here.}\fi
+%    \begin{macrocode}
+\newcommand*\caption@undefinedlabel{%
+  \protect\caption@xref{\caption@labelname}{\on@line}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\DeclareRobustCommand*\caption@xref[2]{%
+  \caption@WarningNoLine{\noexpand\label before \string\caption#2}%
+  \@setref\relax\@undefined{#1}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@labelname{??}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\caption@xlabel}
+% \changes{v3.1b}{2007/09/22}{This macro and its usage added}
+% \changes{v3.1f}{2007/11/11}{Revised}
+% \changes{v3.1i}{2008/04/13}{Bugfix: \cs{pageref} should always work now}
+%  The new code of |\label| inside floating environments.
+%  |\label| will be redefined using |\caption@withoptargs|, so
+%  |#1| are the optional arguments (if any), and
+%  |#2| is the mandatory argument here.
+%    \begin{macrocode}
+\newcommand*\caption@xlabel[1]{%
+  \caption@@xlabel
+  \def\caption@labelname{#1}%
+  \caption@ORI@label{#1}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@@xlabel{%
+  \global\let\caption@@xlabel\@empty
+  \@bsphack
+    \protected@write\@auxout{}%
+      {\string\providecommand*\string\caption@xref[2]{%
+        \string\@setref\string\relax\string\@undefined{\string##1}}}%
+  \@esphack}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\captionof}
+% \changes{v3.1}{2007/05/09}{Uses \cs{caption@settype} instead of \cs{def}\cs{@captype}}
+% \changes{v3.1c}{2007/09/22}{Bugfix: Redefinition of \cs{caption@setfloatcapt} removed}
+% \changes{v3.1e}{2007/10/30}{Better compatibility: Will be defined with \cs{AtBeginDocument} now}
+%  |\captionof|\marg{type}\oarg{lst\_entry}\marg{heading}\\
+%  |\captionof*|\oarg{lst\_entry}\marg{heading}\par
+% \Note{This will be defined with \cs{AtBeginDocument} so
+%  \cs{usepackage}\csmarg{caption,capt-of} will still work.
+%  (Compatibility to \version{1.x})}
+%    \begin{macrocode}
+\caption@AtBeginDocument{%
+  \def\captionof{\caption@teststar\caption@of{\caption*}\caption}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@of[2]{\caption@settype*{#2}#1}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\captionlistentry}
+% \changes{v3.1}{2007/07/28}{This macro added}
+% \changes{v3.1f}{2007/11/16}{Bugfix 07-11-09: `space hack' added}
+% \changes{v3.1g}{2008/01/20}{Starred variant added}
+% \changes{v3.1l}{2010/01/09}{Adapted to current version of nameref package}
+%  |\captionlistentry|\oarg{float type}\marg{list entry}\\
+%  |\captionlistentry*|\oarg{float type}\marg{list entry}
+%    \begin{macrocode}
+\newcommand*\captionlistentry{%
+  \caption@teststar\@captionlistentry\@firstoftwo\@secondoftwo}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\@captionlistentry[1]{%
+  \@testopt{\caption@listentry{#1}}\@captype}
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\caption@listentry#1[#2]#3{%
+  \@bsphack
+    #1{\caption@gettitle{#3}}%
+      {\caption@refstepcounter{#2}%
+       \caption@makecurrent{#2}{#3}}%
+    \caption@addcontentsline{#2}{#3}%
+  \@esphack}
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{\cs{ContinuedFloat}}
+%
+% \begin{macro}{\ContinuedFloat}
+% \changes{v3.0f}{2005/06/11}{%
+%         Call of \cs{caption@ContinuedFloat} added}
+% \changes{v3.0i}{2005/11/12}{%
+%         Optional argument and call of \cs{caption@@ContinuedFloat} added}
+% \changes{v3.0g}{2005/06/28}{%
+%         Bugfix: \cs{newcounter} replaced by \cs{newcount}}
+% \changes{v3.1}{2007/07/02}{Format of \package{hyperref} extension changed}
+% \changes{v3.1}{2007/07/07}{\cs{caption@setoptions} added}
+% \changes{v3.1g}{2008/01/29}{Starred variant and hook \cs{sf@ContinuedFloat} added}
+%  |\ContinuedFloat|\\
+%  |\ContinuedFloat*|\par
+%  This mainly decrements the appropriate counter and increments the
+%  continuation counter instead.
+%  Furthermore we set |\caption@resetContinuedFloat| to |\@gobble| so the
+%  continuation counter will not be reset to zero inside |\caption@refstepcounter|.
+%  Please forget about the optional argument, it was never working well, is
+%  incompatible to the \package{subfig} package, but is still there for
+%  compatibility reasons.
+%  \Note{The definition of \cs{ContinuedFloat} itself is compatible
+%   to the one inside the \package{subfig} package, except for the
+%   starred variant and the optional argument.}
+%  When the \package{hyperref} package is used we have the problem
+%  that the usage of |\ContinuedFloat| will create duplicate
+%  hyper links -- |\@currentHref| will be the same for the main float and
+%  the continued ones. So we have to make sure unique labels and references
+%  will be created each time. We do this by extending |\theHfigure| and
+%  |\theHtable|, so for continued floats the scheme
+%  \begin{quote}\meta{type}|.|\meta{type \#}|\alph{|\meta{continued \#}|}|\end{quote}
+%  will be used instead of
+%  \begin{quote}\meta{type}|.|\meta{type \#}\quad\quad.\end{quote}
+%  \par{\small(This implementation follows an idea from Steven Douglas Cochran.)}
+%  \Note{This does not help if the \package{hyperref} package option
+%        \texttt{naturalnames=true} is set.}
+%    \begin{macrocode}
+\def\ContinuedFloat{%
+  \@ifnextchar[\@Continued@Float\@ContinuedFloat}
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\@Continued@Float[#1]{\addtocounter{#1}\m@ne}
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\@ContinuedFloat{%
+  \caption@iftype
+    {\addtocounter\@captype\m@ne
+     \caption@ContinuedFloat\@captype}%
+    {\caption@Error{\noexpand\ContinuedFloat outside float}}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\caption@ContinuedFloat#1{%
+  \@ifstar{\caption@Continued@Float@{#1}}{\caption@Continued@Float{#1}}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\caption@Continued@Float@{%
+  \addtocounter\@captype\@ne
+  \@stpelt{ContinuedFloat}\stepcounter{ContinuedFloat}%
+  \def\caption@resetContinuedFloat##1{\xdef\caption@CFtype{##1}}%
+  \caption@@ContinuedFloat}
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\caption@Continued@Float#1{%
+  \edef\caption@tempa{#1}%
+  \ifx\caption@tempa\caption@CFtype
+    \stepcounter{ContinuedFloat}%
+    \let\caption@resetContinuedFloat\@gobble
+    \caption@@ContinuedFloat{#1}%
+    \sf@ContinuedFloat{#1}%
+  \else
+    \caption@Error{Continued `#1' after `\caption@CFtype'}%
+  \fi}
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\caption@@ContinuedFloat#1{%
+  \expandafter\l@addto@macro\csname the#1\endcsname\theContinuedFloat
+  \@ifundefined{theH#1}{}{%
+    \expandafter\l@addto@macro\csname theH#1\endcsname{%
+      \@alph\c@ContinuedFloat}}%
+  \caption@setoptions{ContinuedFloat}%
+  \caption@setoptions{continued#1}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\providecommand*\sf@ContinuedFloat[1]{}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@CFtype{??}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\theContinuedFloat}
+% Its preset to \cs{@empty}, so usually the continuation counter is not
+% included in the caption label or references.
+%    \begin{macrocode}
+\newcounter{ContinuedFloat}
+\let\theContinuedFloat\@empty
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@resetContinuedFloat}
+%  |\caption@resetContinuedFloat|\marg{type}\par
+%  If a continuation counter is defined, we reset it.
+%  (This one will be called inside |\@caption|.)
+%    \begin{macrocode}
+\newcommand*\caption@resetContinuedFloat[1]{%
+  \@stpelt{ContinuedFloat}\xdef\caption@CFtype{#1}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{Internal helpers}
+%
+% \begin{macro}{\caption@refstepcounter}
+% \changes{v3.1}{2007/07/28}{This macro added}
+%  Resets the continuation counter, increments the float (i.e. |figure| or
+%  |table|) counter, and sets the |refstepcounter| flag.
+%    \begin{macrocode}
+\newcommand*\caption@refstepcounter[1]{%
+  \caption@resetContinuedFloat{#1}%
+  \caption@@refstepcounter{#1}%
+  \let\caption@ifrefstepcounter\@firstoftwo}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@@refstepcounter{\refstepcounter}
+\let\caption@ifrefstepcounter\@secondoftwo
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@dblarg}
+% \changes{v3.1}{2007/02/05}{This macro added}
+% \changes{v3.1f}{2007/12/06}{Bugfix 07-12-06: Changed so it works without \cs{kernel@ifnextchar}
+%        (which was introduced in \LaTeXe\ 2004/01/23), too}
+%  A |\relax| was added compared to |\@dblarg| so |\caption{}| will be
+%  expanded to |\caption[\relax]{}| (and not to |\caption[]{}|).
+%    \begin{macrocode}
+\@ifundefined{kernel@ifnextchar}%
+  {\newcommand\caption@dblarg[1]{\@ifnextchar[{#1}{\caption@xdblarg{#1}}}}%
+  {\newcommand\caption@dblarg[1]{\kernel@ifnextchar[{#1}{\caption@xdblarg{#1}}}}%
+\newcommand\caption@xdblarg[2]{#1[{#2\relax}]{#2}}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@begin}
+% \changes{v3.0a}{2004/01/23}{\cs{caption@settype} changed to \cs{caption@setfloattype}}
+% \changes{v3.0e}{2005/04/12}{Check for default label format added}
+% \changes{v3.0f}{2005/06/11}{Usage of \cs{caption@resetContinuedFloat} added}
+% \changes{v3.1}{2007/05/09}{Usage of \cs{caption@setfloattype} \&
+%        \cs{caption@resetContinuedFloat} removed}
+%  Our handling of |\caption| will always be surrounded by
+%  |\caption@begin| (or |\caption@beginex|) and |\caption@end|.\par
+%  |\caption@begin|\marg{type} performs these tasks:
+%  \begin{enumerate}
+%  \item[1.] Start a new group.
+%  \item[2.] Define |\fnum@|\meta{type} if the caption label format is set
+%            to non-default.
+%  \item[3.] Override the |position=| setting, if necessary.
+%            (for example if set to |auto| or used inside a |supertabular|)
+%  \end{enumerate}
+%    \begin{macrocode}
+\newcommand*\caption@begin[1]{%
+  \begingroup
+    \caption@setfnum{#1}%
+    \caption@fixposition
+    \global\let\caption@fixedposition\caption@position}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@beginex}
+% \changes{v3.0b}{2004/05/16}{Support of \opt{listof=} added}
+% \changes{v3.0l}{2007/02/04}{Takes now 3 args instead of 2, check for empty heading added}
+% \changes{v3.1}{2007/07/01}{Makes lst-entry now instead of redefining \cs{addcontentsline}}
+%  |\caption@beginex|\marg{type}\marg{list entry}\marg{heading}\par
+%  performs the same tasks as |\caption@begin| and additionally:
+%  \begin{enumerate}
+%  \item[4.] Make an entry in the list-of-whatever.
+%  \item[5.] Set |\caption@ifempty| according argument \meta{heading}.
+% \end{enumerate}
+%    \begin{macrocode}
+\newcommand\caption@beginex[3]{%
+  \caption@begin{#1}%
+  \caption@addcontentsline{#1}{#2}%
+  \caption@ifempty{#3}{}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@end}
+%  |\caption@end| closes the group.
+%    \begin{macrocode}
+\newcommand*\caption@end{%
+  \endgroup
+  \let\caption@position\caption@fixedposition}
+%    \end{macrocode}
+% \end{macro}
+%
+% \changes{v3.0a}{2004/01/23}{%
+%       Internal hooks \cs{caption@@begin} \& \cs{caption@@end} added}
+% \changes{v3.0h}{2005/10/06}{%
+%       Internal hooks \cs{caption@@begin} \& \cs{caption@@end} removed}
+%
+% \begin{macro}{\caption@setfnum}
+% \changes{v3.1}{2007/03/10}{This macro added}
+%  |\caption@setfnum|\marg{type}\\
+%  redefines |\fnum@|\meta{type} according the caption label format
+%  set with |labelformat=|. But if |labelformat=default| is set,
+%  |\fnum@|\meta{type} will not be overwritten by us.
+%    \begin{macrocode}
+\newcommand*\caption@setfnum[1]{%
+  \@ifundefined{fnum@#1}{\iftrue}{\ifx\caption@lfmt\caption@lfmt@default\else}%
+    \@namedef{fnum@#1}{\caption@fnum{#1}}%
+  \fi}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@boxrestore}
+% \changes{v3.1}{2007/03/03}{This macro and its usage added}
+% \changes{v3.1b}{2007/09/17}{Bugfix: Redefinition of CR added}
+%  The original code (from |latex/base/ltboxes.dtx|):
+%  \begin{verbatim}
+%  \def\@parboxrestore{\@arrayparboxrestore\let\\\@normalcr}
+%  \def\@arrayparboxrestore{%
+%    \let\if@nobreak\iffalse
+%    \let\if@noskipsec\iffalse
+%    \let\par\@@par
+%    \let\-\@dischyph
+%    \let\'\@acci\let\`\@accii\let\=\@acciii
+%    \parindent\z@ \parskip\z@skip
+%    \everypar{}%
+%    \linewidth\hsize
+%    \@totalleftmargin\z@ 
+%    \leftskip\z@skip \rightskip\z@skip \@rightskip\z@skip
+%    \parfillskip\@flushglue \lineskip\normallineskip
+%    \baselineskip\normalbaselineskip
+%    \sloppy}
+%  \end{verbatim}%^^A
+% This one will be used by |\@caption| instead of |\@parboxrestore|.
+%    \begin{macrocode}
+\newcommand*\caption@boxrestore{%
+  \let\if@nobreak\iffalse
+  \let\if@noskipsec\iffalse
+  \let\par\@@par
+% \let\-\@dischyph
+% \let\'\@acci\let\`\@accii\let\=\@acciii
+  \parindent\z@ \parskip\z@skip
+  \everypar{}%
+% \linewidth\hsize
+% \@totalleftmargin\z@ 
+  \leftskip\z@skip \rightskip\z@skip \@rightskip\z@skip
+  \parfillskip\@flushglue \lineskip\normallineskip
+  \baselineskip\normalbaselineskip
+  \sloppy
+  \let\\\@normalcr
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@normalsize}
+% \changes{v3.1}{2007/05/05}{This macro and its usage added}
+%  This one will be used by |\@caption| instead of |\normalsize|.\par
+%  Its code is equivalent to
+%  \begin{quote}
+%    |\caption@font{normal}%|
+%  \end{quote}
+%  but executes faster (since the starred form of |\caption@font|
+%  does not use |\setkeys| internally).
+%    \begin{macrocode}
+\newcommand*\caption@normalsize{%
+  \caption@font*{\KV@caption@fnt@normal\@unused}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@setfloatcapt}
+%  Needed for support of the \package{float} package, where the caption will
+%  not be typeset directly, but catched in a |\vbox| called |\@floatcapt|
+%  instead.
+%    \begin{macrocode}
+\let\caption@setfloatcapt\@firstofone
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@makecurrent}
+% \begin{macro}{\caption@makeanchor}
+% \begin{macro}{\caption@start}
+% \begin{macro}{\caption@@start}
+% \begin{macro}{\caption@freezeHref}
+% \begin{macro}{\caption@defrostHref}
+%  All these are needed for support of the \package{hyperref} package.
+%    \begin{macrocode}
+\newcommand*\caption@makecurrent[2]{}
+\let\caption@makeanchor\@firstofone
+\let\caption@start\relax
+\let\caption@@start\relax
+\let\caption@freezeHref\relax
+\let\caption@defrostHref\relax
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\caption@gettitle}
+% \changes{v3.1}{2007/05/05}{This macro and its usage added}
+%  This one is needed for support of the \package{nameref} package.
+%    \begin{macrocode}
+\newcommand\caption@gettitle[1]{%
+  \@ifundefined{NR@gettitle}%
+    {\def\@currentlabelname{#1}}%
+    {\NR@gettitle{#1}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{\cs{caption}, \cs{@caption}, and \cs{@makecaption}}
+%
+% \begin{macro}{\caption@caption}
+% \changes{v3.0f}{2005/05/22}{Bugfix: \cs{ContinuedFloat} added}
+% \changes{v3.0f}{2005/06/13}{Support of \cs{caption*[]} removed}
+% \changes{v3.0l}{2007/01/19}{Minimal support of \textsf{combine} package added}
+% \changes{v3.1}{2007/02/04}{Re-written, does not save\&use original definition anymore}
+%  Here comes our definition of |\caption| and |\caption*|.
+%  Beside the support of the starred variant this code was adapted to the
+%  various packages we support.
+%  We are using |\caption@dblarg| instead of |\@dblarg| so |\caption{}|
+%  (with an empty arg.) will produce a list-of entry, but |\caption[]{}|
+%  won't.
+%    \begin{macrocode}
+\def\caption@caption{%
+  \caption@iftype
+    {\caption@checkgrouplevel\@empty\caption
+     \caption@star
+       {\caption@refstepcounter\@captype}%
+       {\caption@dblarg{\@caption\@captype}}}%
+    {\caption@Error{\noexpand\caption outside float}}}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@star}
+% \changes{v3.1}{2007/06/24}{Renamed from \cs{caption@caption} to \cs{caption@star}}
+%  A helper macro which processes the optional |*| after |\caption|.
+%  \Note{We set \cs{caption@startrue} globally so it works with the
+%  \package{sidecap} package, too.}
+%    \begin{macrocode}
+\newcommand*\caption@star[2]{%
+  \@ifstar{\global\caption@startrue#2[]}{#1#2}}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@@caption}
+% \changes{v3.1}{2007/02/04}{Re-written, does not save\&use original definition anymore}
+% \changes{v3.1f}{2007/11/28}{Bugfix: Handling of \texttt{@minipage} flag added}
+% \changes{v3.1f}{2007/11/28}{Support of option \opt{@minipage} added}
+% \changes{v3.1g}{2008/03/16}{Internal: Uses \cs{caption@prepareanchor} now}
+%  As above, our version has been adapted to the packages we support.
+%  Additionally our code is nested by |\caption@beginex| \&
+%  |\caption@end| instead of |\begingroup| \& |\endgroup|.
+%  Furthermore we use |\caption@boxrestore| instead of |\@parboxrestore|
+%  so this code also works correctly inside list-based environments
+%  like |wide| \& |addmargin|. (This, and the fact that we use
+%  |\linewidth| instead of |\hsize| inside |\@makecaption|, solves
+%  \href{http://www.latex-project.org/cgi-bin/ltxbugs2html?pr=latex/2472}%^^A
+%  {\LaTeX\ PR \texttt{latex/2472}}.)
+%    \begin{macrocode}
+\long\def\caption@@caption#1[#2]#3{%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \ifcaption@star \else
+    \caption@prepareanchor{#1}{#2}%
+  \fi
+%    \end{macrocode}
+%    \begin{macrocode}
+  \par
+  \caption@beginex{#1}{#2}{#3}%
+    \caption@setfloatcapt{%
+      \caption@boxrestore
+      \if@minipage
+        \@setminipage
+      \fi
+      \caption@normalsize
+      \ifcaption@star
+        \let\caption@makeanchor\@firstofone
+      \fi
+      \@makecaption{\csname fnum@#1\endcsname}%
+                   {\ignorespaces\caption@makeanchor{#3}}\par
+      \caption@if@minipage\@minipagetrue\@minipagefalse}%
+  \caption@end}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@prepareanchor}
+% \changes{v3.1g}{2008/03/16}{This macro added}
+%    \begin{macrocode}
+\newcommand*\caption@prepareanchor[2]{%
+  \caption@makecurrent{#1}{#2}%
+  \caption@ifhypcap\caption@@start{}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@makecaption}
+% \changes{v3.1i}{2008/05/06}{Usage of \cs{caption@rule} added}
+%  |\@makecaption|\marg{label}\marg{text}\par
+%  We do basically the same as the original code (from the standard
+%  \LaTeX\ document classes), but take care of the |position=| setting
+%  and use |\caption@@make| from the \package{caption} kernel to finally
+%  typeset the caption.
+%    \begin{macrocode}
+\long\def\caption@makecaption#1#2{%
+  \caption@iftop
+    {\vskip\belowcaptionskip}%
+    {\caption@rule\vskip\abovecaptionskip}%
+  \caption@@make{#1}{#2}%
+  \caption@iftop
+    {\vskip\abovecaptionskip\caption@rule}%
+    {\vskip\belowcaptionskip}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@redefine}
+% \changes{v3.1k}{2009/03/30}{This macro added, it contains the patching code now}
+% We only redefine |\caption| and |\@caption| if the current definitions
+% are well known, so documents written in the old (\package{caption}
+% package \version{1.x}) days (where |\caption| \& |\@caption| were not
+% redefined by us) will still compile fine.
+% For example the usage of the \package{captcont} package, which brings
+% it's own definition of |\caption*|, was quite common these days.
+%    \begin{macrocode}
+\newcommand*\caption@redefine{}
+\g@addto@macro\caption@redefine{%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \caption@setbool{incompatible}{0}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \caption@CheckCommand\caption{%
+    % ltfloat.dtx [2002/10/01 v1.1v LaTeX Kernel (Floats)]
+    \def\caption{%
+       \ifx\@captype\@undefined
+         \@latex@error{\noexpand\caption outside float}\@ehd
+         \expandafter\@gobble
+       \else
+         \refstepcounter\@captype
+         \expandafter\@firstofone
+       \fi
+       {\@dblarg{\@caption\@captype}}%
+    }}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \caption@CheckCommand\caption{%
+    % beamerbaselocalstructure.sty,v 1.53 2007/01/28 20:48:21 tantau
+    \def\caption{
+      \ifx\@captype\@undefined
+        \@latex@error{\noexpand\caption outside figure or table}\@ehd
+        \expandafter\@gobble
+      \else
+        \refstepcounter\@captype
+        \expandafter\@firstofone
+      \fi
+      {\@dblarg{\@caption\@captype}}%
+    }}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \caption@CheckCommand\caption{%
+    % float.sty [2001/11/08 v1.3d Float enhancements (AL)]
+    \renewcommand\caption{%
+      \ifx\@captype\@undefined
+        \@latex@error{\noexpand\caption outside float}\@ehd
+        \expandafter\@gobble
+      \else
+        \refstepcounter\@captype
+        \let\@tempf\@caption
+        \expandafter\ifx\csname @float@c@\@captype\endcsname\relax\else
+          \expandafter\expandafter\let
+            \expandafter\@tempf\csname @float@c@\@captype\endcsname
+        \fi
+      \fi
+      \@dblarg{\@tempf\@captype}}}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \caption@CheckCommand\caption{%
+    % hyperref.sty [2007/02/27 v6.75t Hypertext links for LaTeX]
+    % hyperref.sty [2007/04/09 v6.76a Hypertext links for LaTeX]
+    % hyperref.sty [2007/06/12 v6.76h Hypertext links for LaTeX]
+    \def\caption{%
+      \ifx\@captype\@undefined
+        \@latex@error{\noexpand\caption outside float}\@ehd
+        \expandafter\@gobble
+      \else
+        \H@refstepcounter\@captype
+        \@ifundefined{fst@\@captype}{%
+          \let\Hy@tempa\@caption
+        }{%
+          \let\Hy@tempa\Hy@float@caption
+        }%
+        \expandafter\@firstofone
+      \fi
+      {\@dblarg{\Hy@tempa\@captype}}%
+    }}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \caption@CheckCommand\caption{%
+    % hyperref.sty [2007/08/05 v6.76j Hypertext links for LaTeX]
+    \def\caption{%
+      \ifx\@captype\@undefined
+        \@latex@error{\noexpand\caption outside float}\@ehd
+        \expandafter\@gobble
+      \else
+        \H@refstepcounter\@captype
+        \let\Hy@tempa\@caption
+        \@ifundefined{float@caption}{%
+        }{%
+          \expandafter\ifx\csname @float@c@\@captype\endcsname\float@caption
+            \let\Hy@tempa\Hy@float@caption
+          \fi
+        }%
+        \expandafter\@firstofone
+      \fi
+      {\@dblarg{\Hy@tempa\@captype}}%
+    }}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \caption@IfCheckCommand{}{%
+    \caption@Info{%
+      Incompatible package detected (regarding \string\caption).\MessageBreak
+      \string\caption\space=\space\meaning\caption}%
+    \caption@setbool{incompatible}{1}}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \caption@CheckCommand\@caption{%
+    % ltfloat.dtx [2002/10/01 v1.1v LaTeX Kernel (Floats)]
+    \long\def\@caption#1[#2]#3{%
+      \par
+      \addcontentsline{\csname ext@#1\endcsname}{#1}%
+        {\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}%
+      \begingroup
+        \@parboxrestore
+        \if@minipage
+          \@setminipage
+        \fi
+        \normalsize
+        \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+      \endgroup}}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \caption@CheckCommand\@caption{%
+    % beamerbaselocalstructure.sty,v 1.53 2007/01/28 20:48:21 tantau
+    \long\def\@caption#1[#2]#3{% second argument ignored
+      \par\nobreak
+      \begingroup
+        \@parboxrestore
+        \if@minipage
+          \@setminipage
+        \fi
+        \beamer@makecaption{#1}{\ignorespaces #3}\par\nobreak
+        \endgroup}}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%   \caption@CheckCommand\float@caption{%
+%     % float.sty [2001/11/08 v1.3d Float enhancements (AL)]
+%     \long\def\float@caption#1[#2]#3{%
+%       \addcontentsline{\@nameuse{ext@#1}}{#1}%
+%        {\protect\numberline{\@nameuse{the#1}}{\ignorespaces #2}}
+%       \global\setbox\@floatcapt\vbox\bgroup\@parboxrestore
+%         \normalsize\@fs@capt{\@nameuse{fnum@#1}}{\ignorespaces #3}%
+%         \@ifnextchar[{\float@ccon}{\egroup}}%
+%     \long\def\float@ccon[#1]{#1\par\egroup}}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \caption@CheckCommand\@caption{%
+    % hyperref.sty [2007/02/27 v6.75t Hypertext links for LaTeX]
+    \long\def\@caption#1[#2]#3{%
+      \hyper@makecurrent{\@captype}%
+      \def\@currentlabelname{#2}%
+      \par\addcontentsline{\csname ext@#1\endcsname}{#1}{%
+        \protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}%
+      }%
+      \begingroup
+        \@parboxrestore
+        \if@minipage
+          \@setminipage
+        \fi
+        \normalsize
+        \@makecaption{\csname fnum@#1\endcsname}{%
+          \ignorespaces
+          \ifHy@nesting
+            \hyper@@anchor{\@currentHref}{#3}%
+          \else
+            \Hy@raisedlink{\hyper@@anchor{\@currentHref}{\relax}}#3%
+          \fi
+        }%
+        \par
+      \endgroup
+    }}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \caption@CheckCommand\@caption{%
+    % hyperref.sty [2007/04/09 v6.76a Hypertext links for LaTeX]
+    % hyperref.sty [2007/06/12 v6.76h Hypertext links for LaTeX]
+    % hyperref.sty [2007/08/05 v6.76j Hypertext links for LaTeX]
+    \long\def\@caption#1[#2]#3{%
+      \expandafter\ifx\csname if@capstart\expandafter\endcsname
+                      \csname iftrue\endcsname
+        \global\let\@currentHref\hc@currentHref
+      \else
+        \hyper@makecurrent{\@captype}%
+      \fi
+      \def\@currentlabelname{#2}%
+      \par\addcontentsline{\csname ext@#1\endcsname}{#1}{%
+        \protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}%
+      }%
+      \begingroup
+        \@parboxrestore
+        \if@minipage
+          \@setminipage
+        \fi
+        \normalsize
+        \expandafter\ifx\csname if@capstart\expandafter\endcsname
+                        \csname iftrue\endcsname
+          \global\@capstartfalse
+          \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces#3}%
+        \else
+          \@makecaption{\csname fnum@#1\endcsname}{%
+            \ignorespaces
+            \ifHy@nesting
+              \hyper@@anchor{\@currentHref}{#3}%
+            \else
+              \Hy@raisedlink{\hyper@@anchor{\@currentHref}{\relax}}#3%
+            \fi
+          }%
+        \fi
+        \par
+      \endgroup
+    }}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \caption@CheckCommand\@caption{%
+    % hyperref.sty [2009/11/27 v6.79k Hypertext links for LaTeX]
+    \long\def\@caption#1[#2]#3{%
+      \expandafter\ifx\csname if@capstart\expandafter\endcsname
+                      \csname iftrue\endcsname
+        \global\let\@currentHref\hc@currentHref
+      \else
+        \hyper@makecurrent{\@captype}%
+      \fi
+      \def\@currentlabelname{#2}%
+      \par\addcontentsline{\csname ext@#1\endcsname}{#1}{%
+        \protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}%
+      }%
+      \begingroup
+        \@parboxrestore
+        \if@minipage
+          \@setminipage
+        \fi
+        \normalsize
+        \expandafter\ifx\csname if@capstart\expandafter\endcsname
+                        \csname iftrue\endcsname
+          \global\@capstartfalse
+          \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces#3}%
+        \else
+          \@makecaption{\csname fnum@#1\endcsname}{%
+            \ignorespaces
+            \ifHy@nesting
+              \expandafter\hyper@@anchor\expandafter{\@currentHref}{#3}%
+            \else
+              \Hy@raisedlink{%
+                \expandafter\hyper@@anchor\expandafter{\@currentHref}{\relax}%
+              }%
+              #3%
+            \fi
+          }%
+        \fi
+        \par
+      \endgroup
+    }}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \caption@CheckCommand\@caption{%
+    % hyperref.sty [2009/12/09 v6.79m Hypertext links for LaTeX]
+    % hyperref.sty [2009/12/28 v6.79z Hypertext links for LaTeX]
+    \long\def\@caption#1[#2]#3{%
+      \expandafter\ifx\csname if@capstart\expandafter\endcsname
+                      \csname iftrue\endcsname
+        \global\let\@currentHref\hc@currentHref
+      \else
+        \hyper@makecurrent{\@captype}%
+      \fi
+      \@ifundefined{NR@gettitle}{%
+        \def\@currentlabelname{#2}%
+      }{%
+        \NR@gettitle{#2}%
+      }%
+      \par\addcontentsline{\csname ext@#1\endcsname}{#1}{%
+        \protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}%
+      }%
+      \begingroup
+        \@parboxrestore
+        \if@minipage
+          \@setminipage
+        \fi
+        \normalsize
+        \expandafter\ifx\csname if@capstart\expandafter\endcsname
+                        \csname iftrue\endcsname
+          \global\@capstartfalse
+          \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces#3}%
+        \else
+          \@makecaption{\csname fnum@#1\endcsname}{%
+            \ignorespaces
+            \ifHy@nesting
+              \expandafter\hyper@@anchor\expandafter{\@currentHref}{#3}%
+            \else
+              \Hy@raisedlink{%
+                \expandafter\hyper@@anchor\expandafter{%
+                  \@currentHref
+                }{\relax}%
+              }%
+              #3%
+            \fi
+          }%
+        \fi
+        \par
+      \endgroup
+    }}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \caption@CheckCommand\@caption{%
+    % nameref.sty [2006/12/27 v2.28 Cross-referencing by name of section]
+    \long\def\@caption#1[#2]{%
+      \def\@currentlabelname{#2}%
+      \NR@@caption{#1}[{#2}]%
+    }}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \caption@CheckCommand\@caption{%
+    % nameref.sty [2009/11/27 v2.32 Cross-referencing by name of section]
+    \long\def\@caption#1[#2]{%
+      \NR@gettitle{#2}%
+      \NR@@caption{#1}[{#2}]%
+    }}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \caption@CheckCommand\@caption{%
+    % subfigure.sty [2002/07/30 v2.1.4 subfigure package]
+    \long\def\@caption#1[#2]#3{%
+      \@ifundefined{if#1topcap}%
+        {\subfig@oldcaption{#1}[{#2}]{#3}}%
+        {\@nameuse{if#1topcap}%
+           \@listsubcaptions{#1}%
+           \subfig@oldcaption{#1}[{#2}]{#3}%
+         \else
+           \subfig@oldcaption{#1}[{#2}]{#3}%
+           \@listsubcaptions{#1}%
+         \fi}}}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \caption@CheckCommand\@caption{%
+    % subfig.sty [2005/06/28 ver: 1.3 subfig package]
+    \def\@caption{\caption@}%
+%   \long\def\caption@#1[#2]#3{%
+%     \@ifundefined{caption@setfloattype}%
+%       \caption@settype
+%       \caption@setfloattype
+%           \@captype
+%     \sf@ifpositiontop{%
+%       \@listsubcaptions{#1}%
+%       \sf@old@caption{#1}[{#2}]{#3}%
+%     }{%
+%       \sf@old@caption{#1}[{#2}]{#3}%
+%       \@listsubcaptions{#1}%
+%     }}%
+    }%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \caption@IfCheckCommand{}{%
+    \caption@Info{%
+      Incompatible package detected (regarding \string\@caption).\MessageBreak
+      \string\@caption\space=\space\meaning\@caption}%
+    \caption@setbool{incompatible}{1}}%
+%    \end{macrocode}
+%
+% The option |compatibility=| will override the compatibility mode.
+%    \begin{macrocode}
+  \@ifundefined{caption@ifcompatibility}%
+    {\let\caption@ifcompatibility\caption@ifincompatible
+     \let\caption@tempa\caption@WarningNoLine}%
+    {\let\caption@tempa\@gobble}% suppress warning
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \caption@ifcompatibility{%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+    \caption@tempa{%
+      \noexpand\caption will not be redefined since it's already\MessageBreak
+      redefined by a document class or package which is\MessageBreak
+      unknown to the caption package}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+    \renewcommand*\caption@redefine{}%
+%    \end{macrocode}
+%
+%  |\ContinuedFloat| is not supported in compatibility mode.
+%    \begin{macrocode}
+    \renewcommand*\caption@ContinuedFloat[1]{%
+      \caption@Error{Not available in compatibility mode}}%
+%    \end{macrocode}
+%
+%  |\caption@start| is not supported in compatibility mode.
+%    \begin{macrocode}
+    \caption@AtBeginDocument*{%
+      \let\caption@start\relax
+      \@ifundefined{caption@ORI@capstart}{}{%
+        \caption@Debug{%
+          Restore hypcap definition of \string\capstart\@gobble}%
+        \let\capstart\caption@ORI@capstart}%
+      \@ifundefined{caption@ORI@float@makebox}{}{%
+        \caption@Debug{%
+          Restore hyperref redefinition of \string\float@makebox\@gobble}%
+        \let\float@makebox\caption@ORI@float@makebox}%
+    }%
+%    \end{macrocode}
+%
+% \begin{macro}{\caption@star}
+%  We redefine |\caption@star| here so it does not make any harm.
+%    \begin{macrocode}
+    \renewcommand*\caption@star[2]{#1#2}%
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+  }{%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+    \caption@ifincompatible{%
+      \caption@WarningNoLine{%
+        Forced redefinition of \noexpand\caption since the\MessageBreak
+        unsupported(!) package option `compatibility=false'\MessageBreak
+        was given}%
+    }{}%
+%    \end{macrocode}
+%
+% \begin{macro}{\caption}
+% \begin{macro}{\@caption}
+%    \begin{macrocode}
+    \renewcommand*\caption@redefine{%
+      \let\caption\caption@caption
+      \let\@caption\caption@@caption}%
+    \caption@redefine
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%    \begin{macrocode}
+  }%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \caption@AtBeginDocument*{%
+    \let\caption@ORI@capstart\@undefined
+    \let\caption@ORI@float@makebox\@undefined}%
+%    \end{macrocode}
+%
+% \begin{macro}{\@xfloat}
+% \changes{v3.1}{2007/05/09}{This re-definition added}
+% \changes{v3.1b}{2007/09/22}{Will now be redefined in compatibility mode, too}
+% We redefine |\@xfloat| so inside floating environments our
+% type-specific options will be used, a \package{hyperref}
+% anchor will be set etc.
+%    \begin{macrocode}
+  \let\caption@ORI@xfloat\@xfloat
+  \def\@xfloat#1[#2]{%
+    \caption@ORI@xfloat{#1}[#2]%
+    \caption@settype{#1}}%
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% Some packages (like the \package{hyperref} package for example) redefines
+% |\caption| and |\@caption|, too.
+% So we have to use |\AtBeginDocument| here, so we can make sure
+% our definition is the one which will be valid at last.
+%    \begin{macrocode}
+\caption@AtBeginDocument{\caption@redefine}
+%    \end{macrocode}
+%
+% \begin{macro}{\@makecaption}
+%    \begin{macrocode}
+\let\@makecaption\caption@makecaption
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{Support for sub-captions}
+% \changes{v3.1f}{2007/11/16}{Support for sub-captions added}
+%
+% \begin{macro}{\caption@DeclareSubType}
+% |\caption@DeclareSub| initializes the usage of \cs{caption}
+% in sub-floats.
+%    \begin{macrocode}
+\def\caption@DeclareSubType sub#1\@nil{%
+  \caption@Debug{Initializing subtype for `#1'\@gobble}%
+  \@namedef{caption@c@#1}{0}%
+  \@namedef{caption@beginsub#1}{\caption@beginsubfloat{#1}}}
+\@onlypreamble\caption@DeclareSubType
+%    \end{macrocode}
+% \end{macro}
+%
+% Initialize the sub-captions defined with \cs{DeclareCaptionSubType}\ldots
+%    \begin{macrocode}
+\caption@For*{subtypelist}{\caption@DeclareSubType sub#1\@nil}
+%    \end{macrocode}
+%
+% Initialize the sub-captions defined with \cs{newsubfloat}\cite{subfig}\ldots
+%    \begin{macrocode}
+\caption@AtBeginDocument*{%
+  \@ifundefined{sf@counterlist}{}{%
+    \@for\sf@temp:=\sf@counterlist\do{%
+      \expandafter\caption@DeclareSubType\sf@temp\@nil}}}
+%    \end{macrocode}
+%
+% \begin{macro}{\caption@subtypehook}
+% \changes{v3.1g}{2008/03/20}{Redefinition of \cs{caption@setlist} added}
+% \changes{v3.1k}{2009/10/09}{Bugfix 09-08-12b: \cs{@makecaption} will now be restored here, too}
+%  Hook, will be used inside \cs{caption@setsubtype}.
+%    \begin{macrocode}
+\newcommand*\caption@subtypehook{%
+  \ifx\caption\caption@subcaption \else
+%    \end{macrocode}
+%    \begin{macrocode}
+    \caption@ifrefstepcounter{}{%
+      % no \caption or \subcaption in this (floating) environment yet
+      \caption@Debug{Increment \@captype\ counter =\the\value\@captype}%
+      \caption@l@stepcounter\@captype
+      \let\addcontentsline\caption@addsubcontentsline}%
+%    \end{macrocode}
+%    \begin{macrocode}
+    \ifnum\csname caption@c@\@captype\endcsname=\value\@captype \else
+      \caption@Debug{Reset sub\@captype\ counter}%
+      \expandafter\xdef\csname caption@c@\@captype\endcsname{%
+        \the\value\@captype}%
+      \@stpelt\@subcaptype
+    \fi
+%    \end{macrocode}
+%    \begin{macrocode}
+    \c@ContinuedFloat=0\relax
+    \let\caption@resetContinuedFloat\@gobble
+    \let\caption@addcontentsline\caption@kernel@addcontentsline
+    \let\caption@setfloatcapt\@firstofone
+%    \end{macrocode}
+%    \begin{macrocode}
+    \caption@clearmargin
+    \caption@iflist{}{\let\caption@setlist\@gobble}%
+    \caption@setoptions{sub}%
+    \caption@setoptions{subfloat}% for subfig-package compatibility
+%    \end{macrocode}
+%    \begin{macrocode}
+    \let\caption\caption@subcaption
+    \let\@makecaption\caption@makecaption
+  \fi}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@subcaption}
+% Makes a sub-caption.
+%    \begin{macrocode}
+\newcommand*\caption@subcaption{%
+  \caption@iftype
+    {\caption@checkgrouplevel{sub}\subcaption
+     \caption@star
+       {\caption@refstepcounter\@subcaptype}%
+       {\caption@dblarg{\@caption\@subcaptype}}}%
+    {\caption@Error{\noexpand\subcaption outside float}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@addcontentsline}
+% \changes{v3.1g}{2008/01/12}{Argument of \cs{caption@addsubcontentslines} removed}
+% \changes{v3.1i}{2008/08/02}{Argument of \cs{caption@addsubcontentslines} re-added}
+% We extend |\caption@addcontentsline| so it handles sub-captions, too.
+% \Note{\cs{sf@ifpositiontop} \& \cs{@listsubcaptions} are defined by the
+%  \package{subfigure} \& \package{subfig} packages.}
+%    \begin{macrocode}
+\let\caption@kernel@addcontentsline\caption@addcontentsline
+\renewcommand*\caption@addcontentsline[2]{%
+  \sf@ifpositiontop{\@listsubcaptions{#1}}{}%
+  \caption@kernel@addcontentsline{#1}{#2}%
+  \sf@ifpositiontop{}{\@listsubcaptions{#1}}%
+  \caption@addsubcontentslines{#1}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\caption@addsubcontentslines[1]{%
+  \begingroup
+    \caption@subcontentslines
+  \endgroup
+  \caption@clearsubcontentslines}%
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+\caption@AtBeginDocument*{%
+  \@ifundefined{sf@ifpositiontop}{\let\sf@ifpositiontop\@gobbletwo}{}%
+  \caption@clearsubcontentslines
+  \g@addto@macro\caption@typehook{\caption@checksubcontentslines}%
+  \AtEndDocument{\caption@checksubcontentslines}}%
+%    \end{macrocode}
+%
+% \begin{macro}{\caption@addsubcontentsline}
+% \changes{v3.1i}{2008/08/02}{Bugfix 08-07-28:
+%    \cs{label}, \cs{index}, and \cs{glossary} are allowed inside the list entry now}
+% Add a pending sub-caption list entry.
+%    \begin{macrocode}
+\newcommand*\caption@addsubcontentsline[3]{%
+  \begingroup
+  \let\label\@gobble \let\index\@gobble \let\glossary\@gobble
+  \protected@edef\@tempa{\endgroup
+    \noexpand\g@addto@macro\noexpand\caption@subcontentslines{%
+      \noexpand\@namedef{the#2}{\csname the#2\endcsname}%
+      \ifx\@currentHref\@undefined \else
+        \noexpand\def\noexpand\@currentHref{\@currentHref}%
+      \fi
+      \protect\addcontentsline{#1}{#2}{#3}}}%
+  \@tempa}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@checksubcontentslines}
+% \changes{v3.1g}{2008/01/07}{Bugfix: Uses \cs{caption@Error} instead of \cs{subcaption@Error} now}
+% Checks if the list of pending sub-captions is empty, if not,
+% a warning will be issued.
+%    \begin{macrocode}
+\newcommand*\caption@checksubcontentslines{%
+  \ifx\caption@subcontentslines\@empty \else
+    \caption@Error{%
+      Something's wrong--perhaps a missing \protect\caption\MessageBreak
+      in the last figure or table}%
+    \caption@clearsubcontentslines
+  \fi}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@clearsubcontentslines}
+% Clear pending sub-caption list entries.
+%    \begin{macrocode}
+\newcommand*\caption@clearsubcontentslines{%
+  \global\let\caption@subcontentslines\@empty}
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{Document class \& Babel package support}
+%
+% \subsubsection{The \AmS{} \& \SmF{} classes}
+% \changes{v3.1}{2007/07/29}{\AmS\ \& \SmF\ classes support added (package)}
+%
+%    \begin{macrocode}
+\@ifundefined{smf@makecaption}{}{\let\smf@makecaption\@makecaption}
+%    \end{macrocode}
+%
+% \subsubsection{The beamer class}
+% \changes{v3.1}{2007/03/10}{beamer class support added (package)}
+%
+%    \begin{macrocode}
+\@ifclassloaded{beamer}{%
+  \caption@Info{beamer document class}%
+%    \end{macrocode}
+%
+% Since the beamer class do not offer a `list of figures' we switch
+% this support in \thispackage\ off.
+%    \begin{macrocode}
+  \captionsetup{list=false}
+  \DeclareCaptionOption{list}[1]{}
+  \DeclareCaptionOption{listof}[1]{}
+%    \end{macrocode}
+%
+% \begin{macro}{\figure}
+% \changes{v3.1f}{2007/12/17}{This re-definition for \class{beamer} document class added}
+% \begin{macro}{\table}
+% \changes{v3.1f}{2007/12/17}{This re-definition for \class{beamer} document class added}
+%  We redefine |figure| \& |table| so our type-specific options will be used,
+%  a \package{hyperref} anchor will be set etc.
+%    \begin{macrocode}
+  \expandafter\let\expandafter\caption@ORI@figure
+    \csname\string\figure\endcsname
+  \@namedef{\string\figure}[#1]{%
+    \caption@ORI@figure[#1]%
+    \caption@settype{figure}}
+%    \end{macrocode}
+%    \begin{macrocode}
+  \expandafter\let\expandafter\caption@ORI@table
+    \csname\string\table\endcsname
+  \@namedef{\string\table}[#1]{%
+    \caption@ORI@table[#1]%
+    \caption@settype{table}}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%    \begin{macrocode}
+}{}
+%    \end{macrocode}
+%
+% \subsubsection{The \KOMAScript{} classes}
+%
+% \KOMAScript\ contains the code
+% |\AtBeginDocument{\let\scr@caption\caption}|
+% so we need to update |\scr@caption| here, too.
+%
+%    \begin{macrocode}
+\@ifundefined{scr@caption}{}{%
+  \caption@AtBeginDocument{\let\scr@caption\caption}}
+%    \end{macrocode}
+%
+% \subsubsection{The frenchb Babel option}
+% \changes{v3.1}{2006/05/14}{Adaptation to \package{frenchb} added (package)}
+%
+% Suppress
+% ``Package |frenchb.ldf| Warning: The definition of |\@makecaption| has been
+%  changed, frenchb will NOT customize it.''
+%  (but only if we emulate this customization)
+%    \begin{macrocode}
+\@nameuse{caption@frenchb}\@nameundef{caption@frenchb}
+%    \end{macrocode}
+%
+% \subsubsection{The frenchle/pro package}
+% \changes{v3.0h}{2005/10/03}{Adaptation to \package{frenchle/pro} added (package)}
+%
+%    \begin{macrocode}
+\caption@AtBeginDocument{\@ifundefined{frenchTeXmods}{}{%
+  \caption@Info{frenchle/pro package is loaded}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \let\captionfont@ORI\captionfont
+  \let\captionlabelfont@ORI\captionlabelfont
+  \let\@makecaption@ORI\@makecaption
+%    \end{macrocode}
+
+% If |\GOfrench| is defined as |\relax| all the re-definitions regarding
+% captions have already been done, so we can do our patches immediately.
+% Otherwise we must add our stuff to |\GOfrench|.
+%    \begin{macrocode}
+  \@ifundefined{GOfrench}%
+    {\let\caption@tempa\@firstofone}%
+    {\def\caption@tempa{\g@addto@macro\GOfrench}}%
+  \caption@tempa{%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+    \let\captionfont\captionfont@ORI
+    \let\captionfont@ORI\@undefined
+    \let\captionlabelfont\captionlabelfont@ORI
+    \let\captionlabelfont@ORI\@undefined
+    \let\@makecaption\@makecaption@ORI
+    \let\@makecaption@ORI\@undefined
+%    \end{macrocode}
+%
+% \begin{macro}{\@cnORI}
+%  We update the definition of |\@cnORI| so it actually reflects
+%  our definition of |\caption|.
+%    \begin{macrocode}
+    \let\@cnORI\caption
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@tablescaption}
+%  The \package{frenchle/pro} package sets |\caption| to |\@tablescaption| at
+%  |\begin{table}| for special treatment of footnotes.
+%  Therefore we have to patch |\@tablescaption| so |\caption*| will work
+%  inside the |table| environment.
+%    \begin{macrocode}
+    \let\caption@tcORI\@tablescaption
+    \def\@tablescaption{\caption@star\relax\caption@tcORI}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\f@ffrench}
+% \begin{macro}{\f@tfrench}
+%  |\f@ffrench| and |\f@tfrench| reflect |\fnum@figure| and |\fnum@table|
+%  when used in French mode. These contain additional code which typesets
+%  the caption separator |\captionseparator| instead of the usual colon.
+%  Because this breaks with our |\@makecaption| code we have to remove
+%  this additional code here.
+%    \begin{macrocode}
+    \let\@eatDP\@undefined
+    \let\caption@tempa\@empty
+    \ifx\f@ffrench\fnum@figure
+      \l@addto@macro\caption@tempa{\let\fnum@figure\f@ffrench}%
+    \fi
+    \ifx\f@tfrench\fnum@table
+      \l@addto@macro\caption@tempa{\let\fnum@table\f@tfrench}%
+    \fi
+    \def\f@ffrench{\ifx\listoffigures\relax\else\figurename~\thefigure\fi}%
+    \def\f@tfrench{\ifx\listoftables\relax\else\tablename~\thetable\fi}%
+    \caption@tempa
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%    \begin{macrocode}
+  }%
+}}
+%    \end{macrocode}
+%
+% \subsection{Package support}
+% \changes{v3.1}{2007/04/11}{Package options `float', `longtable' etc.
+%        are not supported anymore, removed}
+%
+% \begin{macro}{\caption@IfPackageLoaded}
+% \changes{v3.0f}{2005/05/29}{3rd argument \meta{code} added,
+%        so no extra check is needed}
+% \changes{v3.1}{2007/07/04}{Re-written \& renamed from \cs{caption@ifpackage}
+%        to \cs{caption@IfPackageLoaded}}
+%  |\caption@IfPackageLoaded|\marg{package}\oarg{version}\marg{true}\marg{false}\par
+%  Some kind of combination of |\@ifpackageloaded| and |\@ifpackagelater|.
+%  If the \meta{package} is not loaded yet, the check will be (re-)done
+%  |\AtBeginDocument|, so the \meta{package} could be loaded later on, too.
+%    \begin{macrocode}
+\newcommand\caption@IfPackageLoaded[1]{%
+  \@testopt{\caption@@IfPackageLoaded{#1}}{}}
+\@onlypreamble\caption@IfPackageLoaded
+%    \end{macrocode}
+%    \begin{macrocode}
+\long\def\caption@@IfPackageLoaded#1[#2]#3#4{%
+  \@ifpackageloaded{#1}\@firstofone{%
+    \caption@Debug{#1 package is not loaded (yet)\@gobble}%
+    \caption@AtBeginDocument}{%
+      \caption@@ifpackageloaded{#1}[#2]{#3}{#4}}}
+\@onlypreamble\caption@@IfPackageLoaded
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand\caption@ifpackageloaded[1]{%
+  \@testopt{\caption@@ifpackageloaded{#1}}{}}
+\@onlypreamble\caption@ifpackageloaded
+%    \end{macrocode}
+%    \begin{macrocode}
+\long\def\caption@@ifpackageloaded#1[#2]{%
+  \@ifpackageloaded{#1}{%
+    \caption@Info{#1 package is loaded}%
+    \@ifpackagelater{#1}{#2}\@firstoftwo{%
+      \caption@Error{%
+        For a successful cooperation we need at least version\MessageBreak
+          `#2' of package #1,\MessageBreak
+        but only version\MessageBreak
+          `\csname ver@#1.\@pkgextension\endcsname'\MessageBreak
+        is available}%
+      \@secondoftwo}%
+  }{\@secondoftwo}}
+\@onlypreamble\caption@@ifpackageloaded
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@clearmargin}
+% \changes{v3.1}{2007/05/05}{This macro and its usage added}
+%  This macro will be used by some package support stuff where the usual
+%  margin setting is not welcome, e.g. in the \package{sidecap} package.
+%    \begin{macrocode}
+\newcommand*\caption@clearmargin{%
+  \setcaptionmargin\z@
+  \let\caption@minmargin\@undefined}
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+\caption@setbool{needfreeze}{0}
+\caption@AtBeginDocument*{%
+  \caption@ifneedfreeze{%
+%    \end{macrocode}
+%
+% \begin{macro}{\caption@freeze}
+% \changes{v3.1}{2007/07/22}{This macro added}
+% \changes{v3.1c}{2007/10/06}{\cs{caption} \& \cs{@caption} revised for enhanced compatibility}
+% \changes{v3.1c}{2007/10/06}{Bugfix: Made \cs{@caption} long}
+% \changes{v3.1f}{2007/11/16}{Uses `space hack' instead of \cs{ignorespaces} now}
+% \changes{v3.1g}{2008/01/29}{Starred variants of \cs{ContinuedFloat} and \cs{captionsetup} added}
+%  |\caption@freeze*|\par
+%  Used by the \package{fltpage} \& \package{sidecap} package support.
+%    \begin{macrocode}
+  \newcommand*\caption@freeze{%
+    \caption@teststar\caption@@freeze\@gobble\@firstofone}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \newcommand*\caption@@freeze[1]{%
+    \global\let\caption@SCcontinued\relax
+    \global\let\caption@SCsetup\@undefined
+    \global\let\caption@SClentry\@undefined
+    \global\let\caption@SCtext\@undefined
+    \global\let\caption@SClabel\@undefined
+%    \end{macrocode}
+%    \begin{macrocode}
+    \let\caption@ORI@ContinuedFloat\ContinuedFloat
+    \def\ContinuedFloat{%
+      \caption@withoptargs\caption@SC@ContinuedFloat}%
+    \def\caption@SC@ContinuedFloat##1{%
+      \let\caption@ORI@setcounter\setcounter
+      \let\caption@ORI@addtocounter\addtocounter
+      \def\setcounter####1####2{\csname c@####1\endcsname####2\relax}%
+      \def\addtocounter####1####2{\advance\csname c@####1\endcsname ####2\relax}%
+      \caption@ORI@ContinuedFloat##1%
+      \global\let\caption@SCcontinued\caption@ORI@ContinuedFloat
+      \let\setcounter\caption@ORI@setcounter
+      \let\addtocounter\caption@ORI@addtocounter}%
+    \let\caption@ORI@setup\captionsetup
+    \def\captionsetup{%
+      \caption@withoptargs\caption@SC@setup}%
+    \def\caption@SC@setup##1##2{%
+      \caption@g@addto@list\caption@SCsetup{##2}%
+      \caption@ORI@setup##1{##2}}%
+    \let\caption@ORI\caption
+    \def\caption{%
+      \def\caption{\caption@Error{%
+        Only one \noexpand\caption can be placed in this environment}}%
+      \let\captionsetup\caption@setup
+      \let\caption@@refstepcounter\caption@l@stepcounter
+      \caption@ORI}%
+    \long\def\@caption##1[##2]##3{%
+      \@bsphack
+        \gdef\caption@SClentry{##2}%
+        \gdef\caption@SCtext{##3}%
+      \@esphack}%
+    #1{% is \@gobble in star form, and \@firstofone otherwise
+      \def\label##1{\@bsphack\gdef\caption@SClabel{##1}\@esphack}}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  }%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@defrost}
+% \changes{v3.1}{2007/07/22}{This macro added}
+% \changes{v3.1g}{2008/01/30}{\cs{caption@defrost@setup} added}
+%  |\caption@defrost|
+%    \begin{macrocode}
+  \newcommand*\caption@defrost{%
+    \ifx\caption@ORI@ContinuedFloat\@undefined
+      \caption@defrost@setup
+      \ifx\caption@SCtext\@undefined \else
+        \expandafter\expandafter\expandafter\caption
+          \expandafter\expandafter\expandafter[%
+          \expandafter\expandafter\expandafter{%
+          \expandafter\caption@SClentry\expandafter}\expandafter]%
+          \expandafter{\caption@SCtext}%
+      \fi
+      \ifx\caption@SClabel\@undefined \else
+        \expandafter\label\expandafter{\caption@SClabel}%
+      \fi
+    \else
+      \caption@Error{Internal Error:\MessageBreak
+        \noexpand\caption@defrost in same group as \string\caption@freeze}%
+    \fi}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \newcommand*\caption@defrost@setup{%
+    \caption@SCcontinued
+    \ifx\caption@SCsetup\@undefined \else
+      \expandafter\captionsetup\expandafter{\caption@SCsetup}%
+    \fi}%
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+  }{}%
+  \caption@undefbool{needfreeze}}
+%    \end{macrocode}
+%
+% \subsubsection{The float package}
+% \changes{v3.0f}{2005/05/31}{\package{float} package support rewritten and improved}
+% \iffalse
+% (This is a more straight-ahead implementation, but it only works with v1.3
+%  now, so v1.2 is no longer supported. The old code including documentation
+%  can be found in caption-30f-050530.zip)
+% \fi
+%
+% The \package{float} package usually do not use the \LaTeX\ kernel command
+% |\@caption| to typeset the caption but |\float@caption| instead.
+% (|\@caption| will only be used if the float is re-styled with
+% |\restylefloat*|.)
+%
+% The main two things |\float@caption| is doing different are:
+% \begin{itemize}
+%   \item The caption will be typeset inside a |\savebox| called |\@floatcapt|
+%   so it can be placed above or below the float contents afterwards.
+%   \item |\@makecaption| will not be used to finally typeset the caption.
+%   Instead |\@fs@capt| will be used which definition is part of the float
+%   style.
+%   (Note that |\@fs@capt| will not typeset any vertical space above or below
+%   the caption; instead this space will be typeset by the float style code
+%   itself.)
+% \end{itemize}
+%
+%    \begin{macrocode}
+\caption@IfPackageLoaded{float}[2001/11/08 v1.3d]{%
+ \@ifpackageloaded{floatrow}{%
+  \caption@ifpackageloaded{floatrow}[2007/08/24 v0.2a]{}{}%
+ }{%
+%    \end{macrocode}
+%
+% \iffalse
+% \begin{macro}{\caption@of}
+%  If the float is defined by the float package (which means |\fst@|\meta{type}
+%  is defined) we `execute' this float style, so |\@fs@iftopcapt| is set to its
+%  proper value.
+%  Furthermore we undo the re-definition of |\caption@setfloatcapt| which was
+%  done by |\float@dostyle|.
+%    \begin{macrocode}
+%    \renewcommand*\caption@of[2]{%
+%      \float@ifstyle{#2}{%
+%        \float@dostyle{#2}%
+%        \let\caption@setfloatcapt\@firstofone}{}%
+%      \caption@settype*{#2}#1}%
+%    \end{macrocode}
+% \end{macro}
+% \fi
+%
+% \begin{macro}{\@float@setevery}
+% \changes{v3.1k}{2009/10/09}{Bugfix 08-12-05: \cs{color@begin/endgroup} added
+%                             to redefinition of \cs{caption@setfloatcapt}}
+%  |\@float@setevery|\marg{float type} is provided by the \package{float}
+%  package; it's called every time a floating environment defined with
+%  |\newfloat| or |\restylefloat| begins.
+%  We use this hook to do some adaptations and to setup the proper caption
+%  style (if defined) and additional settings declared with
+%  |\captionsetup|\oarg{float style}.
+%    \begin{macrocode}
+  \let\caption@ORI@float@setevery\@float@setevery
+  \def\@float@setevery#1{%
+    \float@ifcaption{#1}{%
+%    \end{macrocode}
+%
+%  First of all we set the caption position to it's proper value by
+%  converting |\@fs@iftopcapt| (which is part of a float style and
+%  controls where the caption will be typeset, above or below the float
+%  contents) to our |position=| setting.
+%  Since the spacing above and below the caption will be done by the float
+%  style and \emph{not} by us this sounds quite useless. But in fact it isn't,
+%  since some packages based on \thispackage\ (like the \package{subfig}
+%  package) could have an interest for this information and therefore use the
+%  |\caption@iftop| macro we provide in our kernel. Furthermore we need this
+%  information for ourself in |\captionof| which uses |\@makecaption| to
+%  finally typeset the caption with skips.
+%    \begin{macrocode}
+      \caption@setposition{\@fs@iftopcapt t\else b\fi}%
+%    \end{macrocode}
+%
+%  Afterward we redefine |\caption@setfloatcapt| (which will be used inside
+%  |\@caption|) so the caption will be set inside the box |\@floatcapt|,
+%  without extra vertical space.
+%    \begin{macrocode}
+      \renewcommand\caption@setfloatcapt[1]{%
+        \let\@makecaption\caption@@make
+        \global\setbox\@floatcapt\vbox{%
+          \color@begingroup ##1\color@endgroup}}%
+%    \end{macrocode}
+%
+%  To allow different caption styles for different float styles we also
+%  determine the current float style (e.g. `ruled') and select
+%  a caption style (and additional settings) with the same name, if defined.
+%    \begin{macrocode}
+      \float@getstyle\float@style{#1}%
+      \caption@setstyle*\float@style
+      \caption@setoptions\float@style
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+    }{}%
+    \caption@freezeHref % will be defrosted in \float@makebox
+    \caption@ORI@float@setevery{#1}}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@typehook}
+% \changes{v3.1}{2007/07/08}{float package hook added}
+%  \LaTeX\ and almost every other packages use
+%    |\|\meta{type}|name|
+%  to provide a macro for the type resp.~environment name -- for example
+%  the command |\figurename| will usually contain the name of the floating
+%  environment |figure|:
+%  \begin{quote}
+%    |\newcommand\figurename{Figure}|
+%  \end{quote}
+%  But the \package{float} package doesn't follow this common naming
+%  convention:
+%  For floats defined with |\newfloat| it uses |\fname@|\meta{type} instead,
+%  which breaks with our code (and with |\autoref| and some other things as
+%  well).
+%  So we have to map the \package{float} package name to the common one here.\par
+%  \Note{If the float was not defined with \cs{newfloat} but with
+%  \cs{restylefloat} instead, \cs{fname@}\meta{type} is not defined.}
+%    \begin{macrocode}
+  \g@addto@macro\caption@typehook{%
+    \expandafter\ifx\csname #1name\endcsname\relax
+      \expandafter\let\csname #1name\expandafter\endcsname
+                      \csname fname@#1\endcsname
+    \fi}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \changes{v3.0f}{2005/06/26}{Skips of \env{plaintop} and \env{boxed} floats corrected}
+% \begin{macro}{\fs@plaintop}
+% \begin{macro}{\fs@boxed}
+%  Since the float styles |plaintop| and |boxed| don't use |\abovecaptionskip|
+%  which could be set with |skip=| (|plaintop| uses |\belowcaptionskip| instead of
+%  |\abovecaptionskip|, and |boxed| uses a fixed space of |2pt|)
+%  we patch the according float style macros here to change this.
+%    \begin{macrocode}
+  \g@addto@macro\fs@plaintop{\def\@fs@mid{\vspace\abovecaptionskip\relax}}%
+  \g@addto@macro\fs@boxed{\def\@fs@mid{\kern\abovecaptionskip\relax}}%
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\float@ifstyle}
+% \changes{v3.1}{2007/06/10}{This macro added}
+% |\float@ifstyle|\marg{type}\marg{if-clause}\marg{else-clause}\par
+% Checks if the given \meta{type} (e.g.~|figure|) is associated with a
+% float style (e.g.~|boxed|).
+%    \begin{macrocode}
+  \providecommand*\float@ifstyle[1]{%
+    \expandafter\ifx\csname fst@#1\endcsname\relax
+      \expandafter\@secondoftwo
+    \else
+      \expandafter\@firstoftwo
+    \fi}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\float@getstyle}
+% \changes{v3.1}{2007/06/10}{This macro added}
+% |\float@getstyle|\marg{cmd}\marg{type}\par
+%  Determining the float style is not so easy because the only hint
+%  provided by the \package{float} package is the macro
+%  |\fst@|\meta{float type} which points to the macro which represents the
+%  float style. So for example after
+%  \begin{quote}
+%    |\floatstyle{ruled}|\\
+%    |\newfloat{Program}{tbp}{lop}|
+%  \end{quote}
+%  |\fst@Program| will be defined as
+%  \begin{quote}
+%    |\def\fst@Program{\fs@ruled}|\quad.
+%  \end{quote}\par
+%  So here is what we do: We make the first level expansion of
+%  |\fst@|\meta{float type} a string so we can gobble the first four tokens
+%  (= |\fs@|), so only the the name of the float style is left.\par
+%  \emph{TODO:} We need to convert the catcodes here.
+%    \begin{macrocode}
+  \providecommand*\float@getstyle[2]{%
+    \edef#1{%
+      \noexpand\expandafter\noexpand\@gobblefour\noexpand\string
+        \expandafter\expandafter\expandafter\noexpand
+          \csname fst@#2\endcsname}%
+    \edef#1{#1}%
+    \caption@Debug{floatstyle{#2} = `#1'}}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\float@setstyle}
+% \changes{v3.1}{2007/06/10}{This macro added}
+% |\float@setstyle|\marg{type}\marg{style}\par
+% Sets or changes the float style associated with \meta{type}.
+%    \begin{macrocode}
+  \providecommand*\float@setstyle[2]{%
+    \expandafter\edef\csname fst@#1\endcsname{%
+      \expandafter\noexpand\csname fs@#2\endcsname}}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\float@dostyle}
+% \changes{v3.1}{2007/07/23}{This macro added}
+% |\float@dostyle|\marg{type}
+%    \begin{macrocode}
+  \providecommand*\float@dostyle[1]{%
+    \@nameuse{fst@#1}\@float@setevery{#1}}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\float@ifcaption}
+% \changes{v3.1}{2007/06/23}{This macro added}
+% |\float@ifcaption|\marg{type}\marg{if-clause}\marg{else-clause}\par
+%  Here we determine if the user has used |\newfloat| resp.~|\restylefloat|,
+%  or |\restylefloat*|.
+%  This is quite easy: If |\@float@c@|\meta{captype} is the same as
+%  |\float@caption|, the user has used |\newfloat| or |\restylefloat|,
+%  otherwise we assume he has used |\restylefloat*|.
+%  (This test will fail if some package re-defines |\float@caption|,
+%  so we have to assume that there is no one.)
+%    \begin{macrocode}
+  \providecommand*\float@ifcaption[1]{%
+    \expandafter\ifx\csname @float@c@#1\endcsname\float@caption
+      \expandafter\@firstoftwo
+    \else
+      \expandafter\@secondoftwo
+    \fi}%
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+}}{%
+  \providecommand*\float@ifstyle[1]{\@secondoftwo}%
+  \providecommand*\float@ifcaption[1]{\@secondoftwo}%
+% \clearcaptionsetup{boxed}% used by the floatrow package?
+}
+%    \end{macrocode}
+%
+% The skip between `boxed' floats and their caption defaults to |2pt|.
+%
+%    \begin{macrocode}
+\captionsetup[boxed]{skip=2pt} % do not issue a warning when not used
+%    \end{macrocode}
+%
+% \changes{v3.0f}{2005/05/26}{\opt{strut=0} added to caption style \opt{ruled}}
+% \changes{v3.0f}{2005/05/27}{Option \opt{ruled} fixed}
+% To emulate the `ruled' definition of |\@fs@capt| we provide a caption style
+% `ruled' with appropriate options. But if the package option |ruled| was
+% specified, we setup some caption parameters to emulate the behavior
+% of \thispackage\ \version{1.x} option |ruled| instead, i.e.,
+% the current caption settings will be used, but without margin and without
+% `single-line-check'.
+%    \begin{macrocode}
+\caption@ifbool{ruled}{%
+  \captionsetup[ruled]{margin=0pt,minmargin=0,slc=0}%
+}{%
+  \DeclareCaptionStyle{ruled}{labelfont=bf,labelsep=space,strut=0}%
+}
+\caption@undefbool{ruled}
+%    \end{macrocode}
+%
+% \subsubsection{The floatflt package}
+% \changes{v3.1}{2007/06/10}{Support of the \package{floatflt} package added}
+%
+%    \begin{macrocode}
+\caption@IfPackageLoaded{floatflt}[1996/02/27 v1.3]{%
+%    \end{macrocode}
+%
+% \begin{macro}{\floatingfigure}
+% We patch |\floatingfigure| so |\caption@floatflt| will be used.
+%    \begin{macrocode}
+  \let\caption@ORI@floatingfigure\floatingfigure
+  \def\floatingfigure{%
+    \caption@floatflt{figure}%
+    \caption@ORI@floatingfigure}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\floatingtable}
+% Same with |\floatingtable|\ldots
+%    \begin{macrocode}
+  \let\caption@ORI@floatingtable\floatingtable
+  \def\floatingtable{%
+    \caption@floatflt{table}%
+%   \caption@setautoposition b%
+    \caption@ORI@floatingtable}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@floatflt}
+% \changes{v3.1c}{2007/10/06}{Bugfix: \cs{caption@clearmargin} added}
+%  Here we do two things:
+%  \begin{enumerate}
+%    \item We use |\caption@setoptions{floating|\meta{type}|}| so
+%       |\captionsetup[floating|\meta{type}|]{|\ldots|}| is supported.
+%    \item |\linewidth| must be set correctly.
+%       Usually this is done by |\@parboxrestore| inside |\@caption|,
+%       but since we use |\@caption@boxrestore| we have to map this to
+%       |\@parboxrestore| instead.
+%  \end{enumerate}
+%    \begin{macrocode}
+  \newcommand*\caption@floatflt[1]{%
+    \caption@settype{#1}%
+    \caption@clearmargin
+    \caption@setoptions{floating#1}%
+    \let\caption@boxrestore\@parboxrestore}%
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+}{}
+%    \end{macrocode}
+%
+% \iffalse
+% \subsubsection{The floatrow package}
+% \changes{v3.0f}{2005/06/01}{Support of the \package{floatrow} package added}
+%
+%    \begin{macrocode}
+%\caption@IfPackageLoaded{floatrow}[2007/07/01 v0.1p]{%
+%    \end{macrocode}
+%
+% The \package{floatrow} package is already adapted for usage with
+% \thispackage. So the main work has already been done by
+% Mrs.~Lapko, there is only one little thing we have to take care about:
+%
+% \begin{macro}{\caption@of}
+%  Captions typeset with |\captionof| should have the correct layout,
+%  therefore we have to `activate' this layout here with |\flrow@setlist|.
+%    \begin{macrocode}
+%  \renewcommand*\caption@of[2]{%
+%    \flrow@setlist{{#2}}% TODO: always do this?
+%    \caption@settype*{#2}#1}%
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+%}{}
+%    \end{macrocode}
+% \fi
+%
+% \subsubsection{The fltpage package}
+% \changes{v3.1}{2007/07/22}{Support of the \package{fltpage} package added}
+%
+%    \begin{macrocode}
+\caption@IfPackageLoaded{fltpage}[1998/10/29 v.0.3]{%
+  \caption@setbool{needfreeze}{1}%
+%    \end{macrocode}
+%
+% \begin{macro}{\FP@helpNote}
+% Original code:
+% \begin{verbatim}
+% \newcommand{\FP@helpNote}[2]{%
+%   \typeout{FP#1 is inserted on page \pageref{#2}!}}%
+% \end{verbatim}%^^A
+%    \begin{macrocode}
+  \renewcommand\FP@helpNote[2]{%
+    \begingroup % save \caption@thepage
+      \caption@pageref{#2}%
+      \typeout{FP#1 is inserted on page \caption@thepage!}%
+    \endgroup}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FP@floatBegin}
+% \changes{v3.1f}{2007/11/16}{Uses `space hack' instead of \cs{ignorespaces} now}
+% \changes{v3.1k}{2009/10/09}{Bugfix 09-09-11: Missing \cs{ignorespaces} added}
+% Original code:
+% \begin{verbatim}
+% \newcommand{\FP@floatBegin}[1]{%
+%   \gdef\@captype{#1}%
+%   \global\let\FP@savedCaptionCommand\caption%
+%   \global\let\FP@savedLabelCommand\label%
+%   \ifthenelse{\equal{\@captype}{figure}}
+%      {\global\let\old@Fnum\fnum@figure}%
+%      {\global\let\old@Fnum\fnum@table}%
+%   \let\FP@LabelText\@empty%
+%   \let\FP@CaptionText\@empty%
+%   \let\FP@optionalCaptionText\@empty%
+%   \renewcommand\label[1]{\gdef\FP@LabelText{##1}}%
+%   \renewcommand\caption[2][]{%
+%     \gdef\FP@optionalCaptionText{##1}\gdef\FP@CaptionText{##2}}%
+%   \begin{lrbox}{\FP@floatCorpusBOX}%
+% }%
+% \end{verbatim}%^^A
+%    \begin{macrocode}
+  \renewcommand*\FP@floatBegin[1]{%
+    \def\@captype{#1}%
+    \let\FP@LabelText\@empty
+    \begin{lrbox}{\FP@floatCorpusBOX}%
+    \caption@ifFPrefcap
+      {\caption@freeze\relax}%
+      {\def\label##1{\@bsphack\gdef\FP@LabelText{##1}\@esphack}%
+       \caption@freeze*}%
+    \ignorespaces}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FP@floatEnd}
+% \changes{v3.1g}{2008/01/30}{Some minor bugfixes}
+% Original code:
+% \begin{verbatim}
+% \newcommand{\FP@floatEnd}{%
+%   \end{lrbox}%
+%   \global\setbox\FP@floatCorpusBOX=\box\FP@floatCorpusBOX
+%   \stepcounter{FP@\@captype C}%
+%   \FP@savedLabelCommand{\FP@positionLabel}%
+%   \FP@helpNote{\@captype}{\FP@positionLabel}%
+%   \FP@float
+%     {\FP@positionLabel}% location label test
+%     {\begin{\@captype}[p!]
+%        \usebox{\FP@floatCorpusBOX}%
+%        \refstepcounter{\@captype}%
+%        \ifthenelse{\equal{\FP@LabelText}{\@empty}}
+%          {}{\FP@savedLabelCommand{\expandafter\protect\FP@LabelText}}%
+%      \end{\@captype}}
+%     {\addtocounter{\@captype}{-1}}
+%     {\begin{\@captype}[b!]%
+%        \ifthenelse{\equal{\FP@guide}{\@empty}}%
+%          {}{\ifthenelse{\equal{\@captype}{figure}}%
+%              {\renewcommand{\fnum@figure}{\old@Fnum\ {\FP@guide}}}%
+%              {\renewcommand{\fnum@table}{\old@Fnum\ {\FP@guide}}}}%
+%        \setlength{\abovecaptionskip}{2pt plus2pt minus 1pt} % length above caption
+%        \setlength{\belowcaptionskip}{2pt plus2pt minus 1pt} % length above caption
+%        \FP@separatorCaption%
+%        \ifthenelse{\equal{\FP@optionalCaptionText}{\@empty}}%
+%          {\FP@savedCaptionCommand{\expandafter\protect\FP@CaptionText}}%
+%          {\FP@savedCaptionCommand[\expandafter\protect\FP@optionalCaptionText]%
+%                                  {\expandafter\protect\FP@CaptionText}}%
+%      \end{\@captype}}%
+% }%
+% \end{verbatim}%^^A
+%    \begin{macrocode}
+  \renewcommand*\FP@floatEnd{%
+    \end{lrbox}%
+%    \end{macrocode}
+%    \begin{macrocode}
+    \stepcounter{FP@\@captype C}%
+    \caption@label\FP@positionLabel
+    \FP@helpNote\@captype\FP@positionLabel
+%    \end{macrocode}
+%    \begin{macrocode}
+    \edef\FP@RestoreCounter{%
+      \noexpand\setcounter{\@captype}{\the\value\@captype}%
+      \noexpand\setcounter{ContinuedFloat}{\the\value{ContinuedFloat}}}%
+%    \end{macrocode}
+%    \begin{macrocode}
+    \FP@float
+      {\FP@positionLabel}% location label test
+      {\begin\@captype[p!]%
+         \usebox\FP@floatCorpusBOX
+         \caption@defrost@setup
+         \caption@ifFPlistcap
+           {\caption@refstepcounter\@captype
+            \expandafter\caption@makecurrent\expandafter\@captype
+                                         \expandafter{\caption@SClentry}}%
+           {\expandafter\captionlistentry\expandafter{\caption@SClentry}}%
+         \caption@makeanchor\relax
+         \ifx\FP@LabelText\@empty \else
+           \expandafter\label\expandafter{\FP@LabelText}%
+         \fi
+       \end\@captype}%
+      {\FP@RestoreCounter
+       \@ifundefined{theH\@captype}{}{%
+         \expandafter\l@addto@macro\csname theH\@captype\endcsname{.FP}}}%
+      {\begin\@captype[b!]%
+         \let\FP@savedSetfnumCommand\caption@setfnum
+         \def\caption@setfnum##1{%
+           \FP@savedSetfnumCommand{##1}%
+           \ifx\FP@guide\@empty \else
+             \expandafter\l@addto@macro\csname fnum@##1\endcsname{\ {\FP@guide}}%
+           \fi}%
+         \setlength\abovecaptionskip{2pt plus 2pt minus 1pt}% length above caption
+         \setlength\belowcaptionskip{2pt plus 2pt minus 1pt}% length below caption
+         \caption@setoptions{FP\@captype}%
+         \FP@separatorCaption
+         \caption@ifFPlistcap{}{\let\caption@addcontentsline\@gobbletwo}%
+         \caption@defrost
+       \end\@captype}%
+  }%
+%    \end{macrocode}
+% \end{macro}
+%
+% \changes{v3.1a}{2007/09/07}{\cs{DeclareFloatingEnvironment} defines FP-variant, too}
+% \changes{v3.1k}{2009/09/28}{Bugfix regarding newly defined \package{fltpage} environments}
+%    \begin{macrocode}
+  \caption@For{typelist}{%
+    \newcounter{FP@#1C}%
+    \newenvironment{FP#1}{\FP@floatBegin{#1}}{\FP@floatEnd}}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+}{%
+  \let\caption@ifFPlistcap\@undefined
+  \let\caption@ifFPrefcap\@undefined
+}
+%    \end{macrocode}
+%
+% \subsubsection{The hyperref package}
+% \changes{v3.0f}{2005/06/11}{Support of the \package{hyperref} package added}
+% \changes{v3.1}{2007/03/09}{Usage of \cs{hyper@makecurrent} instead of
+%   \cs{theHfigure} as indicator for \package{hyperref} package}
+%
+%    \begin{macrocode}
+\caption@IfPackageLoaded{hyperref}[2003/11/30 v6.74m]{%
+  \@ifundefined{hyper@makecurrent}{% hyperref has stopped early
+    \caption@WarningNoLine{%
+      Hyperref support is turned off\MessageBreak
+      because hyperref has stopped early}%
+  }{%
+    \g@addto@macro\caption@prepareslc{\measuring@true}%
+%    \end{macrocode}
+%
+% \begin{macro}{\caption@@refstepcounter}
+% We redefine |\caption@@refstepcounter| so |\H@refstepcounter| will be used
+% instead of |\refstepcounter| inside |\caption| \& |\captionlistentry|.
+%    \begin{macrocode}
+    \renewcommand*\caption@@refstepcounter{\H@refstepcounter}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@makecurrent}
+% \changes{v3.1l}{2010/01/09}{Adapted to current version of nameref package}
+% We redefine |\caption@makecurrent| so a \package{hyperref} label
+% will be defined inside |\@caption|.
+% \Note{Will be redefined by \cs{caption@start}.}
+%    \begin{macrocode}
+    \renewcommand*\caption@makecurrent[2]{%
+      \caption@makecurrentHref{#1}%
+      \caption@Debug{hyperref current=\@currentHref}%
+      \caption@gettitle{#2}}%
+%    \end{macrocode}
+%    \begin{macrocode}
+    \newcommand*\caption@makecurrentHref{\hyper@makecurrent}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@makeanchor}
+% \changes{v3.1l}{2010/01/09}{Adapted to the current hyperref package}
+% We redefine |\caption@makeanchor| so a \package{hyperref} anchor
+% will be set inside |\@caption|.
+% \Note{Will be redefined by \cs{caption@start}.}
+%    \begin{macrocode}
+    \renewcommand\caption@makeanchor[1]{%
+      \caption@Debug{hyperref anchor: \@currentHref}%
+      % If we cannot have nesting, the anchor is empty.
+      \ifHy@nesting
+        \expandafter\hyper@@anchor\expandafter{\@currentHref}{#1}%
+      \else
+        \Hy@raisedlink{%
+          \expandafter\hyper@@anchor\expandafter{\@currentHref}{\relax}%
+        }#1%
+      \fi}%
+%    \end{macrocode}
+%    \begin{macrocode}
+    \g@addto@macro\caption@prepareslc{\let\caption@makeanchor\@firstofone}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \paragraph{The hypcap option}
+%
+% \begin{macro}{\if@capstart}
+% Like the \package{hypcap} package we define the switch |\if@capstart|, too.
+%    \begin{macrocode}
+    \newif\if@capstart
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@start}
+% \changes{v3.0l}{2007/02/20}{%
+%         \cs{caption@currentHref} renamed to \cs{hc@currentHref}}
+% \changes{v3.1}{2007/06/21}{%
+%         This macro renamed from \cs{capstart} to \cs{caption@start} and revised}
+% While the \package{hypcap} package defines a macro called |\capstart|
+% our variant is called |\caption@start| and is controlled by the option
+% |hypcap=||false|/|true|.
+%    \begin{macrocode}
+    \def\caption@start{\caption@ifhypcap\caption@start@\relax}%
+    \def\caption@start@{%
+%    \end{macrocode}
+% Generate the \package{hyperref} label and set the \package{hyperref} anchor,
+% usually (if |hypcap=false|) both is done inside |\@caption|.
+%    \begin{macrocode}
+      \caption@makestart\@captype
+      \caption@startanchor\@currentHref
+%    \end{macrocode}
+% Prevent |\@caption| from generating a new \package{hyperref} label,
+% use the label we save in |\hc@currentHref| instead.
+% (We also support the |@capstart| flag from the \package{hypcap} package.)
+%    \begin{macrocode}
+      \global\@capstarttrue
+      \let\hc@currentHref\@currentHref
+      \def\caption@makecurrentHref##1{%
+        \global\@capstartfalse
+        \global\let\@currentHref\hc@currentHref}%
+%    \end{macrocode}
+% Prevent |\@caption| from generating a \package{hyperref} anchor since this
+% has already been done.
+%    \begin{macrocode}
+      \let\caption@makeanchor\@firstofone
+%    \end{macrocode}
+%    \begin{macrocode}
+    }%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@makestart}
+% \changes{v3.1c}{2007/09/30}{\cs{@currentHref} will be extended by \texttt{caption}
+%        instead of \texttt{xxx} now}
+%  |\caption@makestart|\marg{type}
+%  defines a \package{hyperref} anchor inside |\caption@start|.\par
+%  Since we offer |\ContinuedFloat| the float counter can change between
+%  `now' and |\caption|, i.e., we simply don't know the figure or table counter
+%  yet and therefore we are not able to generate the `right' \package{hyperref}
+%  label.
+%  Two different solutions of this problem came into my mind:
+%  \begin{enumerate}
+%  \item I could use the aux file for this purpose.\par
+%  -or-
+%  \item I set |hypertexnames=false| locally.
+%  Furthermore I use |#1.caption.|\meta{counter} (instead of |#1.|\meta{counter})
+%  as naming scheme for |\@currentHref| to avoid conflicts with other hyper
+%  links which are generated with |hypertexnames=true|.
+%  \end{enumerate}
+%  The first idea has the advantage that the `right' anchor name will be
+%  generated, but one needs an additional \LaTeX\ run if figures or tables
+%  will be inserted or removed.\par
+%  The second idea has the advantage that it's very easy to implement, but
+%  has some side-effects, e.g. the anchor names don't follow the figure or
+%  table label names anymore.\par
+%  Since I'm lazy I implemented the second idea, maybe I will revise this
+%  later on.
+%    \begin{macrocode}
+    \newcommand*\caption@makestart[1]{%
+      \begingroup
+        \Hy@hypertexnamesfalse
+%       \gdef\@currentHlabel{}%
+        \hyper@makecurrent{#1.caption}%
+      \endgroup
+      \caption@Debug{hypcap start=\@currentHref}}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@startanchor}
+% \changes{v3.1b}{2007/09/17}{Bugfix 06-09-17: We use \cs{caption@anchor} instead of \cs{hyper@@anchor}}
+% \changes{v3.1g}{2008/03/16}{Warning about TeX mode replaced with debug info}
+% |\caption@startanchor|\marg{Href}
+% sets a \package{hyperref} anchor inside |\caption@start|.\par
+% This code was taken from the \package{hypcap} package\cite{hypcap} and adapted.
+% \Note{Since \cs{hyper@@anchor}\marg{Href}\csmarg{\string\relax} can cause
+% a change from vertical mode to horizontal mode (design flaw in
+% \package{hyperref} package!?), and since the workaround
+% \cs{let}\cs{leavevmode}\cs{relax} which can be found in the
+% \package{hypcap} package is not always sufficient
+% (for example with ``Direct pdfmark support'' and \texttt{breaklinks=true}),
+% we use \cs{caption@anchor} instead of \cs{hyper@@anchor} here.}
+%    \begin{macrocode}
+    \newcommand*\caption@startanchor[1]{%
+      \ifvmode\begingroup
+        \caption@Debug{hypcap anchor: #1 (vertical mode)}%
+        \@tempdima\prevdepth
+        \nointerlineskip
+        \vspace*{-\caption@hypcapspace}%
+        \caption@anchor{#1}%
+        \vspace*{\caption@hypcapspace}%
+        \prevdepth\@tempdima
+      \endgroup\else
+        \caption@Debug{hypcap anchor: #1 (horizontal mode)}%
+        \caption@anchor{#1}%
+      \fi}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@anchor}
+% \changes{v3.1c}{2007/10/17}{Workaround 07-10-17: We use \cs{caption@raisedlink} instead of \cs{Hy@raisedlink} now}
+% |\caption@anchor|\marg{Href} sets a \package{hyperref} anchor.
+%    \begin{macrocode}
+    \newcommand*\caption@anchor[1]{%
+      \ifmeasuring@ \else
+        \caption@raisedlink{\hyper@anchorstart{#1}\hyper@anchorend}%
+      \fi}%
+%    \end{macrocode}
+% \Note{Since \cs{Hy@raisedlink} change \cs{@tempdima} we surrounded it by \cs{ifvmode},
+% suppressing ``\texttt{LaTeX Warning: Float too large for page by 1.0pt}'' in \texttt{sideways} floats.
+% (This is not necessary since \package{hyperref} \version{6.77}.)}
+%    \begin{macrocode}
+    \ifx\HyperRaiseLinkLength\@tempdima
+      \def\caption@raisedlink#1{\ifvmode#1\else\Hy@raisedlink{#1}\fi}%
+    \else
+      \let\caption@raisedlink\Hy@raisedlink
+    \fi
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@@start}
+% Will be used by |\caption@freezeHref|. Apart from that we issue a warning
+% if we expect a saved \package{hyperref} label coming from |\caption@start|,
+% but there isn't any.
+%    \begin{macrocode}
+    \def\caption@@start{%
+      \@ifundefined{hc@currentHref}{%
+        \caption@Warning{%
+          The option `hypcap=true' will be ignored for this\MessageBreak
+          particular \string\caption}}{}}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@freezeHref}
+%  Suppress |\caption@start| from generating a \package{hyperref} label and
+%  setting a \package{hyperref} anchor. Instead if |\@caption| generates a
+%  \package{hyperref} label, it will be stored in |\caption@currentHref|.
+%  Furthermore we need to redefine |\caption@setfloatcapt| so no
+%  \package{hyperref} anchor will be placed in |\@caption|.
+% \iffalse
+%  (Since |\caption@setfloatcapt| will be set to |\@firstofone| inside
+%   |\subcaption| there is no need to add its restauration to
+%   |\caption@subtypehook|.)
+% \fi
+%    \begin{macrocode}
+    \def\caption@freezeHref{%
+      \let\caption@ORI@start\caption@start
+      \def\caption@start{\let\caption@start\caption@ORI@start}%
+%    \end{macrocode}
+%    \begin{macrocode}
+%     \let\caption@ORI@@start\caption@@start
+%     \l@addto@macro\caption@subtypehook{%
+%       \let\caption@@start\caption@ORI@@start}%
+%    \end{macrocode}
+%    \begin{macrocode}
+      \global\let\caption@currentHref\@undefined
+      \def\caption@@start{\global\let\caption@currentHref\@currentHref}%
+%    \end{macrocode}
+%    \begin{macrocode}
+      \let\caption@ORI@setfloatcapt\caption@setfloatcapt
+      \renewcommand*\caption@setfloatcapt{%
+        \ifx\caption@currentHref\@undefined \else
+          \let\caption@makeanchor\@firstofone
+        \fi
+        \caption@ORI@setfloatcapt}}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@defrostHref}
+%  If there is a freezed |\@currentHref|, we set the \package{hyperref}
+%  anchor here.
+%    \begin{macrocode}
+    \def\caption@defrostHref{%
+      \ifx\caption@currentHref\@undefined \else
+        \caption@startanchor\caption@currentHref
+        \global\let\caption@currentHref\@undefined
+      \fi}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\float@makebox}
+% Do our own redefinition of |\float@makebox|, if it was redefined by
+% the \package{hyperref} package.
+%    \begin{macrocode}
+    \@ifundefined{HyOrg@float@makebox}{}{%
+      \caption@Debug{%
+        Redefining \noexpand\float@makebox (again)\@gobble}%
+      \let\caption@ORI@float@makebox\float@makebox % save for compatibility mode
+      \renewcommand\float@makebox[1]{%
+        \HyOrg@float@makebox{#1\relax \caption@defrostHref}}%
+    }%
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+}}{}
+%    \end{macrocode}
+%
+% \subsubsection{The hypcap package}
+% \changes{v3.0f}{2005/06/22}{Support of the \package{hypcap} package added}
+% \changes{v3.0l}{2007/02/20}{Adapted to \package{hypcap} \version{1.6}}
+% \changes{v3.1e}{2007/11/04}{\package{hypcap} support adapted to \package{hyperref} \version{6.77}}
+% 
+%    \begin{macrocode}
+\caption@IfPackageLoaded{hypcap}{% v1.0
+  \ifx\caption@start\relax \else % hyperref hasn't stopped early
+%    \end{macrocode}
+%
+% If the \package{hypcap} package was loaded, we give up our own
+% hyperlink placement algorithm and give the control over the placement
+% to the \package{hypcap} package instead.
+%
+% \begin{macro}{\capstart}
+% \changes{v3.1k}{2009/10/09}{Support of \cs{ifcapstart} (\package{hypcap} package \version{1.10}) added}
+% We do this simply by mapping |\capstart| to |\caption@start@|,
+% although our code does not behave exactly like the original one:
+% The original |\capstart| has an effect on the next |\caption|
+% only but our version affects \emph{all} |\caption|s in the same
+% environment, at least unless a new |\capstart| will be placed.
+%    \begin{macrocode}
+    \let\caption@ORI@capstart\capstart % save for compatibility mode
+    \@ifundefined{capstarttrue}% check for v1.10 of hypcap package
+      {\def\capstart{\caption@start@}}%
+      {\def\capstart{\ifcapstart\caption@start@\fi}}%
+    \let\caption@start\relax
+    \let\caption@@start\relax
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@hypcapspace}
+% Furthermore we map our |\caption@hypcapspace| to |\hypcapspace|
+% offered by the \package{hypcap} package.
+%    \begin{macrocode}
+    \caption@set@bool\caption@ifhypcap 1%
+    \renewcommand*\caption@hypcapspace{\hypcapspace}%
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+  \fi}{}
+%    \end{macrocode}
+%
+% \subsubsection{The listings package}
+% \changes{v3.0b}{2004/05/16}{Support of the \package{listings} package added}
+%
+%    \begin{macrocode}
+\caption@IfPackageLoaded{listings}[2004/02/13 v1.2]{%
+%    \end{macrocode}
+%
+% \begin{macro}{\lst@MakeCaption}
+% \changes{v3.1g}{2008/01/20}{Bugfix: Skips are handled correctly now}
+% \changes{v3.1k}{2008/03/29}{Bugfix 08-10-16-dctt: \texttt{rule=0} added}
+%  To support the \package{listings} package we need to redefine
+%  |\lst@MakeCaption| so the original stuff is nested with
+%  |\caption@begin| and |\caption@end| etc.
+%  \Note{This macro is always called twice (with `t' resp. `b' as
+%    parameter), therefore we need an extra group here.}
+%    \begin{macrocode}
+  \let\caption@ORI@lst@MakeCaption\lst@MakeCaption
+  \def\lst@MakeCaption#1{% #1 is `t' or `b'
+    \begingroup
+%    \end{macrocode}
+% First of all, we set |position=#1| and if it was set to `top',
+% we swap the skips so the default behavior of the \package{listings} package
+% will not be changed. (Note that the \package{listings} package has set its
+% own |\abovecaptionskip| \& |\belowcaptionskip| values prior to calling
+% \cs{lst@MakeCaption}.)
+%    \begin{macrocode}
+      \caption@setposition{#1}%
+      \caption@iftop{%
+        \@tempdima\belowcaptionskip
+        \belowcaptionskip\abovecaptionskip
+        \abovecaptionskip\@tempdima}{}%
+%    \end{macrocode}
+% Workaround for issue with wrong skips (should be examined further)
+%    \begin{macrocode}
+      \caption@setup{rule=0}%
+%    \end{macrocode}
+% Afterwards we set the local `lstlisting' options.
+%    \begin{macrocode}
+      \caption@setoptions{lstlisting}%
+%    \end{macrocode}
+% If the |position=| is now set to |auto|, we take over the |captionpos=|
+% setting from the \package{listings} package.
+%    \begin{macrocode}
+      \caption@setautoposition{#1}%
+%    \end{macrocode}
+% At the end we do similar stuff as in our \cs{@caption} code.
+%    \begin{macrocode}
+      \caption@begin{lstlisting}%
+        \caption@ORI@lst@MakeCaption{#1}%
+      \caption@end
+%    \end{macrocode}
+%    \begin{macrocode}
+    \endgroup}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\lst@makecaption}
+% \begin{macro}{\lst@maketitle}
+% Wrapper macros for typesetting the |caption=| resp. |title=| value.
+%    \begin{macrocode}
+  \def\lst@makecaption{\caption@starfalse\@makecaption}%
+  \def\lst@maketitle{\caption@startrue\@makecaption\@empty}%
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ext@lstlisting}
+% \changes{v3.1}{2007/03/03}{This macro added}
+% Since the \package{listings} package do not define |\ext@lstlisting|,
+% but we needed it when |\captionof{lstlisting}| will be done by the end user,
+% we define it here.
+%    \begin{macrocode}
+  \providecommand*\ext@lstlisting{lol}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \changes{v3.1a}{2007/07/13}{Bugfix 07-09-13: \cs{lst@@caption} will not be re-defined anymore}
+%
+%    \begin{macrocode}
+}{}
+%    \end{macrocode}
+%
+% \subsubsection{The longtable package}
+%
+% \begin{macro}{\LTcaptype}
+% \changes{v3.1}{2007/07/06}{This macro and its support added}
+%  |\LTcaptype| is preset to |table|.
+%    \begin{macrocode}
+\providecommand*\LTcaptype{table}
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+\caption@IfPackageLoaded{longtable}[1995/05/24 v3.14]{%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \RequirePackage{ltcaption}[=2007/09/01]%
+  \let\LT@@makecaption\@undefined
+%    \end{macrocode}
+%
+% \begin{macro}{\LT@array}
+% \changes{v3.1}{2007/07/22}{This redefinition added}
+% \changes{v3.1a}{2007/09/14}{Bugfix 07-09-14: Redefinition of \cs{@captionabovetrue} \& \cs{@captionabovefalse} added}
+% \changes{v3.1a}{2007/09/16}{Bugfix: This redefinition will always be done \cs{AtBeginDocument}}
+% \changes{v3.1g}{2008/01/20}{Bugfix in \cs{captionlistentry}: Table counter will not be incremented anymore, \cs{nameref} works}
+% We redefine |\LT@array| here to get |\captionsetup|\marg{options}
+% working inside |longtable|s.
+% \Note{Since the \package{hyperref} package patches \cs{LT@array} as well
+%  and since this only works with the original definition of \cs{LT@array},
+%  we have to do this after the \package{hyperref} package,
+%  i.e.~\cs{AtBeginDocument}.}
+%    \begin{macrocode}
+  \caption@AtBeginDocument{%
+    \let\caption@ORI@LT@array\LT@array
+    \renewcommand*\LT@array{%
+%    \end{macrocode}
+% |\captionsetup| for longtable:
+%    \begin{macrocode}
+      \global\let\caption@opt@@longtable\@undefined
+      \def\captionsetup{%
+        \noalign\bgroup
+        \@ifstar\@captionsetup\@captionsetup}% gobble *
+      \def\@captionsetup##1{\LT@captionsetup{##1}\egroup}%
+      \def\LT@captionsetup##1{%
+        \captionsetup@startrue\caption@setup@options[@longtable]{##1}%
+        \global\let\caption@opt@@longtable\caption@opt@@longtable}%
+%    \end{macrocode}
+% |\captionabove| \& |\captionbelow| for longtable: (\KOMAScript\ document class)
+%    \begin{macrocode}
+      \def\@captionabovetrue{\LT@captionsetup{position=t}}%
+      \def\@captionabovefalse{\LT@captionsetup{position=b}}%
+%    \end{macrocode}
+% |\captionlistentry| for longtable:
+%    \begin{macrocode}
+      \def\captionlistentry{%
+        \noalign\bgroup
+        \@ifstar{\egroup\LT@captionlistentry}% gobble *
+                {\egroup\LT@captionlistentry}}%
+      \def\LT@captionlistentry##1{%
+        \caption@listentry\@firstoftwo[\LTcaptype]{##1}}%
+%    \end{macrocode}
+% |\ContinuedFloat| for longtable:\\
+% {\small(Commented out, since it's not deeply tested and quite useless anyway)}
+% \Note{\package{hyperref} versions $<$ v6.76j uses $2\times$ \cs{hyper@makecurrent}}
+%    \begin{macrocode}
+%     \caption@ifhypcap{%
+%       \let\caption@ORI@hyper@makecurrent\hyper@makecurrent
+%       \def\hyper@makecurrent##1{%
+%         \let\hyper@makecurrent\caption@ORI@hyper@makecurrent
+%         \caption@makestart{##1}%
+%%        \let\Hy@LT@currentHlabel\@currentHlabel
+%         \let\Hy@LT@currentHref\@currentHref
+%         \def\hyper@makecurrent####1{%
+%%          \let\@currentHlabel\Hy@LT@currentHlabel
+%           \let\@currentHref\Hy@LT@currentHref}}%
+%       \let\caption@ORI@ContinuedFloat\ContinuedFloat
+%       \def\ContinuedFloat{\noalign{%
+%         \gdef\caption@setContinuedFloat{%
+%           \let\caption@resetContinuedFloat\@gobble}%
+%         \def\caption@setoptions####1{%
+%           \g@addto@macro\caption@setContinuedFloat{%
+%             \caption@setoptions{####1}}}%
+%         \let\@captype\LTcaptype
+%         \caption@ORI@ContinuedFloat}}%
+%     }{%
+%       \def\ContinuedFloat{\noalign{%
+%         \caption@Error{%
+%           \noexpand\ContinuedFloat inside longtables\MessageBreak
+%           is only available with `hypcap=true'}}}%
+%     }%
+%     \global\let\caption@setContinuedFloat\@empty
+      \def\ContinuedFloat{\noalign{%
+        \caption@Error{\noexpand\ContinuedFloat outside float}}}%
+%    \end{macrocode}
+%    \begin{macrocode}
+      \caption@ORI@LT@array}}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LT@c@ption}
+% \changes{v3.1g}{2008/01/22}{Made it \cs{long}}
+%  The original implementation:
+%  \begin{verbatim}
+%  \def\LT@c@ption#1[#2]#3{%
+%    \LT@makecaption#1\fnum@table{#3}%
+%    \def\@tempa{#2}%
+%    \ifx\@tempa\@empty\else
+%       {\let\\\space
+%       \addcontentsline{lot}{table}{\protect\numberline{\thetable}{#2}}}%
+%    \fi}
+%  \end{verbatim}%^^A
+%  Our implementation uses |\LTcaptype| instead of |{table}|:
+%    \begin{macrocode}
+  \long\def\LT@c@ption#1[#2]#3{%
+    \LT@makecaption#1{\csname fnum@\LTcaptype\endcsname}{#3}%
+    \LT@captionlistentry{#2}}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LT@makecaption}
+% \changes{v3.0d}{2004/08/10}{%
+%       Bugfix 04-08-04: \cs{abovecaptionskip} \& \cs{belowcaptionskip} will be used now}
+% \changes{v3.0e}{2005/05/05}{%
+%       Bugfix: \cs{captionsetup[longtable]} overrides \cs{LTcapwidth} now}
+% \changes{v3.0h}{2005/10/07}{\cs{caption@LT@make} introduced}
+%  |\LT@makecaption|\marg{cmd}\marg{label}\marg{text}\par
+%  \smallskip
+%  The original definition:
+%  \begin{verbatim}
+%  \def\LT@makecaption#1#2#3{%
+%    \LT@mcol\LT@cols c{\hbox to\z@{\hss\parbox[t]\LTcapwidth{%
+%      % Based on article class "\@makecaption", "#1" is "\@gobble" in star
+%      % form, and "\@firstofone" otherwise.
+%      \sbox\@tempboxa{#1{#2: }#3}%
+%      \ifdim\wd\@tempboxa>\hsize
+%        #1{#2: }#3%
+%      \else
+%        \hbox to\hsize{\hfil\box\@tempboxa\hfil}%
+%      \fi
+%      \endgraf\vskip\baselineskip}%
+%    \hss}}}
+%  \end{verbatim}%^^A
+%  Our definition:
+%    \begin{macrocode}
+  \renewcommand\LT@makecaption[3]{%
+    \caption@LT@make{%
+%    \end{macrocode}
+%
+%  If |\LTcapwidth| is not set to its default value |4in| we assume
+%  that it shall overwrite our own setting.
+%  (But |\captionsetup[longtable]{width=|\ldots|}| will overwrite |\LTcapwidth|.)
+%    \begin{macrocode}
+      \caption@settype*\LTcaptype
+      \ifdim\LTcapwidth=4in \else
+        \setcaptionwidth\LTcapwidth
+      \fi
+      \caption@setoptions{longtable}%
+%     \caption@setContinuedFloat
+      \caption@setoptions{@longtable}%
+%    \end{macrocode}
+%
+% \iffalse
+%  The default |position=| setting for longtables is |top|.
+%  (This emulates the standard behavior of the \package{longtable} package
+%   which has no skip above the caption but a skip below it.)
+% \fi
+%
+%  |position=auto| is a bad idea for longtables, but we do our very best.
+%  This works quite well for captions inside the longtable contents, but
+%  not for captions inside the longtable (end)foot.
+%  \Note{This should be `top' if unclear!}
+%    \begin{macrocode}
+      \caption@setautoposition{\ifcase\LT@rows t\else b\fi}%
+%    \end{macrocode}
+%
+%  We set |\ifcaption@star| according the 1st argument.
+%    \begin{macrocode}
+      \caption@startrue#1\caption@starfalse
+%    \end{macrocode}
+%
+% \changes{v3.1}{2007/05/05}{\cs{caption@normalsize} added}
+%    \begin{macrocode}
+      \caption@resetContinuedFloat\LTcaptype
+      \caption@begin\LTcaptype
+        \caption@normalsize
+%    \end{macrocode}
+%
+%  The following skip has the purpose to correct the height of the
+%  |\parbox[t]|. Usually it's the height of the very first line, but
+%  because of our extra skips (|\abovecaptionskip| and |\belowcaptionskip|)
+%  it's always |0pt|.\par
+%  (A different idea would be typesetting the first skip outside the longtable
+%   column with |\noalign{\vskip|\ldots|}|, but this means we have to move
+%   |\caption@begin| to some other place because it does not work in tabular
+%   mode. And at the moment I have no idea on how to do this in an elegant
+%   way\ldots)
+%    \begin{macrocode}
+        \vskip-\ht\strutbox
+%    \end{macrocode}
+%
+%  The following code should look familiar. We do our skips and use
+%  |\caption@@make| to typeset the caption itself.
+%    \begin{macrocode}
+        \caption@iftop{\vskip\belowcaptionskip}{\vskip\abovecaptionskip}%
+        \caption@@make{#2}{#3}\endgraf
+        \caption@iftop{\vskip\abovecaptionskip}{\vskip\belowcaptionskip}%
+      \caption@end}}%
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+}{}
+%    \end{macrocode}
+%
+% \subsubsection{The picinpar package}
+% \changes{v3.1}{2007/06/13}{Support of the \package{picinpar} package added}
+%
+%    \begin{macrocode}
+\caption@IfPackageLoaded{picinpar}{%
+%    \end{macrocode}
+%
+% \begin{macro}{\figwindow}
+% \begin{macro}{\tabwindow}
+% The \package{picinpar} package comes with its own caption code
+% (|\wincaption|, |\@wincaption|, |\@makewincaption|, \ldots)
+% so we redefine |\figwindow| \& |\tabwindow| to use |\caption| instead.
+%    \begin{macrocode}
+  \long\def\figwindow[#1,#2,#3,#4] {%
+    \caption@window{figure}%
+    \caption@setoptions{figwindow}%
+    \begin{window}[#1,#2,{#3},\caption@wincaption{#4}] }%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \long\def\tabwindow[#1,#2,#3,#4] {%
+    \caption@window{table}%
+    \caption@setoptions{tabwindow}%
+    \begin{window}[#1,#2,{#3},\caption@wincaption{#4}] }%
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\caption@window}
+% \changes{v3.1c}{2007/10/06}{Bugfix: \cs{caption@clearmargin} added}
+% Beside calling |\caption@settype| we redefine |\caption@boxrestore|
+% (as in \package{floatflt} \& \package{picins} package support)
+% and |\@makecaption| (as in \package{float} package support) here.
+%    \begin{macrocode}
+  \newcommand*\caption@window[1]{%
+    \let\caption@boxrestore\@parboxrestore
+    \let\@makecaption\caption@@make
+    \caption@setautoposition b%
+    \caption@settype{#1}%
+    \caption@clearmargin}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@wincaption}
+% \changes{v3.1d}{2007/10/25}{Missing \% added}
+% This one finally typesets the caption using |\caption|.
+%    \begin{macrocode}
+  \newcommand\caption@wincaption[1]{%
+%    \end{macrocode}
+% This will be done twice for every |figwindow| \& |tabwindow| caption --
+% on the first run |\picwd| is |0pt|, on the second run |\picwd| is |\hsize|.
+%    \begin{macrocode}
+    \ifdim\picwd=\z@
+      \let\caption@makecurrent\@gobbletwo
+      \let\caption@@start\relax
+      \caption@prepareslc
+    \fi
+%    \end{macrocode}
+% The argument |#1| could contain simply the caption text
+% (e.g.~|A figure caption|), but it could also contain an optional argument,
+% the \meta{lst\_entry}
+% (e.g.~|[An| |entry| |to| |the| |LOF]||{A| |figure| |caption}|).
+% Therefore we have to test if |#1| begins with~|[| or not; furthermore we
+% support a starred variant -- as in |\caption*| -- so we test for~|*|, too.
+%    \begin{macrocode}
+    \edef\@tempa{\expandafter\noexpand\@car#1\@nil}%
+    \if\@tempa*%
+      \let\@tempa\@firstofone
+    \else\if\@tempa[%]
+      \let\@tempa\@firstofone
+    \else
+      \let\@tempa\@empty
+    \fi\fi
+    \expandafter\caption\@tempa{#1}}%
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+}{}
+%    \end{macrocode}
+%
+% \subsubsection{The picins package}
+% \changes{v3.0j}{2006/01/26}{Support of the \package{picins} package added}
+%
+% \begin{macro}{\piccaptiontype}
+% |\piccaptiontype|\marg{type}\par
+% We offer this macro for changing the \meta{type} of the caption, so the user
+% doesn't have to redefine |\@captype|, as proposed in the \package{picins}
+% documentation.
+% \Note{We define this macro here so it can be used in the
+%  preamble of the document, even when \thispackage\ was loaded prior to the
+%  \package{picins} package.}
+%    \begin{macrocode}
+\newcommand*\piccaptiontype[1]{\def\@piccaptype{#1}}
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+\caption@IfPackageLoaded{picins}{%
+%    \end{macrocode}
+%
+% Initial set |\@piccaptype| and undefine |\@captype| which was set to
+% |figure| by the \package{picins} package.
+%    \begin{macrocode}
+  \@ifundefined{@piccaptype}{%
+    \caption@iftype{%
+      \let\@piccaptype\@captype
+    }{%
+      \def\@piccaptype{figure}%
+    }%
+  }{}%
+  \let\@captype\@undefined
+%    \end{macrocode}
+%
+% \begin{macro}{\piccaption}
+%  The original code:
+%  \begin{verbatim}
+%  \def\piccaption{\@ifnextchar [{\@piccaption}{\@piccaption[]}}
+%  \end{verbatim}%^^A
+%  Our code uses |\caption@star| so |\piccaption*| works,
+%  and |\caption@dblarg| so |\piccaption{}| works correctly.
+%    \begin{macrocode}
+  \def\piccaption{\caption@star\relax{\caption@dblarg\@piccaption}}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\make@piccaption}
+% \changes{v3.1}{2007/12/06}{Bugfix: \cs{caption@clearmargin} will always be used now}
+%  The original code:
+%  \begin{verbatim}
+%  \def\make@piccaption{%
+%   [...]
+%   \setbox\@TEXT=\vbox{\hsize\hsiz@\caption[\sh@rtf@rm]{\capti@nt@xt}}%
+%  }
+%  \end{verbatim}%^^A
+%  In our code we have to correct several things:
+%  \begin{enumerate}
+%    \item |\@captype| must be defined, since we have removed the global
+%          definition.
+%    \item We use |\caption@setoptions{parpic}| so
+%          |\captionsetup[parpic]{|\ldots|}| is supported.
+%    \item |\linewidth| must be set correctly.
+%          Usually this is done by |\@parboxrestore| inside |\@caption|,
+%          but since we use |\@caption@boxrestore| we have to map this to
+%          |\@parboxrestore| instead.
+%    \item The two arguments of |\caption| (|\sh@rtf@rm| \& |\capti@nt@xt|)
+%          should be expanded on first level so |\caption[]{|\ldots|}| and
+%          |\caption[|\ldots|]{}| work correctly.
+%  \end{enumerate}
+%    \begin{macrocode}
+  \let\caption@ORI@make@piccaption\make@piccaption
+  \def\make@piccaption{%
+    \let\caption@ORI\caption
+%    \end{macrocode}
+%    \begin{macrocode}
+    \long\def\caption[##1]##2{%
+      \caption@freezeHref % will be defrosted in \ivparpic
+      \caption@settype\@piccaptype
+%     \ifnum\c@piccaptionpos>2\relax
+        \caption@clearmargin
+%     \else
+%       \captionwidth\z@ % do not use "width=" setting
+%     \fi
+      \caption@setoptions{parpic}%
+      \let\caption@boxrestore\@parboxrestore
+      \caption@setautoposition b%
+%    \end{macrocode}
+%    \begin{macrocode}
+      \expandafter\expandafter\expandafter\caption@ORI
+        \expandafter\expandafter\expandafter[%
+        \expandafter\expandafter\expandafter{%
+        \expandafter##1\expandafter}\expandafter]\expandafter{##2}}%
+%    \end{macrocode}
+% {\footnotesize\begin{quote}
+%   \leavevmode\llap{-or-\quad}%^^A
+%   |\begingroup|\\
+%   |  \toks0\expandafter{##1}| |\toks2\expandafter{##2}|\\
+%   |  \edef\x{\endgroup|\\
+%   |    \noexpand\caption@ORI[{\the\toks0}]{\the\toks2}}|\\
+%   |  \x|
+% \end{quote}
+% \begin{quote}
+%   \leavevmode\llap{-or-\quad}%^^A
+%   |\edef\x{%|\\
+%   |  \noexpand\caption@ORI[{\unexpanded\expandafter{##1}}]%|\\
+%   |                        {\unexpanded\expandafter{##2}}}|\\
+%   |\x|
+% \end{quote}}
+%    \begin{macrocode}
+    \caption@ORI@make@piccaption
+    \let\caption\caption@ORI}%
+%    \end{macrocode}
+% \end{macro}
+%
+
+% \begin{macro}{\ivparpic}
+% We need to set our \package{hyperref} anchor here.
+% Not bullet-proof since we have to redefine |\noindent| here!
+%    \begin{macrocode}
+  \let\caption@ORI@ivparpic\ivparpic
+  \def\ivparpic(#1,#2)(#3,#4)[#5][#6]#7{%
+    \let\caption@ORI@noindent\noindent
+    \def\noindent{%
+      \caption@defrostHref
+      \let\noindent\caption@ORI@noindent
+      \noindent}%
+    \caption@ORI@ivparpic(#1,#2)(#3,#4)[#5][#6]{#7}%
+    \let\noindent\caption@ORI@noindent}%
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+}{%
+  \let\piccaptiontype\@undefined
+}
+%    \end{macrocode}
+%
+% \subsubsection{The rotating package}
+%
+%    \begin{macrocode}
+\caption@IfPackageLoaded{rotating}[1995/08/22 v2.10]{%
+%    \end{macrocode}
+%
+% \begin{macro}{\rotcaption}
+% \changes{v3.0c}{2004/07/16}{Bugfix: Check for \cs{caption@star} removed}
+% \changes{v3.0i}{2005/12/07}{Rewritten, works with \package{hyperref} now}
+%  Make |\rotcaption*| work.
+%    \begin{macrocode}
+  \def\rotcaption{\let\@makecaption\@makerotcaption\caption}%
+% \let\@rotcaption\@undefined
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\rotcaptionof}
+% \changes{v3.0i}{2005/12/07}{New}
+%  Make |\rotcaptionof(*)| work.
+%    \begin{macrocode}
+  \def\rotcaptionof{%
+    \caption@teststar\caption@of{\rotcaption*}\rotcaption}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@makerotcaption}
+% \changes{v3.0i}{2005/12/06}{Rewritten, should finally work proper now}
+% \changes{v3.0m}{2007/03/04}{Uses \cs{caption@parbox} instead of \cs{caption@start/endbox} now}
+%  Original (bugfixed) code:
+%  \begin{verbatim}
+%  \long\def\@makerotcaption#1#2{%
+%    \setbox\@tempboxa\hbox{#1: #2}%
+%    \ifdim \wd\@tempboxa > .8\vsize
+%      \rotatebox{90}{%
+%      \begin{minipage}{.8\textheight}#1: #2\end{minipage}%
+%      }%\par   % <== \par removed (AR)
+%    \else%
+%      \rotatebox{90}{\box\@tempboxa}%
+%    \fi
+%    \nobreak\hspace{12pt}% <== \nobreak added (AR)
+%  }
+%  \end{verbatim}%^^A
+%  Our version emulates this behavior, but if |width=| is set,
+%  the rotated caption is always typeset as |minipage|.
+%  (Note that |margin=| is not supported here.)
+%    \begin{macrocode}
+  \long\def\@makerotcaption#1#2{%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+    \ifdim\captionwidth=\z@
+      \setcaptionwidth{.8\textheight}%
+      \caption@slc{#1}{#2}{.8\vsize}{%
+        \let\caption@makerot\caption@@make
+        \caption@clearmargin
+%       \long\def\caption@parbox##1##2{\hbox{\hsize=.8\textheight\relax##2}}%
+%         (not needed because \rotatebox uses an \hbox anyway)
+        \let\caption@parbox\@secondoftwo}%
+      \caption@set@bool\caption@ifslc0% been there, done that
+    \fi
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+    \rotatebox{90}{\caption@makerot{#1}{#2}}%
+    \nobreak\hspace{12pt}}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \newcommand\caption@makerot[2]{%
+    \begin{minipage}\captionwidth\caption@@make{#1}{#2}\end{minipage}}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \changes{v3.1a}{2007/09/07}{\cs{DeclareFloatingEnvironment} defines sideways-variant, too}
+%    \begin{macrocode}
+  \caption@For{typelist}{%
+    \newenvironment{sideways#1}{\@rotfloat{#1}}{\end@rotfloat}%
+    \newenvironment{sideways#1*}{\@rotdblfloat{#1}}{\end@rotdblfloat}}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+}{}
+%    \end{macrocode}
+%
+% \subsubsection{The sidecap package}
+%
+%    \begin{macrocode}
+\caption@IfPackageLoaded{sidecap}[1999/05/11 v1.4d]{%
+  \caption@setbool{needfreeze}{1}%
+%    \end{macrocode}
+%
+% \begin{macro}{\SC@caption}
+% \changes{v3.0d}{2004/11/28}{Bugfix: Definition of \cs{@captype} added}
+% \changes{v3.0e}{2005/05/05}{Bugfix: Empty captions are handled correctly now}
+% \changes{v3.0e}{2005/05/05}{Priority of options fixed}
+% \changes{v3.0h}{2005/10/03}{Bugfix: Always use \cs{AtBeginDocument} to set \cs{SC@caption}}
+%  First of all, we let \package{sidecap} use a current definition of |\caption|.\\
+%  (This is only required for version 1.5d of the \package{sidecap} package.)
+%    \begin{macrocode}
+  \caption@AtBeginDocument{\let\SC@caption=\caption}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SC@zfloat}
+% \changes{v3.0b}{2004/05/16}{Local definition of \cs{captionsetup} added}
+% \changes{v3.0c}{2004/07/16}{Bugfix 04-07-15: Check for \cs{caption@star} removed}
+% \changes{v3.1c}{2007/10/06}{\cs{caption} will be saved \& restored now}
+%  This macro will be called at the start of the environment, here is a good
+%  opportunity to do some adaptations to |\caption| and |\captionsetup|.
+%    \begin{macrocode}
+  \let\caption@ORI@SC@zfloat\SC@zfloat
+  \def\SC@zfloat#1#2#3[#4]{%
+%    \end{macrocode}
+%  First we use the original definition, but save \& restore \cs{caption}
+%  so \cs{caption@freeze} will work correctly.
+%    \begin{macrocode}
+    \let\caption@ORI\caption
+    \caption@ORI@SC@zfloat{#1}{#2}{#3}[#4]%
+    \let\caption\caption@ORI
+%    \end{macrocode}
+%  Since the sidecap package uses our |\caption| code outside the
+%  environment the regular |\captionsetup| will not work.
+%  So we need a special version here which saves the given argument list
+%  which will be executed later on.
+%  Furthermore we need to make |\caption*| work.
+%    \begin{macrocode}
+    \caption@settype*{#2}%
+    \caption@freeze*}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\endSC@FLOAT}
+% \changes{v3.0i}{2006/01/12}{\cs{@listdepth}\cs{z@} added}
+% \changes{v3.1}{2007/05/05}{Call of \cs{caption@setoptions}\arg{SCfloat} added}
+%  This macro will be called at the end of the environment, here we need to
+%  setup our stuff before the \package{sidecap} package actually typesets
+%  its caption.
+%    \begin{macrocode}
+  \let\caption@ORI@endSC@FLOAT\endSC@FLOAT
+  \def\endSC@FLOAT{%
+%    \end{macrocode}
+%  \Note{\cs{@captype} isn't defined here, this will be done inside
+%  the original definition of \cs{endSC@FLOAT}. But \cs{SC@captype} is
+%  defined and can be used here, if needed.}
+%    \begin{macrocode}
+    \let\caption@ORI@settype\caption@settype
+    \def\caption@settype##1{% will be done in \@xfloat
+      \caption@ORI@settype*{##1}% do not change \@currentlabel
+      \caption@setSC@justify
+%%%   \caption@setoptions{SCfloat}%
+      \caption@setoptions{SC\@captype}%
+      \caption@start}%
+%    \end{macrocode}
+%  Before we can typeset the caption we need to set the margin to zero
+%  because any extra margin would only be disturbing here.\par
+%  (We don't need to take care about the caption position because
+%   the sidecap package set both |\abovecaptionskip| and |\belowcaptionskip|
+%   to a skip of zero anyway.)\par
+%  Furthermore |\SC@justify| will override the caption justification, if set.
+%  The usage of |\SC@justify| differs from version to version of the
+%  \package{sidecap} package:\par
+%  \begin{tabular}{ll}
+%    Version 1.4: & |\SC@justify| is not defined\\
+%    Version 1.5: & |\SC@justify| is |\relax| when not set\\
+%    Version 1.6: & |\SC@justify| is |\@empty| when not set\\
+%  \end{tabular}
+%    \begin{macrocode}
+    \def\caption@setSC@justify{%
+      \caption@clearmargin
+      \@ifundefined{SC@justify}{}{%
+        \ifx\SC@justify\@empty \else
+          \let\caption@hj\SC@justify
+          \let\SC@justify\@empty
+        \fi}}%
+%    \end{macrocode}
+%  Make the original definition of |\endSC@FLOAT| to use our caption
+%  stuff instead of its own.
+%  \Note{At this point the \package{sidecap} definition of \cs{caption} is valid,
+%  not the regular one!}
+%    \begin{macrocode}
+    \let\caption\SC@orig@caption
+    \def\SC@orig@caption[##1]##2{\caption@defrost}%
+%    \end{macrocode}
+%  Finally we call the original definition of |\endSC@FLOAT|.
+%    \begin{macrocode}
+    \caption@setSC@justify % for compatibility mode
+    \caption@ORI@endSC@FLOAT}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \changes{v3.1a}{2007/09/07}{\cs{DeclareFloatingEnvironment} defines SC-variant, too}
+% \changes{v3.1f}{2007/12/23}{Bugfix in definition of SC-variant}
+%    \begin{macrocode}
+  \newcommand*\caption@For@SC[2]{%
+    \def#1{b}% = \sidecaptionvpos{#2}{b} (v1.6)
+    \newenvironment{SC#2}%
+      {\SC@float[#1]{#2}}{\endSC@float}%
+    \newenvironment{SC#2*}%
+      {\SC@dblfloat[#1]{#2}}{\endSC@dblfloat}}%
+  \@onlypreamble\caption@For@SC
+  \caption@For{typelist}{%
+    \expandafter\caption@For@SC\csname SC@#1@vpos\endcsname{#1}}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+}{}
+%    \end{macrocode}
+%
+% \subsubsection{The subfigure package}
+% \changes{v3.1}{2007/04/06}{subfigure package support added (package)}
+%
+%    \begin{macrocode}
+\caption@IfPackageLoaded{subfigure}[2002/01/23 v2.1]{%
+%    \end{macrocode}
+%
+% \begin{macro}{\sf@ifpositiontop}
+% \changes{v3.1a}{2007/09/15}{Bugfix 07-09-15: Check for \cs{@captype} added}
+%  If the \package{subfigure} package is loaded, we map |\sf@ifpositiontop|
+%  to |\iffiguretopcap| resp. |\iftabletopcap|, so the \package{subfigure}
+%  \version{2.1} options \opt{figbotcap} etc. will still work.
+%    \begin{macrocode}
+  \def\sf@ifpositiontop{%
+    \ifx\@captype\@undefined
+      \expandafter\@gobbletwo
+    \else\ifx\@captype\relax
+      \expandafter\expandafter\expandafter\@gobbletwo
+    \else
+      \expandafter\expandafter\expandafter\sf@if@position@top
+    \fi\fi}
+%    \end{macrocode}
+%    \begin{macrocode}
+  \def\sf@if@position@top{%
+    \@ifundefined{if\@captype topcap}%
+      {\@gobbletwo}%
+      {\@nameuse{if\@captype topcap}%
+         \expandafter\@firstoftwo
+       \else
+         \expandafter\@secondoftwo
+       \fi}}
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+}{}
+%    \end{macrocode}
+%
+% \subsubsection{The supertabular and xtab packages}
+%
+%    \begin{macrocode}
+\caption@IfPackageLoaded{supertabular}[2002/07/19 v4.1e]{%
+%    \end{macrocode}
+%
+% \begin{macro}{\tablecaption}
+% \changes{v3.0e}{2005/05/05}{Made \cs{topcaption*} and \cs{bottomcaption*} work}
+% \changes{v3.1h}{2008/04/01}{Bugfix: Star variant does not increment table counter anymore}
+%  Make |\topcaption*| and |\bottomcaption*| work.
+%    \begin{macrocode}
+  \renewcommand*\tablecaption{%
+    \caption@star
+      {\refstepcounter{table}}%
+      {\caption@dblarg{\@xtablecaption}}}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@xtablecaption}
+% \changes{v3.1h}{2008/04/01}{Made \cs{nameref} \& \cs{autoref} work}
+% \changes{v3.1l}{2010/01/09}{Adapted to current version of nameref package}
+%  Make |\nameref| and |\autoref| work.
+%    \begin{macrocode}
+  \let\caption@ORI@xtablecaption\@xtablecaption
+  \long\def\@xtablecaption[#1]#2{%
+    \caption@gettitle{#2}%
+    \caption@ORI@xtablecaption[#1]{#2}}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ST@caption}
+% \changes{v3.0a}{2004/01/23}{Bugfix: Missing \cs{par} added}
+% \changes{v3.1h}{2008/04/01}{Bugfix: \cs{@currentlabelname} will be set now}
+%  The original code:
+%  \begin{verbatim}
+%  \long\def\ST@caption#1[#2]#3{\par%
+%    \addcontentsline{\csname ext@#1\endcsname}{#1}%
+%                    {\protect\numberline{%
+%                        \csname the#1\endcsname}{\ignorespaces #2}}
+%    \begingroup
+%      \@parboxrestore
+%      \normalsize
+%      \if@topcaption \vskip -10\p@ \fi
+%      \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+%      \if@topcaption \vskip 10\p@ \fi
+%    \endgroup}
+%  \end{verbatim}%^^A
+%    \begin{macrocode}
+  \long\def\ST@caption#1[#2]#3{\par%
+    \caption@settype*{#1}%
+    \caption@setoptions{supertabular}%
+%    \end{macrocode}
+%  The |position=| setting will be overwritten by the
+%  \package{supertabular} package: If |\topcaption| was used,
+%  the position will be |top| automatically, |bottom| otherwise.
+%    \begin{macrocode}
+    \def\caption@fixposition{%
+      \caption@setposition{\if@topcaption t\else b\fi}}%
+%    \end{macrocode}
+%    \begin{macrocode}
+    \caption@beginex{#1}{#2}{#3}%
+      \caption@boxrestore
+      \caption@normalsize
+      \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+    \caption@end}%
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+}{}
+%    \end{macrocode}
+%
+% \changes{v3.1h}{2008/04/01}{Support of the xtab package added}
+%    \begin{macrocode}
+\caption@IfPackageLoaded{xtab}[2000/04/09 v2.3]{%
+%    \end{macrocode}
+%
+% \begin{macro}{\tablecaption}
+%  Make |\topcaption*| and |\bottomcaption*| work.
+%    \begin{macrocode}
+  \renewcommand*\tablecaption{%
+    \caption@star
+      {\refstepcounter{table}}%
+      {\caption@dblarg{\@xtablecaption}}}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@xtablecaption}
+% \changes{v3.1l}{2010/01/09}{Adapted to current version of nameref package}
+%  Make |\nameref| and |\autoref| work.
+%    \begin{macrocode}
+  \let\caption@ORI@xtablecaption\@xtablecaption
+  \long\def\@xtablecaption[#1]#2{%
+    \caption@gettitle{#2}%
+    \caption@ORI@xtablecaption[#1]{#2}}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ST@caption}
+%  The original code:
+%  \begin{verbatim}
+%  \long\def\ST@caption#1[#2]#3{\par%
+%    \@initisotab
+%    \addcontentsline{\csname ext@#1\endcsname}{#1}%
+%                    {\protect\numberline{%
+%                      \csname the#1\endcsname}{\ignorespaces #2}}%
+%    \begingroup
+%      \@parboxrestore
+%      \normalsize
+%    %%  \if@topcaption \vskip -10\p@ \fi
+%      \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+%    %%  \if@topcaption \vskip 10\p@ \fi
+%    \endgroup
+%    \global\advance\ST@pageleft -\PWSTcapht
+%    \ST@trace\tw@{Added caption. Space left for xtabular: \the\ST@pageleft}}
+%  \end{verbatim}%^^A
+%    \begin{macrocode}
+  \long\def\ST@caption#1[#2]#3{\par%
+    \caption@settype*{#1}%
+    \caption@setoptions{xtabular}%
+%    \end{macrocode}
+%    \begin{macrocode}
+    \def\caption@fixposition{%
+      \caption@setposition{\if@topcaption t\else b\fi}}%
+%    \end{macrocode}
+%    \begin{macrocode}
+    \@initisotab
+    \caption@beginex{#1}{#2}{#3}%
+      \caption@boxrestore
+      \caption@normalsize
+      \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+    \caption@end
+    \global\advance\ST@pageleft -\PWSTcapht
+    \ST@trace\tw@{Added caption. Space left for xtabular: \the\ST@pageleft}}%
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+}{}
+%    \end{macrocode}
+%
+% \subsubsection{The threeparttable package}
+% \changes{v3.1}{2007/05/08}{Support of the \package{threeparttable} package added}
+%
+%    \begin{macrocode}
+\caption@IfPackageLoaded{threeparttable}[2003/06/13 v3.0]{%
+%    \end{macrocode}
+%
+% \begin{macro}{\threeparttable}
+% Unfortunately |\@captype| is not set when |\TPT@common| will be used,
+% so we have to redefine |\threeparttable| and |\measuredfigure| instead.
+%    \begin{macrocode}
+  \let\caption@ORI@threeparttable\threeparttable
+  \renewcommand*\threeparttable{%
+    \caption@settype{table}%
+      \caption@setposition a% ?
+      \caption@clearmargin
+    \caption@setoptions{threeparttable}%
+    \caption@ORI@threeparttable}%
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\measuredfigure}
+%  Same here\ldots
+%    \begin{macrocode}
+  \let\caption@ORI@measuredfigure\measuredfigure
+  \renewcommand*\measuredfigure{%
+    \caption@settype{figure}%
+      \caption@setposition a% ?
+      \caption@clearmargin
+    \caption@setoptions{measuredfigure}%
+    \caption@ORI@measuredfigure}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\TPT@caption}
+%  The original code:
+%  \begin{verbatim}
+%  \def\TPT@caption#1[#2]#3{\gdef\TPT@docapt
+%   {\par\global\let\TPT@docapt\@undefined \TPT@LA@caption{#1}[{#2}]%
+%     {\strut\ignorespaces#3\ifhmode\unskip\@finalstrut\strutbox\fi}}%
+%   \ifx\TPT@hsize\@empty \let\label\TPT@gatherlabel \abovecaptionskip\z@skip
+%   \else \TPT@docapt \fi \ignorespaces}
+%  \end{verbatim}%^^A
+%    \begin{macrocode}
+  \def\TPT@caption#1[#2]#3{%
+    \gdef\TPT@docapt{%
+      \global\let\TPT@docapt\@undefined
+      \caption@setautoposition\caption@TPT@position
+      \TPT@LA@caption{#1}[{#2}]{#3}}%
+    \ifx\TPT@hsize\@empty
+      \let\label\TPT@gatherlabel % Bug: does not work for measuredfigures
+      \gdef\caption@TPT@position{t}%
+      \g@addto@macro\TPT@docapt\caption@TPT@eatvskip
+    \else
+      \def\caption@TPT@position{b}%
+      \TPT@docapt
+    \fi
+    \ignorespaces}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  %\newcommand*\caption@TPT@eatvskip{\vskip-.2\baselineskip}%
+  \def\caption@TPT@eatvskip#1\vskip{#1\@tempdima=}%
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+}{}
+%    \end{macrocode}
+%
+% \subsubsection{The wrapfig package}
+% \changes{v3.1}{2007/05/05}{Support of the \package{wrapfig} package added}
+%
+%    \begin{macrocode}
+\caption@IfPackageLoaded{wrapfig}{% ver 3.3  (Oct 12, 1999)
+%    \end{macrocode}
+%
+% \begin{macro}{\float@ifstyle}
+% \changes{v3.1}{2007/06/10}{This macro added}
+% |\float@ifstyle|\marg{type}\marg{if-clause}\marg{else-clause}\par
+% (see \package{float} package support for details)
+%    \begin{macrocode}
+  \providecommand*\float@ifstyle[1]{%
+    \expandafter\ifx\csname fst@#1\endcsname\relax
+      \expandafter\@secondoftwo
+    \else
+      \expandafter\@firstoftwo
+    \fi}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@restylewrapfloat}
+%  This one redefines the |wrap#1| environment, e.g.~|wrapfigure|.
+%  Our code uses |\caption@setoptions{wrapfigure}| so
+%  |\captionsetup[wrapfigure]{|\ldots|}| will work.\par
+%  But first we check if our redefinition was already done, this could
+%  happen inside |\float@restyle| when the \package{wrapfig} support of
+%  the \package{float} package was not installed successfully, so it has
+%  not redefined |\wrap#1| there.
+%    \begin{macrocode}
+  \newcommand*\caption@restylewrapfloat[1]{%
+    \expandafter\ifx\csname caption@OUR@wrap#1\expandafter\endcsname
+                    \csname wrap#1\endcsname
+      \caption@Error{%
+        For a successful cooperation of the `wrapfig' package\MessageBreak
+        with the `float' package you should load the `wrapfig'\MessageBreak
+        package *after* the `float' package}%
+    \else
+      \expandafter\let\csname caption@ORI@wrap#1\expandafter\endcsname
+                      \csname wrap#1\endcsname
+      \@namedef{wrap#1}{\caption@wrapfloat{#1}}%
+      \expandafter\let\csname caption@OUR@wrap#1\expandafter\endcsname
+                      \csname wrap#1\endcsname
+    \fi}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@wrapfloat}
+%    \begin{macrocode}
+  \newcommand*\caption@wrapfloat[1]{%
+    \caption@settype*{#1}%
+    \float@ifstyle{#1}{%
+      \ifx\WF@floatstyhook\@undefined
+        \caption@Error{%
+          For a successful cooperation of the `wrapfig' package\MessageBreak
+          with the `float' package you should use at least\MessageBreak
+          `wrapfig' version 3.6}%
+      \else
+        \float@dostyle{#1}%
+      \fi}{}%
+    \caption@clearmargin
+%%% \caption@setoptions{wrapfloat}%
+    \caption@setoptions{wrap#1}%
+    \@nameuse{caption@ORI@wrap#1}}%
+%    \end{macrocode}
+% \end{macro}
+%
+% Now we redefine the \package{wrapfig} environments we know about.\par
+% If someone has placed a |\newfloat| right between |\usepackage{wrapfig}|
+% and |\usepackage{caption}| (or loads \thispackage\ first, so all these
+% patches will be done with |\AtBeginDocument|) we have bad luck since the
+% \package{float} package do not offer a list of (re)styled floats.
+% (This would finally lead to an error in |\caption@setfloatcapt|.)
+%
+%    \begin{macrocode}
+  \caption@restylewrapfloat{figure}%
+  \caption@restylewrapfloat{table}%
+%    \end{macrocode}
+%
+% \changes{v3.1a}{2007/09/07}{\cs{DeclareFloatingEnvironment} defines wrap-variant, too}
+%    \begin{macrocode}
+  \caption@For{typelist}{%
+    \newenvironment{wrap#1}{\wrapfloat{#1}}{\endwrapfloat}%
+    \caption@restylewrapfloat{#1}}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+  \ifx\WF@floatstyhook\@undefined \else % wrapfig v3.6
+%    \end{macrocode}
+%
+% \begin{macro}{\float@restyle}
+% If the \package{wrapfig} package \version{3.6} is used, we patch
+% |\float@restyle| (if defined), too, so new or restyled floats will be
+% handled correctly, too.
+%    \begin{macrocode}
+    \@ifundefined{float@restyle}{}{%
+      \toks@=\expandafter{\float@restyle{#1}% (env may or may not be defined)
+        \caption@restylewrapfloat{#1}}%
+      \edef\@tempa{\def\noexpand\float@restyle##1{\the\toks@}}%
+      \@tempa}% perform redefinitions
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\wrapfloat}
+% An additional check of the package load order:
+% If both, neither the \package{wrapfig} package nor \thispackage\ haven't
+% catch |\float@restyle|, we finally splash down at |\wrapfloat|.
+%    \begin{macrocode}
+    \let\caption@ORI@wrapfloat\wrapfloat
+    \def\wrapfloat#1{%
+      \float@ifstyle{#1}{%
+        \caption@Error{%
+          For a successful cooperation of the `wrapfig' package\MessageBreak
+          with the `float' package you should load the `wrapfig'\MessageBreak
+          package *right after* the `float' package}}{}%
+      \caption@ORI@wrapfloat{#1}}%
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+  \fi                                   % wrapfig v3.6
+%    \end{macrocode}
+%
+% \begin{macro}{\WF@rapt}
+% We place our \package{hyperref} anchor here.\par
+% Original code:
+% \begin{verbatim}
+%   \def\WF@rapt[#1]#2{% final two args: #1 = overhang,  #2 = width,
+%     \gdef\WF@ovh{#1}% hold overhang for later, when \width is known
+%     \global\setbox\WF@box\vtop\bgroup \setlength\hsize{#2}%
+%     \ifdim\hsize>\z@ \@parboxrestore \else
+%     \setbox\z@\hbox\bgroup \let\wf@@caption\caption \let\caption\wf@caption
+%     \ignorespaces \fi}
+% \end{verbatim}%^^A
+% Our code:
+%    \begin{macrocode}
+  \def\WF@rapt[#1]#2{% final two args: #1 = overhang,  #2 = width,
+    \gdef\WF@ovh{#1}% hold overhang for later, when \width is known
+    \global\setbox\WF@box\vtop\bgroup \setlength\hsize{#2}%
+      \caption@start
+    \ifdim\hsize>\z@ \@parboxrestore \else
+    \setbox\z@\hbox\bgroup \let\wf@@caption\caption \let\caption\wf@caption
+    \ignorespaces \fi}%
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+}{}
+%    \end{macrocode}
+%
+% \iffalse
+%</package>
+% \fi
+%
+% \iffalse
+% --------------------------------------------------------------------------- %
+% \fi
+%
+% \clearpage
+% \begin{thebibliography}{99}
+%   \bibitem{TLC2}
+%   Frank Mittelbach and Michel Goossens:\\
+%   \newblock {\em The {\LaTeX} Companion (2nd.~Ed.)},\\
+%   \newblock Addison-Wesley, 2004.
+%
+%   \bibitem{beamer}
+%   Till Tantau:\\
+%   \href{http://tug.ctan.org/tex-archive/macros/latex/contrib/beamer/}%
+%        {\emph{User Guide to the Beamer Class, Version 3.07}},\\
+%   March 11, 2007
+%
+%   \bibitem{KOMAScript}
+%   Markus Kohm \& Jens-Uwe-Morawski:\\
+%   \href{http://tug.ctan.org/tex-archive/macros/latex/contrib/koma-script/}%
+%        {\emph{KOMA-Script -- a versatile \LaTeXe\ bundle}},\\
+%   2007-01-09
+%
+%   \bibitem{NTG}
+%   Victor Eijkhout:\\
+%   \href{http://tug.ctan.org/tex-archive/macros/latex/contrib/ntgclass/}%
+%        {\emph{An introduction to the Dutch \LaTeX\ document classes}},\\
+%   3 September 1989
+%
+%   \bibitem{float}
+%   Anselm Lingnau:\\
+%   \href{http://tug.ctan.org/tex-archive/macros/latex/contrib/float/}%
+%        {\emph{An Improved Environment for Floats}},\\
+%   2001/11/08
+%
+%   \bibitem{floatflt}
+%   Mats Dahlgren:\\
+%   \href{http://tug.ctan.org/tex-archive/macros/latex/contrib/floatflt/}%
+%        {\emph{Welcome to the floatflt package}},\\
+%   1998/06/05
+%
+%   \bibitem{floatrow}
+%   Olga Lapko:\\
+%   \href{http://tug.ctan.org/tex-archive/macros/latex/contrib/floatrow/}%
+%        {\emph{The floatrow package documentation}},\\
+%   2007/08/24
+%
+%   \bibitem{fltpage}
+%   Sebastian Gross:\\
+%   \href{http://tug.ctan.org/tex-archive/macros/latex/contrib/fltpage/}%
+%        {\emph{Welcome to the beta test of fltpage package!}},\\
+%   1998/11/13
+%
+%   \bibitem{hyperref}
+%   Sebastian Rahtz \& Heiko Oberdiek:\\
+%   \href{http://tug.ctan.org/tex-archive/macros/latex/contrib/hyperref/}%
+%        {\emph{Hypertext marks in \LaTeX}},\\
+%   November 12, 2007
+%
+%   \bibitem{hypcap}
+%   Heiko Oberdiek:\\
+%   \href{http://tug.ctan.org/tex-archive/macros/latex/contrib/oberdiek/}%
+%        {\emph{The hypcap package -- Adjusting anchors of captions}},\\
+%   2007/04/09
+%
+%   \bibitem{listings}
+%   Carsten Heinz \& Brooks Moses:\\
+%   \href{http://tug.ctan.org/tex-archive/macros/latex/contrib/listings/}%
+%        {\emph{The Listings Package}},\\
+%   2007/02/22
+%
+%   \bibitem{longtable}
+%   David Carlisle:\\
+%   \href{http://tug.ctan.org/tex-archive/macros/latex/required/tools/}%
+%        {\emph{The longtable package}},\\
+%   2004/02/01
+%
+%   \bibitem{picinpar}
+%   Friedhelm Sowa:\\
+%   \href{http://tug.ctan.org/tex-archive/macros/latex209/contrib/picinpar/}%
+%        {\emph{Pictures in Paragraphs}},\\
+%   July 13, 1993
+%
+%   \bibitem{picins}
+%   Joachim Bleser and Edmund Lang:\\
+%   \href{http://tug.ctan.org/tex-archive/macros/latex209/contrib/picins/}%
+%        {\emph{PicIns-Benutzerhandbuch Version 3.0}},\\
+%   September~1992
+%
+%   \bibitem{rotating}
+%   Sebastian Rahtz and Leonor Barroca:\\
+%   \href{http://tug.ctan.org/tex-archive/macros/latex/contrib/rotating/}%
+%        {\emph{A style option for rotated objects in \LaTeX}},\\
+%   1997/09/26
+%
+%   \bibitem{sidecap}
+%   Rolf Niepraschk \& Hubert G\"a\ss lein:\\
+%   \href{http://tug.ctan.org/tex-archive/macros/latex/contrib/sidecap/}%
+%        {\emph{The sidecap package}},\\
+%   2003/06/06
+%
+%   \bibitem{subfigure}
+%   Steven D. Cochran:\\
+%   \href{http://tug.ctan.org/tex-archive/macros/latex/contrib/subfigure/}%
+%        {\emph{The subfigure package}},\\
+%   2002/07/02
+%
+%   \bibitem{subfig}
+%   Steven D. Cochran:\\
+%   \href{http://tug.ctan.org/tex-archive/macros/latex/contrib/subfig/}%
+%        {\emph{The subfig package}},\\
+%   2005/07/05
+%
+%   \bibitem{supertabular}
+%   Johannes Braams and Theo Jurriens:\\
+%   \href{http://tug.ctan.org/tex-archive/macros/latex/contrib/supertabular/}%
+%        {\emph{The supertabular environment}},\\
+%   2002/07/19
+%
+%   \bibitem{threeparttable}
+%   Donald Arseneau:\\
+%   \href{http://tug.ctan.org/tex-archive/macros/latex/contrib/misc/}%
+%        {\emph{Three part tables: title, tabular environment, notes}},\\
+%   2003/06/13
+%
+%   \bibitem{wrapfig}
+%   Donald Arseneau:\\
+%   \href{http://tug.ctan.org/tex-archive/macros/latex/contrib/wrapfig/}%
+%        {\emph{WRAPFIG.STY ver 3.6}},\\
+%   2003/01/31
+%
+%   \bibitem{xtab}
+%   Peter Wilson:\\
+%   \href{http://tug.ctan.org/tex-archive/macros/latex/contrib/xtab/}%
+%        {\emph{The xtab package}},\\
+%   2004/05/24
+%
+%   \bibitem{Anne}
+%   Anne Br\"uggemann-Klein:\\
+%   \emph{Einf\"uhrung in die Dokumentverarbeitung},\\
+%   B.G. Teubner, Stuttgart, 1989
+%
+%   \bibitem{refcount}
+%   Heiko Oberdiek:\\
+%   \href{ftp://ctan.tug.org/tex-archive/macros/latex/contrib/oberdiek/refcount.pdf}%
+%        {\emph{The refcount package}},\\
+%   2006/02/20
+% \end{thebibliography}
+%
+% \iffalse
+% --------------------------------------------------------------------------- %
+% \fi
+%
+% \clearpage
+% \Finale
+%
+\endinput
-- 
cgit v1.2.3

