summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/caption/subcaption.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/caption/subcaption.dtx')
-rw-r--r--Master/texmf-dist/source/latex/caption/subcaption.dtx868
1 files changed, 868 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/caption/subcaption.dtx b/Master/texmf-dist/source/latex/caption/subcaption.dtx
new file mode 100644
index 00000000000..0aa97c2b03b
--- /dev/null
+++ b/Master/texmf-dist/source/latex/caption/subcaption.dtx
@@ -0,0 +1,868 @@
+% \iffalse meta-comment
+%
+% This is file `subcaption.dtx'.
+%
+% Copyright (C) 2007 Axel Sommerfeldt (caption@sommerfee.de)
+%
+% --------------------------------------------------------------------------
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% This Current Maintainer of this work is Axel Sommerfeldt.
+%
+% This work consists of the files caption.ins, caption.dtx, caption2.dtx,
+% ltcaption.dtx, and subcaption.dtx, the derived files caption.sty,
+% caption2.sty, caption3.sty, ltcaption.sty, and subcaption.sty, and the
+% user manuals caption-deu.tex, caption-eng.tex, and caption-rus.tex.
+%
+% \fi
+% \CheckSum{144}
+%
+% \iffalse
+%<*driver>
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\ProvidesFile{subcaption.drv}[2007/12/06 v0.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}
+%
+\usepackage{ifpdf}
+\ifpdf
+ \usepackage{mathptmx,courier}
+ \usepackage[scaled=0.90]{helvet}
+ \addtolength\marginparwidth{15pt}
+\fi
+%
+\usepackage{array,slashbox}
+\IfFileExists{cat.eps}%
+ {\usepackage{graphicx}}%
+ {\IfFileExists{test/tlc2/cat.eps}%
+ {\usepackage{graphicx}\graphicspath{{test/tlc2/}}}%
+ {\usepackage[demo]{graphicx}}}
+%
+\usepackage{hypdoc}
+\ifpdf\usepackage{hypdestopt}\fi
+\hypersetup{pdfkeywords={LaTeX, package, subcaption},pdfstartpage={},pdfstartview={}}
+%
+\usepackage{caption}[2007/12/06] % needs v3.1f or newer
+\usepackage{subcaption}[2007/12/06]
+\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$}
+\newcommand*\x{\discretionary{-}{}{}}
+\newcommand*\xx{\discretionary{}{}{}}
+%
+\usepackage{marvosym}
+\newcommand*\MARGINSYM[1]{\hskip 1sp \marginpar{\raggedleft\textcolor{blue}{{#1}}}}
+\newenvironment{info}{\par\bigskip\csname info*\endcsname}{\csname endinfo*\endcsname}
+\newenvironment{info*}%
+ {\small
+ \MARGINSYM{\vbox to \ht\strutbox{\LARGE\Info}}%
+ \ignorespaces}%
+ {\par}
+%
+\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
+% \GetFileInfo{subcaption.sty}
+%
+% \title{\texorpdfstring{\Thispackage\thanks{%^^A
+% This package has version number \fileversion, last revised \filedate.}}%^^A
+% {The subcaption package}}
+% \author{Axel Sommerfeldt\\
+% \href{mailto:caption@sommerfee.de}{\texttt{caption@sommerfee.de}}}
+% \date{\docdate}
+% \maketitle
+%
+% \begin{abstract}
+% This tiny package demonstrates the sub-caption feature of the
+% \package{caption} package.
+% \end{abstract}
+%
+% \subsection*{Introduction}
+% \begin{info*}
+% Prepared with either |\Declare|\x|Caption|\x|Sub|\x|Type| (offered by the
+% \package{caption} package) or |\new|\x|sub|\x|float| (offered by the
+% \package{subfig} package), the caption package option |subtype| becames
+% available, causing |\caption| to typeset a sub-caption instead of an
+% ordinary one.\par
+% This package demonstrates the usage of |\Declare|\x|Caption|\x|Sub|\x|Type|,
+% |\caption|\x|setup{sub|\x|type}|, and the internal hook
+% |\caption@sub|\x|type|\x|hook|.
+% \end{info*}
+%
+% \setcounter{tocdepth}{2}
+% \tableofcontents
+%
+% \vfill
+% \emph{Please note:}
+% This package is incompatible with the \package{subfigure} and \package{subfig}
+% packages.
+% \medskip
+%
+% \clearpage
+% \section{The user interface}
+%
+% Just load this package after the \package{caption} package, e.g.:
+% \begin{quote}
+% |\usepackage|\oarg{options}|{caption}|\\
+% |\usepackage|\oarg{options}|{subcaption}|
+% \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}
+% \end{quote}
+%
+% \bigskip
+%
+% The default settings for |sub|captions are:
+% \begin{quote}
+% |margin=0pt,font+=small,labelformat=parens,labelsep=space,|\\
+% |skip=6pt,list=false,hypcap=false|
+% \end{quote}
+%
+% Options specified with |\usepackage[|\ldots|]{subcaption}| and
+% |\captionsetup[sub]{|\ldots|}| will override the ones specified by
+% |\captionsetup{|\ldots|}| and |\captionsetup[figure]{|\ldots|}|,
+% but are again overwritten by |\captionsetup[subfigure]{|\ldots|}|
+% (same for `table'). So finally we have the following order how
+% settings for subcaptions 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,font+=small,|\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 |subfigure| or |subtable|)}
+% \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 |subtable| 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}
+%
+% \vfill\clearpage
+% \subsection{The \cs{subcaption} command}
+%
+% \DescribeMacro\subcaption
+% The easiest and most flexible method 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}
+% \captionsetup{type=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{info}
+% Actually the |\subcaption| command is just a simple combination of
+% |\caption|\x|setup{sub|\x|type*}| and |\caption|.
+% Analogous to the |type| option, the |subtype| option (both offered by the
+% \package{caption} package) 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.\iffalse\footnote{\emph{Note:}
+% Since \cs{captionsetup}\csmarg{subtype} is part of the \package{caption}
+% package, it works in coorparation with the \package{subfig} package as
+% well.}\fi
+% \end{info}
+%
+% \vfill\clearpage
+% \subsection{The subfigure \& subtable environments}
+%
+% \DescribeEnv{subfigure}
+% \DescribeEnv{subtable}
+% After loading \thispackage\ the new environments |subfigure| and
+% |subtable| are available, which have the same (optional \& mandatory)
+% arguments as the |minipage| environment.
+% Inside these environments you use the ordinary |\caption| command
+% for typesetting captions. So this example is identical to the
+% last one, but uses the |subfigure| 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}
+% Using the |subfigure| or |subtable| environment instead of |\subcaption|
+% has two (little) advantages:
+% \begin{itemize}
+% \item You can override the setttings for a specific subcaption
+% with a |\captionsetup| inside the |subfigure| or |subtable| environment, e.g.:
+% \begin{quote}
+% \ldots\\
+% |\begin{subfigure}[b]{.5\linewidth}|\\
+% | \centering\large A|\\
+% | |\textcolor{blue}{\cs{captionsetup}\csmarg{skip=3pt}}\\
+% | \caption{A subfigure}\label{fig:1a}|\\
+% |\end{subfigure}|\\
+% \ldots
+% \end{quote}
+% \item Hyperlinks pointing 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}
+%
+% \bigskip
+%
+% \begin{info}
+% The |subfigure| \& |subtable| environments are just simple minipage
+% environments with |\caption|\x|setup|\xx|{subtype}| as first contents line.
+% These environments are defined with the help of
+% |\caption@For{subtypelist}|, which executes code for every sub-type
+% declared with |\DeclareCaptionSubType|.
+% \end{info}
+%
+% \vfill\clearpage
+% \subsection{The \cs{subcaptionbox} command}
+%
+% \DescribeMacro\subcaptionbox
+% A more powerful (but less flexible) way of setting sub-figures is
+% offered by the |\subcaptionbox| command. 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 |\parbox|; 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 |\raggedright|),
+% `r' (for |\raggedleft|), or `s' (for no special justification).
+% The default is `c'.
+% (But you can use any justification defined with
+% |\DeclareCaptionJustification| as well, e.g.~`|centerlast|'.)
+% \end{small}
+%
+% \bigskip
+%
+% Using |\subcaptionbox|, 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 |hypcap=|
+% 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}
+% \captionsetup{type=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 |\captionbox|,
+% increasing the width of the resulting box:
+% \begin{quote}
+% | |\ldots\\
+% | \subcaptionbox{A cat\label{cat}}|\\
+% | [2.5cm]{\includegraphics{cat}}|\\
+% | |\ldots
+% \end{quote}
+% \noindent\begin{minipage}{\linewidth}
+% \captionsetup{type=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
+% |\textwidth|, looks mis-aligned with respect to the sub-captions.
+% This can (again) be solved by using the optional arguments of |\captionbox|,
+% giving both boxes the same width, for example:
+% \begin{quote}
+% | |\ldots\\
+% | \subcaptionbox{A cat\label{cat}}|\\
+% | [.4\linewidth]{\includegraphics{cat}}%|\\
+% | \subcaptionbox{An elephant\label{elephant}}|\\
+% | [.4\linewidth]{\includegraphics{elephant}}|\\
+% | |\ldots
+% \end{quote}
+% \noindent\begin{minipage}{\linewidth}
+% \captionsetup{type=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
+%
+% \begin{info}
+% The |\subcaptionbox| is a |\parbox| with |\caption|\x|setup|\xx|{subtype}|
+% as first contents line. \iffalse See implementation for details.\fi
+% \end{info}
+%
+% \vfill\clearpage
+% \subsection{The \cs{subref} command}
+%
+% 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 defined with the starred variant
+% |\DeclareCaptionSubType*|, both |\ref| and |\subref| gives the same result.
+% \end{small}
+%
+% \begin{info}
+% The |\subref| command demonstrates the usage of |\caption@subtypehook|
+% which will be called during |\captionsetup{subtype}|.
+% \end{info}
+%
+% \iffalse\vfill\clearpage\fi
+% \subsection{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~\footnote{%^^A
+% \cs{newsubfloat} offered by the \package{subfig} package\cite{subfig}
+% could be used for this purpose as well.}
+% \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|\x|Caption|\x|Type|) this will be done automatically
+% by this package, but for others (e.g.~defined with |\newfloat| offered by the
+% \package{float} package or |\Declare|\x|New|\x|Float|\x|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\ command
+% name here which converts a counter to a text value, e.g. |arabic|, |roman|,
+% |Roman|, |alph|, |Alph|, |fnsymbol|, \ldots
+%
+% But |\DeclareCaptionSubType| is not for defining new sub-caption types only,
+% 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[3]
+% will give you sub-captions in |table|s like these ones:
+% \par\bigskip
+% \noindent\begin{minipage}{\linewidth}
+% \captionsetup{type=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{info}
+% |\DeclareCaptionSubType| is an integral part of the \package{caption}
+% package kernel.
+% \end{info}
+%
+% \iffalse\vfill\clearpage\fi
+% \subsection{Where do hyperlinks jump?}
+% \label{hypcap}
+%
+% For the |subfigure| \& |subtable| environments and |\subcaptionbox| boxes
+% (and own constructs which use |\captionsetup{subtype}|) the
+% hyperlink anchors will be placed in respect to the |hypcap=| setting.
+% While usage of this option is straight-forward ordinary captions,
+% the usage for sub-captions depends on the setting for 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}.)}
+%
+% \iffalse
+% --------------------------------------------------------------------------- %
+% \fi
+%
+% \pagebreak[2]
+% \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.
+% \iffalse
+% \bibitem{floatrow}
+% Olga Lapko:\\
+% \href{http://tug.ctan.org/tex-archive/macros/latex/contrib/floatrow/}%
+% {\emph{The floatrow package documentation}},
+% 2007/08/24
+% \fi
+% \bibitem{hyperref}
+% Sebastian Rahtz \& Heiko Oberdiek:\\
+% \href{http://tug.ctan.org/tex-archive/macros/latex/contrib/hyperref/}%
+% {\emph{Hypertext marks in \LaTeX}},
+% November 12, 2007
+% \bibitem{hypcap}
+% Heiko Oberdiek:\\
+% \href{http://tug.ctan.org/tex-archive/macros/latex/contrib/oberdiek/}%
+% {\emph{The hypcap package -- Adjusting anchors of captions}},
+% 2007/04/09
+% \bibitem{subfig}
+% Steven D. Cochran:\\
+% \href{http://tug.ctan.org/tex-archive/macros/latex/contrib/subfig/}%
+% {\emph{The subfig package}},
+% 2005/07/05
+% \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}}
+%
+% \newcommand*\Note[2][Note]{\par{\small\emph{#1:} #2}}
+%
+% \iffalse
+% --------------------------------------------------------------------------- %
+% \fi
+%
+% \vfill\clearpage
+% \section{The implementation}
+% \iffalse
+%<*package>
+% \fi
+%
+% \subsection{Identification}
+%
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\ProvidesPackage{subcaption}[2007/12/06 v0.3 Adding subcaptions (AR)]
+% \end{macrocode}
+%
+% \subsection{Initial code}
+%
+% We need the \package{caption} package, so we issue an error here if it's
+% not loaded yet.
+% \begin{macrocode}
+\@ifundefined{caption@subtypehook}{% we need caption v3.1f or newer
+ \PackageError{subcaption}{`caption' package not loaded\MessageBreak
+ (which is needed by this package)\@gobble}{%
+ If you do not understand this error, please take a closer look\MessageBreak
+ at the documentation of the `subcaption' package.\MessageBreak
+ \@ehc}%
+ \endinput}{}
+% \end{macrocode}
+%
+% \iffalse
+% \subsection{Declaration of options}
+% We do not have own options.
+% \fi
+%
+% \subsection{Execution of options}
+%
+% We map |\caption@setkeys| to |\captionsetup[sub]| so |\caption@ExecuteOptions|
+% \& |\caption@ProcessOptions| adds the options to the `|sub|' option list
+% instead of executing them immediately.
+% \begin{macrocode}
+\let\caption@setkeys@ORI\caption@setkeys
+\renewcommand\caption@setkeys[2]{\captionsetup[sub]{#2}}
+% \end{macrocode}
+% \begin{macrocode}
+\caption@ExecuteOptions{subcaption}{%
+ font+=small,labelformat=parens,labelsep=space,skip=6pt,list=0,hypcap=0}
+\caption@ProcessOptions*{subcaption}
+% \end{macrocode}
+% \begin{macrocode}
+\let\caption@setkeys\caption@setkeys@ORI
+\let\caption@setkeys@ORI\@undefined
+% \end{macrocode}
+%
+% \subsection{Main code}
+%
+% We call |\DeclareCaptionSubType| for |figure|, |table|,
+% and every caption type declared with |\DeclareCaptionType| here.
+% \begin{macrocode}
+\@ifundefined{c@figure}{}{\DeclareCaptionSubType{figure}}
+\@ifundefined{c@table}{}{\DeclareCaptionSubType{table}}
+\caption@For{typelist}{\DeclareCaptionSubType{#1}}
+% \end{macrocode}
+%
+% \pagebreak[3]
+% \subsubsection{The \cs{subcaption} command}
+%
+% \begin{macro}{\subcaption}
+% Without a prefacing |\captionsetup{subtype}|, \cs{subcaption} is some kind
+% of |\captionof{sub\@captype}|.
+% \Note{Like \cs{captionof}, this command is designed to be used inside an
+% own group!}
+% \begin{macrocode}
+\newcommand*\subcaption{\captionsetup{subtype*}\caption}
+% \end{macrocode}
+% But with a prefacing |\captionsetup{subtype}|, \cs{subcaption} is simply
+% |\caption|.
+% \begin{macrocode}
+\g@addto@macro\caption@subtypehook{\let\subcaption\caption}
+% \end{macrocode}
+% \end{macro}
+%
+% \pagebreak[3]
+% \subsubsection{The subfigure \& subtable environments}
+%
+% \begin{macro}{subfigure}
+% \begin{macro}{subtable}
+% This is just an ordinary \env{minipage} environment with
+% |\captionsetup{subtype}| as first contents line.
+% It will be defined using the helper macro |\caption@For{sub|\x|type|\x|list}|
+% offered by the \package{caption} kernel, so for every caption type
+% declared with |\Declare|\x|Caption|\x|Type| a corresponding `sub' environment
+% will be defined automatically.
+% \begin{macrocode}
+\caption@For{subtypelist}{%
+ \newenvironment{sub#1}%
+ {\caption@withoptargs\subcaption@minipage}%
+ {\endminipage}}%
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand*\subcaption@minipage[2]{%
+ \minipage#1{#2}%
+ \captionsetup{subtype}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \pagebreak[3]
+% \subsubsection{The \cs{subcaptionbox} command}
+%
+% \begin{macro}{\subcaptionbox}
+% A |\parbox| with contents and sub-caption, separated by an invisible |\hrule|.
+% \begin{macrocode}
+\newcommand*\subcaptionbox{\caption@withoptargs\subcaption@box}
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand\subcaption@box[2]{%
+ \@testopt{\subcaption@ibox{#1}{#2}}{\wd\@tempboxa}}
+% \end{macrocode}
+% \begin{macrocode}
+\long\def\subcaption@ibox#1#2[#3]{%
+ \@testopt{\subcaption@iibox{#1}{#2}{#3}}\subcaptionbox@hj@default}
+% \end{macrocode}
+% \begin{macrocode}
+\long\def\subcaption@iibox#1#2#3[#4]#5{%
+ \setbox\@tempboxa\hbox{#5}%
+ \begingroup
+ \captionsetup{subtype*}% set \caption@position
+ \caption@iftop{%
+ \endgroup
+ \parbox[t]{#3}{%
+ \captionsetup{subtype,position=t}%
+ \vbox{\caption#1{#2}}%
+ \hrule\@height\z@
+ \csname caption@hj@#4\endcsname
+ \unhbox\@tempboxa}%
+ }{%
+ \endgroup
+ \parbox[b]{#3}{%
+ \captionsetup{subtype,position=b}%
+ \csname caption@hj@#4\endcsname
+ \unhbox\@tempboxa
+ \hrule\@height\z@
+ \vtop{\caption#1{#2}}}%
+ }}
+% \end{macrocode}
+% \begin{macrocode}
+\providecommand*\caption@hj@c{\centering}
+\providecommand*\caption@hj@l{\raggedright}
+\providecommand*\caption@hj@r{\raggedleft}
+\providecommand*\caption@hj@s{}
+\newcommand*\subcaptionbox@hj@default{c}
+% \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}
+% 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[1]{%
+ \@bsphack\begingroup
+ \subcaption@ORI@label{#1}%
+ \protected@edef\@currentlabel{\csname thesub\@captype\endcsname}%
+ \subcaption@ORI@label{sub@#1}%
+ \endgroup\@esphack}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\subref}
+% This simply calls |\ref| with the second label. (see |\subcaption@label|)
+% \begin{macrocode}
+\DeclareRobustCommand*\subref{\caption@withoptargs\subcaption@ref}
+\newcommand*\subcaption@ref[2]{\ref#1{sub@#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+%</package>
+% \fi
+%
+% \iffalse
+% --------------------------------------------------------------------------- %
+% \fi
+%
+% \Finale
+%
+\endinput