Permalink
Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
443 lines (442 sloc) 16 KB
%%
%% This is file `caption2.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% caption2.dtx (with options: `package')
%%
%% Copyright (C) 1994-2012 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.
%%
\NeedsTeXFormat{LaTeX2e}[1994/12/01]
\ProvidesPackage{caption2}[2011/08/12 v2.2d Customising captions (AR)]
\PackageWarning{caption2}{%
****************************************************\MessageBreak
THIS PACKAGE IS OBSOLETE:\MessageBreak
This package attempts to provide an `caption2'\MessageBreak
package v2.0/2.1 author environment so that OLD\MessageBreak
documents can be successfully processed. It should\MessageBreak
NOT be used for NEW documents! New documents should\MessageBreak
use the regular `caption' package v3.x instead.\MessageBreak
****************************************************\@gobbletwo}%
\RequirePackage{caption3}[2007/09/01] % needs v3.1 or newer
\@ifpackageloaded{caption}{%
\PackageError{caption2}{%
You can't use both, the (current) caption *and*\MessageBreak
the (obsolete) caption2 package}\caption@eh
\endinput
}{}
\newcommand*\captionlabeldelim{}
\newcommand*\captionlabelsep{}
\newcommand*\ifcaptionwidth{\ifdim\captionwidth>\z@}
\let\captionindent\caption@indent
\def\ifcaptionlabel{%
\ifcaption@star
\@tempswafalse
\else
\@tempswatrue
\fi
\if@tempswa}
\def\captionlabeltrue{\caption@starfalse}
\def\captionlabelfalse{\caption@startrue}
\def\ifonelinecaptions{%
\caption@ifslc{\@tempswatrue}{\@tempswafalse}%
\if@tempswa}
\def\onelinecaptionstrue{\caption@setbool{slc}{1}}
\def\onelinecaptionsfalse{\caption@setbool{slc}{0}}
\newif\ifignoreLTcapwidth
\newcommand*\normalcaptionparams{%
\let\captionsize\@empty
\renewcommand*\captionfont{\captionsize}%
\let\captionlabelfont\@empty
\renewcommand*\captionlabeldelim{:}%
\renewcommand*\captionlabelsep{\space}%
\setcaptionmargin\z@
\setlength\captionindent\z@
\onelinecaptionstrue}
\newcommand*\defcaptionstyle[1]{%
\@namedef{caption@@#1}}
\newcommand*\newcaptionstyle[1]{%
\expandafter\ifx\csname caption@@#1\endcsname\relax
\expandafter\defcaptionstyle
\else
\PackageError{caption2}{Caption style `#1' already defined}{\caption@eh}%
\expandafter\@gobbletwo
\fi
{#1}}
\newcommand*\renewcaptionstyle[1]{%
\expandafter\ifx\csname caption@@#1\endcsname\relax
\PackageError{caption2}{Caption style `#1' undefined}{\caption@eh}%
\expandafter\@gobbletwo
\else
\expandafter\defcaptionstyle
\fi
{#1}}
\newcommand*\dummycaptionstyle[2]{%
\defcaptionstyle{#1}{%
\expandafter\ifx\csname caption@@\caption@style\expandafter\endcsname%
\csname caption@@#1\endcsname
\PackageError{caption2}{You can't use the caption style `#1' directy}{%
The caption style `#1' is only a dummy and does not really exists.%
\MessageBreak You have to redefine it (with \protect\renewcaptionstyle)
before you can select\MessageBreak it with \protect\captionstyle.
\space\caption@eh}%
\else
#2\usecaptionstyle\caption@style
\fi}}
\newcommand*\captionstyle[1]{%
\expandafter\ifx\csname caption@@#1\endcsname\relax
\PackageError{caption2}{Undefined caption style `#1'}{\caption@eh}%
\else
\def\caption@style{#1}%
\fi}
\newcaptionstyle{normal}{\caption@make{normal}}
\newcaptionstyle{center}{\caption@make{center}}
\newcaptionstyle{centerlast}{\caption@make{centerlast}}
\newcaptionstyle{flushleft}{\caption@make{flushleft}}
\newcaptionstyle{flushright}{\caption@make{flushright}}
\newcaptionstyle{hang}{\caption@make{hang}}
\newcaptionstyle{hang+center}{\caption@make{hang@center}}
\newcaptionstyle{hang+centerlast}{\caption@make{hang@centerlast}}
\newcaptionstyle{hang+flushleft}{\caption@make{hang@flushleft}}
\newcaptionstyle{indent}{\caption@make{indent}}
\newcommand*\caption@makecaption[1]{%
\usecaptionmargin
\ifcaptionlabel
\def\caption@label{%
{\captionlabelfont\captionlabel\captionlabeldelim}\captionlabelsep}%
\else
\let\caption@label\@empty
\fi
\captionfont
\onelinecaption
{\caption@label\captiontext}%
{\parbox[b]\captionlinewidth{\strut\@nameuse{caption@@@#1}\par}\par}}
\newcommand*\caption@@@normal{%
\caption@label\captiontext}
\newcommand*\caption@@@center{%
\centering\caption@label\captiontext}%
\newcommand*\caption@@@centerlast{%
\centerlast\caption@label\captiontext}
\newcommand*\caption@@@flushleft{%
\raggedright\caption@label\captiontext}%
\newcommand*\caption@@@flushright{%
\raggedleft\caption@label\captiontext}%
\newcommand*\caption@@@hang{%
\sbox\@tempboxa{\caption@label}%
\hangindent\wd\@tempboxa\noindent
\usebox\@tempboxa\caption@hangplus\captiontext}
\newcommand*\caption@hangplus{}
\newcommand*\caption@@@hang@center{%
\let\caption@hangplus\centering\caption@@@hang}
\newcommand*\caption@@@hang@centerlast{%
\let\caption@hangplus\centerlast\caption@@@hang}
\newcommand*\caption@@@hang@flushleft{%
\let\caption@hangplus\raggedright\caption@@@hang}
\newcommand*\caption@@@indent{%
\hangindent\captionindent\noindent
\caption@label\captiontext}
\DeclareOption{normal}{\captionstyle{normal}}
\DeclareOption{center}{\captionstyle{center}}
\DeclareOption{centerlast}{\captionstyle{centerlast}}
\DeclareOption{flushleft}{\captionstyle{flushleft}}
\DeclareOption{flushright}{\captionstyle{flushright}}
\DeclareOption{anne}{\ExecuteOptions{centerlast}}
\DeclareOption{hang}{\captionstyle{hang}}
\DeclareOption{hang+center}{\captionstyle{hang+center}}
\DeclareOption{hang+centerlast}{\captionstyle{hang+centerlast}}
\DeclareOption{hang+flushleft}{\captionstyle{hang+flushleft}}
\DeclareOption{isu}{\ExecuteOptions{hang}}
\DeclareOption{indent}{\captionstyle{indent}}
\DeclareOption{scriptsize}{\g@addto@macro\captionsize\scriptsize}
\DeclareOption{footnotesize}{\g@addto@macro\captionsize\footnotesize}
\DeclareOption{small}{\g@addto@macro\captionsize\small}
\DeclareOption{normalsize}{\g@addto@macro\captionsize\normalsize}
\DeclareOption{large}{\g@addto@macro\captionsize\large}
\DeclareOption{Large}{\g@addto@macro\captionsize\Large}
\DeclareOption{up}{\g@addto@macro\captionlabelfont\upshape}
\DeclareOption{it}{\g@addto@macro\captionlabelfont\itshape}
\DeclareOption{sl}{\g@addto@macro\captionlabelfont\slshape}
\DeclareOption{sc}{\g@addto@macro\captionlabelfont\scshape}
\DeclareOption{md}{\g@addto@macro\captionlabelfont\mdseries}
\DeclareOption{bf}{\g@addto@macro\captionlabelfont\bfseries}
\DeclareOption{rm}{\g@addto@macro\captionlabelfont\rmfamily}
\DeclareOption{sf}{\g@addto@macro\captionlabelfont\sffamily}
\DeclareOption{tt}{\g@addto@macro\captionlabelfont\ttfamily}
\DeclareOption{oneline}{\onelinecaptionstrue}
\DeclareOption{nooneline}{\onelinecaptionsfalse}
\newcommand*\caption@setpackage[1]{\@namedef{caption@pkt@#1}}
\DeclareOption{float}{%
\caption@twozerofalse\caption@setpackage{float}{1}}
\DeclareOption{longtable}{%
\caption@twozerofalse\caption@setpackage{longtable}{1}}
\DeclareOption{subfigure}{%
\caption@twozerofalse\caption@setpackage{subfigure}{1}}
\DeclareOption{none}{\caption@twozerofalse
\caption@setpackage{float}{0}\caption@setpackage{longtable}{0}%
\caption@setpackage{subfigure}{0}}
\DeclareOption{all}{\ExecuteOptions{float,longtable,subfigure}}
\newif\ifcaption@ruled
\DeclareOption{ruled}{\caption@ruledtrue}
\DeclareOption{boxed}{}
\DeclareOption{ignoreLTcapwidth}{\ignoreLTcapwidthtrue}
\DeclareOption{debug}{\captionsetup{debug}}
\newif\ifcaption@twozero
\normalcaptionparams
\ExecuteOptions{none,normal}
\caption@twozerotrue
\ProcessOptions*
\ifcaption@twozero
\PackageInfo{caption2}{Running in caption2 v2.0 compatibility mode}
\fi
\def\captionof{\@ifstar{\caption@of{\caption*}}{\caption@of\caption}}
\newcommand*\caption@of[2]{\def\@captype{#2}#1}
\caption@ifundefined\abovecaptionskip{%
\newlength\abovecaptionskip\setlength\abovecaptionskip{10\p@}}{}
\caption@ifundefined\belowcaptionskip{%
\newlength\belowcaptionskip\setlength\belowcaptionskip{0\p@}}{}
\newdimen\captionlinewidth
\newdimen\realcaptionwidth
\newcommand*\usecaptionmargin{%
\ifcaptionwidth
\leftskip\captionlinewidth
\advance\leftskip by -\captionwidth
\divide\leftskip by 2
\rightskip\leftskip
\captionlinewidth\captionwidth
\else
\leftskip\captionmargin
\rightskip\captionmargin
\advance\captionlinewidth by -2\captionmargin
\fi
\realcaptionwidth\captionlinewidth}
\newcommand\onelinecaption[1]{%
\let\next\@firstofone
\ifonelinecaptions
\sbox\@tempboxa{#1}%
\ifdim\wd\@tempboxa >\captionlinewidth
\else
\def\next{{\centering\usebox\@tempboxa\par}\@gobble}%
\fi
\fi\next}
\newcommand*\usecaptionstyle[1]{%
\caption@ifundefined\captiontext{%
\PackageError{caption2}{You can't use \protect#1
in normal text}{The usage of \protect#1 is only
allowed inside code declared with\MessageBreak \protect\defcaptionstyle,
\protect\newcaptionstyle \space or \protect\renewcaptionstyle.
\space\caption@eh}
}{%
\@ifundefined{caption@@#1}%
{\PackageError{caption2}{Caption style `#1' undefined}{\caption@eh}}%
{\let\caption@make\caption@makecaption
\@nameuse{caption@@#1}}%
}}
\renewcommand\@makecaption[2]{%
\vskip\abovecaptionskip
\captionlinewidth\hsize
\realcaptionwidth\hsize
\def\captionlabel{#1}%
\def\captiontext{#2}%
\usecaptionstyle\caption@style
\vskip\belowcaptionskip}
\newcommand*\caption@ifpackage[3]{%
\if1\@nameuse{caption@pkt@#1}%
\@ifundefined{#2}%
{\let\next\AtBeginDocument}%
{\let\next\@firstofone}%
\else\ifcaption@twozero
\@ifundefined{#2}%
{#3\let\next\@gobble}%
{\let\next\@firstofone}%
\else
#3\let\next\@gobble
\fi\fi
\expandafter\let\csname caption@pkt@#1\endcsname\undefined
\caption@ifdebug{%
\ifx\next\@gobble\PackageInfo{caption2}{#1 => gobble}%
\else\ifx\next\@firstofone\PackageInfo{caption2}{#1 => firstofone}%
\else\ifx\next\AtBeginDocument\PackageInfo{caption2}{#1 => AtBeginDocument}%
\fi\fi\fi}{}%
\next}
\caption@ifpackage{float}{floatc@plain}{}{%
\ifx\floatc@plain\relax
\PackageWarning{caption2}{%
Option `float' was set but there is no float package loaded}
\else
\PackageInfo{caption2}{float package v1.2 (or newer) detected}
\newcommand\caption@floatc[3]{%
\ifx\captionlabelfont\@empty
\let\captionlabelfont\@fs@cfont
\fi
\captionlinewidth\hsize
\realcaptionwidth\hsize
\def\captionlabel{#2}%
\def\captiontext{#3}%
\usecaptionstyle{#1}}
\renewcommand*\floatc@plain{\caption@floatc{\caption@style}}
\ifcaption@ruled
\dummycaptionstyle{ruled}{\onelinecaptionsfalse\setcaptionmargin{\z@}}%
\else
\newcaptionstyle{ruled}{%
\ifcaptionlabel
{\@fs@cfont\captionlabel}\space%
\fi\captiontext\par}%
\fi
\renewcommand*\floatc@ruled{\caption@floatc{ruled}}
\renewcommand*\caption@of[2]{\def\@captype{#2}%
\@ifundefined{fst@#2}{}{%
\@nameuse{fst@#2}%
\caption@ifundefined\@float@setevery{}{\@float@setevery{#2}}%
\let\caption@fs@capt\@fs@capt
\let\@fs@capt\caption@of@float}%
#1}
\newcommand\caption@of@float[2]{\egroup
\vskip\abovecaptionskip
\normalsize\caption@fs@capt{#1}{#2}%
\vskip\belowcaptionskip
\bgroup}%
\fi}
\caption@ifpackage{longtable}{LT@makecaption}{}{%
\ifx\LT@makecaption\relax
\PackageWarning{caption2}{%
Option `longtable' was set but there is no longtable package loaded}
\else
\PackageInfo{caption2}{longtable package v3.15 (or newer) detected}
\dummycaptionstyle{longtable}{}
\renewcommand\LT@makecaption[3]{%
\LT@mcol\LT@cols c{\hbox to\z@{\hss\parbox[t]\hsize{%
\ifignoreLTcapwidth
\else
\setcaptionwidth\LTcapwidth
\fi
\captionlinewidth\hsize
\realcaptionwidth\hsize
\captionlabelfalse#1\captionlabeltrue
\def\captionlabel{#2}%
\def\captiontext{#3}%
\usecaptionstyle{longtable}%
\endgraf\vskip\baselineskip}%
\hss}}}
\fi}
\newcommand*\setsubcapstyle{%
\caption@ifundefined\subcapraggedrightfalse{%
\newif\ifsubcapraggedright}{}%
\ifsubcaphang
\ifsubcapcenter
\subcapstyle{hang+center}%
\else\ifsubcapcenterlast
\subcapstyle{hang+centerlast}%
\else\ifsubcapraggedright
\subcapstyle{hang+flushleft}%
\else
\subcapstyle{hang}%
\fi\fi\fi
\else\ifsubcapcenter
\subcapstyle{center}%
\else\ifsubcapcenterlast
\subcapstyle{centerlast}%
\else\ifsubcapraggedright
\subcapstyle{flushleft}%
\else
\subcapstyle{normal}%
\fi\fi\fi\fi}
\newcommand\caption@makesubcaption[2]{%
\renewcommand*\captionfont{\subcapsize\subcapfont}%
\renewcommand*\captionlabelfont{\normalfont\subcapsize\subcaplabelfont}%
\let\captionlabeldelim\subcaplabeldelim
\let\captionlabelsep\subcaplabelsep
\ifsubfigcapwidth
\setcaptionwidth\subfigcapwidth
\else
\setcaptionmargin\subfigcapmargin
\fi
\setlength\captionmargin\subfigcapmargin
\setlength\captionwidth\subfigcapwidth
\captionindent\subcapindent
\ifsubcapnooneline
\onelinecaptionsfalse
\else
\onelinecaptionstrue
\fi
\hbox to\@tempdima{%
\caption@subfig@hss\parbox[t]\@tempdima{%
\captionlinewidth\@tempdima
\realcaptionwidth\@tempdima
\captionlabeltrue
\def\captionlabel{#1}%
\def\captiontext{\ignorespaces #2}%
\usecaptionstyle\caption@substyle}%
\caption@subfig@hss}}
\caption@ifpackage{subfigure}{@makesubfigurecaption}{%
\let\setsubcapstyle\undefined
\let\caption@makesubcaption\undefined}{%
\ifx\@makesubfigurecaption\relax
\PackageWarning{caption2}{%
Option `subfigure' was set but there is no subfigure package loaded}
\let\setsubcapstyle\undefined
\let\caption@makesubcaption\undefined
\else
\ifx\subcapfont\undefined
\PackageInfo{caption2}{subfigure package v2.0 detected}
\let\subcapfont\@empty
\newcommand*\subfigcapwidth{\z@}
\newcommand*\setsubcapmargin{%
\subfigcapwidthfalse
\renewcommand*\subfigcapmargin}
\newcommand*\setsubcapwidth{%
\subfigcapwidthtrue
\renewcommand*\subfigcapwidth}
\newcommand*\subcaplabelsep{\space}
\let\caption@subfig@hss\hfil
\else
\PackageInfo{caption2}{subfigure package v2.1 (or newer) detected}
\newdimen\subfigcapwidth
\newcommand*\setsubcapmargin{%
\subfigcapwidthfalse
\setlength\subfigcapmargin}
\newcommand*\setsubcapwidth{%
\subfigcapwidthtrue
\setlength\subfigcapwidth}
\newcommand*\subcaplabelsep{\hskip\subfiglabelskip}
\let\caption@subfig@hss\hss
\fi
\newif\ifsubfigcapwidth
\newdimen\subcapindent
\newcommand*\subcaplabeldelim{}
\newcommand*\subcapstyle[1]{%
\expandafter\ifx\csname caption@@#1\endcsname\relax
\PackageError{caption2}{Undefined caption style `#1'}{\caption@eh}%
\else
\def\caption@substyle{#1}%
\fi}
\setsubcapstyle
\renewcommand*\@thesubfigure{\thesubfigure}
\renewcommand*\@thesubtable{\thesubtable}
\let\@makesubfigurecaption\caption@makesubcaption
\let\@makesubtablecaption\caption@makesubcaption
\fi}
\let\caption@ifpackage\undefined
\endinput
%%
%% End of file `caption2.sty'.