summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/caption/fallback/v3.4/caption3.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/caption/fallback/v3.4/caption3.dtx')
-rw-r--r--Master/texmf-dist/source/latex/caption/fallback/v3.4/caption3.dtx4231
1 files changed, 4231 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/caption/fallback/v3.4/caption3.dtx b/Master/texmf-dist/source/latex/caption/fallback/v3.4/caption3.dtx
new file mode 100644
index 00000000000..2843145c183
--- /dev/null
+++ b/Master/texmf-dist/source/latex/caption/fallback/v3.4/caption3.dtx
@@ -0,0 +1,4231 @@
+% \iffalse meta-comment
+%
+% This is file `caption3.dtx'.
+%
+% Copyright (C) 1994-2020 Axel Sommerfeldt (axel.sommerfeldt@f-m.fm)
+%
+% --------------------------------------------------------------------------
+%
+% 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, caption3.dtx,
+% bicaption.dtx, ltcaption.dtx, subcaption.dtx,
+% the derived files
+% caption.sty, caption2.sty, caption3.sty,
+% bicaption.sty, ltcaption.sty, subcaption.sty,
+% and the user manuals
+% caption-deu.tex, caption-eng.tex, caption-rus.tex.
+%
+% \fi
+% \CheckSum{3607}
+%
+% \iffalse
+%<*driver>
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\ProvidesFile{caption3.drv}[2019/09/10 v1.13 Implementation of the caption kernel]
+\hbadness=9999 \newcount\hbadness \hfuzz=100pt % Make TeX shut up.
+%\errorcontextlines=3
+%
+\documentclass{ltxdoc}
+\setlength\parindent{0pt}
+\setlength\parskip{\smallskipamount}
+%
+\makeatletter % make room for subsections like 2.16.14 in the TOC
+%\newcommand*\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\renewcommand*\l@subsection{\@dottedtocline{2}{1.5em}{2.7em}}
+\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{caption3}[2020/05/30]
+%
+\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{caption3.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} kernel}
+% \def\Thispackage{The \package{caption} kernel}
+%
+% \newcommand*\csmarg[1]{\texttt{\char`\{#1\char`\}}}
+% \newcommand*\csoarg[1]{\texttt{\char`\[#1\char`\]}}
+% \newcommand*\version[2][]{\textit{v#2}}
+%
+% \GetFileInfo{caption3.sty}
+%
+% \title{The Implementation of
+% \texorpdfstring{\thispackage\thanks{%^^A
+% This package has version number \fileversion, last revised \filedate.}}%^^A
+% {the caption kernel}}
+% \author{Axel Sommerfeldt\\
+% \url{https://gitlab.com/axelsommerfeldt/caption}}
+% \date{\filedate}
+% \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.
+% \end{abstract}
+%
+% \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}
+% \newcommand*\Note[2][Note]{\par{\small\emph{#1:} #2}\par}
+%
+% \changes{v1.0}{2003/12/20}{Rewritten; many new commands and features}
+% \changes{v1.0c}{2004/11/28}{Split into two packages:
+% \package{caption} \& \package{caption3}}
+%
+% \iffalse
+% --------------------------------------------------------------------------- %
+% \fi
+%
+% \clearpage
+%
+% \iffalse
+%<*package>
+% \fi
+%
+% \section{Identification}
+%
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\ProvidesPackage{caption3}[2020/07/29 v1.13 caption3 kernel (AR)]
+% \end{macrocode}
+%
+% \section{Workaround for bug in package \package{arabtex}}
+% \package{arabtex} re-defines \cs{@gobble} as not-long so the packages of the
+% \package{caption} package bundle are doomed to fail.
+% Since this fatal bug won't be fixed in \package{arabtex} but we are dependent on a
+% proper definition of \cs{@gobble}, \cs{@firstofone}, \cs{@firstoftwo}, \cs{@secondoftwo},
+% and so on we fix this here. (Sigh!)
+% \begin{macrocode}
+\providecommand\caption@FixArabTeX{%
+ \def\caption@tempa##1{}%
+ \ifx\caption@tempa\@gobble
+ \PackageInfo{caption3}{Fixing ArabTeX}%
+ \long\def\@gobble##1{}%
+ \fi}
+% \end{macrocode}
+% Do the fix now and at |\begin{document}|, in case \package{arabtex} will be loaded after \package{caption}.
+% \begin{macrocode}
+\caption@FixArabTeX
+\AtBeginDocument{%
+ \caption@FixArabTeX
+ \let\caption@FixArabTeX\@undefined}
+% \end{macrocode}
+%
+% \section{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}
+% \changes{v1.5}{2013/04/26}{Revised}
+% 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.
+% \begin{macrocode}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname currentgrouplevel\endcsname\relax
+ \PackageInfo{caption3}{TeX engine: TeX}
+ \let\caption@ifeTeX\@secondoftwo
+ \providecommand\l@addto@macro[2]{%
+ \begingroup
+ \toks@\expandafter{#1#2}%
+ \xdef\caption@addto@temp{\the\toks@}%
+ \endgroup
+ \let#1\caption@addto@temp}
+\else
+ \PackageInfo{caption3}{TeX engine: e-TeX}
+ \let\caption@ifeTeX\@firstoftwo
+ \providecommand\l@addto@macro[2]{%
+ \edef#1{\unexpanded\expandafter{#1#2}}}
+\fi
+% \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@ifundefined}
+% \changes{v1.3a}{2011/08/12}{This macro added}
+% \changes{v1.3b}{2011/08/18}{Made expandable}
+% Similar to \cs{@ifundefined} offered by the \LaTeX kernel,
+% but takes a macro as argument instead of a macro name.
+% \begin{macrocode}
+\newcommand*\caption@ifundefined[1]{%
+ \ifx#1\@undefined
+ \expandafter\@firstoftwo
+ \else\ifx#1\relax
+ \expandafter\expandafter\expandafter\@firstoftwo
+ \else
+ \expandafter\expandafter\expandafter\@secondoftwo
+ \fi\fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@ifdefined}
+% \changes{v1.8e}{2018/05/11}{This macro added}
+% Similar to \cs{@ifundefined} offered by the \LaTeX kernel,
+% but takes a macro as argument instead of a macro name.
+% \begin{macrocode}
+\newcommand*\caption@ifdefined[1]{%
+ \ifx#1\@undefined
+ \expandafter\@secondoftwo
+ \else\ifx#1\relax
+ \expandafter\expandafter\expandafter\@secondoftwo
+ \else
+ \expandafter\expandafter\expandafter\@firstoftwo
+ \fi\fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@ifinlist}
+% \changes{v1.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{v1.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{v1.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{v1.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{v1.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{v1.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{v1.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{v1.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{v1.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{v1.1}{2007/05/08}{This macro and its usage added}
+% \changes{v1.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{v1.1}{2007/08/12}{This macro added}
+% \changes{v1.5}{2012/04/09}{This macro revised}
+% |\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{%
+ \def\caption@tempb{#1}%
+ \expandafter\caption@tempb\expandafter{\caption@tempa}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@gobble}
+% \changes{v1.4}{2011/08/19}{This macro added}
+% |\caption@gobble*|\oarg{arg}\oarg{\ldots}\marg{arg}\par
+% Same as |\@gobble|, but gobbles optional arguments as well.
+% \begin{macrocode}
+\DeclareRobustCommand*\caption@gobble{%
+ \caption@withoptargs\@gobbletwo}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@AtBeginDocument}
+% \changes{v1.1}{2007/04/13}{This macro and its usage added}
+% \changes{v1.2e}{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{%
+ \caption@InfoNoLine{Begin \noexpand\AtBeginDocument code}%
+% \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}
+ \caption@InfoNoLine{End \noexpand\AtBeginDocument code}}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Information, Warnings, and Errors}
+%
+% \begin{macro}{\caption@Info}
+% \changes{v1.3}{2010/10/25}{Moved from package to kernel}
+% |\caption@Info|\marg{message}
+% \begin{macrocode}
+\newcommand*\caption@Info[1]{%
+ \PackageInfo{caption}{#1}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\caption@InfoNoLine}
+% \changes{v1.3}{2010/10/25}{Moved from package to kernel}
+% |\caption@InfoNoLine|\marg{message}\\
+% \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@InfoNoLine[1]{%
+ \caption@Info{#1\@gobble}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@Warning}
+% \changes{v1.1c}{2007/10/14}{This macro added, will now be used for warnings}
+% |\caption@Warning|\marg{message}
+% \begin{macrocode}
+\newcommand*\caption@Warning[1]{%
+ \caption@WarningNoLine{#1\on@line}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\caption@WarningNoLine}
+% \changes{v1.1c}{2007/10/14}{This macro added, will now be used for warnings}
+% |\caption@WarningNoLine|\marg{message}
+% \begin{macrocode}
+\newcommand*\caption@WarningNoLine[1]{%
+ \PackageWarning{caption}{#1.^^J\caption@wh\@gobbletwo}}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@wh{%
+ See the caption package documentation for explanation.}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@Error}
+% \changes{v1.0j}{2007/01/20}{This macro added, will now be used for errors}
+% \changes{v1.0o}{2007/04/11}{Renamed from \cs{caption@error} to \cs{caption@Error}}
+% \changes{v1.1b}{2007/09/18}{Usage of \cs{caption@Package} removed}
+% |\caption@Error|\marg{message}
+% \begin{macrocode}
+\newcommand*\caption@Error[1]{%
+ \PackageError{caption}{#1}\caption@eh}
+% \end{macrocode}
+% \begin{macrocode}
+\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}
+%
+% \begin{macro}{\caption@KV@err}
+% \changes{v1.1b}{2007/09/18}{This macro added}
+% \begin{macrocode}
+\let\caption@KV@err\caption@Error
+% \end{macrocode}
+% \end{macro}
+%
+% \section{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{v1.1}{2007/07/22}{This macro added}
+% \changes{v1.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}}\caption@declare@option{#2}}
+\@onlypreamble\caption@declareoption
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@declare@option{%
+ \define@key{caption}}
+%% no \@onlypreamble\caption@declare@option, will be used by \captionsetup
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DeclareCaptionOptionNoValue}
+% \changes{v1.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{v1.2a}{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{v1.0a}{2004/01/17}{Bugfix: Missing \% added}
+% \changes{v1.1}{2007/07/22}{Starred-variant added}
+% \changes{v1.1e}{2007/07/27}{Inside packages the starred variant will be used automatically}
+% \changes{v1.2}{2007/11/16}{Bugfix 07-11-09: `space hack' added}
+% \changes{v1.2a}{2008/01/12}{\cs{ifcaptionsetup@star} will be set now}
+% \changes{v1.5}{2012/04/09}{Support of multiple optional arguments added}
+% \changes{v1.8h}{2020/01/03}{Syntax check of saved options added}
+% |\captionsetup|\oarg{type}\ldots\marg{keyval-list of options}\\
+% |\captionsetup*|\oarg{type}\ldots\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]{%
+ \@ifnextchar[%]
+ {\caption@stepthecounter
+ \caption@withoptargs{\@expandtwoargs
+ \caption@setup@options@i{#1}{@\caption@thecounter}}}%
+ {\caption@setup@options@{#1}}}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@setup@options@i[4]{%
+ \caption@declare@option{#2}[]{\captionsetup#3{#4}}%
+ \caption@setup@options@{#1}{#2}}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@setup@options@[2]{%
+ \@bsphack
+ \ifcaptionsetup@star\captionsetup@starfalse\else\caption@addtooptlist{#1}\fi
+ \caption@checkoptions{#2}%
+ \expandafter\caption@l@addto@list\csname caption@opt@#1\endcsname{#2}%
+ \@esphack}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@checkoptions}
+% \changes{v1.8h}{2020/01/03}{This macro added}
+% Check the syntax of the given options by executing them inside a group.
+% \begin{macrocode}
+\newcommand*\caption@checkoptions[1]{%
+ \begingroup
+ \caption@prepare@optioncheck
+ \caption@setup{#1}%
+ \endgroup}
+% \end{macrocode}
+% \begin{macrocode}
+\providecommand*\caption@prepare@optioncheck{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\IfCaptionOptionCheck}
+% \changes{v1.10}{2020/05/10}{This macro added}
+% |\IfCaptionOptionCheck|\marg{yes-code}\marg{no-code}
+% executes the \meta{yes-code} if options are just checked for syntax, and \meta{no-code} if not.
+% \begin{macrocode}
+\let\IfCaptionOptionCheck\@secondoftwo
+% \end{macrocode}
+% \begin{macrocode}
+\g@addto@macro\caption@prepare@optioncheck{%
+ \let\IfCaptionOptionCheck\@firstoftwo}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\clearcaptionsetup}
+% \changes{v1.1}{2007/07/29}{Optional argument added}
+% \changes{v1.1}{2007/08/17}{Starred variant added}
+% \changes{v1.1e}{2007/07/27}{Inside packages the starred variant will be used automatically}
+% \changes{v1.2}{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'}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\showcaptionsetup}
+% \changes{v1.0d}{2005/05/03}{Optimized for memory usage}
+% \changes{v1.1}{2007/07/29}{Bugfix: Does not expand option list anymore}
+% \changes{v1.2}{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{v1.1}{2007/07/02}{Option \opt{options=} added}
+% \changes{v1.3}{2010/09/05}{Option \opt{options*=} added}
+% \changes{v1.4b}{2012/01/12}{Option \opt{options*=} removed}
+% \begin{macrocode}
+\DeclareCaptionOption{options}{\caption@setoptions{#1}}
+% \end{macrocode}
+%
+% \begin{macro}{\caption@setoptions}
+% \changes{v1.0g}{2006/01/03}{Optional argument added}
+% \changes{v1.0h}{2006/01/26}{Revised}
+% \changes{v1.0j}{2007/01/30}{Optional argument removed}
+% \changes{v1.1}{2007/04/11}{Usage of \cs{clearcaptionsetup} added}
+% \changes{v1.1}{2007/05/09}{Renamed from \cs{caption@settype} to \cs{caption@setoptions}}
+% \changes{v1.2}{2007/12/03}{Definition of \cs{caption@iftypewarning} removed}
+% \changes{v1.3}{2010/09/05}{Starred variant added}
+% \changes{v1.4b}{2012/01/12}{Starred variant 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.
+% \iffalse
+% (The starred variant do not clear the option list.)
+% \fi
+% \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{v1.1}{2007/07/22}{This macro added}
+% \begin{macro}{\caption@removefromoptlist}
+% \changes{v1.1}{2007/07/22}{This macro added}
+% \changes{v1.2c}{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{v1.0g}{2006/01/03}{This macro added}
+% \changes{v1.0j}{2007/01/20}{Bugfix: Usage of \cs{caption@keydepth} added}
+% \changes{v1.0j}{2007/01/30}{Optional argument added}
+% \changes{v1.0n}{2007/04/08}{\cs{caption@keydepth} is now a command instead of a counter}
+% \changes{v1.1b}{2007/09/18}{Usage of \cs{caption@Package} removed, we use \cs{caption@KV@err} instead}
+% \changes{v1.2}{2007/11/16}{Bugfix 07-11-09: `space hack' added}
+% \changes{v1.2a}{2008/01/12}{\cs{captionsetup@starfalse} added}
+% \changes{v1.2d}{2009/09/30}{Bugfix 09-09-29: Missing error handler will be defined automatically}
+% \changes{v1.4}{2011/08/24}{Redefinition of \cs{XKV@err} added}
+% |\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\csname ORI@XKV@err\caption@keydepth\endcsname\XKV@err
+ \edef\caption@keydepth{\caption@keydepth i}%
+% \end{macrocode}
+% \begin{macrocode}
+ \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
+ \def\KV@errx{\KV@err}%
+ \def\XKV@err{\let\@tempa\XKV@tkey\KV@err}%
+% \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
+ \expandafter\let\expandafter\XKV@err\csname ORI@XKV@err\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{v1.1}{2007/07/15}{This macro added}
+% \changes{v1.3}{2010/09/04}{Depends on package now}
+% |\caption@ExecuteOptions|\marg{package}\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]{%
+ \expandafter\@expandtwoargs\csname caption@setkeys@#1\endcsname{#1}{#2}}%
+\@onlypreamble\caption@ExecuteOptions
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@ProcessOptions}
+% \changes{v1.0a}{2004/01/23}{Bugfix, see
+% \purett{news:400D360C.9678329F@gmx.net} for details}
+% \changes{v1.0g}{2006/01/03}{Improvement, uses \cs{caption@setkeys}
+% instead of \cs{setkeys}}
+% \changes{v1.0h}{2006/02/23}{Bugfix, now processes only those global
+% options which have a default value}
+% \changes{v1.0j}{2007/01/30}{\cs{ProcessOptionsWithKV} renamed to
+% \cs{caption@ProcessOptions} and moved from the package to the kernel}
+% \changes{v1.1}{2007/04/17}{Star variant added}
+% |\caption@ProcessOptions*|\marg{package}\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}
+%
+% \begin{macro}{\caption@SetupOptions}
+% \changes{v1.3}{2010/09/04}{This macro added}
+% |\caption@SetupOptions|\marg{package}\marg{code}\par
+% After calling this macro |\caption@ExecuteOptions| and
+% |\usepackage|\oarg{options}\marg{package}
+% will both be mapped to \meta{code} with \meta{package} and \meta{options}
+% as arguments |#1| and |#2|. (This helps avoiding ``Option clash'' errors.)
+% \begin{macrocode}
+\newcommand\caption@SetupOptions[2]{%
+ \@namedef{caption@setkeys@#1}##1##2{#2}%
+ \expandafter\@onlypreamble\csname caption@setkeys@#1\endcsname
+ \@cons\caption@SetupOptions@list{{#1}}}
+\@onlypreamble\caption@SetupOptions
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@SetupOptions@list{}
+\@onlypreamble\caption@SetupOptions@list
+% \end{macrocode}
+% \begin{macrocode}
+\let\caption@onefilewithoptions\@onefilewithoptions
+\def\@onefilewithoptions#1[#2]{%
+ \begingroup
+ \def\@tempa{%
+ \endgroup
+ \caption@onefilewithoptions{#1}[{#2}]}%
+ \def\@tempb{#1}%
+ \def\@elt##1{%
+ \def\@tempc{##1}%
+ \ifx\@tempb\@tempc
+ \def\@tempa{%
+ \endgroup
+ \caption@ExecuteOptions{#1}{#2}%
+ \caption@onefilewithoptions{#1}[]}%
+ \fi}
+ \caption@SetupOptions@list
+ \@tempa}
+\@onlypreamble\caption@onefilewithoptions
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Margin resp. width}
+% \changes{v1.0n}{2007/04/01}{\cs{captionmarginx} renamed to \cs{captionmargin@}}
+% \changes{v1.0n}{2007/04/03}{Option `twoside' added}
+% \changes{v1.1}{2007/08/11}{Options `margin*', `minmargin', and `maxmargin' added}
+% \changes{v1.2}{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
+\newdimen\caption@tempdima
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+\DeclareCaptionOption{margin}{\setcaptionmargin{#1}}
+\DeclareCaptionOption{margin*}{\setcaptionmargin*{#1}}
+\DeclareCaptionOption{width}{\setcaptionwidth{#1}}
+\DeclareCaptionOption{width*}{\setcaptionwidth*{#1}}
+% \end{macrocode}
+% \begin{macrocode}
+\DeclareCaptionOption{calcmargin}{\caption@setcalcmargin{#1}}
+\DeclareCaptionOption{calcmargin*}{\caption@setcalcmargin*{#1}}
+\DeclareCaptionOption{calcwidth}{\caption@setcalcwidth{#1}}
+\DeclareCaptionOption{calcwidth*}{\caption@setcalcwidth*{#1}}
+% \end{macrocode}
+% \begin{macrocode}
+\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{v1.0f}{2005/10/24}{Renamed from \cs{caption@setmargin} to \cs{setcaptionmargin}}
+% \changes{v1.0f}{2005/10/24}{\cs{setcaptionmargin} enhanced so it can take
+% left+right margin}
+% \changes{v1.1}{2007/08/11}{Starred variant added}
+% \changes{v1.1}{2007/08/12}{\cs{setlength}\cs{captionmargin} \&
+% \cs{setlength}\cs{captionmargin@} swapped so
+% `\texttt{margin*=}\cs{captionmargin}' works in singleline options}
+% \changes{v1.3}{2010/11/07}{Support for option \opt{calcmargin} added}
+% |\setcaptionmargin|\marg{amount}\\
+% |\setcaptionmargin*|\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*\setcaptionmargin{%
+ \caption@resetcalcmargin
+ \caption@setmargin}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@setmargin{%
+ \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{v1.0f}{2005/10/24}{Renamed from \cs{caption@setwidth} to \cs{setcaptionwidth}}
+% \changes{v1.3}{2010/11/07}{Starred variant added}
+% \changes{v1.3}{2010/11/07}{Support for option \opt{calcwidth} added}
+% |\setcaptionwidth|\marg{amount}\\
+% |\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{%
+ \caption@resetcalcmargin
+ \caption@setwidth}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@setwidth{%
+ \caption@teststar\caption@@setwidth\@gobble\@firstofone}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@@setwidth[2]{%
+ #1{\captionmargin\z@\captionmargin@\z@}%
+ \setlength\captionwidth{#2}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@resetcalcmargin}
+% \changes{v1.3}{2010/11/07}{This macro added}
+% \begin{macrocode}
+\newcommand*\caption@resetcalcmargin{%
+ \let\caption@calcmargin@hook\@empty}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@setcalcmargin}
+% \changes{v1.3}{2010/11/07}{This macro added}
+% \begin{macrocode}
+\newcommand*\caption@setcalcmargin{%
+ \caption@teststar{\caption@@setcalcmargin\caption@setmargin}%
+ \@secondoftwo\@firstoftwo}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@@setcalcmargin[3]{%
+ #2{\caption@resetcalcmargin
+ \l@addto@macro\caption@calcmargin@hook{#1{#3}}}%
+ {\l@addto@macro\caption@calcmargin@hook{#1*{#3}}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@setcalcwidth}
+% \changes{v1.3}{2010/11/07}{This macro added}
+% \begin{macrocode}
+\newcommand*\caption@setcalcwidth{%
+ \caption@teststar{\caption@@setcalcmargin\caption@setwidth}%
+ \@secondoftwo\@firstoftwo}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@counter}
+% \changes{v1.0n}{2007/04/03}{This counter added}
+% \changes{v1.1e}{2007/10/28}{Renamed to \cs{caption@thecounter}; \cs{caption@stepcounter} added}
+% \changes{v1.5}{2012/04/09}{\cs{caption@stepcounter} renamed to \cs{caption@stepthecounter}}
+% Internal counter. At the moment it will be used inside
+% |\caption@ifoddpage| only.
+% \begin{macrocode}
+\newcommand*\caption@thecounter{0}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@stepthecounter{%
+ \@tempcnta\caption@thecounter
+ \advance\@tempcnta\@ne
+ \xdef\caption@thecounter{\the\@tempcnta}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@newlabel}
+% \changes{v1.0n}{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{v1.0n}{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{v1.1}{2007/09/01}{This macro added}
+% \changes{v1.2}{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{v1.1}{2007/09/01}{This macro added}
+% \changes{v1.2d}{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{v1.0n}{2007/04/03}{This macro added}
+% \changes{v1.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{v1.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}
+%
+% \section{Indentions}
+%
+% \begin{macro}{\caption@indent}
+% \changes{v1.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{v1.0b}{2004/05/16}{Defaults added for options \opt{parindent=}
+% and \opt{hangindent=}}
+% \changes{v1.0f}{2005/08/22}{Option \opt{parskip=}: \cs{AtBeginCaption}
+% replaced by \cs{caption@@par}}
+% \changes{v1.0f}{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}
+%
+% \section{Styles}
+%
+% \begin{macro}{\DeclareCaptionStyle}
+% \changes{v1.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{v1.2a}{2008/01/20}{Option \opt{style*=} added}
+% \begin{macrocode}
+\DeclareCaptionOption{style}{\caption@setstyle{#1}}
+\DeclareCaptionOption{style*}{\caption@setstyle*{#1}}
+% \end{macrocode}
+%
+% \begin{macro}{\caption@setstyle}
+% \changes{v1.0e}{2005/06/01}{Starred variant added}
+% \changes{v1.1}{2007/07/29}{Recursive style definitions should work now}
+% \changes{v1.1d}{2007/10/23}{`SingleLine' renamed to `singleline' for consistency}
+% \changes{v1.2}{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{v1.1}{2007/02/04}{%
+% This macro renamed from \cs{caption@setdefault} to \cs{caption@resetstyle}}
+% \changes{v1.1d}{2007/10/23}{`SingleLine' renamed to `singleline' for consistency}
+% \changes{v1.2}{2007/11/17}{Usage of \opt{size=} added}
+% \changes{v1.2b}{2008/05/06}{Usage of \opt{rule} added}
+% \changes{v1.5}{2012/03/15}{\opt{box=parbox} added}
+% \changes{v1.6}{2013/05/01}{\opt{box=none} added, \opt{box=parbox} changed to \opt{parbox=parbox}}
+% 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{%
+ box=none,boxcolor=white,parbox=parbox,%
+ 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{v1.0c}{2005/02/12}{\opt{indent=0pt} added to caption style \opt{default}}
+% \changes{v1.1}{2007/02/04}{Caption style `default' renamed to `base', and a new `default' added}
+% \changes{v1.1}{2007/03/31}{\opt{format=plain} added to caption style \opt{default}}
+% \changes{v1.1c}{2007/10/14}{\opt{format=plain} removed from caption style \opt{default}}
+% \changes{v1.5}{2012/03/15}{\opt{box=default} added to 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{1.0}), the second one matches the document
+% class actually used.
+% \begin{macrocode}
+\DeclareCaptionStyle{base}[indent=0pt,justification=centering]{}
+\DeclareCaptionStyle{default}[indent=0pt,justification=centering]{%
+ box=default,format=default,labelsep=default,textformat=default,%
+ justification=default,font=default,labelfont=default,textfont=default}
+% \end{macrocode}
+%
+% \changes{v1.2b}{2008/05/06}{Option \opt{slc=} added}
+% \begin{macrocode}
+\DeclareCaptionOption{singlelinecheck}[1]{\caption@set@bool\caption@ifslc{#1}}
+\DeclareCaptionOption{slc}[1]{\KV@caption@singlelinecheck{#1}}
+% \end{macrocode}
+%
+% \section{Boxes}
+%
+% \begin{macro}{\DeclareCaptionBox}
+% \changes{v1.5}{2012/03/15}{This macro added}
+% |\DeclareCaptionBox|\marg{name}\marg{code with \#1 and \#2}
+% \begin{macrocode}
+\newcommand*\DeclareCaptionBox[2]{%
+ \global\long\@namedef{caption@box@#1}##1##2{#2}}
+\@onlypreamble\DeclareCaptionBox
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v1.5}{2012/03/15}{Option \opt{box=} added}
+% \changes{v1.6}{2013/05/01}{Option \opt{parbox=} added}
+% \begin{macrocode}
+\DeclareCaptionOption{box}{\caption@setbox{#1}}
+\DeclareCaptionOption{parbox}{\caption@set@box\caption@parbox{#1}}
+% \end{macrocode}
+%
+% \begin{macro}{\caption@setbox}
+% |\caption@setbox|\marg{name}\par
+% Selecting a caption box simply means saving the code (in |\caption@box|).
+% \begin{macrocode}
+\newcommand*\caption@setbox{%
+ \caption@set@box\caption@box}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@set@box[2]{%
+ \@ifundefined{caption@box@#2}%
+ {\caption@Error{Undefined box `#2'}}%
+ {\expandafter\let\expandafter#1\csname caption@box@#2\endcsname}}
+% \end{macrocode}
+% \end{macro}
+%
+% There are four pre-defined boxes, called `empty', `none',
+% `parbox', and `colorbox'.
+% \changes{v1.0i}{2006/05/13}{We define \cs{captionbox} instead of
+% \cs{caption@start/endbox}}
+% \changes{v1.0l}{2006/03/09}{Bugfix 07-03-09: \cs{captionbox} changed from
+% \cs{parbox-t} to \cs{parbox-b}}
+% \changes{v1.2}{2007/11/11}{\cs{captionbox} renamed to \cs{caption@parbox}}
+% \changes{v1.5}{2012/03/15}{\cs{caption@parbox} adapted to \cs{DeclareCaptionBox}}
+% \changes{v1.6}{2013/05/02}{Option \opt{boxsep=} added}
+% \begin{macrocode}
+\DeclareCaptionBox{empty}{}
+\DeclareCaptionBox{none}{#2}
+\DeclareCaptionBox{parbox}{\parbox[b]{#1}{#2}}
+%\DeclareCaptionBox{colorbox}{%
+% \colorbox{\caption@boxcolor}{\caption@box@parbox{\dimexpr #1-2\fboxsep}{#2}}}
+\DeclareCaptionBox{colorbox}{\colorbox{\caption@boxcolor}{%
+ \setlength\caption@tempdima{#1}%
+ \addtolength\caption@tempdima{-2\fboxsep}%
+ \linewidth\caption@tempdima
+ \hsize\caption@tempdima
+ #2}}
+\DeclareCaptionOption{boxcolor}{\def\caption@boxcolor{#1}}
+\DeclareCaptionOption{boxsep}{\setlength\fboxsep{#1}}
+% \end{macrocode}
+%
+% `default' usually maps to `none`.
+% \begin{macrocode}
+\def\caption@box@default{\caption@box@none}
+% \end{macrocode}
+%
+% \section{Formats}
+%
+% \begin{macro}{\DeclareCaptionFormat}
+% \changes{v1.0a}{2004/01/17}{Pass through argument \#3 so extra spaces
+% between arguments do make any harm}
+% \changes{v1.0c}{2005/02/09}{Starred variant added}
+% \changes{v1.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{v1.2a}{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{v1.0a}{2004/01/23}{%
+% Caption format \opt{default} renamed to \opt{normal}}
+% \changes{v1.0e}{2005/05/12}{%
+% Caption format \opt{normal} renamed to \opt{@normal}}
+% \changes{v1.0f}{2005/08/25}{%
+% Caption format \opt{@normal} renamed to \opt{plain} and documented}
+% \changes{v1.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{v1.0a}{2004/01/23}{Caption format \opt{default} linked to \opt{plain}}
+% \changes{v1.0d}{2005/04/28}{Bugfix 05-04-28: Missing \cs{caption@ifh@default} added}
+% `default' usually maps to `plain'.
+% \begin{macrocode}
+\DeclareCaptionDefaultFormat{plain}
+% \end{macrocode}
+%
+% \section{Label formats}
+%
+% \begin{macro}{\DeclareCaptionLabelFormat}
+% \changes{v1.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{v1.2}{2007/12/16}{Caption label format \opt{brace} added}
+% \changes{v1.7}{2015/09/16}{Caption label format \opt{autodot} added}
+% \changes{v1.7}{2016/05/22}{Caption label format \opt{autodot} fixed}
+% \changes{v1.8}{2016/05/22}{Caption label format \opt{unnumbered} added}
+% There are six pre-defined label formats, called `empty', `simple',
+% `parens', `brace', `autodot', and `unnumbered'.
+% \begin{macrocode}
+\DeclareCaptionLabelFormat{empty}{}
+\DeclareCaptionLabelFormat{simple}{\bothIfFirst{#1}{\nobreakspace}#2}
+\DeclareCaptionLabelFormat{parens}{\bothIfFirst{#1}{\nobreakspace}(#2)}
+\DeclareCaptionLabelFormat{brace}{\bothIfFirst{#1}{\nobreakspace}#2)}
+\DeclareCaptionLabelFormat{autodot}{\bothIfFirst{#1}{\nobreakspace}#2\autodot}
+\DeclareCaptionLabelFormat{unnumbered}{#1}
+% \end{macrocode}
+%
+% `default' usually maps to `simple'.
+% \begin{macrocode}
+\def\caption@lfmt@default{\caption@lfmt@simple}
+% \end{macrocode}
+%
+% \section{Label separators}
+%
+% \begin{macro}{\DeclareCaptionLabelSeparator}
+% \changes{v1.0a}{2004/01/17}{Pass through argument \#2 so extra spaces
+% between arguments do make any harm}
+% \changes{v1.0f}{2005/08/25}{Starred variant added}
+% \changes{v1.1}{2007/07/13}{Test for CR added}
+% \changes{v1.3}{2011/08/06}{Test for CR revised}
+% |\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\@namedef{caption@iflf@#2}{#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{v1.0e}{2005/06/11}{Bugfix 05-03-23: Caption label separator
+% \opt{newline} implementation changed from \cs{newline} to \cs{\textbackslash}}
+% \changes{v1.0f}{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}{\captionnewline}
+\DeclareCaptionLabelSeparator*{endash}{\space\textendash\space}
+% \end{macrocode}
+%
+% \begin{macro}{\captionnewline}
+% \changes{v1.12}{2020/05/30}{This macro added}
+% Will be used in the caption label separator |new|\-|line|,
+% and re-defined for |long|\-|table| environments.
+% \begin{macrocode}
+\newcommand*\captionnewline{\\}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@setdefaultlabelsep}
+% \changes{v1.2d}{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}
+%
+% \section{Text formats}
+%
+% \begin{macro}{\DeclareCaptionTextFormat}
+% \changes{v1.0j}{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{v1.0c}{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{v1.0j}{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 three pre-defined text formats, called `empty', `simple' and `period'.
+% \changes{v1.4}{2011/10/05}{Pre-defined text format `empty' added}
+% \changes{v1.7}{2015/09/16}{The text format `empty' now takes care of the \cs{label}}
+% \begin{macrocode}
+\DeclareCaptionTextFormat{empty}{%
+ \caption@get@label#1\caption@makeanchor{}\@nil
+ \caption@thelabel
+ \global\let\caption@thelabel\relax}
+\long\def\caption@get@label#1\caption@makeanchor#2#3\@nil{%
+ \def\caption@tempa{#2}%
+ \ifx\caption@tempa\@empty
+ \caption@getlabel#1\label{}\@nil
+ \else
+ \caption@getlabel#2\label{}\@nil
+ \fi}
+% \end{macrocode}
+% \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}
+%
+% \begin{macro}{\caption@getlabel}
+% \changes{v1.0}{2011/09/03}{\cs{label} can have optional arguments now}
+% \changes{v1.7}{2015/09/16}{Moved from \package{bicaption} package to \package{caption3}}
+% \changes{v1.8d}{2019/09/01}{Bugfix: Global definition of \cs{caption@thelabel} added}
+% Gets the label command out of the (first) caption text and stores it to |\caption@thelabel|.
+% \begin{macrocode}
+\long\def\caption@getlabel#1\label#2#3\@nil{%
+ \def\@tempa{#2}%
+ \ifx\@tempa\@empty
+ \let\caption@thelabel\relax
+ \else
+ \def\@tempb{*}%
+ \ifx\@tempa\@tempb
+ \def\caption@thelabel{\label*}%
+ \caption@@getlabel#3\@nil
+ \else
+ \def\caption@thelabel{\label}%
+ \caption@@getlabel{#2}#3\@nil
+ \fi
+ \fi}
+% \end{macrocode}
+% \begin{macrocode}
+\long\def\caption@@getlabel#1#2\@nil{%
+ \def\@tempa{#1}%
+ \def\@tempb{[}%
+ \ifx\@tempa\@tempb
+ \caption@@@getlabel#1#2\@nil
+ \else
+ \l@addto@macro\caption@thelabel{{#1}}%
+ \fi}
+% \end{macrocode}
+% \begin{macrocode}
+\long\def\caption@@@getlabel[#1]#2\@nil{%
+ \l@addto@macro\caption@thelabel{[{#1}]}%
+ \caption@@getlabel#2\@nil}
+% \end{macrocode}
+% \begin{macrocode}
+\let\caption@thelabel\relax
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Fonts}
+%
+% \begin{macro}{\DeclareCaptionFont}
+% \changes{v1.0a}{2004/01/22}{Bugfix: Multi token arguments are allowed now}
+% \changes{v1.1}{2007/05/07}{Internal: Uses \cs{caption@fnt} instead of \cs{caption@temp} now}
+% \changes{v1.8h}{2020/01/03}{Check for \package{ragged2e} package related options added}
+% \changes{v1.10}{2020/05/10}{Optional argument \opt{package} added}
+% |\DeclareCaptionFont|\oarg{package}\marg{name}\marg{code}
+% \begin{macrocode}
+\newcommand*\DeclareCaptionFont{%
+ \@ifnextchar[%]
+ \caption@declare@font
+ \caption@declarefont}
+\@onlypreamble\DeclareCaptionFont
+% \end{macrocode}
+% \begin{macrocode}
+\def\caption@declare@font[#1]#2{%
+ \global\@namedef{caption@fnt@#2@package}{#1}%
+ \caption@@declarefont{#2}}
+\@onlypreamble\caption@declare@font
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@declarefont[1]{%
+ \global\@nameundef{caption@fnt@#1@package}%
+ \caption@@declarefont{#1}}
+\@onlypreamble\caption@declarefont
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@@declarefont[2]{%
+ \define@key{caption@fnt}{#1}[]{\caption@addto@fnt{#1}{#2}}%
+ \caption@@@declarefont{#1}{#2}}
+\@onlypreamble\caption@@declarefont
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@@@declarefont[2]{}% will be used by \DeclareCaptionJustification
+\@onlypreamble\caption@@@declarefont
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@addto@fnt[2]{%
+ \expandafter\let\expandafter\caption@package\csname caption@fnt@#1@package\endcsname
+ \caption@ifdefined\caption@package
+ {\caption@requirepackage\caption@package{#1}}% load package, if necessary
+ {}%
+ \l@addto@macro\caption@fnt{#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DeclareCaptionDefaultFont}
+% \changes{v1.1}{2006/05/14}{This macro added}
+% \changes{v1.2a}{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{v1.0j}{2007/01/30}{Usage of \cs{caption@setkeys} with optional argument}
+% \changes{v1.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{v1.2}{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{v1.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{v1.1}{2007/05/07}{Color font support added}
+% \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}
+%
+% \changes{v1.7}{2018/05/01}{Missing font sizes \texttt{tiny}, \texttt{LARGE}, \texttt{huge}, and \texttt{Huge} added}
+% \begin{macrocode}
+\DeclareCaptionFont{tiny}{\tiny}
+\DeclareCaptionFont{scriptsize}{\scriptsize}
+\DeclareCaptionFont{footnotesize}{\footnotesize}
+\DeclareCaptionFont{small}{\small}
+\DeclareCaptionFont{normalsize}{\normalsize}
+\DeclareCaptionFont{large}{\large}
+\DeclareCaptionFont{Large}{\Large}
+\DeclareCaptionFont{LARGE}{\LARGE}
+\DeclareCaptionFont{huge}{\huge}
+\DeclareCaptionFont{Huge}{\Huge}
+% \end{macrocode}
+%
+% \changes{v1.8}{2018/05/01}{Font size \texttt{smaller} added}
+% \begin{macrocode}
+\newcommand\caption@smaller{%
+ \ifx\@currsize\tiny
+ \relax
+ \else\ifx\@currsize\scriptsize
+ \tiny
+ \else\ifx\@currsize\footnotesize
+ \scriptsize
+ \else\ifx\@currsize\small
+ \footnotesize
+ \else\ifx\@currsize\normalsize
+ \small
+ \else\ifx\@currsize\large
+ \normalsize
+ \else\ifx\@currsize\Large
+ \large
+ \else\ifx\@currsize\LARGE
+ \Large
+ \else\ifx\@currsize\huge
+ \LARGE
+ \else\ifx\@currsize\Huge
+ \huge
+ \else
+ \caption@Warning{%
+ Cannot determine current font size.\MessageBreak
+ Try setting it with `size=' explicitly}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+\DeclareCaptionFont{smaller}{\caption@smaller}
+% \end{macrocode}
+%
+% \changes{v1.8}{2018/05/02}{Font size \texttt{larger} added}
+% \begin{macrocode}
+\newcommand\caption@larger{%
+ \ifx\@currsize\tiny
+ \scriptsize
+ \else\ifx\@currsize\scriptsize
+ \footnotesize
+ \else\ifx\@currsize\footnotesize
+ \small
+ \else\ifx\@currsize\small
+ \normalsize
+ \else\ifx\@currsize\normalsize
+ \large
+ \else\ifx\@currsize\large
+ \Large
+ \else\ifx\@currsize\Large
+ \LARGE
+ \else\ifx\@currsize\LARGE
+ \huge
+ \else\ifx\@currsize\huge
+ \Huge
+ \else\ifx\@currsize\Huge
+ \relax
+ \else
+ \caption@Warning{%
+ Cannot determine current font size.\MessageBreak
+ Try setting it with `size=' explicitly}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+\DeclareCaptionFont{larger}{\caption@larger}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareCaptionFont{singlespacing}{}
+% \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{v1.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}
+%
+% \section{Justifications}
+%
+% \begin{macro}{\DeclareCaptionJustification}
+% \changes{v1.0a}{2004/01/17}{Pass through argument \#2 so extra spaces
+% between arguments do make any harm}
+% \changes{v1.1}{2007/07/03}{Mapped to \cs{DeclareCaptionFont}}
+% |\DeclareCaptionJustification|\marg{name}\marg{code}
+% \begin{macrocode}
+\newcommand*\DeclareCaptionJustification{%
+ \def\caption@@@declarefont##1##2{%
+ \global\@namedef{caption@hj@##1}{##2}% for compatibility to v1.0, needed by floatrow package
+ \let\caption@@@declarefont\@gobbletwo}%
+ \DeclareCaptionFont}
+\@onlypreamble\DeclareCaptionJustification
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DeclareCaptionDefaultJustification}
+% \changes{v1.1}{2007/07/03}{This macro added}
+% \changes{v1.2a}{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 v1.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{v1.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{v1.0j}{2007/01/21}{Bugfix: Usage of \cs{@centercr} added (Thanks to Olga!)}
+% \changes{v1.0j}{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{v1.0j}{2007/01/21}{Bugfix: Usage of \cs{@centercr} added (Thanks to Olga!)}
+% \changes{v1.0j}{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}
+%
+% \section{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}
+\caption@ifundefined\abovecaptionskip{%
+ \newlength\abovecaptionskip\setlength\abovecaptionskip{10\p@}}{}
+\caption@ifundefined\belowcaptionskip{%
+ \newlength\belowcaptionskip\setlength\belowcaptionskip{0\p@}}{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \changes{v1.0c}{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{v1.2b}{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{v1.2b}{2008/05/06}{Option \opt{rule=} added}
+% \begin{macrocode}
+\DeclareCaptionOption{rule}[1]{\caption@set@bool\caption@ifrule{#1}}
+% \end{macrocode}
+%
+% \section{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}
+% \changes{v1.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}
+%
+% \begin{macro}{\caption@setposition}
+% \changes{v1.0a}{2004/01/22}{Now the positions \opt{t}, \opt{above}, \opt{b},
+% \opt{below}, and \opt{a} are allowed, too}
+% \changes{v1.0c}{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{v1.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{v1.0a}{2004/01/23}{Split into \cs{caption@iftop} \& \cs{caption@fixposition}}
+% \changes{v1.0c}{2005/02/12}{Adapted to \cs{caption@defaultpos}}
+% \changes{v1.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{v1.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{v1.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{v1.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}
+%
+% \section{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}
+%
+% \section{Lists}
+%
+% \changes{v1.0b}{2004/05/16}{Option \opt{listof=} added}
+% \changes{v1.2}{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{v1.2a}{2008/03/20}{This macro added}
+% |\caption@setlist|\marg{boolean}
+% \begin{macrocode}
+\newcommand*\caption@setlist{\caption@set@bool\caption@iflist}
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v1.4}{2011/08/30}{Option \opt{listtype=} added}
+% \changes{v1.4}{2011/08/30}{Option \opt{listtype+=} added}
+% \begin{macrocode}
+\DeclareCaptionOption{listtype}{\caption@setlisttype{#1}}
+\DeclareCaptionOption{listtype+}{\caption@setlisttype@ext{#1}}
+% \end{macrocode}
+%
+% \begin{macro}{\caption@setlisttype}
+% \changes{v1.4}{2011/08/30}{This macro added}
+% |\caption@setlisttype|\marg{type}
+% \begin{macrocode}
+\newcommand*\caption@setlisttype{%
+ \caption@setlisttype@ext{}%
+ \caption@@setlisttype\caption@listtype}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@@setlisttype[2]{%
+ \edef#1{#2}%
+ \ifx#1\@empty \let#1\@undefined \fi}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\caption@setlisttype@ext}
+% \changes{v1.4}{2011/08/30}{This macro added}
+% |\caption@setlisttype@ext|\marg{type extension}
+% \begin{macrocode}
+\newcommand*\caption@setlisttype@ext{%
+ \caption@@setlisttype\caption@listtype@ext}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DeclareCaptionListFormat}
+% \changes{v1.1}{2004/07/15}{This macro added}
+% \changes{v1.2}{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{v1.1}{2007/07/15}{Option \opt{listofformat=} added}
+% \changes{v1.2}{2007/11/17}{Option \opt{listofformat=} renamed to \opt{listformat=}}
+% \begin{macrocode}
+\DeclareCaptionOption{listformat}{\caption@setlistformat{#1}}
+% \end{macrocode}
+%
+% \begin{macro}{\caption@setlistformat}
+% \changes{v1.1}{2004/07/15}{This macro added}
+% \changes{v1.2}{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{v1.2d}{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}
+%
+% \section{Debug option}
+% \changes{v1.0k}{2007/03/04}{Debug option added}
+%
+% \begin{macrocode}
+\DeclareCaptionOption{debug}[1]{%
+ \caption@set@bool\caption@ifdebug{#1}%
+ \caption@ifdebug
+ {\let\caption@Debug\caption@Info}%
+ {\let\caption@Debug\@gobble}}
+% \end{macrocode}
+% \begin{macrocode}
+\DeclareOption{debug}{\setkeys{caption}{debug}}
+% \end{macrocode}
+% \begin{macrocode}
+\setkeys{caption}{debug=0}
+% \end{macrocode}
+%
+% \section{Document classes \& Babel support}
+%
+% \begin{macro}{\caption@ifdocumentclass}
+% Boolean switch which is set if the document class could be detected successfully,
+% i.e. |\caption@document|\-|class| is set to a proper value.
+% (If |\caption@document|\-|class| is already set, this flag will also be set.)
+% \begin{macrocode}
+\caption@setbool{documentclass}{1}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@documentclass}
+% \changes{v1.8e}{2018/05/11}{This macro added}
+% Determine document class used.
+% Set |\caption@document|\-|class| by good-guessing, if not already set.
+% \begin{macrocode}
+\caption@ifundefined\caption@documentclass{%
+% \end{macrocode}
+% \begin{macrocode}
+ \@ifclassloaded{beamer}{%
+ \caption@InfoNoLine{beamer document class detected}%
+ \def\caption@documentclass{beamer}%
+% \end{macrocode}
+% \begin{macrocode}
+ }{\@ifclassloaded{elsarticle}{%
+ \caption@InfoNoLine{elsarticle document class detected}%
+ \def\caption@documentclass{elsarticle}%
+% \end{macrocode}
+% \begin{macrocode}
+ }{\@ifclassloaded{memoir}{%
+ \caption@InfoNoLine{memoir document class detected}%
+ \def\caption@documentclass{memoir}%
+% \end{macrocode}
+% \begin{macrocode}
+ }{\caption@ifdefined\scr@caption{%
+ \caption@InfoNoLine{KOMA-Script document class detected}%
+ \def\caption@documentclass{koma}%
+% \end{macrocode}
+% If |\@captionheadfont| is defined, we assume it's a AMS or SMF document class.
+% \begin{macrocode}
+ }{\caption@ifdefined\@captionheadfont{%
+ \caption@InfoNoLine{AMS or SMF document class detected}%
+ \def\caption@documentclass{ams}%
+% \end{macrocode}
+% If |\@CaptionFonts| is defined, we assume it's a NTG Dutch document class.
+% \begin{macrocode}
+ }{\caption@ifdefined\CaptionFonts{%
+ \caption@InfoNoLine{NTG document class detected}%
+ \def\caption@documentclass{ntg}%
+% \end{macrocode}
+% If |\cph@font| and |\cpb@font| are defined, we assume it's a NTG Dutch document class.
+% \begin{macrocode}
+ }{\caption@ifdefined\cph@font{%
+ \caption@ifdefined\cpb@font\@firstoftwo\@secondoftwo
+ }{%
+ \@secondoftwo
+ }{%
+ \caption@InfoNoLine{thesis document class detected}%
+ \def\caption@documentclass{thesis}%
+ }{%
+% \end{macrocode}
+% If the definition of |\@makecaption| matches the one from the standard \LaTeX\ document classes
+% |article|, |report|, or |book|, we assume it's either one of them or is compatible to them.
+% \begin{macrocode}
+ % article|report|book [2005/09/16 v1.4f Standard LaTeX document class]
+ \long\def\caption@tempa#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}}
+ \ifx\caption@tempa\@makecaption
+ \caption@InfoNoLine{Standard document class detected}%
+ \else
+% \end{macrocode}
+% Otherwise we are clueless and use standard default settings for the captions anyway.
+% (And we unset the |document|\-|class| flag to indicate that the content of |\caption@document|\-|class| is not correct.)
+% \begin{macrocode}
+ \caption@InfoNoLine{%
+ Unknown document class (or package),\MessageBreak
+ standard defaults will be used}%
+ \caption@InfoNoLine{\string\@makecaption\space=\space\meaning\@makecaption\@gobble}%
+ \caption@setbool{documentclass}{0}%
+ \fi
+ \def\caption@documentclass{base}%
+ }}}}}}%
+}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@ifclassloaded}
+% \changes{v1.8e}{2019/09/09}{This macro added}
+% |\caption@ifclassloaded|\marg{name}\marg{yes-code}\marg{no-code}
+% \begin{macrocode}
+\newcommand*\caption@ifclassloaded[1]{%
+ \edef\caption@tempa{#1}%
+ \ifx\caption@tempa\caption@documentclass
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{The standard \texorpdfstring{\LaTeX{}}{LaTeX} classes}
+%
+% Since this is the default, there is no extra work to be done here.
+%
+% \subsection{The elsarticle classes}
+% \changes{v1.5}{2013/01/06}{elsarticle class support added}
+%
+% \begin{macrocode}
+\caption@ifclassloaded{elsarticle}{%
+% \end{macrocode}
+% \begin{macrocode}
+ \DeclareCaptionDefaultFont{font}{\footnotesize}
+% \end{macrocode}
+% \begin{macrocode}
+}{}
+% \end{macrocode}
+%
+% \subsection{The \AmS{} \& \SmF{} classes}
+% \changes{v1.1}{2007/07/29}{\AmS\ \& \SmF\ classes support added}
+%
+% \begin{macrocode}
+\caption@ifclassloaded{ams}{%
+% \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
+ \caption@ifdefined\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}
+%
+% \subsection{The beamer class (Part one)}
+% \changes{v1.1}{2007/03/10}{\package{beamer} class support added}
+% \changes{v1.3}{2011/08/06}{\package{beamer} class support revised}
+% \changes{v1.5}{2013/04/27}{The \package{beamer} template \texttt{caption label separator} will be used now}
+% \changes{v1.7}{2016/05/22}{Re-definition of label format \texttt{simpleMagyar} added to \package{beamer} class support}
+% \changes{v1.7}{2018/04/15}{Re-definition of label format \texttt{simpleMagyar} revised}
+% \changes{v1.7}{2018/05/01}{Definition of \package{beamer} default label font revised}
+%
+% \begin{macrocode}
+\caption@ifclassloaded{beamer}{%
+% \end{macrocode}
+%
+% \begin{macro}{\caption@ifbeamertemplate}
+% |\caption@ifbeamertemplate|\marg{caption template name}\marg{yes-code}\marg{no-code}\\
+% tests if the given beamer caption template was selected by the user (or not).
+% \begin{macrocode}
+ \newcommand*\caption@ifbeamertemplate[1]{%
+ \begingroup
+ \let\beamer@@tmpl@caption@ORI\beamer@@tmpl@caption
+ \@nameuse{beamer@@tmpop@caption@#1}%
+ \ifx\beamer@@tmpl@caption@ORI\beamer@@tmpl@caption
+ \endgroup\expandafter\@firstoftwo
+ \else
+ \endgroup\expandafter\@secondoftwo
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+ \DeclareCaptionLabelFormat{default}{%
+ \caption@ifbeamertemplate{numbered}%
+ \caption@lfmt@simple
+ \caption@lfmt@unnumbered
+ {#1}{#2}}
+% \end{macrocode}
+% The \package{magyar} babel package redefines the current label format to a one called |simple|\-|Magyar|,
+% defined within |\@@magyar@caption|\-|fix| which will be executed |\At|\-|Begin|\-|Document|.
+% \begin{macrocode}
+ \DeclareCaptionLabelFormat{default@magyar}{%
+ \caption@ifbeamertemplate{numbered}%
+ \caption@lfmt@simple@magyar
+ \caption@lfmt@unnumbered
+ {#1}{#2}}
+ \@ifundefined{@@magyar@captionfix}\AtBeginDocument\@firstofone{%
+ \@ifundefined{@@magyar@captionfix}{}{%
+ \g@addto@macro\@@magyar@captionfix{%
+ \let\caption@lfmt@simple@magyar\caption@lfmt@simpleMagyar
+ \let\caption@lfmt@simpleMagyar\caption@lfmt@default@magyar}}}
+% \end{macrocode}
+% \begin{macrocode}
+ \caption@declarelabelseparator
+ {\caption@ifbeamertemplate{caption name own line}\@gobble\@firstofone}
+ {default}
+ {\caption@ifbeamertemplate{caption name own line}{\\}%
+ {\usebeamertemplate{caption label separator}}}
+ \DeclareCaptionDefaultFont{font}{%
+ \usebeamerfont*{caption}%
+ \usebeamercolor[fg]{caption}}
+ \DeclareCaptionDefaultFont{labelfont}{%
+ \setbeamercolor*{caption}{}% avoid setting "caption" color additionally
+ \usebeamercolor[fg]{caption name}%
+ \setbeamerfont*{caption}{}% avoid setting "caption" font additionally
+ \usebeamerfont{caption name}}
+ \DeclareCaptionDefaultJustification{\raggedright}
+% \end{macrocode}
+% \begin{macrocode}
+ \DeclareOption{beamerclass}{%
+ \renewcommand\caption@ifslc{%
+ \caption@ifbeamertemplate{caption name own line}\@secondoftwo\@firstoftwo}
+ % Since the beamer class do not offer a `list of figures' we switch this support off.
+ \captionsetup{list=0}}
+ \PassOptionsToPackage{beamerclass}{caption3}
+% \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 the \package{caption} package 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}
+%
+% \begin{macrocode]
+}{}
+% \end{macrocode}
+%
+% \subsection{The KOMA-Script classes}
+% \changes{v1.1}{2007/03/31}{\KOMAScript\ classes support added}
+%
+% \begin{macrocode}
+\caption@ifclassloaded{koma}{%
+% \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}
+%
+% \changes{v1.0f}{2005/08/22}{Increased compatibility to KOMA-Script:
+% A special version of options `parindent' and `parskip' added}
+% \changes{v1.0g}{2006/01/03}{Bugfix 06-01-03: KOMA-Script variants of
+% `parskip' and `parindent' options revised and moved into caption kernel}
+% \changes{v1.0h}{2006/02/23}{KOMA-Script variants of `parskip' and
+% `parindent' are obsolete now, removed}
+% \changes{v1.0m}{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{1.0h}, 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}
+ \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{The \NTG{} Dutch classes}
+% \changes{v1.1}{2007/04/06}{NTG classes support added}
+%
+% \begin{macrocode}
+\caption@ifclassloaded{ntg}{%
+% \end{macrocode}
+% \begin{macrocode}
+ \DeclareCaptionDefaultFont{labelfont}{\CaptionLabelFont}
+ \DeclareCaptionDefaultFont{textfont}{\CaptionTextFont}
+% \end{macrocode}
+% \begin{macrocode}
+}{}
+% \end{macrocode}
+%
+% \subsection{The thesis class}
+% \changes{v1.2a}{2008/01/31}{thesis class support added}
+% \changes{v1.2e}{2009/11/15}{Bugfix 09-11-14: thesis class support revised}
+%
+% \begin{macrocode}
+\caption@ifclassloaded{thesis}{%
+% \end{macrocode}
+% \begin{macrocode}
+ \DeclareCaptionDefaultFormat{hang}
+ \DeclareCaptionDefaultFont{labelfont}{\cph@font}
+ \DeclareCaptionDefaultFont{textfont}{\cpb@font}
+% \end{macrocode}
+% \begin{macrocode}
+}{}
+% \end{macrocode}
+%
+% \subsection{The arabic Babel option}
+% \changes{v1.8}{2018/05/20}{\package{arabic} babel package support added}
+%
+% \begin{macrocode}
+\caption@ifdefined\ArabiCoreLoaded{%
+% \end{macrocode}
+%
+% \begin{macro}{\caption@rl}
+% \changes{v1.8}{2018/05/20}{This macro added}
+% \begin{macrocode}
+ \newcommand\caption@rl[1]{\if@rl\textRL{#1}\else\textLR{#1}\fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+ \def\fnum@figure{\figurename\nobreakspace\thefigure}%
+ \def\fnum@table{\tablename\nobreakspace\thetable}%
+% \end{macrocode}
+% \begin{macrocode}
+ \DeclareCaptionLabelSeparator{arabi}{ : }
+ \DeclareCaptionLabelSeparator{default}{%
+ \if@rl\caption@lsep@arabi\else\caption@lsep@colon\fi}
+% \end{macrocode}
+% \begin{macrocode}
+}{%
+ \let\caption@rl\@firstofone
+}
+% \end{macrocode}
+%
+% \subsection{The frenchb Babel option}
+% \changes{v1.1}{2006/05/14}{\package{frenchb} babel package support added}
+%
+% \begin{macrocode}
+\caption@ifdefined\FB@makecaption{%
+% \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
+ \caption@InfoNoLine{%
+ The definition of \protect\@makecaption\space
+ has been changed,\MessageBreak
+ frenchb will NOT customize it}%
+ \fi
+ \fi
+% \end{macrocode}
+% \begin{macrocode}
+}{}
+% \end{macrocode}
+%
+% \subsection{The frenchle/pro package}
+% \changes{v1.1}{2006/05/14}{\package{frenchle/pro} package support added}
+%
+% \begin{macrocode}
+\caption@ifdefined\frenchTeXmods{%
+% \end{macrocode}
+% \begin{macrocode}
+ \DeclareCaptionDefaultFont{textfont}{\itshape}%
+ \DeclareCaptionLabelSeparator{default}{\captionseparator\space}%
+% \end{macrocode}
+% \begin{macrocode}
+}{}
+% \end{macrocode}
+%
+% \subsection{The hungarian and magyar Babel option}
+% \changes{v1.3}{2009/03/29}{\package{magyar} package support added}
+% \changes{v1.3a}{2011/08/12}{\package{magyar} package support revised}
+% \changes{v1.8b}{2018/08/26}{\package{magyar} package support revised}
+%
+% \begin{macrocode}
+\DeclareCaptionListFormat{subperiod}{#2.}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\caption@tempa#1{%
+ \@ifpackagewith{babel}{#1}{%
+ \caption@InfoNoLine{#1 babel option is loaded}%
+ \expandafter\addto\csname extras#1\endcsname{%
+ % 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}
+%
+% TODO: babel-latvian/latvian.ldf
+%
+% \section{Package support}
+%
+% \begin{macro}{\caption@xpackage}
+% \changes{v1.11}{2020/05/10}{This macro added}
+% |\caption@xpackage|\marg{macro}\marg{package}\marg{option}
+% expands the given macro if the given package is not loaded.
+% (Note: We cannot use |\@ifpackageloaded| here since it's not available after |\AtBeginDocument|.)
+% \begin{macrocode}
+\newcommand*\caption@xpackage[2]{%
+ \expandafter\ifx\csname ver@#2.\caption@pkgextension\endcsname\relax
+ \expandafter\@firstofone
+ \else
+ \expandafter\@gobbletwo
+ \fi
+ {#1{#2}}}
+% \end{macrocode}
+% \begin{macrocode}
+\let\caption@pkgextension\@pkgextension
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@loadpackage}
+% \changes{v1.11}{2020/05/10}{This macro added}
+% |\caption@loadpackage|\marg{package}\marg{caption option}
+% loads the given package immediately.
+% \begin{macrocode}
+\newcommand*\caption@loadpackage{%
+ \caption@xpackage\caption@@loadpackage}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@@loadpackage[2]{%
+ \caption@Info{Option `#2' requires the `#1' package}%
+ \RequirePackage{#1}\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@requirepackage}
+% \changes{v1.10}{2020/05/10}{This macro added}
+% |\caption@requirepackage|\marg{package}\marg{caption option}
+% indicates that the given package option needs a package.
+% \begin{macrocode}
+\newcommand*\caption@requirepackage{%
+ \caption@xpackage\caption@@requirepackage}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@@requirepackage[2]{%
+ \@cons\caption@packagelist{{#1}{#2}}}% load package later on
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@pkg@list}
+% \changes{v1.4b}{2012/01/12}{This macro added}
+% We used this in the past as list of packages loaded |\AtBeginDocument|.
+% (Note: Old |.aux| files could contain |\@cons|\-|\caption@pkg@list|\-|{{|\meta{package}|}}|,
+% so this macro should always be defined, even if we change the following code in the future.)
+% \begin{macrocode}
+\newcommand*\caption@pkg@list{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@packagelist}
+% \changes{v1.11}{2020/05/10}{This macro added}
+% We use this as list of packages loaded |\AtBeginDocument|.
+% \begin{macrocode}
+\newcommand*\caption@packagelist{}
+\@onlypreamble\caption@packagelist
+% \end{macrocode}
+% \begin{macrocode}
+\caption@AtBeginDocument{%
+ \def\caption@tempa{\endgroup}%
+ \begingroup
+ \def\@elt#1#2{%
+ \g@addto@macro\caption@tempa{%
+ \caption@loadpackage{#1}{#2}}}%
+ \caption@packagelist
+ \caption@tempa
+% \end{macrocode}
+% \begin{macrocode}
+ \renewcommand*\caption@@loadpackage[2]{%
+ \caption@Error{Option `#2' requires the `#1' package}}%
+ \let\caption@@requirepackage\caption@@loadpackage
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@usepackage}
+% \changes{v1.11}{2020/05/10}{This macro added}
+% |\caption@usepackage|\marg{package}\marg{option}\marg{code}
+% loads the given package and executes the given code.
+% (Note: Since the package might use the crappy \package{keyval}
+% package, too, we need to save \& restore some macros here, otherwise this
+% recursion won't work properly.)
+% \begin{macrocode}
+\newcommand*\caption@usepackage[3]{%
+ \IfCaptionOptionCheck
+ {\caption@requirepackage{#1}{#2}}%
+ {\let\KV@prefix@ORI\KV@prefix
+ \let\@tempc@ORI\@tempc
+ \caption@loadpackage{#1}{#2}%
+ #3%
+ \let\@tempc\@tempc@ORI
+ \let\KV@prefix\KV@prefix@ORI}}
+% \end{macro}
+%
+% \subsection{The newfloat package}
+%
+% \begin{macro}{\caption@newfloat}
+% \changes{v1.4b}{2012/01/12}{This macro added}
+% \changes{v1.8h}{2020/01/03}{Usage of \cs{caption@ifpackageloaded} replaced by \cs{RequirePackage}}
+% \changes{v1.11}{2020/05/10}{Usage of \cs{RequirePackage} replaced by \cs{caption@usepackage}}
+% |\caption@newfloat|\marg{option}\marg{code}
+% loads the \package{newfloat} package and executes the given code afterwards.
+% \begin{macrocode}
+\newcommand*\caption@newfloat{\caption@usepackage{newfloat}}
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v1.0c}{2004/08/03}{Options \opt{figurename} and \opt{tablename} added}
+% \changes{v1.1}{2007/07/04}{Options \opt{figurename} and \opt{tablename} re-written}
+% \changes{v1.2}{2007/11/18}{Option \opt{name} added}
+% \begin{macrocode}
+\DeclareCaptionOption{figurename}{\caption@SetName{figure}{#1}}
+\@onlypreamble@key{caption}{figurename}
+\DeclareCaptionOption{tablename}{\caption@SetName{table}{#1}}
+\@onlypreamble@key{caption}{tablename}
+% \end{macrocode}
+%
+% \changes{v1.2a}{2008/02/28}{Options \opt{listfigurename} and \opt{listtablename} added}
+% \begin{macrocode}
+\DeclareCaptionOption{listfigurename}{\caption@SetName{listfigure}{#1}}
+\@onlypreamble@key{caption}{listfigurename}
+\DeclareCaptionOption{listtablename}{\caption@SetName{listtable}{#1}}
+\@onlypreamble@key{caption}{listtablename}
+% \end{macrocode}
+%
+% \begin{macro}{\caption@SetName}
+% \changes{v1.1}{2007/07/04}{This macro added}
+% \changes{v1.2}{2007/11/18}{After-preamble variant added}
+% \changes{v1.2a}{2008/02/28}{Renamed from \cs{caption@SetFloatName} to \cs{caption@SetName}}
+% \changes{v1.2b}{2008/08/02}{Bugfix: Works now without \cs{addto}, too}
+% \changes{v1.4a}{2011/10/29}{Outsourced to \package{newfloat} package}
+% \changes{v1.4b}{2012/01/12}{Bugfix: Uses \cs{caption@newfloat} now}
+% |\caption@SetName|\marg{float}\marg{name}
+% \begin{macrocode}
+\newcommand*\caption@SetName[2]{%
+ \caption@newfloat{#1name}{\newfloat@setname{#1}{#2}}}
+\@onlypreamble\caption@SetName
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\DeclareCaptionOption{name}{%
+ \IfCaptionOptionCheck{}{\caption@setname\@captype{#1}}}
+% \end{macrocode}
+%
+% \begin{macro}{\caption@setname}
+% |\caption@setname|\marg{float}\marg{name}
+% \begin{macrocode}
+\newcommand*\caption@setname[2]{%
+ \@namedef{#1name}{#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v1.2}{2007/12/21}{Options \opt{figurewithin} and \opt{tablewithin} added}
+% \changes{v1.2e}{2010/01/09}{The \opt{within} options are now available within the document, too}
+%
+% \begin{macrocode}
+\DeclareCaptionOption{figurewithin}{\caption@within{figure}{#1}}
+\DeclareCaptionOptionNoValue{figurewithout}{\caption@within{figure}{none}}
+\DeclareCaptionOption{tablewithin}{\caption@within{table}{#1}}
+\DeclareCaptionOptionNoValue{tablewithout}{\caption@within{table}{none}}
+% \end{macrocode}
+%
+% \begin{macro}{\caption@within}
+% \changes{v1.2}{2007/12/21}{This macro added}
+% \changes{v1.4a}{2011/10/29}{Outsourced to \package{newfloat} package}
+% \changes{v1.4b}{2012/01/12}{Bugfix: Uses \cs{caption@newfloat} now}
+% |\caption@within|\marg{float}\marg{value}
+% \begin{macrocode}
+\newcommand*\caption@within[2]{%
+ \caption@newfloat{#1within}{\newfloat@setwithin{#1}{#2}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v1.2b}{2008/04/13}{Option \opt{within} added}
+% \changes{v1.2e}{2010/01/09}{The global \opt{within} option will now affect user-defined floats declared with \cs{DeclareCaptionType}, too}
+%
+% \begin{macrocode}
+\DeclareCaptionOption{within}{%
+ \caption@newfloat{within}{\newfloatsetup{within=#1}}}
+\DeclareCaptionOptionNoValue{without}{%
+ \caption@newfloat{without}{\newfloatsetup{without}}}
+% \end{macrocode}
+%
+% \subsection{The ragged2e package}
+% \changes{v1.0b}{2004/05/16}{Improved \package{ragged2e} package support}
+% \changes{v1.8h}{2020/01/03}{Revised \package{ragged2e} package support}
+% \changes{v1.9}{2020/05/05}{Enhanced \package{ragged2e} package support}
+% \changes{v1.10}{2020/05/10}{Revised \package{ragged2e} package support}
+%
+% We support the upper-case commands offered by the \package{ragged2e}
+% package.
+% \begin{macrocode}
+\DeclareCaptionJustification[ragged2e]{Justified}{\justifying}
+\DeclareCaptionJustification[ragged2e]{Centering}{\Centering}
+\DeclareCaptionJustification[ragged2e]{RaggedLeft}{\RaggedLeft}
+\DeclareCaptionJustification[ragged2e]{RaggedRight}{\RaggedRight}
+% \end{macrocode}
+%
+% \subsection{The sansmath package}
+% \changes{v1.3}{2011/01/01}{\package{sansmath} package support added}
+% \changes{v1.10}{2020/05/10}{\package{sansmath} package support revised}
+%
+% \begin{macrocode}
+\DeclareCaptionFont[sansmath]{sansmath}{\sansmath}
+% \end{macrocode}
+%
+% \subsection{The setspace package}
+% \changes{v1.0n}{2007/04/02}{\package{setspace} package support added}
+% \changes{v1.2d}{2009/10/09}{\package{setspace} package support revised}
+%
+% \begin{macrocode}
+\DeclareCaptionFont{singlespacing}{%
+ \caption@ifdefined\setspace@singlespace{%
+ \setstretch\setspace@singlespace}{}}% normally 1
+\DeclareCaptionFont[setspace]{onehalfspacing}{\onehalfspacing}
+\DeclareCaptionFont[setspace]{doublespacing}{\doublespacing}
+\DeclareCaptionFont[setspace]{stretch}{\setstretch{#1}}
+% \end{macrocode}
+%
+% \subsection{The subfig package}
+% \changes{v1.1}{2007/07/07}{Several adaptions to the \package{subfig} package added}
+% \changes{v1.4a}{2011/11/01}{Test for the \package{subfig} package revised}
+%
+% Since the \package{subfig} package is not maintained anymore,
+% we have to make several adaptions to \thispackage~\version{1.1} here.
+% Please note that we only support the version $1.3$ of the \package{subfig} package here.
+% So older versions do not work with this version of \thispackage, and newer
+% versions are expected to be adapted.
+% \begin{macrocode}
+\caption@AtBeginDocument{%
+ \def\@tempa{2005/06/28 ver: 1.3 subfig package}%
+ \expandafter\ifx\csname ver@subfig.sty\endcsname\@tempa
+ \caption@InfoNoLine{subfig package v1.3 is loaded}%
+% \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{macro}{\@dottedxxxline}
+% New version of |\@dottedxxxline|
+% \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}
+% \end{macro}
+%
+% \begin{macro}{\sf@subfloat}
+% \changes{v1.4b}{2011/12/29}{Bugfix 11-12-23: Usage of \cs{caption@warmup} added}
+% New version of |\sf@subfloat|
+% \begin{macrocode}
+\def\sf@NEW@subfloat{%
+ \begingroup
+ \@nameuse{caption@warmup}%
+ \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}
+% \end{macro}
+%
+% Make the \package{subfig} package documentation compile.
+% \begin{macrocode}
+%%\@ifl@aded{dtx}{subfig}{\caption@loadpackage{ragged2e}{}}{} % not needed
+\DeclareCaptionOption{lofdepth}[2]{\caption@ifdefined\c@lofdepth{\setcounter{lofdepth}{#1}}{}}
+\DeclareCaptionOption{lotdepth}[2]{\caption@ifdefined\c@lotdepth{\setcounter{lotdepth}{#1}}{}}
+% \end{macrocode}
+%
+% \section{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}
+%
+% \section{Making an `List of' entry}
+%
+% \begin{macro}{\caption@addcontentsline}
+% \changes{v1.1}{2007/07/01}{This macro added}
+% \changes{v1.3}{2010/10/26}{Error check added}
+% \changes{v1.3}{2011/06/24}{Split into two macros}
+% \changes{v1.4}{2011/08/19}{Split into three macros}
+% \changes{v1.4}{2011/08/30}{Support for option \opt{listtype=} added}
+% \changes{v1.5}{2012/01/15}{Usage of \cs{caption@addsubcontentslines} added}
+% \changes{v1.7}{2015/09/15}{Argument \#3 which holds the environment name added to \cs{caption@lstfmt}}
+% \changes{v1.7}{2015/09/20}{Unfortunately \package{subfig} defines and uses \cs{caption@lstfmt} as well, so I replaced the third argument with \cs{captionlisttype}}
+% \changes{v1.8}{2018/09/06}{Adapted to the \package{chkfloat} package}
+% |\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@ifcontentsline{#2}{%
+ \begingroup
+ \let\@tempa\@gobble
+ \caption@ifdefined\caption@listtype
+ {\let\@tempa\@firstofone}%
+ {\edef\caption@listtype{#1}}%
+ \caption@ifdefined\caption@listtype@ext
+ {\edef\caption@listtype{\caption@listtype\caption@listtype@ext}%
+ \let\@tempa\@firstofone}%
+ {}%
+ \@tempa
+ {\caption@Debug{addcontentsline: #1 => \caption@listtype}%
+% \caption@setoptions\caption@listtype
+ \@namedef{the\caption@listtype}{\@nameuse{the#1}}}%
+ \expandafter\caption@@addcontentsline\expandafter{\caption@listtype}{#2}%
+ \endgroup}%
+ \caption@addsubcontentslines{#1}}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand\caption@@addcontentsline[2]{%
+ {\let\\\space
+ \@ifundefined{ext@#1}%
+ {\caption@Error{No float type '#1' defined}}%
+ {\def\captionlisttype{#1}%
+ \caption@add@contentsline
+ {\csname ext@#1\endcsname}%
+ {#1}%
+ {\caption@lstfmt{\@nameuse{p@#1}}{\@nameuse{the#1}}}%
+ {\ignorespaces #2}%
+ \caption@chkfloat{#1}{#2}}}}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@add@contentsline{%
+ \caption@@@addcontentsline}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@@@addcontentsline[4]{%
+% \caption@ifdefined\main@Arabi@language
+% {\addtocontents{#1}{\xstring\select@language{\main@Arabi@language}}}{}%
+ \addcontentsline{#1}{#2}{\protect\numberline{#3}{#4}}}
+% \end{macrocode}
+% \begin{macrocode}
+\let\caption@chkfloat\@gobbletwo
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand\caption@ifcontentsline[1]{%
+ \caption@iflist
+ {\def\@tempa{#1}}%
+ {\let\@tempa\@empty}%
+ \ifx\@tempa\@empty
+ \expandafter\@gobble
+ \else
+ \expandafter\@firstofone
+ \fi}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@addsubcontentslines[1]{}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{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{v1.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{v1.0b}{2004/05/16}{Bugfix 04-05-05: \cs{ifdim}\cs{captionindent=}\cs{z@} added}
+% \changes{v1.0c}{2005/02/12}{Bugfix 04-10-26: Use \cs{@tempdima} instead of
+% \cs{captionmargin} resp. \cs{captionwidth}; check for \cs{z@} added}
+% \changes{v1.0c}{2005/02/12}{Bugfix: \cs{hskip}\cs{captionmargin} to the end
+% of caption added}
+% \changes{v1.0c}{2005/02/12}{Bugfix: \cs{strut} moved from here to \cs{caption@@@make}}
+% \changes{v1.0c}{2005/02/12}{Single-line-check moved up so it can affect margins now}
+% \changes{v1.0c}{2005/02/09}{Improvement: \cs{caption@ifh} added}
+% \changes{v1.0c}{2005/02/09}{Bugfix: \cs{leavevmode} added}
+% \changes{v1.0f}{2005/08/24}{Uses \cs{sbox} instead of \cs{setbox} in single-line-check}
+% \changes{v1.0g}{2005/12/04}{Uses \cs{caption@slc} now}
+% \changes{v1.0g}{2006/01/11}{Bugfix: \cs{caption@calcmargin} inside
+% single-line-check replaced by \cs{relax}}
+% \changes{v1.0g}{2006/01/11}{Bugfix: \cs{caption@startbox} will always be
+% typeset in horizontal mode}
+% \changes{v1.0i}{2006/05/13}{Uses \cs{caption@parbox} instead of \cs{caption@start/endbox}}
+% \changes{v1.0j}{2007/01/04}{Oops, bugfix 04-05-05 got lost in v1.0h, re-added}
+% \changes{v1.0n}{2007/04/03}{Usage of \cs{caption@ifoddpage} added}
+% \changes{v1.1}{2007/07/29}{\cs{caption@calcmargin} moved below single-line-check}
+% \changes{v1.1e}{2007/10/28}{\cs{caption@stepcounter} added}
+% \changes{v1.5}{2012/03/15}{Uses \cs{caption@tempdima} instead of \cs{@tempdima}}
+% \changes{v1.5}{2012/12/26}{max-margin stuff moved to \cs{caption@calcmargin}}
+% \changes{v1.6}{2013/05/01}{Usage of \cs{caption@box} added}
+% \changes{v1.7}{2016/01/31}{Adapted to the \package{bicaption} package}
+% \changes{v1.8f}{2019/12/18}{Usage of \cs{linewidth} replaced by \cs{hsize}}
+% |\caption@@make|\marg{caption label}\marg{caption text}
+% \begin{macrocode}
+\newcommand\caption@@make[2]{%
+ \begingroup
+ \caption@@make@{#1}{#2}%
+ \endgroup
+ \caption@@make@epilogue}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand\caption@@make@[2]{%
+ \caption@stepthecounter
+ \caption@beginhook
+% \end{macrocode}
+%
+% Typeset the outer box |\caption@box|
+% \begin{macrocode}
+ \caption@box\hsize{%
+% \end{macrocode}
+%
+% Special single-line treatment (option |singlelinecheck=|)
+% \begin{macrocode}
+ \caption@ifslc{\caption@slc{#1}{#2}\caption@singleline\relax}{}%
+% \end{macrocode}
+%
+% Typeset the left margin (option |margin=|)
+% \begin{macrocode}
+ \caption@calcmargin
+ \caption@tempdima\captionmargin
+ \ifdim\captionmargin@=\z@ \else
+ \caption@ifoddpage{}{\advance\caption@tempdima\captionmargin@}%
+ \fi
+ \caption@ifh{\advance\caption@tempdima\caption@indent}%
+ \hspace\caption@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}
+ \caption@tempdima\captionwidth
+ \caption@ifh{\advance\caption@tempdima-\caption@indent}%
+ \caption@parbox\caption@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}
+ \caption@tempdima\captionmargin
+ \ifdim\captionmargin@=\z@ \else
+ \caption@ifoddpage{\advance\caption@tempdima\captionmargin@}{}%
+ \fi
+ \hspace\caption@tempdima
+% \end{macrocode}
+%
+% Close the outer box |\caption@box|
+% \begin{macrocode}
+ }%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \caption@endhook}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand\caption@@make@epilogue{%
+ \global\caption@starfalse}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@calcmargin}
+% \changes{v1.0f}{2005/10/24}{Internal: \cs{ifcaption@width} replaced by \cs{ifdim}\cs{captionwidth=}\cs{z@}}
+% \changes{v1.0g}{2006/01/12}{Improvement: Takes care of list environment now}
+% \changes{v1.1}{2006/05/13}{Check of \cs{@listdepth} removed (not necessary anymore), use \cs{linewidth} instead of \cs{hsize}}
+% \changes{v1.5}{2012/12/26}{max-margin stuff moved from \cs{caption@@make} to here}
+% \changes{v1.8f}{2019/12/18}{Usage of \cs{linewidth} replaced by \cs{hsize}}
+% |\caption@calcmargin|\par
+% Calculate |\captionmargin| \& |\captionwidth|, so both contain valid
+% values.
+% \begin{macrocode}
+\newcommand*\caption@calcmargin{%
+ \caption@calcmargin@hook
+% \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}
+% \begin{macrocode}
+ \ifdim\captionwidth=\z@
+ \captionwidth\hsize
+ \advance\captionwidth by -2\captionmargin
+ \advance\captionwidth by -\captionmargin@
+ \else
+ \captionmargin\hsize
+ \advance\captionmargin by -\captionwidth
+ \divide\captionmargin by 2
+ \captionmargin@\z@
+ \fi
+% \end{macrocode}
+% \begin{macrocode}
+ \caption@Debug{%
+ \string\hsize=\the\hsize,
+ \string\captionwidth=\the\captionwidth,\MessageBreak
+ \string\captionmargin=\the\captionmargin,
+ \string\captionmargin@=\the\captionmargin@}%
+% \end{macrocode}
+% \begin{macrocode}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@slc}
+% \changes{v1.1}{2007/06/13}{\cs{let}\cs{caption@hj}\cs{relax} added}
+% \changes{v1.1}{2007/07/29}{\cs{caption@setup}\cs{caption@sls} added after \cs{begingroup}}
+% \changes{v1.1}{2007/07/29}{\cs{caption@calcmargin} added}
+% \changes{v1.1c}{2007/10/14}{Support of \cs{caption@slfmt} added}
+% \changes{v1.1d}{2007/10/23}{`SingleLine' renamed to `singleline' for consistency}
+% \changes{v1.3}{2010/09/04}{Split into \cs{caption@slc} and \cs{caption@@slc}}
+% \changes{v1.5}{2012/12/26}{Merged into a single macro again}
+% \changes{v1.5}{2013/04/14}{Definition and usage of \cs{ifsinglelinecaption} added}
+% |\caption@slc|\marg{label}\marg{text}\marg{single-line-code}\marg{multi-line-code}\par
+% This one does the single-line-check.
+% \begin{macrocode}
+\newcommand\caption@slc[4]{%
+ \caption@Debug{Begin SLC}%
+ \singlelinecaptiontrue
+ \begingroup
+ \caption@singleline
+ \let\caption@hj\@empty
+ \caption@calcmargin % calculate \captionwidth
+ \caption@prepareslc
+ \sbox\@tempboxa{\caption@@@make{#1}{#2}}%
+ \ifdim\wd\@tempboxa>\captionwidth
+ \endgroup
+ \singlelinecaptionfalse
+ #4%
+ \else
+ \endgroup
+ #3%
+ \fi
+ \caption@Debug{End SLC}}
+% \end{macrocode}
+% \begin{macrocode}
+\newif\ifsinglelinecaption
+% \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{v1.0b}{2004/05/16}{Bugfix: Redefinition of \cs{label} \& \cs{@footnotetext} added}
+% \changes{v1.0b}{2004/05/16}{Redefine \cs{stepcounter} instead of \cs{footnote(mark)}}
+% \changes{v1.0c}{2005/02/12}{\cs{let}\cs{caption@hj}\cs{relax} added}
+% \changes{v1.0f}{2005/07/09}{Support of \package{endnotes} package added}
+% \changes{v1.1}{2007/06/13}{\cs{let}\cs{caption@hj}\cs{relax} moved to \cs{caption@slc}}
+% \changes{v1.1}{2007/06/13}{Redefinition of \cs{(H@)refstepcounter} added}
+% \changes{v1.1}{2007/08/12}{Redefinition of \cs{label} improved}
+% \changes{v1.1c}{2007/10/06}{Definition of \cs{caption@l@stepcounter} added}
+% \changes{v1.3}{2011/07/07}{Bugfix 11-07-06: Redefinition of \cs{footnote} and \cs{footnotemark} added, redefinition of \cs{stepcounter} and \cs{refstepcounter} dropped}
+% \changes{v1.4a}{2011/10/21}{Redefinition of \cs{pagenote} from \textsf{memoir} document class added}
+% \changes{v1.4a}{2011/10/22}{Redefinition of \cs{footnote} revised}
+% \changes{v1.5}{2013/04/13}{Redefinition os \cs{glsunset} added}
+% \changes{v1.8}{2018/01/21}{Redefinition of \cs{endnote} added (thanks to Markus Kohm)}
+% \changes{v1.8}{2018/05/16}{Redefinition of \cs{acused} added}
+% \changes{v1.8}{2018/05/26}{Definition method changed so it can be pre-defined by other packages}
+% \changes{v1.8}{2018/05/27}{Redefinition of \cs{hypertarget} added}
+% \changes{v1.12b}{2020/07/20}{Special adaption to \class{beamer} added}
+% |\caption@prepareslc|\par
+% Re-define anything which would disturb the single-line-check.
+% \begin{macrocode}
+\providecommand*\caption@prepareslc{}
+\g@addto@macro\caption@prepareslc{%
+ \let\label\caption@gobble
+ \let\hypertarget\@gobbletwo
+% \end{macrocode}
+% We re-define \cs{footnote} so
+% \begin{enumerate}
+% \item The footnote counter will not be increased twice (but still the correct footnote mark will be used within the single-line-check)
+% \item The footnote text will not be evaluated twice
+% \end{enumerate}
+% \begin{macrocode}
+ \let\caption@footnote@ORI\footnote
+ \def\footnote{\caption@withoptargs\caption@footnote}%
+ \let\caption@footnotemark@ORI\footnotemark
+ \def\footnotemark{\caption@withoptargs\caption@footnotemark}%
+ \let\caption@footnotetext@ORI\@footnotetext
+ \let\@footnotetext\caption@gobble
+% \end{macrocode}
+% Same for \cs{endnote}
+% \begin{macrocode}
+ \let\caption@endnote@ORI\endnote
+ \def\endnote{\caption@withoptargs\caption@endnote}%
+ \let\caption@endnotemark@ORI\endnotemark
+ \def\endnotemark{\caption@withoptargs\caption@endnotemark}%
+ \let\caption@endnotetext@ORI\@endnotetext
+ \let\@endnotetext\caption@gobble
+% \end{macrocode}
+% \begin{macrocode}
+ \let\pagenote\caption@gobble
+% \end{macrocode}
+% Adaption to the \package{acronym} package\par
+% See also \url{https://tex.stackexchange.com/questions/428788}
+% \begin{macrocode}
+ \let\acused\@gobble
+ \let\AC@placelabel\@gobble
+% \end{macrocode}
+% Adaption to the \package{glossaries} package.\par
+% Please note that while this adaption is usually sufficient
+% it could give incorrect measuring results if \cs{gls} is both used
+% for the very first time and more than once (for a particular acronym).
+% The alternative would be using internal macros of the
+% \package{glossaries} package which I would like to avoid.\par
+% See also \url{https://tex.stackexchange.com/questions/108368}
+% \begin{macrocode}
+ \let\glsunset\@gobble
+% \end{macrocode}
+% \begin{macrocode}
+}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand\caption@footnote[2]{%
+ \caption@footnotemark{#1}}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand\caption@footnotemark[1]{%
+ \begingroup
+ \let\stepcounter\caption@l@stepcounter
+ \caption@footnotemark@ORI#1\relax
+ \endgroup}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand\caption@endnote[2]{%
+ \caption@endnotemark{#1}}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand\caption@endnotemark[1]{%
+ \begingroup
+ \let\stepcounter\caption@l@stepcounter
+ \caption@endnotemark@ORI#1\relax
+ \endgroup}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@l@stepcounter[1]{%
+ \advance\csname c@#1\endcsname\@ne\relax}
+% \end{macrocode}
+% The patch above assumes that the optional arguments of \cs{footnote} and
+% \cs{footnotemark} match. Since this is not the case in \class{beamer} based documents,
+% and since \class{beamer} extents the syntax of \cs{footnote} in a special way,
+% we need a special patch here.\par
+% \emph{Note:} For this patch we assume that \cs{footnote} will always end with the usage of
+% \cs{beamer@footnotetext}. (Unfortunately \cs{footnote} is defined too monolithic
+% in \class{beamer} to offer a less dirty patch.)
+% \begin{macrocode}
+\caption@ifclassloaded{beamer}{%
+ \g@addto@macro\caption@prepareslc{%
+ \def\footnote{%
+ \begingroup
+ \let\stepcounter\caption@l@stepcounter
+ \renewcommand<>\beamer@framefootnotetext[1]{%
+ \endgroup}%
+ \let\@footnotetext\beamer@framefootnotetext
+ \caption@footnote@ORI}}}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@applyfont}
+% \changes{v1.3}{2010/09/04}{This macro added}
+% |\caption@applyfont|\par
+% This macro executes the font relevant macros, i.e. by default
+% the options set by |justification=|, |font=|, and |size=|.
+% \begin{macrocode}
+\newcommand*\caption@applyfont{%
+ \caption@hj\captionfont\captionsize}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@@@make}
+% \changes{v1.0b}{2004/05/16}{Bugfix 04-05-06: \cs{allowhyphens} added}
+% \changes{v1.0c}{2005/02/12}{Bugfix 04-12-16: Use some kind of
+% \cs{@startstrut}\cs{strutbox} instead of \cs{strut}}
+% \changes{v1.0c}{2005/02/12}{Bugfix 05-01-23: \cs{@finalstrut}\cs{strutbox} added}
+% \changes{v1.0d}{2005/05/05}{Use \cs{caption@ifempty};
+% \cs{let}\cs{caption@ifstrut}\cs{@secondoftwo} added}
+% \changes{v1.0d}{2005/05/05}{Bugfix: Handling of \cs{ifcaption@star} changed}
+% \changes{v1.0f}{2005/08/24}{Check for empty label added}
+% \changes{v1.0f}{2005/08/25}{\cs{caption@iflf} added}
+% \changes{v1.0j}{2007/02/18}{Usage of \cs{caption@tfmt} added}
+% \changes{v1.1}{2007/05/07}{Bugfix: \cs{ifhmode} added to \cs{@finalstrut}}
+% \changes{v1.2}{2007/11/17}{Made option \opt{size=} stronger than \opt{font=}}
+% \changes{v1.3}{2010/09/04}{Uses \cs{caption@applyfont} now}
+% \changes{v1.3}{2010/11/01}{Bugfix: If the caption text is empty, the text format will be set to \opt{simple} now}
+% \changes{v1.7}{2016/02/01}{Bugfix: \cs{relax} added before \cs{caption@lsep} so the label separator
+% will not be gobbled if the label font command ignores spaces, e.g. by usage of \cs{color}}
+% \changes{v1.8}{2018/09/12}{\cs{par} replaced by \cs{captiontextend}}
+% |\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.
+% (And no text format either.)
+% \begin{macrocode}
+ \caption@ifempty{#2}{%
+ \let\caption@lsep\@empty
+ \let\caption@tfmt\@firstofone
+% \@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@applyfont
+ \caption@fmt
+ {\ifcaption@star\else
+ \begingroup
+ \captionlabelfont
+ #1%
+ \endgroup
+ \fi}%
+ {\ifcaption@star\else
+ \begingroup
+ \caption@iflf\captionlabelfont
+ \relax\caption@lsep
+ \endgroup
+ \fi}%
+ {{\captiontextfont
+ \captiontextstart
+ \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}%
+ {}%
+ \captiontextend}}}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\captiontextstart{}
+\newcommand*\captiontextend{\par}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@ifempty}
+% \changes{v1.0d}{2005/05/05}{This macro added}
+% \changes{v1.1}{2007/07/04}{Re-defines itself now}
+% \changes{v1.2a}{2007/01/22}{Revised so \cs{label} will be detected, too}
+% \changes{v1.2b}{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{v1.0f}{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}
+%
+% \section{Types \& sub-types}
+%
+% \begin{macro}{\DeclareCaptionType}
+% \changes{v1.1}{2007/08/12}{This macro added}
+% \changes{v1.1a}{2007/09/07}{Three optional arguments added}
+% \changes{v1.2}{2007/12/06}{Renamed from \cs{DeclareFloatingEnvironment} to \cs{DeclareCaptionType}}
+% \changes{v1.2}{2007/12/21}{Optional argument revised, uses key-value syntax now}
+% \changes{v1.2b}{2008/04/13}{Uses \cs{caption@within@default} now}
+% \changes{v1.2b}{2008/08/02}{Support of \cs{float@exts} and \cs{float@addtolists} added}
+% \changes{v1.2e}{2010/01/09}{Usage of \cs{caption@DeclareWithinOption} added}
+% \changes{v1.3}{2011/08/06}{Definition of \cs{listofXXXes} added}
+% \changes{v1.4a}{2011/10/29}{Outsourced to \package{newfloat} package}
+% |\DeclareCaptionType|\oarg{options}\marg{environment}\oarg{name}\oarg{list name}
+% \begin{macrocode}
+\newcommand*\DeclareCaptionType{%
+ \caption@loadpackage{newfloat}{}%
+ \DeclareFloatingEnvironment}
+\@onlypreamble\DeclareCaptionType
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ForEachCaptionType}
+% \changes{v1.4a}{2011/10/29}{This macro added}
+% \changes{v1.13}{2020/07/29}{Renamed from \cs{caption@ForEachType} to \cs{ForEachCaptionType} and starred variant added}
+% |\ForEachCaptionType|\marg{code with \#1}\\
+% |\ForEachCaptionType*|\marg{code with \#1}\par
+% will execute the given code for each (known) floating environment.
+% The starred variant will only work for already existing environments,
+% i.e.~no hook will be placed inside |\Declare|\-|Floating|\-|Environment|
+% (offered by the \package{newfloat} package).
+% \begin{macrocode}
+\newcommand*\ForEachCaptionType{%
+ \@ifstar
+ {\caption@foreach@type\@gobble}%
+ {\caption@foreach@type\@iden}}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand\caption@foreach@type[2]{%
+ \caption@ifdefined\ForEachFloatingEnvironment
+ {\ForEachFloatingEnvironment*{#2}}%
+ {\def\@elt##1{#2}%
+ \caption@ifdefined\c@figure\@elt\@gobble{figure}%
+ \caption@ifdefined\c@table\@elt\@gobble{table}%
+ \let\@elt\relax}%
+ #1{\newfloat@addtohook{#2}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\newfloat@addtohook}
+% |\newfloat@addtohook|\marg{code with \#1}\par
+% adds code to the hook called in |\Declare|\-|Floating|\-|Environment|.\par
+% Note: We use |\provide|\-|command| instead of |\new|\-|command| here since the
+% exact same code is defined in the \package{newfloat} package.
+% \begin{macrocode}
+\providecommand\newfloat@addtohook[1]{%
+ \toks@=\expandafter{\newfloat@hook{##1}#1}%
+ \edef\@tempa{\def\noexpand\newfloat@hook####1{\the\toks@}}%
+ \@tempa}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\newfloat@hook}
+% Hook used in |\Declare|\-|Floating|\-|Environment|.
+% \begin{macrocode}
+\providecommand*\newfloat@hook[1]{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DeclareCaptionSubType}
+% \changes{v1.2}{2007/11/16}{This macro added}
+% \changes{v1.2a}{2008/03/11}{Bugfix: \cs{subfigurename} will be defined now}
+% \changes{v1.2d}{2009/10/09}{Bugfix 08-10-01: Usage of \cs{caption@addtoreset} added}
+% \changes{v1.3}{2011/01/01}{\cs{@dottedlofline} will be defined \& used now}
+% \changes{v1.4}{2011/10/09}{Support of the titletoc package added}
+% \changes{v1.5}{2011/12/29}{Usage of \cs{caption@addtoreset} replaced by \cs{@addtoreset}}
+% \changes{v1.5}{2013/01/10}{Bugfix: Definition of autoref string corrected}
+% \changes{v1.6}{2013/06/17}{Bugfix: \cs{c@tocdepth} will be set (locally) now}
+% \changes{v1.8g}{2020/01/02}{Check revised if the sub-type is already defined or not}
+% \changes{v1.13}{2020/07/28}{Uses \cs{caption@l@addto@list} instead of \cs{@cons} now}
+% \changes{v1.13}{2020/07/29}{Usage of \cs{caption@subtype@hook} added}
+% \changes{v1.13}{2020/07/29}{We don't re-use existing counters anymore (This was a bad idea anyway)}
+% |\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\caption@declaresubtype\@firstoftwo\@secondoftwo}
+\@onlypreamble\DeclareCaptionSubType
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@declaresubtype[1]{%
+ \@testopt{\caption@@declaresubtype{#1}}{alph}}
+\@onlypreamble\caption@declaresubtype
+% \end{macrocode}
+% \begin{macrocode}
+\def\caption@@declaresubtype#1[#2]#3{%
+ \@ifundefined{c@#3}%
+ {\caption@Error{No float type '#3' defined}}%
+ {\caption@@@declaresubtype{#1}{#2}{#3}{sub#3}}}
+\@onlypreamble\caption@@declaresubtype
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@@@declaresubtype[4]{%
+% \end{macrocode}
+% \begin{macrocode}
+% Check if the sub-type was already defined by |\Declare|\-|Sub|\-|Type|.
+% If not, define the counter and list entry.
+% \begin{macrocode}
+ \caption@ifin@list\caption@subtypelist{#4}%
+ {\caption@Debug{Modify subtype `#4'}}%
+ {\caption@Debug{New subtype `#4'}%
+ \newcounter{#4}[#3]%
+ \@namedef{ext@#4}{\csname ext@#3\endcsname}%
+ \caption@declaresublistentry{#3}%
+ \caption@l@addto@list\caption@subtypelist{#4}%
+ \caption@subtype@hook{#4}}%
+% \end{macrocode}
+% Support of \package{titletoc} package
+% \begin{macrocode}
+ \caption@ifdefined\contentsuse{%
+ \contentsuse{#4}{\csname ext@#4\endcsname}}{}%
+% \end{macrocode}
+% \begin{macrocode}
+ \@namedef{#4name}{}%
+ \@namedef{#4autorefname}{\csname #3autorefname\endcsname}%
+ #1% is \@firstoftwo in star form, and \@secondoftwo otherwise
+ {\@namedef{p@#4}{}%
+ \@namedef{the#4}{\csname the#3\endcsname.\@nameuse{#2}{#4}}}%
+ {\@namedef{p@#4}{\csname the#3\endcsname}%
+ \@namedef{the#4}{\@nameuse{#2}{#4}}}%
+ \@namedef{theH#4}{\csname theH#3\endcsname.\arabic{#4}}}
+% \end{macrocode}
+% \begin{macrocode}
+\@onlypreamble\caption@@@declaresubtype
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@declaresublistentry{%
+ \caption@ifdefined\l@chapter
+ {\caption@@declaresublistentry\l@subsection}%
+ {\caption@@declaresublistentry\l@subsubsection}}
+\@onlypreamble\caption@declaresublistentry
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@@declaresublistentry[2]{%
+ \ifx#1\@undefined
+ \caption@@@declaresublistentry\relax\@dottedtocline\caption@nil{#2}%
+ \else
+ \expandafter\caption@@@declaresublistentry#1{}{}\@dottedtocline\caption@nil{#2}%
+ \fi}
+\@onlypreamble\caption@@declaresublistentry
+% \end{macrocode}
+% \begin{macrocode}
+\long\def\caption@@@declaresublistentry#1\@dottedtocline#2\caption@nil#3{%
+ \def\@tempa{#1}%
+% Does \l@(sub)subsection start with \@dottedtocline?
+ \ifx\@tempa\@empty
+% Yes
+ \caption@@@@declaresublistentry{#3}#2\caption@nil
+ \else
+% No
+ \caption@@@@declaresublistentry{#3}@{3.8em}{3.2em}\caption@nil
+ \fi}
+\@onlypreamble\caption@@@declaresublistentry
+% \end{macrocode}
+% \begin{macrocode}
+\def\caption@@@@declaresublistentry#1#2#3#4#5\caption@nil{%
+ \expandafter\caption@@@@@declaresublistentry\expandafter
+ {\csname @dotted\csname ext@#1\endcsname line\endcsname}{#1}{#3}{#4}}
+\@onlypreamble\caption@@@@declaresublistentry
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@@@@@declaresublistentry[4]{%
+ \@namedef{l@sub#2}{#1{2}{#3}{#4}}%
+ \expandafter\caption@@@@@@declaresublistentry
+ \expandafter#1\expandafter{\csname ext@#2\endcsname depth}}
+\@onlypreamble\caption@@@@@declaresublistentry
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@@@@@@declaresublistentry[2]{
+ \ifx#1\relax
+ \def#1##1{%
+ \def\next{\@dottedtocline{##1}}%
+ \@ifundefined{c@#2}{}{%
+ \ifnum ##1>\@nameuse{c@#2}\relax
+ \let\next\@gobblefour
+ \else
+ \c@tocdepth=\@nameuse{c@#2}\relax
+ \fi}%
+ \next}%
+ \fi}
+\@onlypreamble\caption@@@@@@declaresublistentry
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@subtypelist}
+% A list containing the sub-types defined with |\Declare|\-|Caption|\-|Sub|\-|Type|.
+% \begin{macrocode}
+\newcommand*\caption@subtypelist{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@ifsubtype}
+% \changes{v1.8g}{2020/01/02}{This macro added}
+% \changes{v1.13}{2020/07/28}{Uses \cs{caption@ifin@list} now}
+% This macro checks if the given subtype was defined
+% with |\Declare|\-|Caption|\-|Sub|\-|Type|.
+% \begin{macrocode}
+\newcommand*\caption@ifsubtype{%
+ \caption@ifin@list\caption@subtypelist}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ForEachCaptionSubType}
+% \changes{v1.13}{2020/07/29}{This macro added as replacement for \cs{caption@For}}
+% |\ForEachCaptionSubType|\marg{code with \#1}\\
+% |\ForEachCaptionSubType*|\marg{code with \#1}\par
+% will execute the given code for each (known) sub-type.
+% The starred variant will only work for already existing sub-types,
+% i.e.~no hook will be placed inside |\Declare|\-|Caption|\-|Sub|\-|Type|.
+% \begin{macrocode}
+\newcommand*\ForEachCaptionSubType{%
+ \@ifstar
+ {\caption@foreach@subtype\@gobble}%
+ {\caption@foreach@subtype\@iden}}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand\caption@foreach@subtype[2]{%
+ \caption@for@list\caption@subtypelist{#2}%
+ #1{\caption@addto@subtype@hook{#2}}}
+% \end{macrocode}
+% \begin{macrocode}
+\providecommand\caption@addto@subtype@hook[1]{%
+ \toks@=\expandafter{\caption@subtype@hook{##1}#1}%
+ \edef\@tempa{\def\noexpand\caption@subtype@hook####1{\the\toks@}}%
+ \@tempa}
+% \end{macrocode}
+% \begin{macrocode}
+\providecommand*\caption@subtype@hook[1]{}
+% \end{macrocode}
+% \end{macro}
+%
+% Unfortunately the \class{memoir} document class resets the
+% \texttt{subfigure} resp.~\texttt{subtable} counter at the begin
+% of floating environments, i.e.~at |\@float|.
+% As a side-effect |\continued|\-|float| does not work correctly.
+% For that reason we need to introduce macros to save and restore
+% all sub-caption counters here.
+%
+% \begin{macro}{\caption@savesubcounters}
+% \changes{v1.5}{2013/05/01}{This macro added}
+% \changes{v1.13}{2020/07/28}{Uses \cs{caption@for@list} now for iterating the list}
+% |\caption@save|\-|sub|\-|counters| saves all sub-caption counters,
+% so they can be restored with |\caption@restore|\-|counters| later on.
+% \begin{macrocode}
+\newcommand*\caption@savesubcounters{%
+ \caption@for@list\caption@subtypelist{\caption@savecounter{##1}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@savecounter}
+% \changes{v1.5}{2013/05/01}{This macro added}
+% |\caption@save|\-|counter|\marg{counter} saves the given counter,
+% so it can be restored with |\caption@restore|\-|counters| later on.
+% \begin{macrocode}
+\newcommand*\caption@savecounter[1]{%
+ \edef\caption@tempa{%
+ \noexpand\l@addto@macro\noexpand\caption@restore@counters
+ {\noexpand\setcounter{#1}{\number\value{#1}}}}%
+ \caption@tempa}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption@restorecounters}
+% \changes{v1.5}{2013/05/01}{This macro added}
+% |\caption@restore|\-|counters| restores all counters saved with
+% |\caption@save|\-|counter|.
+% \begin{macrocode}
+\newcommand*\caption@restorecounters{%
+ \caption@restore@counters
+ \global\let\caption@restore@counters\@empty}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\caption@restore@counters{}
+% \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+%</package>
+% \fi
+%
+% \clearpage
+% \begin{thebibliography}{99}
+% \bibitem{TLC2}
+% Frank Mittelbach and Michel Goossens:\\
+% \newblock {\em The {\LaTeX} Companion (2nd.~Ed.)},\\
+% \newblock Addison-Wesley, 2004.
+%
+% \bibitem{Anne}
+% Anne Br\"uggemann-Klein:\\
+% \emph{Einf\"uhrung in die Dokumentverarbeitung},\\
+% B.G. Teubner, Stuttgart, 1989
+%
+% \bibitem{hyperref}
+% Sebastian Rahtz \& Heiko Oberdiek:\\
+% \href{http://www.ctan.org/pkg/hyperref}%
+% {\emph{Hypertext marks in \LaTeX}},\\
+% November 12, 2007
+%
+% \bibitem{refcount}
+% Heiko Oberdiek:\\
+% \href{http://www.ctan.org/pkg/refcount}%
+% {\emph{The refcount package}},\\
+% 2006/02/20
+%
+% \bibitem{threeparttable}
+% Donald Arseneau:\\
+% \href{http://www.ctan.org/pkg/threeparttable}%
+% {\emph{Three part tables: title, tabular environment, notes}},\\
+% 2003/06/13
+% \end{thebibliography}
+%
+% \iffalse
+% --------------------------------------------------------------------------- %
+% \fi
+%
+% \clearpage
+% \Finale
+%
+\endinput