From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Mon, 2 Sep 2019 13:46:59 +0900
Subject: Initial commit

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

(limited to 'macros/latex/contrib/caption/subcaption.dtx')

diff --git a/macros/latex/contrib/caption/subcaption.dtx b/macros/latex/contrib/caption/subcaption.dtx
new file mode 100644
index 0000000000..0eb2a144fc
--- /dev/null
+++ b/macros/latex/contrib/caption/subcaption.dtx
@@ -0,0 +1,1269 @@
+% \iffalse meta-comment
+% 
+% This is file `subcaption.dtx'.
+% 
+% Copyright (C) 2007-2019 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, and newfloat.dtx,
+% the derived files caption.sty, caption2.sty, caption3.sty,
+% bicaption.sty, ltcaption.sty, subcaption.sty, and newfloat.sty,
+% and the user manuals caption-deu.tex, caption-eng.tex, and caption-rus.tex.
+% 
+% \fi
+% \CheckSum{235}
+%
+% \iffalse
+%<*driver>
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\ProvidesFile{subcaption.drv}[2019/08/31 v1.3 Adds a sub-caption feature to the caption package]
+\hbadness=9999 \newcount\hbadness \hfuzz=74pt % Make TeX shut up.
+%\errorcontextlines=3
+%
+\documentclass{ltxdoc}
+\setlength\parindent{0pt}
+\setlength\parskip{\smallskipamount}
+%
+\newcommand\LineBreak{\linebreak[3]}
+\newcommand\PageBreak{\pagebreak[3]}
+\usepackage{ifpdf}
+\ifpdf
+  \usepackage{mathptmx,courier}
+  \usepackage[scaled=0.90]{helvet}
+  \addtolength\marginparwidth{15pt}
+  \ifdim\paperheight=297mm % a4paper
+    \renewcommand\LineBreak{\\}
+    \renewcommand\PageBreak{\clearpage}
+  \fi
+\fi
+%
+\usepackage[bottom]{footmisc}
+\usepackage{array,graphicx,overpic,pict2e,diagbox}
+%
+\PassOptionsToPackage{breaklinks=true}{hyperref}
+\usepackage{hypdoc}
+\ifpdf\usepackage{hypdestopt}\fi
+\hypersetup{pdfkeywords={LaTeX, package, subcaption},pdfstartpage={},pdfstartview={}}
+%
+\usepackage{subcaption}[2011/08/01] % needs v1.1 or newer
+\DeclareCaptionSubType*[arabic]{table}
+\captionsetup[subtable]{labelformat=simple,labelsep=colon}
+%
+\newcommand*\purerm[1]{{\upshape\mdseries\rmfamily #1}}
+\newcommand*\puresf[1]{{\upshape\mdseries\sffamily #1}}
+\newcommand*\purett[1]{{\upshape\mdseries\ttfamily #1}}
+\let\package\puresf
+\let\env\purett \let\opt\purett
+%
+\newcommand*\csmarg[1]{\texttt{\char`\{#1\char`\}}}
+\newcommand*\csoarg[1]{\texttt{\char`\[#1\char`\]}}
+\newcommand*\version[2][]{$v#2$}
+%
+\usepackage{marvosym}
+\makeatletter
+\newcommand*\INFO{\@ifstar{\@INFO{}}{\@INFO{\vbox to \ht\strutbox}}}
+\newcommand*\@INFO[1]{\MARGINSYM{#1{\LARGE\Info}}}
+\makeatother
+%
+\usepackage[alpine]{ifsym}
+\newenvironment{background}{\par\bigskip\csname background*\endcsname}{\csname endbackground*\endcsname}
+\newenvironment{background*}{\small\MARGINSYM{\Mountain}\ignorespaces}{\par}
+%
+\newcommand*\MARGINSYM[1]{\hskip 1sp \marginpar{\raggedleft\textcolor{blue}{{#1}}}}
+\newcommand*\NEW[2]{\MARGINSYM{\vskip2pt\footnotesize#1\\#2}}
+%
+\begin{document}
+  \DocInput{subcaption.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \let\subsectionautorefname\sectionautorefname
+% \let\subsubsectionautorefname\sectionautorefname
+%
+% \def\thispackage{the \package{subcaption} package}
+% \def\Thispackage{The \package{subcaption} package}
+%
+% \newcommand\NEWfeature{\NEW{New feature}}
+% \newcommand\NEWdescription{\NEW{New description}}
+%
+% \makeatletter
+% \newcommand*\Ref{\@ifstar{\@Ref\ref}{\@Ref\autoref}}
+% \newcommand*\@Ref[2]{#1{#2}: \textit{\nameref{#2}}}
+% \makeatother
+% \newcommand*\See[1]{\nopagebreak{\small (See #1)}}
+%
+% \GetFileInfo{subcaption.drv}
+% \let\docdate\filedate
+% \let\docversion\fileversion
+% \GetFileInfo{subcaption.sty}
+%
+% \title{\texorpdfstring{\Thispackage\thanks{%^^A
+%          This package has version number \docversion.}}%^^A
+%        {The subcaption package}}
+% \author{Axel Sommerfeldt\\
+%         \url{https://gitlab.com/axelsommerfeldt/caption}}
+% \date{\docdate}
+% \maketitle
+% 
+% \begin{abstract}
+% This package supports typesetting of sub-captions
+% (by using the the sub-caption feature of the \package{caption} package).
+% \end{abstract}
+%
+% \begin{background}
+% At the end of each section, text marked with the mountain symbol
+% will contain background knowledge on how the particular command or
+% environment is actually implemented.
+% If you just want to use this package as it is, you don't have to read or
+% understand them.
+% \end{background}
+%
+% \begin{background*}
+% This package demonstrates the usage of |\Declare|\-|Caption|\-|Sub|\-|Type|,
+% |\caption|\-|setup{sub|\-|type}|, and the internal hook
+% |\caption@sub|\-|type|\-|hook| (offered by the \package{caption} package).
+% \end{background*}
+% 
+% \bigskip
+% \INFO*
+% \emph{Please note:}
+% This package is incompatible with the \package{subfigure} and \package{subfig}
+% packages.
+%
+% \clearpage
+% \setcounter{tocdepth}{2}
+% \tableofcontents
+%
+% \clearpage
+% \section{Loading the package}
+%
+% Load this package using
+% \begin{quote}
+%   |\usepackage|\oarg{options}|{subcaption}|\quad.
+% \end{quote}
+% The options for \thispackage\ are the same ones as for the \package{caption}
+% package, but specify settings which are used for sub-captions
+% \emph{additionally}.
+% In fact
+% \begin{quote}
+%   |\usepackage|\oarg{options}|{subcaption}|
+% \end{quote}
+% is identical to
+% \begin{quote}
+%   |\usepackage{subcaption}|\\
+%   |\captionsetup[sub]|\marg{options}\quad.
+% \end{quote}
+%
+% \bigskip
+%
+% The default settings for |sub|captions are:
+% \begin{quote}
+%   |margin=0pt,size=smaller,labelformat=parens,labelsep=space,|\\
+%   |skip=6pt,list=false,hypcap=false|~\footnote{%^^A
+%     This means that sub-captions are not listed in the List of Figures
+%     or Tables by default, but you can enable that by
+%     specifying the option \texttt{list=true}.}
+% \end{quote}
+%
+% Options specified with |\usepackage[|\ldots|]{sub|\-|caption}| and
+% |\caption|\-|setup[sub]{|\ldots|}| will override the ones specified by
+% |\caption|\-|setup{|\ldots|}| and |\caption|\-|setup[fig|\-|ure]{|\ldots|}|,
+% but are again overwritten by |\caption|\-|setup[sub|\-|figure]{|\ldots|}|
+% (same for `table'). So finally we have the following order how
+% settings for sub-captions are applied:
+% \begin{enumerate}
+% \item Global settings
+%  {\small(|\usepackage[|\ldots|]{caption}| and |\captionsetup{|\ldots|}|)}
+% \item Environmental settings
+%  {\small(|\captionsetup[figure|\emph{ -or- }|table]{|\ldots|}|)}
+% \item Local settings
+%  {\small(|\captionsetup{|\ldots|}| inside |figure| or |table| environment)}
+% \item Default `sub' settings
+%  {\small(|margin=0pt,size=smaller,|\ldots, see above)}
+% \item Custom `sub' settings
+%  {\small(|\usepackage[|\ldots|]{subcaption}| and |\captionsetup[sub]{|\ldots|}|)}
+% \item Environmental `sub' settings
+%  {\small(|\captionsetup[subfigure|\emph{ -or- }|subtable]{|\ldots|}|)}
+% \item Local `sub' settings
+%  {\small(|\captionsetup{|\ldots|}| inside |sub|\-|figure| or |sub|\-|table|)}
+% \end{enumerate}
+% An example:
+% \begin{quote}
+%   |\usepackage[labelsep=quad,indention=10pt]{caption}|\\
+%   |\usepackage[labelfont=bf,list=true]{subcaption}|\\
+%   |\captionsetup[table]{textfont=it,position=top}|\\
+%   |\captionsetup[subtable]{textfont=sf}|
+% \end{quote}
+% causes the captions inside |sub|\-|table| environments to be typeset with
+% the settings
+% \begin{quote}
+%   |indention=10pt,position=top,margin=0pt,font=small,|\\
+%   |labelformat=parens,labelsep=space,skip=6pt,hypcap=false,|\\
+%   |labelfont=bf,list=true,textfont=sf|\quad.
+% \end{quote}
+%
+% \PageBreak
+% \section{The \cs{subcaptionbox} command}
+%
+% \DescribeMacro\subcaptionbox
+% The easiest way to apply a sub-caption is by using the
+% |\sub|\-|caption|\-|box| command, which automatically aligns the
+% sub-figures resp.~sub-tables by their very first caption line.
+%
+% Its syntax is:
+% \begingroup
+% \leftmargini=12pt
+% \begin{quote}
+%   |\subcaptionbox|\oarg{list entry}\marg{heading}\oarg{width}\oarg{inner-pos}\marg{contents}\\
+%   |\subcaptionbox*|\marg{heading}\oarg{width}\oarg{inner-pos}\marg{contents}
+% \end{quote}
+% \endgroup
+% \begin{small}
+% The arguments \meta{list entry} \& \meta{heading} will be used for
+% typesetting the |\caption|.\par
+% \meta{width} is the width of the resulting |\par|\-|box|; the default value is
+% the width of the contents.\par
+% \meta{inner-pos} specifies how the contents will be justified inside the
+% resulting |\parbox|;
+% it can be either `c' (for |\centering|), `l' (for |\ragged|\-|right|),
+% `r' (for |\ragged|\-|left|), or `s' (for no special justification).
+% The default is `c'.
+% (But you can use any justification defined with
+% |\Declare|\-|Caption|\-|Jus|\-|ti|\-|fi|\-|ca|\-|tion| as well,
+% e.g.~`|center|\-|last|'.)
+% \end{small}
+%
+% \bigskip
+%
+% Using |\sub|\-|caption|\-|box|, the baseline of the resulting box will be placed
+% right between contents and heading, so usually you don't have to care about the
+% vertical alignment of the sub-figures for yourself.
+% Also the hyperlink anchor is placed properly with respect to the |hyp|\-|cap=|
+% setting.
+%
+% One example:
+% \begin{quote}
+%   |\begin{figure}|\\
+%   |  \centering|\\
+%   |  \subcaptionbox{A cat\label{cat}}|\\
+%   |    {\includegraphics{cat}}|\\
+%   |  \subcaptionbox{An elephant\label{elephant}}|\\
+%   |    {\includegraphics{elephant}}|\\
+%   |  \caption{Two animals}\label{animals}|\\
+%   |\end{figure}|
+% \end{quote}
+% gives the result:\par
+% \noindent\begin{minipage}{\linewidth}
+%   \setcaptiontype{figure}
+%   \centering
+%   \subcaptionbox{A cat\label{cat}}
+%     {\includegraphics[width=30pt]{cat}}
+%   \subcaptionbox{An elephant\label{elephant}}
+%     {\includegraphics[width=.4\textwidth]{elephant}}
+%   \caption[Two animals]{Two animals~\footnotemark}\label{animals}
+% \end{minipage}
+% \footnotetext{The pictures were taken with permission from the
+%   \LaTeX\ Companion\cite{TLC2} examples.}
+%
+% \bigskip
+%
+% As you see the result is not satisfying;
+% the caption below the cat looks ugly because of the small width of the
+% graphic. This can be solved by using the optional arguments of
+% |\sub|\-|caption|\-|box|, increasing the width of the resulting box:
+% \begin{quote}
+%   |  |\ldots\\
+%   |  \subcaptionbox{A cat\label{cat}}|\\
+%   |    |\textcolor{blue}{\csoarg{2.5cm}}|{\includegraphics{cat}}|\\
+%   |  |\ldots
+% \end{quote}
+% \noindent\begin{minipage}{\linewidth}
+%   \setcaptiontype{figure}
+%   \centering
+%   \subcaptionbox{A cat\label{cat2}}
+%     [2.5cm]{\includegraphics[width=30pt]{cat}}
+%   \subcaptionbox{An elephant\label{elephant2}}
+%     {\includegraphics[width=.4\textwidth]{elephant}}
+%   \caption{Two animals}\label{animals2}
+% \end{minipage}
+%
+% \bigskip
+%
+% Furthermore the main caption, which is centered with respect to the
+% |\text|\-|width|, looks mis-aligned with respect to the sub-captions.
+% This can (again) be solved by using the optional arguments of
+% |\sub|\-|caption|\-|box|, giving both boxes the same width, for example:
+% \begin{quote}
+%   |  |\ldots\\
+%   |  \subcaptionbox{A cat\label{cat}}|\\
+%   |    |\textcolor{blue}{\csoarg{.4\cs{linewidth}}}|{\includegraphics{cat}}%|\\
+%   |  \subcaptionbox{An elephant\label{elephant}}|\\
+%   |    |\textcolor{blue}{\csoarg{.4\cs{linewidth}}}|{\includegraphics{elephant}}|\\
+%   |  |\ldots
+% \end{quote}
+% \noindent\begin{minipage}{\linewidth}
+%   \setcaptiontype{figure}
+%   \centering
+%   \subcaptionbox{A cat\label{cat3}}
+%     [.4\linewidth]{\includegraphics[width=39.34724pt]{cat}}%^^A
+%   \subcaptionbox{An elephant\label{elephant3}}
+%     [.4\linewidth]{\includegraphics[width=.4\textwidth]{elephant}}
+%   \caption{Two animals}\label{animals3}
+% \end{minipage}
+%
+% \bigskip
+%
+% \iffalse
+% \noindent\begin{minipage}{\linewidth}
+%   \setcaptiontype{figure}
+%   \centering
+%   \hbox{\subcaptionbox{An elephant\label{elephant4}}
+%     {\includegraphics[width=.4\textwidth]{elephant}}%^^A
+%   \vbox{\subcaptionbox{Cat 1\label{cat4.1}}
+%     {\includegraphics[width=30pt]{cat}}\par
+%   \subcaptionbox{Cat 2\label{cat4.2}}
+%     {\includegraphics[width=30pt]{cat}}}}%^^A
+%   \caption{Two animals}\label{animals4}
+% \end{minipage}
+% \bigskip
+% \fi
+%
+% \begin{background}
+% The |\sub|\-|caption|\-|box| is a |\par|\-|box| with
+% |\set|\-|caption|\-|sub|\-|type| as first contents line.
+% \iffalse See implementation for details.\fi
+% \end{background}
+%
+% \PageBreak
+% \section{The subfigure \& subtable environments}
+%
+% \DescribeEnv{subfigure}
+% \DescribeEnv{subtable}
+% After loading \thispackage\ the new environments |sub|\-|figure| and
+% |sub|\-|table| are available, which have the same (optional \& mandatory)
+% arguments as the |mini|\-|page| environment:
+% \begin{quote}
+%   |\begin{subfigure}|\oarg{outer-pos}\oarg{height}\oarg{inner-pos}\marg{width}\\
+%   \ldots\\
+%   |\end{subfigure}|
+% \end{quote}
+% and
+% \begin{quote}
+%   |\begin{subtable}|\oarg{outer-pos}\oarg{height}\oarg{inner-pos}\marg{width}\\
+%   \ldots\\
+%   |\end{subtable}|
+% \end{quote}
+% Inside these environments you use the ordinary |\caption| command
+% for typesetting captions. So this example is the same as the last one,
+% but uses the |sub|\-|figure| environment:
+% \begin{quote}
+%   |\begin{figure}|\\
+%   |  \begin{|\textcolor{blue}{\texttt{subfigure}}|}[b]{.5\linewidth}|\\
+%   |    \centering\large A|\\
+%   |    |\textcolor{blue}{\cs{caption}}|{A subfigure}\label{fig:1a}|\\
+%   |  \end{|\textcolor{blue}{\texttt{subfigure}}|}%|\\
+%   |  \begin{|\textcolor{blue}{\texttt{subfigure}}|}[b]{.5\linewidth}|\\
+%   |    \centering\large B|\\
+%   |    |\textcolor{blue}{\cs{caption}}|{Another subfigure}\label{fig:1b}|\\
+%   |  \end{|\textcolor{blue}{\texttt{subfigure}}|}|\\
+%   |  \caption{A figure}\label{fig:1}|\\
+%   |\end{figure}|
+% \end{quote}
+% Some additional notes:
+% \begin{itemize}
+% \item You can override the setttings for a specific subcaption
+% with a |\caption|\-|setup| inside the |sub|\-|figure| or |sub|\-|table| environment, e.g.:
+% \begin{quote}
+%   |\begin{subfigure}[b]{.5\linewidth}|\\
+%   |  \centering\large A|\\
+%   |  |\textcolor{blue}{\cs{captionsetup}\csmarg{skip=3pt}}\\
+%   |  \caption{A subfigure}\label{fig:1a}|\\
+%   |\end{subfigure}|\\
+% \end{quote}
+% \item Hyperlinks targeted to this subfigure will jump to the beginning
+% of the subfigure, and not to the caption of the subfigure
+% (if |hypcap=true| is set for sub-captions).
+% \See{\Ref{hypcap}}
+% \end{itemize}
+%
+% \NEWfeature{v1.2}
+% Beside the \meta{inner-pos} values of `c', `t', and `b', \thispackage\ also offers the
+% values `T' and `B' additionally which align the |sub|\-|figure| at the
+% very top resp.~bottom. (In contrast `t' and `b' align the |sub|\-|figure| at the
+% top resp.~bottom \textit{baseline}.)
+%
+% \bigskip
+%
+% \begin{background}
+% The |subfigure| \& |subtable| environments are just simple minipage
+% environments with |\set|\-|caption|\-|sub|\-|type| as first contents line.
+% These environments are defined with the help of
+% |\caption@For{subtypelist}|, which executes code for every sub-type
+% declared with |\Declare|\-|Caption|\-|Sub|\-|Type|.
+% \end{background}
+%
+% \iffalse\PageBreak\fi
+% \section{The \cs{subcaption} command}
+%
+% \DescribeMacro\subcaption
+% The most flexible way to apply a sub-caption is by using the
+% |\subcaption| command. Its syntax is analogous to the one of the |\caption|
+% command and shares its features:
+% \begin{quote}
+%   |\subcaption|\oarg{list entry}\marg{heading}\\
+%   |\subcaption*|\marg{heading}
+% \end{quote}
+% Please note that the |\subcaption| command \emph{must} be applied inside
+% its own box or environment.
+%
+% An example:
+% \begin{quote}
+%   |\begin{figure}|\\
+%   |  \begin{minipage}[b]{.5\linewidth}|\\
+%   |    \centering\large A|\\
+%   |    \subcaption{A subfigure}\label{fig:1a}|\\
+%   |  \end{minipage}%|\\
+%   |  \begin{minipage}[b]{.5\linewidth}|\\
+%   |    \centering\large B|\\
+%   |    \subcaption{Another subfigure}\label{fig:1b}|\\
+%   |  \end{minipage}|\\
+%   |  \caption{A figure}\label{fig:1}|\\
+%   |\end{figure}|
+% \end{quote}
+% gives the result:
+% \par\bigskip
+% \noindent\begin{minipage}{\linewidth}
+%   \setcaptiontype{figure}
+%   \begin{minipage}[b]{.5\linewidth}
+%     \centering\large A
+%     \subcaption{A subfigure}\label{fig:1a}
+%   \end{minipage}%^^A
+%   \begin{minipage}[b]{.5\linewidth}
+%     \centering\large B
+%     \subcaption{Another subfigure}\label{fig:1b}
+%   \end{minipage}
+%   \caption{A figure}\label{fig:1}
+% \end{minipage}
+%
+% \bigskip
+%
+% \begin{background}
+% Prepared with |\Declare|\-|Caption|\-|Sub|\-|Type| (offered by the
+% \package{caption} package), the caption package command |\set|\-|caption|\-|sub|\-|type|
+% becames available.
+% Analogous to the |\set|\-|caption|\-|type| command of the \package{caption} package,
+% the |\set|\-|caption|\-|sub|\-|type| command sets the sub-type of the box or environment
+% (so |\caption| will typeset a sub-caption instead of an ordinary one),
+% places a proper hyperlink anchor (non-starred variant only),
+% executes options associated with the sub-type etc.\par
+% The |\subcaption| command is just a simple combination of
+% |\set|\-|caption|\-|sub|\-|type*| and |\caption|.
+% \end{background}
+%
+% \PageBreak
+% \section{The \cs{DeclareCaptionSubType} command}
+%
+% \DescribeMacro\DeclareCaptionSubType
+% For using the sub-caption feature of the \package{caption} package some
+% commands and counters must be prepared. This is done with
+% \iffalse\footnote{%^^A
+% \cs{newsubfloat} offered by the \package{subfig} package\cite{subfig}
+% could be used for this purpose as well.}\fi
+% \begin{quote}
+%  |\DeclareCaptionSubType|\oarg{numbering scheme}\marg{type}\\
+%  |\DeclareCaptionSubType*|\oarg{numbering scheme}\marg{type}
+% \end{quote}
+% For the environments |figure| \& |table|, and all the ones
+% defined with |\Declare|\-|Floating|\-|Environment| offered by the
+% \package{newfloat} package, this will be done automatically,
+% but for other environments (e.g.~the ones defined with |\newfloat| offered by the
+% \package{float} package or |\Declare|\-|New|\-|Float|\-|Type| offered by the
+% \package{floatrow} package) this has to be done manually.
+%
+% \medskip
+%
+% The starred variant provides the sub-caption numbering format
+% \meta{type}|.|\meta{subtype} (e.g.~`|1.2|') while the non-starred variant
+% simply uses \meta{subtype} (e.g.~`|a|').
+%
+% \begin{small}
+% Own numbering formats can be created by redefining |\thesub|\meta{type}, e.g.
+% \begin{quote}|\DeclareCaptionSubType*{figure}|\\
+% |\renewcommand\thesubfigure{\thefigure\alph{subfigure}}|\end{quote}
+% would give you sub-caption numbers like `|1b|'.
+% \end{small}
+%
+% The default numbering scheme is |alph|, but you can use any \LaTeX\ (or self-defined)
+% command name here which converts a counter to a text value, e.g. |arabic|, |roman|,
+% |Roman|, |alph|, |Alph|, |fnsymbol|, \ldots
+%
+% But |\DeclareCaptionSubType| is not only for defining new sub-caption types,
+% you can use this command for re-definitions as well, e.g.
+% \begingroup
+% \leftmargini=12pt
+% \begin{quote}
+%   |\DeclareCaptionSubType*[arabic]{table}|\\
+%   |\captionsetup[subtable]{labelformat=simple,labelsep=colon}|
+% \end{quote}
+% \endgroup
+% \pagebreak[2]
+% will give you sub-captions in |table|s like these ones:
+% \par\bigskip
+% \noindent\begin{minipage}{\linewidth}
+%   \setcaptiontype{table}
+%   \centering
+%   \caption{Two tables}
+%   \subcaptionbox{Table one}[3cm][c]{\begin{tabular}{cc}A & B\\ C & D\\ \end{tabular}}
+%   \subcaptionbox{Table two}[3cm][c]{\begin{tabular}{cc}E & F\\ G & H\\ \end{tabular}}
+% \end{minipage}
+%
+% \begin{background}
+% |\Declare|\-|Caption|\-|Sub|\-|Type| is an integral part of the \package{caption}
+% package kernel.
+% \end{background}
+%
+% \PageBreak
+% \section{References}
+%
+% The macro |\the|\-\meta{counter} is not only responsible for the look of the \meta{counter},
+% but for the look of the references typeset with |\ref|, too. References will be prefixed by
+% \LaTeX{} with the internal macro |\p@|\-\meta{counter}.
+%
+% |\Declare|\-|Caption|\-|Sub|\-|Type| will define both of them for sub-captions
+% (e.g. |sub|\-|figure| and |sub|\-|table|), and as you have seen in the last section
+% |\Declare|\-|Caption|\-|Sub|\-|Type| will give you some options to control the
+% internal (re-)definition of |\the|\-\meta{counter} and |\p@|\-\meta{counter}.
+%
+% \DescribeMacro\thesubfigure
+% \DescribeMacro\p@subfigure
+% For example |\thesubfigure| and |\p@subfigure| are (as default) internally defined as
+% \begin{quote}
+% |\newcommand\thesubfigure{\alph{subfigure}}|\\
+% |\newcommand\p@subfigure{\thefigure}|
+% \end{quote}
+% so the label of sub-captions will look like `|a|' (decorated by the selected label format),
+% while references will look like `|1a|' since they are prefixed by |\p@sub|\-|figure| $=$
+% |\the|\-|figure|.
+%
+% After |\Declare|\-|Caption|\-|Sub|\-|Type*[arabic]{figure}|, |\the|\-|sub|\-|figure| and
+% |\p@sub|\-|figure| will look like
+% \begin{quote}
+% |\renewcommand\thesubfigure{\thefigure.\arabic{subfigure}}|\\
+% |\renewcommand\p@subfigure{}|
+% \end{quote}
+%
+% But if you want detailed control on how the references will look like,
+% the options of |\Declare|\-|Caption|\-|Sub|\-|Type| are potentially not sufficient.
+% In this case one need to redefine these two macros on his/her own.
+% Some examples:
+%
+% If you want parentheses around the sub-figure part of the reference,
+% so they will look like `|1(a)|', you may get them this way:
+% \begin{quote}
+% |\usepackage[labelformat=simple]{subcaption}|\\
+% |\renewcommand\thesubfigure{(\alph{subfigure})}|
+% \end{quote}
+% {\small (\emph{Note:} Since |parens| is the default label format you will get double
+% parentheses in sub-captions when not specifiying a different label format, e.g. |simple|.)}
+%
+% But if you want only a closing parenthesis, so references will look like `|1a)|',
+% but the sub-captions itself should still look like `|(a)|',
+% this would be a possible solution:
+% \begin{quote}
+% |\usepackage{subcaption}|\\
+% |\renewcommand\thesubfigure{\alph{subfigure})}|\\
+% |\DeclareCaptionLabelFormat{opening}{(#2}|\\
+% |\captionsetup[subfigure]{labelformat=opening}|
+% \end{quote}
+%
+% {\small(Please note that you need to surround redefinitions of |\p@|\-\meta{counter}
+% with |\makeatletter| and |\makeatother|. See
+% \url{http://tex.stackexchange.com/questions/8351/}
+% for details.)}
+%
+% \pagebreak[3]
+% \subsection{The \cs{subref} command}
+% \label{subref}
+%
+% While |\ref|\marg{key} (and |\ref*|\marg{key}, if the \package{hyperref}
+% package is used) usually gives a combined result representing the main
+% caption counter and the sub-caption one, it is sometimes useful to have
+% a reference to the sub-caption only. For this purpose you can use
+% \begin{quote}
+%   |\subref|\marg{key}\\
+%   |\subref*|\marg{key}~\footnote{%^^A
+%     Like \cs{ref*}, \cs{subref*} is only available if the \package{hyperref}
+%     package\cite{hyperref} is used.}%^^A
+%     \qquad.
+% \end{quote}
+% So for example |\ref{cat}| gives the result `\ref{cat}' but |\subref{cat}|
+% gives `\subref{cat}'.
+%
+% \begin{small}
+% \emph{Note:} If the sub-caption was (re-)defined with the starred variant
+% |\Declare|\-|Caption|\-|Sub|\-|Type*|, both |\ref| and |\sub|\-|ref| usually gives
+% the same result.
+% \end{small}
+%
+% \begin{background}
+% The |\sub|\-|ref| command demonstrates the usage of |\caption@sub|\-|type|\-|hook|
+% which will be called during |\caption|\-|setup{sub|\-|type}|.
+% \end{background}
+%
+% \pagebreak[3]
+% \subsection{The \opt{subrefformat=} option}
+% \label{subrefformat}
+%
+% \DescribeMacro{subrefformat=}
+% \NEWfeature{v1.1}
+% By applying |\Declare|\-|Caption|\-|Sub|\-|Type|, or by redefining |\the|\-\meta{counter}
+% and |\p@|\-\meta{counter}, you will change the look of references typeset with |\ref|
+% \emph{and} |\sub|\-|ref|.
+% But maybe you only want to change the output of |\sub|\-|ref| without
+% affecting the references typeset with |\ref|?
+% This is possible, too, by using the option \opt{subrefformat}:
+% \begin{quote}
+%   |\captionsetup{subrefformat=|\meta{label format}|}|
+% \end{quote}
+% This one will choose a label format (either a pre-defined one, or a one defined with
+% |\Declare|\-|Caption|\-|Label|\-|Format|) as decorative element to sub-references.
+% The default one is |simple| which has no decorative elements but simply typeset
+% the reference as it is.
+%
+% For example
+% \begin{quote}
+%   |\captionsetup{subrefformat=parens}|
+% \end{quote}
+% will result in references (typeset with |\ref|) like `|1a|' but sub-references
+% (typeset with |\subref|) like `|(a)|'.
+%
+% \subsection{Referencing sub-figures without sub-captions}
+%
+% \DescribeMacro\phantomsubcaption
+% \DescribeMacro\phantomcaption
+% \NEWfeature{v1.1}
+% If you don't want to give a sub-figure a caption, because the picture itself
+% already contains the caption, or for some other reason, you can use the command
+% \begin{quote}
+%   |\phantomsubcaption|
+% \end{quote}
+% instead of |\sub|\-|caption|, or
+% -- when inside a |sub|\-|figure| or |sub|\-|table| environment --
+% |\phantom|\-|caption| instead of |\caption|.
+% |\phantom|\-|sub|\-|caption| and |\phantom|\-|caption| do not have any arguments, and
+% they do not generate any output, but give you an anchor for a |\label| command
+% which can be placed afterwards.
+% Furthermore it increases the sub-figure resp. sub-table counter.
+%
+% Please note that -- just like |\sub|\-|caption| -- the |\phantom|\-|sub|\-|caption|
+% command \emph{must} be applied inside its own group, box, or environment.
+%
+% \pagebreak[3]
+% An example:
+% \begin{quote}
+%   |\begin{figure}|\\
+%   |  \centering|\\
+%   |  {\includegraphics{cat_with_a}|\\
+%   |   \phantomsubcaption\label{cat}}|\\
+%   |  {\includegraphics{elephant_with_b}|\\
+%   |   \phantomsubcaption\label{elephant}}|\\
+%   |  \caption{Two animals: \subref{cat} a huge cat,|\\
+%   |           and \subref{elephant} an elephant}|\\
+%   |\end{figure}|
+% \end{quote}
+%
+% \noindent\begin{minipage}{\linewidth}
+%   \setcaptiontype{figure}
+%   \centering
+%  {\begin{overpic}[width=60pt]{cat}
+%     \put(40,34){(a)}
+%   \end{overpic}
+%   \phantomsubcaption\label{cat6.3}}
+%  {\begin{overpic}[width=.4\textwidth]{elephant}
+%     \put(60,50){(b)}
+%   \end{overpic}
+%   \phantomsubcaption\label{elephant6.3}}
+%   \captionsetup{subrefformat=parens}
+%   \caption{Two animals: \subref{cat6.3} a huge cat, and \subref{elephant6.3} an elephant}
+% \end{minipage}
+%
+% \pagebreak[3]
+% \subsection{Where to place the \cs{label} command?}
+% \label{label}
+%
+% When using |\sub|\-|caption| or |\phantom|\-|sub|\-|caption|,
+% or |\caption| or |\phantom|\-|caption| inside a |sub|\-|figure| or |sub|\-|table| environment,
+% the |\label| can be either placed inside the caption text or right after the |\sub|\-|caption| or
+% |\caption| command, e.g:
+% \begin{quote}
+%   |\subcaption{Some text here\label{label1}}|\\
+%    \ldots\\
+%   |\subcaption{Some other text}\label{label2}}|\\
+%    \ldots\\
+%   |\subcaption{Something different}|\\
+%   |\label{label3}|
+% \end{quote}
+%
+% When using the |\sub|\-|caption|\-|box| command, the |\label| should be placed inside
+% the caption text, e.g.:
+% \begin{quote}
+%   |\subcaptionbox{A description here\label{label4}}|\\
+%   |              {Some content here}|\\
+%    \ldots\\
+%   |\subcaptionbox[List-of-Figures entry]|\\
+%   |              {A description here\label{label5}}|\\
+%   |              {Some content here}|
+% \end{quote}
+%
+% \pagebreak[3]
+% \subsection{Where do hyperlinks jump?}
+% \label{hypcap}
+%
+% For the |subfigure| \& |subtable| environments and |\subcaptionbox| boxes
+% (and own constructs which use |\set|\-|caption|\-|sub|\-|type|) the
+% hyperlink anchors will be placed in respect to the |hypcap=| setting.
+% While usage of this option is straight-forward for ordinary captions,
+% the usage for sub-captions depends on the setting regarding the main captions.
+% This table gives you an overview where the hyperlinks will jump:\par
+%
+% \bigskip
+% \begin{small}
+% \centering
+% \DeleteShortVerb{\|}
+% \renewcommand\arraystretch{1.5}
+% \begin{tabular}{|l|p{3cm}p{3cm}|}
+% \hline
+% \backslashbox{subcaption}{caption} &
+%   \multicolumn{1}{c}{\texttt{hypcap=false}} &
+%   \multicolumn{1}{c|}{\texttt{hypcap=true}} \\
+% \hline
+% \raisebox{-1.5ex}[1.5ex]{\texttt{hypcap=false}} &
+%   sub-caption & figure or table\par\hfill\textit{(default setting)}\\
+% \raisebox{-1.5ex}[1.5ex]{\texttt{hypcap=true}} &
+%   sub-figure or\par sub-table & sub-figure or\par sub-table \\
+% \hline
+% \end{tabular}\par
+% \MakeShortVerb{\|}
+% \end{small}
+% \bigskip
+%
+% But if |\subcaption| is used and |hypcap=true| is set for sub-captions,
+% \thispackage\ does not know where the sub-figure or sub-table actually
+% begins, so it will jump to the sub-caption instead.
+%
+% \medskip
+% \emph{Remember:} If you use the \package{hypcap} package\cite{hypcap},
+% it controls the placement of the hyperlink anchors, making the rules
+% above invalid.
+%
+% \bigskip
+% {\small(See also the documentation of the \package{caption} package,
+% sections about \package{hyperref} \& \package{hypcap}.)}
+%
+% \pagebreak[3]
+% \section{The \cs{subfloat} command}
+% \label{subfloat}
+%
+% \DescribeMacro\subfloat
+% \NEWfeature{v1.3}
+% To allow a smoother transition from the \package{subfig} package
+% (which is unmaintained for over 14 years)
+% this package also offers |\sub|\-|float| with the same syntax:
+% \begin{quote}
+%   |\subfloat|\oarg{list\_entry}\oarg{sub-caption}\marg{body}
+% \end{quote}
+%
+% \iffalse
+% --------------------------------------------------------------------------- %
+% \fi
+%
+% \pagebreak[3]
+% \section{Beyond this package}
+% \label{floatrow}
+%
+% For a more advanced usage of the sub-caption feature of the
+% \package{caption} package, please take a look at the \package{floatrow}
+% package\cite{floatrow} which provides the powerful \texttt{subfloatrow}
+% environment for typesetting sub-figures.
+%
+% \iffalse
+% --------------------------------------------------------------------------- %
+% \fi
+%
+% \pagebreak[3]
+% \section{Thanks}
+%
+% I would like to thank
+% Stephen Dalton
+% who helped to make this package a better one.
+%
+% \iffalse
+% --------------------------------------------------------------------------- %
+% \fi
+%
+% \StopEventually{%^^A
+% \begin{thebibliography}{9}
+%   \bibitem{TLC2}
+%   Frank Mittelbach and Michel Goossens:\\
+%   \newblock {\em The {\LaTeX} Companion (2nd.~Ed.)},
+%   \newblock Addison-Wesley, 2004.
+%   \bibitem{floatrow}
+%   Olga Lapko:\\
+%   \href{http://www.ctan.org/pkg/floatrow}%
+%        {\emph{The floatrow package documentation}},
+%   2007/12/24
+%   \bibitem{hyperref}
+%   Sebastian Rahtz \& Heiko Oberdiek:\\
+%   \href{http://www.ctan.org/pkg/hyperref}%
+%        {\emph{Hypertext marks in \LaTeX}},
+%   November 12, 2007
+%   \bibitem{hypcap}
+%   Heiko Oberdiek:\\
+%   \href{http://www.ctan.org/pkg/hypcap}%
+%        {\emph{The hypcap package -- Adjusting anchors of captions}},
+%   2007/04/09
+% \iffalse
+%   \bibitem{subfig}
+%   Steven D. Cochran:\\
+%   \href{http://www.ctan.org/pkg/subfig}%
+%        {\emph{The subfig package}},
+%   2005/07/05
+% \fi
+% \end{thebibliography}
+% }
+%
+% \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{\@ifnextchar,\@ifpackagelater,\@ifpackageloaded}
+% \DoNotIndex{\@ifstar,\@ifundefined,\@latex@error,\@namedef,\@nameuse}
+% \DoNotIndex{\@onlypreamble,\@parboxrestore,\@plus,\@ptionlist}
+% \DoNotIndex{\@removeelement,\@restorepar,\@secondoftwo,\@setpar}
+% \DoNotIndex{\@tempa,\@tempboxa,\@tempdima,\@tempdimb,\@tempdimc,\@tempb,\@tempc}
+% \DoNotIndex{\@testopt}
+% \DoNotIndex{\@undefined,\@unprocessedoptions,\@unusedoptionlist}
+% \DoNotIndex{\p@,\z@}
+% \DoNotIndex{\active,\addtocounter,\addtolength,\advance,\aftergroup}
+% \DoNotIndex{\baselineskip,\begin,\begingroup,\bfseries,\box}
+% \DoNotIndex{\catcode,\centering,\changes,\csname,\def,\divide,\do,\downarrow}
+% \DoNotIndex{\edef,\else,\empty,\end,\endcsname,\endgraf,\endgroup,\expandafter}
+% \DoNotIndex{\fi,\footnotesize,\global}
+% \DoNotIndex{\hangindent,\hbox,\hfil,\hsize,\hskip,\hspace,\hss}
+% \DoNotIndex{\ifcase,\ifdim,\ifnum,\ifodd,\ifvoid,\ifvmode}
+% \DoNotIndex{\ifx,\ignorespaces,\itshape}
+% \DoNotIndex{\Large,\large,\leavevmode,\leftmargini,\leftskip,\let,\linewidth}
+% \DoNotIndex{\llap,\long,\m@ne,\margin,\mdseries,\message}
+% \DoNotIndex{\newcommand,\newdimen,\newlength,\newline,\newif,\newsavebox}
+% \DoNotIndex{\next,\nobreak,\nobreakspace,\noexpand,\noindent,\numberline}
+% \DoNotIndex{\normalcolor,\normalfont,\normalsize,\or,\par,\parbox,\parfillskip}
+% \DoNotIndex{\parindent,\parskip,\prevdepth,\protect,\protected@edef,\protected@write}
+% \DoNotIndex{\providecommand,\quad}
+% \DoNotIndex{\raggedleft,\raggedright,\relax,\renewcommand,\RequirePackage}
+% \DoNotIndex{\rightskip,\rmfamily}
+% \DoNotIndex{\sbox,\scriptsize,\scshape,\setbox,\setlength,\sffamily,\slshape}
+% \DoNotIndex{\small,\string,\space,\strut}
+% \DoNotIndex{\textheight,\the,\toks@,\typeout,\ttfamily}
+% \DoNotIndex{\unvbox,\uparrow,\upshape,\usebox,\usepackage}
+% \DoNotIndex{\value,\vbox,\vsize,\vskip,\wd,\width,\z@skip}
+% \DoNotIndex{\AtBeginDocument,\AtEndOfPackage,\CurrentOption,\DeclareOption}
+% \DoNotIndex{\ExecuteOptions,\GenericWarning,\IfFileExists,\InputIfFileExists}
+% \DoNotIndex{\NeedsTeXFormat,\MessageBreak}
+% \DoNotIndex{\PackageError,\PackageInfo,\PackageWarning,\PackageWarningNoLine}
+% \DoNotIndex{\PassOptionsToPackage,\ProcessOptions,\ProvidesPackage}
+%
+% \iffalse
+% --------------------------------------------------------------------------- %
+% \fi
+%
+% \setlength{\parskip}{0pt plus 1pt}
+% \changes{v0.1}{2007/09/01}{First demo}
+% \changes{v0.2}{2007/11/11}{\cs{subcaptionbox} added}
+% \changes{v0.3}{2007/12/06}{Adapted to \package{caption} package \version{3.1f}}
+% \changes{v1.0}{2008/03/16}{\cs{subfloat} added}
+% \changes{v1.0}{2010/10/27}{An error message will be issued when the subfigure or subfig package is loaded}
+% \changes{v1.0}{2011/01/22}{Undocumented command \cs{subfloat} removed}
+%
+% \newcommand*\Note[2][Note]{\par{\small\emph{#1:} #2}}
+%
+% \iffalse
+% --------------------------------------------------------------------------- %
+% \fi
+%
+% \clearpage
+% \section{The implementation}
+% \iffalse
+%<*package>
+% \fi
+%
+% \subsection{Identification}
+%
+%    \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\ProvidesPackage{subcaption}[2019/09/01 v1.3a Sub-captions (AR)]
+%    \end{macrocode}
+%
+% \subsection{Initial code}
+%
+% Since we base on the \package{caption} package we load it here.
+%    \begin{macrocode}
+\RequirePackage{caption}[2019/09/01] % needs v3.3c or newer
+%    \end{macrocode}
+%
+% \begin{macro}{\subcaption@CheckCompatibility}
+% \changes{v1.1}{2011/09/01}{Compatibility error added}
+% \changes{v1.1}{2016/05/22}{The presence of \package{subfigure} or \package{subfig} will be checked \cs{AtBeginDocument}, too}
+% Since we are incompatible to them an error message will be issued when
+% the \package{subfigure} or \package{subfig} package is loaded.
+%    \begin{macrocode}
+\newcommand\subcaption@CheckCompatibility{%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \@ifundefined{caption@ifcompatibility}{}{%
+    \caption@ifcompatibility{%
+      \caption@Error{%
+        The `subcaption' package does not work correctly\MessageBreak
+        in compatibility mode}}{}}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \@ifpackageloaded{subfigure}{%
+    \PackageError{subcaption}%
+      {This package can't be used in cooperation\MessageBreak
+       with the subfigure package}%
+      {\subcaption@EH}%
+    \endinput}{}%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \@ifpackageloaded{subfig}{%
+    \PackageError{subcaption}%
+      {This package can't be used in cooperation\MessageBreak
+       with the subfig package}%
+      {\subcaption@EH}%
+    \endinput}{}%
+%    \end{macrocode}
+%    \begin{macrocode}
+}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\subcaption@EH{%
+  If you do not understand this error, please take a closer look\MessageBreak
+  at the documentation of the `subcaption' package, especially the\MessageBreak
+  section about errors.\MessageBreak\@ehc}
+%    \end{macrocode}
+%    \begin{macrocode}
+\subcaption@CheckCompatibility
+%    \end{macrocode}
+%    \begin{macrocode}
+\caption@AtBeginDocument{%
+  \subcaption@CheckCompatibility
+  \let\subcaption@CheckCompatibility\@undefined
+  \let\subcaption@EH\@undefined
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+% \subsection{Declaration of options}
+% We do not have own options.
+% \fi
+%
+% \subsection{Execution of options}
+%
+% We use |\caption@ExecuteOptions| and |\caption@ProcessOptions| here to add
+% the options to the `|sub|' option list instead of executing them immediately.
+% \changes{v1.1}{2018/05/01}{Bugfix: Option \texttt{font+=small} changed to \texttt{size=smaller}}
+%    \begin{macrocode}
+\caption@SetupOptions{subcaption}{\captionsetup[sub]{#2}}%
+\caption@ExecuteOptions{subcaption}{%
+  size=smaller,labelformat=parens,labelsep=space,skip=6pt,list=0,hypcap=0}
+\caption@ProcessOptions*{subcaption}
+%    \end{macrocode}
+%
+% \subsection{Main code}
+%
+% \changes{v1.1}{2011/10/30}{Adapted to the newfloat package}
+% We call |\Declare|\-|Caption|\-|Sub|\-|Type| for |figure|, |table|,
+% and each caption type declared with |\Declare|\-|Floating|\-|Environment| here.
+%    \begin{macrocode}
+\caption@ForEachType{\DeclareCaptionSubType{#1}}
+%    \end{macrocode}
+%
+% \begin{macro}{\newsubfloat}
+% \changes{v1.1}{2016/01/31}{Adapted to the memoir document class}
+% We re-define |\new|\-|sub|\-|float| (offered by the \package{memoir} document class),
+% so our stuff will be used instead.
+%    \begin{macrocode}
+\caption@ifundefined\newsubfloat{}{%
+  \renewcommand*\newsubfloat{\DeclareCaptionSubType}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \pagebreak[3]
+% \subsubsection{The \cs{subcaption} command}
+%
+% \begin{macro}{\subcaption}
+% \changes{v1.1}{2012/04/06}{\cs{newcommand} changed to \cs{def}
+%     so it works with the \package{memoir} document class, too}
+% Without a prefacing |\set|\-|caption|\-|sub|\-|type|, |\sub|\-|caption| is some kind
+% of |\caption|\-|of{sub|\-|\@cap|\-|type}|.
+% \Note{Like \cs{captionof}, this command is designed to be used inside an
+% own group!}
+%    \begin{macrocode}
+\def\subcaption{%
+  \caption@iftype
+    {\setcaptionsubtype*\caption}%
+    {\caption@Error{\noexpand\subcaption outside float}%
+     \caption@gobble}}%
+%    \end{macrocode}
+% But with a prefacing |\set|\-|caption|\-|sub|\-|type|, |\sub|\-|caption| is simply
+% |\caption|.
+%    \begin{macrocode}
+\g@addto@macro\caption@subtypehook{%
+  \let\subcaption\caption}
+%    \end{macrocode}
+% \end{macro}
+%
+% \pagebreak[3]
+% \subsubsection{The \cs{phantomsubcaption} command}
+%
+% \begin{macro}{\phantomsubcaption}
+% \changes{v1.1}{2011/08/17}{This macro added}
+% Same as |\phantom|\-|caption|, but for subfigures.
+%    \begin{macrocode}
+\newcommand*\phantomsubcaption{%
+  \caption@iftype
+    {\setcaptionsubtype*\phantomcaption}%
+    {\caption@Error{\noexpand\phantomsubcaption outside float}}}%
+%    \end{macrocode}
+%    \begin{macrocode}
+\g@addto@macro\caption@subtypehook{%
+  \let\phantomsubcaption\phantomcaption}
+%    \end{macrocode}
+% \end{macro}
+%
+% \pagebreak[3]
+% \subsubsection{The subfigure \& subtable environments}
+%
+% \begin{macro}{subfigure}
+% \begin{macro}{subtable}
+% \changes{v1.2}{2016/02/21}{Optional argument values `B' and `T' added}
+% This is just an ordinary \env{minipage} environment with
+% |\setcaptionsubtype| as first contents line.
+% It will be defined using the helper macro |\caption@For{sub|\-|type|\-|list}|
+% offered by the \package{caption} kernel, so for every caption type
+% declared with |\Declare|\-|Floating|\-|Environment| a corresponding
+% `sub' environment will be defined automatically.
+%    \begin{macrocode}
+\caption@For{subtypelist}{%
+  \newenvironment{sub#1}%
+    {\@ifnextchar[%]
+       \subcaption@iminipage
+       {\subcaption@iminipage[c]}}%
+    {\subcaption@endminipage
+     \endminipage}}%
+%    \end{macrocode}
+% We pass all other optional arguments using the generic helper macro
+% |\caption@with|\-|opt|\-|args| offered by the \package{caption} kernel).
+%    \begin{macrocode}
+\def\subcaption@iminipage[#1]{%
+  \caption@withoptargs{\subcaption@iiminipage{#1}}}
+%    \end{macrocode}
+% `B' and `T' will add a |\vspace{0pt}|, all other values (and additional
+% optional arguments) will be passed unseen to the |minipage| environment.
+%    \begin{macrocode}
+\newcommand*\subcaption@iiminipage[3]{%
+  \let\subcaption@endminipage\@empty
+  \if#1B%
+    \minipage[b]#2{#3}%
+    \def\subcaption@endminipage{\vspace{0pt}}%
+  \else\if#1T%
+    \minipage[t]#2{#3}%
+    \vspace{0pt}%
+  \else
+    \minipage[#1]#2{#3}%
+  \fi\fi
+  \setcaptionsubtype\relax}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \pagebreak[3]
+% \subsubsection{The \cs{subcaptionbox} command}
+%
+% \begin{macro}{\subcaptionbox}
+% \changes{v1.0}{2008/05/06}{Adapted to the \opt{rule} option of the \package{caption} package}
+% \changes{v1.0}{2008/08/31}{Definition and usage of \cs{subcaption@hrule} added}
+% \changes{v1.0}{2010/12/17}{Uses \cs{caption@box} now}
+% \changes{v1.1}{2011/08/16}{Adapted to actual version of \cs{caption@box}}
+% \changes{v1.1}{2012/04/09}{Adapted to actual version of \cs{caption@ibox}}
+% A |\parbox| with contents and sub-caption, separated by an invisible |\hrule|.
+%    \begin{macrocode}
+\newcommand*\subcaptionbox{%
+  \caption@withoptargs{\caption@ibox\setcaptionsubtype}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \pagebreak[3]
+% \subsubsection{The \cs{subref} command}
+%
+% At |\captionsetup{subtype}|, we redefine |\label|.
+%    \begin{macrocode}
+\g@addto@macro\caption@subtypehook{%
+  \ifx\label\subcaption@label \else
+    \let\subcaption@ORI@label\label
+    \let\label\subcaption@label
+  \fi}
+%    \end{macrocode}
+%
+% \begin{macro}{\subcaption@label}
+% \changes{v1.1}{2011/09/12}{Redefinition of \cs{SK@} added}
+% \changes{v1.1}{2011/09/12}{Uses \cs{caption@withoptargs} now}
+% \changes{v1.1}{2016/02/20}{Unwanted space removed}
+% When a label will be placed for a sub-caption, we automatically place
+% a second one for |\subref|, too. This second label will contain
+% the sub-type counter only.
+%    \begin{macrocode}
+\newcommand*\subcaption@label{%
+  \caption@withoptargs\subcaption@@label}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\subcaption@@label[2]{%
+  \@bsphack\begingroup
+    \subcaption@ORI@label#1{#2}%
+    \let\SK@\@gobbletwo
+    \protected@edef\@currentlabel{\csname thesub\@captype\endcsname}%
+    \subcaption@ORI@label#1{sub@#2}%
+  \endgroup\@esphack}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\subref}
+% \changes{v1.1}{2011/08/14}{Caption option \opt{subrefformat=} added}
+% \changes{v1.1}{2011/08/18}{Uses \cs{caption@setoptions*} now}
+% \changes{v1.1}{2012/01/12}{Usage of \cs{caption@setoptions*} replaced by \cs{caption@setoptions}}
+% \changes{v1.1}{2012/04/09}{Revised}
+% \changes{v1.1}{2018/12/26}{Bugfix: Missing curly braces added}
+% This one calls |\ref| with the second label. (see |\subcaption@label|)
+%    \begin{macrocode}
+\DeclareRobustCommand*\subref{%
+  \@ifstar
+    {\caption@withoptargs\subcaption@ref*}%
+    {\caption@withoptargs\@subref}}
+\newcommand*\@subref[2]{%
+  \caption@ifundefined\hyperref
+    {\subcaption@ref{#1}{#2}}%
+    {\hyperref[{#2}]{\subcaption@ref{*#1}{#2}}}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\subcaption@ref[2]{%
+  \begingroup
+    \caption@setoptions{sub}%
+    \subcaption@reffmt\p@subref{\ref#1{sub@#2}}%
+  \endgroup}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newcommand*\p@subref{}
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+\DeclareCaptionOption{subrefformat}{\subcaption@setrefformat{#1}}
+%    \end{macrocode}
+%
+% \begin{macro}{\subcaption@setrefformat}
+%  |\subcaption@setrefformat|\marg{name}\par
+%  Selecting a subref format simply means saving the code (in |\subcaption@reffmt|).
+%    \begin{macrocode}
+\newcommand*\subcaption@setrefformat[1]{%
+  \@ifundefined{caption@lfmt@#1}%
+    {\caption@Error{Undefined label format `#1'}}%
+    {\expandafter\let\expandafter\subcaption@reffmt\csname caption@lfmt@#1\endcsname}}
+%    \end{macrocode}
+%    \begin{macrocode}
+\subcaption@setrefformat{simple}
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{The \cs{subfloat} command}
+%
+% \begin{macro}{\subfloat}
+% \changes{v0.4}{2008/03/01}{This macro added}
+% \changes{v1.0c}{2011/01/22}{This macro removed since it's too incompatible with the one from \package{subfig}}
+% \changes{v1.3}{2019/08/31}{This macro re-added and revised}
+% \changes{v1.3a}{2019/09/01}{\cs{ignorespaces} copied from \cs{\sf@@@subfloat}}
+%  |\subfloat|\oarg{list\_entry}\oarg{sub-caption}\marg{body}\par
+%  If \meta{sub-caption} is given, we map this to |\sub|\-|caption|\-|box|
+%  but transfer the |\label| from \meta{body} to \meta{sub-caption}.
+%  If not, we do the same as |\sub|\-|caption|\-|box| does, but use |\phantom|\-|caption| instead of |\caption|.
+%  In both cases we do a |\ignore|\-|spaces| at the end since the original implementation of |\sub|\-|float| does this, too.
+%    \begin{macrocode}
+\caption@ifundefined\subfloat{%
+%    \end{macrocode}
+%    \begin{macrocode}
+  \newcommand*\subfloat{%
+    \@ifnextchar[\@subfloat\subfloat@}
+%    \end{macrocode}
+%    \begin{macrocode}
+  \long\def\@subfloat[#1]{%
+    \@ifnextchar[{\@@subfloat{#1}}{\@@@subfloat\subcaptionbox{#1}}}
+%    \end{macrocode}
+%    \begin{macrocode}
+  \long\def\@@subfloat#1[#2]{\@@@subfloat{\subcaptionbox[{#1}]}{#2}}
+%    \end{macrocode}
+%    \begin{macrocode}
+  \newcommand\@@@subfloat[3]{%
+    \caption@getlabel#3\label{}\@nil
+    #1{#2\caption@thelabel}{\let\label\caption@gobble#3}%
+    \global\let\caption@thelabel\relax
+    \ignorespaces}
+%    \end{macrocode}
+%    \begin{macrocode}
+  \newcommand*\subfloat@[1]{%
+    \setbox\@tempboxa\hbox{#1}%
+    \caption@iiiibox\setcaptionsubtype
+      {\phantomcaption\@gobble}{\phantomcaption\@gobble}% no box with \caption
+      {}% no optional arguments for \caption
+      {}% no sub-caption
+      [\wd\@tempboxa][\caption@hj@default]%
+      {\unhbox\@tempboxa}%
+    \ignorespaces}
+%    \end{macrocode}
+%    \begin{macrocode}
+}{%
+  \PackageInfo{subcaption}{\protect\subfloat\space is already defined\@gobble}
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+%</package>
+% \fi
+%
+% \iffalse
+% --------------------------------------------------------------------------- %
+% \fi
+%
+% \Finale
+%
+\endinput
-- 
cgit v1.2.3

