diff options
author | Karl Berry <karl@freefriends.org> | 2006-05-31 16:48:45 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-05-31 16:48:45 +0000 |
commit | 5183558ea817194c76ec71a3c8310ae6f06f5a69 (patch) | |
tree | 93072135851a0cd8583735dc3807752e76c65f3b /Master/texmf-dist/source/latex/caption/caption2.dtx | |
parent | 96d66bf64706ae450b1d2f7993ccfbff038c232d (diff) |
caption 3.0j
git-svn-id: svn://tug.org/texlive/trunk@1627 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/caption/caption2.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/caption/caption2.dtx | 829 |
1 files changed, 808 insertions, 21 deletions
diff --git a/Master/texmf-dist/source/latex/caption/caption2.dtx b/Master/texmf-dist/source/latex/caption/caption2.dtx index c96a7635a23..4ac3b7c8ed6 100644 --- a/Master/texmf-dist/source/latex/caption/caption2.dtx +++ b/Master/texmf-dist/source/latex/caption/caption2.dtx @@ -2,7 +2,7 @@ % % This is file `caption2.dtx'. % -% Copyright (C) 1994-2004 Axel Sommerfeldt (caption@sommerfeldt.net) +% Copyright (C) 1994-2005 Axel Sommerfeldt (caption@sommerfee.de) % % -------------------------------------------------------------------------- % @@ -27,6 +27,7 @@ % % \iffalse %<*driver> +\NeedsTeXFormat{LaTeX2e}[1994/12/01] \documentclass{ltxdoc} \setlength\parindent{0pt} \setlength\parskip{\smallskipamount} @@ -40,6 +41,8 @@ % \usepackage{caption2}[2004/04/16] % +%<+driver>\OnlyDescription +% \begin{document} \DocInput{caption2.dtx} \end{document} @@ -55,8 +58,8 @@ % \GetFileInfo{caption2.sty} % \title{The \thispackage\ package\thanks{This package has version number % \fileversion, last revised \filedate.}} -% \author{Axel Sommerfeldt\\\texttt{caption@sommerfeldt.net}} -% \date{2004/08/17} +% \author{Axel Sommerfeldt\\\texttt{caption@sommerfee.de}} +% \date{2005/11/02} % \maketitle % % \changes{v2.0}{ 9 Oct 95}{New experimental version: Many new commands and features} @@ -66,30 +69,62 @@ % \changes{v2.1a}{12 Nov 03}{Some minor bug fixes and improved compatibility to v2.0} % \changes{v2.1b}{16 Apr 04}{Some minor bug fixes and improved compatibility to v2.0} % \changes{v2.1c}{10 May 04}{Some minor bug fixes and improved compatibility to v2.0} +% \changes{v2.1d}{ 3 Oct 05}{Some superfluous brackets removed; warning added} % % \providecommand\LaTeXcomp{The \LaTeX{} Companion} % % \section*{This package is obsolete!} % % The \package{caption2} package used to be an experimental side-version of -% the regular \package{caption} package and has been superseed by the new -% release of the regular \package{caption} package version \mbox{3.0} in -% December 2003. +% the regular \package{caption} package. It was made public as beta test version +% without documentation in 1995 because of the demand for new features and +% adaptations to other packages like the \package{longtable} and +% \package{subfigure} package. +% +% Even in the next seven years I found no time to reintegrate some of the +% well-tried features into the regular \package{caption} package. So I +% decided to release a version $2.1$ of the \package{caption2} package in 2002 +% instead, which included some minor bug fixes and adaptations to the new +% version $2.1$ of the \package{subfigure} package. Furthermore I started +% to write a documentation for this package, but unfortunately did not get +% very far with this\ldots % -% \package{caption2} is still some kind of supported, that means it will be -% part of future releases and bugs will still be fixed, so existing documents -% using this package will still compile. But I will \emph{not} answer -% questions about this package anymore except questions on migrating to the -% regular version of the \package{caption} package. And it will \emph{not} be -% adapted or enhanced in the future. +% In 2003 I finally found some (more) time, so a new regular release $3.0$ +% of the \package{caption} package could be build with massive help from +% Frank Mittelbach\cite{A-W:GMS94} and Steven Cochran\cite{subfigure}. +% It was released in December 2003 and superseded the neglected +% \package{caption2} package. +% +% {\small (In parallel, Steven Cochran released the \package{subfig} package which +% superseded the \package{subfigure} package.)} % % So please don't use this package for new documents. It's old, it's obsolete % and it starts to begin smell bad! -% % Please ignore all hints in books or other documents which try to tell you % that the \package{caption2} package should be used instead of the % \package{caption} package -- these hints are outdated since December 2003. % +% \section*{How to migrate to the regular \package{caption} package?} +% +% Usually replacing \package{caption2} by \package{caption} is sufficient +% because the \package{caption} package emulates most of the options and +% commands of the \package{caption2} package. +% If you get some errors or wired results afterwards, please take a closer +% look at the \package{caption} package documentation which will hopefully +% help you clearing these problems. +% If all this should fail you can write me an e-mail asking for help. +% +% \section*{What will happen to this package?} +% +% The \package{caption2} package is still some kind of supported, that means +% it will be part of future releases and bugs will still be fixed so existing +% documents using this package will still compile. +% But it will \emph{not} be enhanced in the future or adapted to future versions +% of foreign packages. +% +% This means migrating to the actual \package{caption} package should not be +% necessary for old documents. +% % \StopEventually{} % % \DoNotIndex{\\,\_,\ ,\@@par} @@ -135,33 +170,114 @@ % \clearpage % % \section{The Implementation} -% (not documented anymore) % \iffalse %<*package> % \fi % +% \subsection{Identificaton} +% % \begin{macrocode} \NeedsTeXFormat{LaTeX2e}[1994/12/01] -\ProvidesPackage{caption2}[2004/05/10 v2.1c Customising captions (AS)] -%\PackageWarning{caption2}{THIS PACKAGE IS OBSOLETE, USE caption INSTEAD!} +\ProvidesPackage{caption2}[2005/10/03 v2.1d Customising captions (AS)] +\PackageWarning{caption2}{% + THIS PACKAGE IS OBSOLETE, PLEASE USE caption INSTEAD} +% \end{macrocode} +% +% \subsection{Preliminary declarations} +% +% \begin{macro}{\captionfont} +% \begin{macro}{\captionlabelfont} +% \cs{captionfont} and \cs{captionlabelfont} will hold the font specifications for the caption. +% \begin{macrocode} \newcommand*\captionfont{} \newcommand*\captionlabelfont{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\captionlabeldelim} +% \begin{macro}{\captionlabelsep} +% \cs{captionlabeldelim} \& \cs{captionlabelsep} will hold the iterim +% space between caption label and text. +% (\cs{captionlabeldelim} will be typeset within \cs{captionlabelfont}, +% \cs{captionlabelsep} not.) +% \begin{macrocode} \newcommand*\captionlabeldelim{} \newcommand*\captionlabelsep{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\captionsize} +% The macro \cs{captionsize} is obsolete since v1.4 of the \textsf{caption} package, +% but we still support it to provide backward compatibility. +% \begin{macrocode} \newcommand*\captionsize{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\captionmargin} +% \begin{macro}{\captionwidth} +% \begin{macro}{\ifcaptionwidth} +% Either \cs{captionmargin} (with specifies an extra margin) or \cs{captionwidth} +% (with specifies an explicit width) can be set, therefore we need the flag \cs{ifcaptionwidth} +% to determine with parameter we should pay attention to. +% \begin{macrocode} \newdimen\captionmargin \newdimen\captionwidth \newif\ifcaptionwidth +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\captionindent} +% \cs{captionindent} will be used in caption style \texttt{indent} and specifies the indention +% after the first line. +% \begin{macrocode} \newdimen\captionindent +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifcaptionlabel} +% \begin{macro}{\ifonelinecaptions} +% \begin{macro}{\ifignoreLTcapwidth} +% More flags. If \cs{ifcaptionlabel} is not set the caption label should be suppressed; +% we need this flag to support the \cs{caption*} command. +% If \cs{ifonelinecaptions} is set we support the \LaTeX\ base style 'one line captions', +% that means the caption will be typeset centered if it fits to one line. +% If \cs{ifignoreLTcapwidth} is set we ignore the \cs{LTcapwidth} of \textsf{longtable}. +% \changes{v2.1}{20 Feb 02}{New ifs \cs{ifcaptionlabel} and \cs{ifignoreLTcapwidth}} +% \begin{macrocode} \newif\ifcaptionlabel\captionlabeltrue \newif\ifonelinecaptions \newif\ifignoreLTcapwidth +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\setcaptionmargin} +% \begin{macro}{\setcaptionwidth} +% User-friendly commands to set the caption margin resp.\ width. +% Note that they additionally set the \cs{ifcaptionwidth} flag. +% \begin{macrocode} \newcommand*\setcaptionmargin{% \captionwidthfalse \setlength\captionmargin} \newcommand*\setcaptionwidth{% \captionwidthtrue \setlength\captionwidth} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\normalcaptionparams} +% \cs{normalcaptionparams} resets all caption related parameters to it's normal default values. +% \cs{captionfont} will be set to \cs{captionsize} so setting the obsolete \cs{captionsize} will still work. +% Same story with \cs{captiondelim} and the obsolete \cs{captionlabeldelim}. +% \changes{v2.1}{29 Jan 02}{New command \cs{normalcaptionparams}} +% \begin{macrocode} \newcommand*\normalcaptionparams{% \let\captionsize\@empty \renewcommand*\captionfont{\captionsize}% @@ -170,12 +286,28 @@ \renewcommand*\captionlabelsep{\space}% \setcaptionmargin\z@\setlength\captionindent\z@ \onelinecaptionstrue} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\caption@eh} +% Some commands will produce an error message, use this as help text. +% \begin{macrocode} \newcommand*\caption@eh{% If you do not understand this error, please take a closer look\MessageBreak at the documentation of the `caption2' package.\MessageBreak \@ehc} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\defcaptionstyle} +% \begin{macro}{\newcaptionstyle} +% \begin{macro}{\renewcaptionstyle} +% These macros will define a new caption style. \cs{newcaptionstyle} and \cs{renewcaptionstyle} +% will additionally check if the caption style already exists or not. +% \begin{macrocode} \newcommand*\defcaptionstyle[1]{% \@namedef{caption@@#1}} +% \newcommand*\newcaptionstyle[1]{% \expandafter\ifx\csname caption@@#1\endcsname\relax \expandafter\defcaptionstyle @@ -184,6 +316,7 @@ \expandafter\@gobbletwo \fi {#1}} +% \newcommand*\renewcaptionstyle[1]{% \expandafter\ifx\csname caption@@#1\endcsname\relax \PackageError{caption2}{Caption style `#1' undefined}{\caption@eh}% @@ -192,6 +325,16 @@ \expandafter\defcaptionstyle \fi {#1}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\dummycaptionstyle} +% This macro will also define a new caption style, but a one which is based on the +% actual set caption style. Therefore you can't set a caption style made with this +% command with \cs{captionstyle} -- we check this to avoid an endless recursion. +% \begin{macrocode} \newcommand*\dummycaptionstyle[2]{% \defcaptionstyle{#1}{% \expandafter\ifx\csname caption@@\caption@style\expandafter\endcsname% @@ -202,14 +345,35 @@ before you can select\MessageBreak it with \protect\captionstyle. \space\caption@eh}% \else - #2\usecaptionstyle{\caption@style}% + #2\usecaptionstyle\caption@style \fi}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\captionstyle} +% \cs{captionstyle} sets the actual caption style. It includes a check if the given caption +% style is defined or not. +% \begin{macrocode} \newcommand*\captionstyle[1]{% \expandafter\ifx\csname caption@@#1\endcsname\relax \PackageError{caption2}{Undefined caption style `#1'}{\caption@eh}% \else \def\caption@style{#1}% \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{style `normal'} +% \begin{macro}{style `center'} +% \begin{macro}{style `centerlast'} +% \begin{macro}{style `flushleft'} +% \begin{macro}{style `flushright'} +% \begin{macro}{style `hang'} +% \begin{macro}{style `indent'} +% The predefined caption styles `normal', `center', `flushleft', `flushright', `centerlast', +% `hang', `hang+X', and `indent'. Because they are quite similar they all are based on the macro +% \cs{caption@make}. +% \begin{macrocode} \newcaptionstyle{normal}{\caption@make{normal}} \newcaptionstyle{center}{\caption@make{center}} \newcaptionstyle{centerlast}{\caption@make{centerlast}} @@ -220,47 +384,155 @@ \newcaptionstyle{hang+centerlast}{\caption@make{hang@centerlast}} \newcaptionstyle{hang+flushleft}{\caption@make{hang@flushleft}} \newcaptionstyle{indent}{\caption@make{indent}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\caption@makecaption} +% Our predefined caption styles. \cs{caption@makecaption} takes the style +% name as parameter, it does the common stuff and calls a macro +% (build out of the style name) to do the uncommon stuff if neccessary. +% \changes{v2.1}{26 Feb 02}{Renamed from \cs{caption@make} to \cs{caption@makecaption}} +% \changes{v2.1b}{16 Apr 04}{We offer and use \cs{caption@make}, again} +% \changes{v2.1c}{10 May 04}{Bugfix: Extra \cs{par} added} +% \begin{macrocode} \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@make{\caption@makecaption} +% \end{macrocode} +% \end{macro} +% +% \changes{v2.1}{26 Feb 02}{Removed all extra parboxes from caption styles} +% \changes{v2.1a}{12 Nov 03}{\ldots and put the parbox into \cs{caption@makecaption} instead} +% +% \begin{macro}{\caption@@@normal} +% The `normal' caption style. Just typeset caption (label \& text) as paragraph. +% \begin{macrocode} \newcommand*\caption@@@normal{% \caption@label\captiontext} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\caption@@@center} +% The `center' caption style. Typeset the caption centered within a parbox. +% \begin{macrocode} \newcommand*\caption@@@center{% \centering\caption@label\captiontext}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\caption@@@centerlast} +% The `centerlast' caption style. +% The idea how to do this was taken from Br\"uggemann-Klein\cite{Anne}, +% it is also mentioned in Kopka\cite[p227]{Kopka-E}. +% \begin{macrocode} \newcommand*\caption@centerlast{% \advance\leftskip by 0pt plus 1fil% \advance\rightskip by 0pt plus -1fil% \parfillskip0pt plus 2fil\relax} +% \newcommand*\caption@@@centerlast{% \caption@centerlast\caption@label\captiontext} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\caption@@@flushleft} +% The `flushleft' caption style. Typeset the caption raggedright within a parbox. +% \begin{macrocode} \newcommand*\caption@@@flushleft{% \raggedright\caption@label\captiontext}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\caption@@@flushright} +% The `flushright' caption style. Typeset the caption raggedleft within a parbox. +% \begin{macrocode} \newcommand*\caption@@@flushright{% \raggedleft\caption@label\captiontext}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\caption@@@hang} +% \begin{macro}{\caption@hangplus} +% The `hang' caption style. +% This code was taken from \LaTeXcomp\cite[p155]{A-W:GMS94} and modified. +% \begin{macrocode} \newcommand*\caption@@@hang{% \sbox\@tempboxa{\caption@label}% \hangindent\wd\@tempboxa\noindent \usebox\@tempboxa\caption@hangplus\captiontext} +% \newcommand*\caption@hangplus{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\caption@@@hang@center} +% The `hang+flushleft' caption style. +% \begin{macrocode} \newcommand*\caption@@@hang@center{% \let\caption@hangplus\centering\caption@@@hang} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\caption@@@hang@centerlast} +% The `hang+flushleft' caption style. +% \begin{macrocode} \newcommand*\caption@@@hang@centerlast{% \let\caption@hangplus\caption@centerlast\caption@@@hang} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\caption@@@hang@flushleft} +% The `hang+flushleft' caption style. +% \begin{macrocode} \newcommand*\caption@@@hang@flushleft{% \let\caption@hangplus\raggedright\caption@@@hang} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\caption@@@indent} +% The `indent' caption style. Is is quite like the `hang' style but the +% indention is given as \cs{captionindent}. +% \begin{macrocode} \newcommand*\caption@@@indent{% \hangindent\captionindent\noindent \caption@label\captiontext} +% \end{macrocode} +% \end{macro} +% +% \subsection{Options} +% +% \begin{macro}{normal} +% \begin{macro}{center} +% \begin{macro}{centerlast,anne} +% \begin{macro}{flushleft} +% \begin{macro}{flushright} +% \begin{macro}{hang,isu} +% \begin{macro}{indent} +% These options will set the caption style. +% (`normal' is the default one.) +% +% The options `anne' and `isu' are for +% backward compatibility only. +% \begin{macrocode} \DeclareOption{normal}{\captionstyle{normal}} \DeclareOption{center}{\captionstyle{center}} \DeclareOption{centerlast}{\captionstyle{centerlast}} @@ -273,12 +545,41 @@ \DeclareOption{hang+flushleft}{\captionstyle{hang+flushleft}} \DeclareOption{isu}{\ExecuteOptions{hang}} \DeclareOption{indent}{\captionstyle{indent}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{scriptsize} +% \begin{macro}{footnotesize} +% \begin{macro}{small} +% \begin{macro}{normalsize} +% \begin{macro}{large,Large} +% These options will set the caption size. We use \cs{g@addto@macro} so more that one +% option can be set. +% \begin{macrocode} \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} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{up,it,sl,sc} +% \begin{macro}{md,bf} +% \begin{macro}{rm,sf,tt} +% These options will set the caption label. +% \begin{macrocode} \DeclareOption{up}{\g@addto@macro\captionlabelfont\upshape} \DeclareOption{it}{\g@addto@macro\captionlabelfont\itshape} \DeclareOption{sl}{\g@addto@macro\captionlabelfont\slshape} @@ -288,21 +589,91 @@ \DeclareOption{rm}{\g@addto@macro\captionlabelfont\rmfamily} \DeclareOption{sf}{\g@addto@macro\captionlabelfont\sffamily} \DeclareOption{tt}{\g@addto@macro\captionlabelfont\ttfamily} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{oneline} +% \begin{macro}{nooneline} +% These options will set the `oneline' flag. +% (`oneline' is the default.) +% \begin{macrocode} \DeclareOption{oneline}{\onelinecaptionstrue} \DeclareOption{nooneline}{\onelinecaptionsfalse} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\caption@package} +% A helper macro, a value of 1 within parameter \#2 will activate the support +% of the package given in parameter \#1, a value of 0 will deactivate it. +% \begin{macrocode} \newcommand*\caption@package[1]{\@namedef{caption@pkt@#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{float} +% \begin{macro}{longtable} +% \begin{macro}{subfigure} +% \changes{v2.1}{19 Feb 02}{New options for interaction with other packages} +% These options will enable or suppress the support of the packages +% \textsf{float}, \textsf{longtable}, and \textsf{subfigure}. +% \begin{macrocode} \DeclareOption{float}{\caption@twozerofalse\caption@package{float}{1}} \DeclareOption{longtable}{\caption@twozerofalse\caption@package{longtable}{1}} \DeclareOption{subfigure}{\caption@twozerofalse\caption@package{subfigure}{1}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{none} +% \begin{macro}{all} +% These options will enable or suppress the support of all the above packages. +% \begin{macrocode} \DeclareOption{none}{\caption@twozerofalse \caption@package{float}{0}\caption@package{longtable}{0}% \caption@package{subfigure}{0}} \DeclareOption{all}{\ExecuteOptions{float,longtable,subfigure}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{ruled} +% \begin{macro}{boxed} +% The option `ruled' introduced in \textsf{caption} v1.2 is obsolete now, but +% we will still support it. The option `boxed' was introduced in version 2.0 +% and is obsolete now, too. +% \begin{macrocode} \newif\ifcaption@ruled \DeclareOption{ruled}{\caption@ruledtrue} \DeclareOption{boxed}{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{ignoreLTcapwidth} +% This option will make the caption code ignore the setting of \cs{LTcapwidth} +% and use the setting of \cs{setcaptionmargin} or \cs{setcaptionwidth} instead. +% \begin{macrocode} \DeclareOption{ignoreLTcapwidth}{\ignoreLTcapwidthtrue} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{debug} +% This option will put additional debug information in the log file. +% \begin{macrocode} \DeclareOption{debug}{\caption@debugtrue} +% \end{macrocode} +% \end{macro} +% +% That's it! Now set the default values and start processing the options. +% (If \cs{caption@twozero} is set to true (default) we will emulate the package +% load algorithm of \textsf{caption} v2.0: If the package is already loaded +% patch it, otherwise do nothing.) +% \changes{v2.1}{19 Feb 02}{\cs{ProcessOptions} changed to \cs{ProcessOptions*}} +% \begin{macrocode} \newif\ifcaption@debug \newif\ifcaption@twozero \normalcaptionparams @@ -312,14 +683,65 @@ \ifcaption@twozero \PackageInfo{caption2}{Running in caption2 v2.0 compatibility mode} \fi +% \end{macrocode} +% +% \subsection{More declarations} +% +% \begin{macro}{\captionof} +% \begin{macro}{\captionof*} +% \cs{captionof} resp.\ \cs{captionof*} will just set \cs{@captype} and do the normal +% \cs{caption} resp.\ \cs{caption*}, so we can also typeset captions outside floating +% environments. +% \changes{v2.1}{19 Feb 02}{New commands \cs{captionof} and \cs{captionof*}} +% \begin{macrocode} \def\captionof{\@ifstar{\caption@of{\caption*}}{\caption@of\caption}} \newcommand*\caption@of[2]{\def\@captype{#2}#1} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\abovecaptionskip} +% \begin{macro}{\belowcaptionskip} +% Not all document classes define \cs{abovecaptionskip} and \cs{belowcaptionskip} +% (like \textsf{ucthesis}), so we do it here if not already done. +% \changes{v2.1}{19 Feb 02}{\cs{abovecaptionskip} and \cs{belowcaptionskip} will be defined if neccessary} +% \begin{macrocode} \@ifundefined{abovecaptionskip}{% \newlength\abovecaptionskip\setlength\abovecaptionskip{10\p@}}{} \@ifundefined{belowcaptionskip}{% \newlength\belowcaptionskip\setlength\belowcaptionskip{0\p@}}{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\captionlinewidth} +% \changes{v2.1}{26 Feb 02}{Renamed from \cs{realcaptionwidth} to \cs{captionlinewidth}} +% \changes{v2.1a}{12 Nov 03}{We offer \cs{realcaptionwidth}, again} +% \begin{macro}{\captionlabel} +% \begin{macro}{\captiontext} +% These values are only set and used within the caption code itself. +% \cs{captionlinewidth} will be set to the given vertical space for the caption, +% normally this is \cs{linewidth}. (This value was called \cs{realcaptionwidth} +% within \thispackage\ \mbox{2.0}, so we will offer this, too.) +% +% \cs{captionlabel} and \cs{captiontext} will be set to the caption label +% resp.\ the caption text. +% (Because \cs{captionlabel} and \cs{captiontext} will be locally defined with +% \cs{def} we do not need to define them here.) +% \begin{macrocode} \newdimen\captionlinewidth \newdimen\realcaptionwidth +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\usecaptionmargin} +% A helper macro for caption style authors: +% It calculates \cs{leftskip} and \cs{rightskip} out of +% \cs{captionlinewidth} and \cs{captionmargin} resp.\ \cs{captionwidth}. +% Also \cs{captionlinewidth} will be corrected to the appropriate value. +% \begin{macrocode} \newcommand*\usecaptionmargin{% \ifcaptionwidth \leftskip\captionlinewidth @@ -333,15 +755,33 @@ \advance\captionlinewidth by -2\captionmargin \fi \realcaptionwidth\captionlinewidth} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\onelinecaption} +% This macro definition helps setting captions the \LaTeX\ base classes way: +% If \cs{ifonelinecaptions} is set and the 1st argument fits within \cs{captionlinewidth}, +% we typeset it centered -- otherway we typeset the 2nd argument. +% (We use the savebox \cs{@tempboxa} as helper for this.) +% \begin{macrocode} \newcommand\onelinecaption[1]{% \let\next\@firstofone \ifonelinecaptions \sbox\@tempboxa{#1}% \ifdim\wd\@tempboxa >\captionlinewidth \else - \def\next{{\centering\usebox{\@tempboxa}\par}\@gobble}% + \def\next{{\centering\usebox\@tempboxa\par}\@gobble}% \fi \fi\next} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\usecaptionstyle} +% First we check if we are inside a caption -- if \cs{captiontext} is undefined we are not. +% If we are we call the appropriate caption definition. +% +% \changes{v2.1b}{16 Apr 04}{Missing percent added (and extra space removed)} +% \begin{macrocode} \newcommand*\usecaptionstyle[1]{% \@ifundefined{captiontext}{% \PackageError{caption2}{You can't use \protect#1 @@ -354,14 +794,39 @@ {\PackageError{caption2}{Caption style `#1' undefined}{\caption@eh}}% {\@nameuse{caption@@#1}}% }} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@makecaption} +% This is the heart of the \thispackage\ package -- the redefinition of the +% core caption code. It was taken from the \LaTeXe\ standard classes and modified. +% It's very easy -- apart from using \cs{abovecaptionskip} and \cs{belowcaptionskip} +% we just set \cs{captionlinewidth}, \cs{captionlabel} and \cs{captiontext} +% to its appropriate values and using the code of the actual caption style via +% \cs{usecaptionstyle}. +% \begin{macrocode} \renewcommand\@makecaption[2]{% \vskip\abovecaptionskip \captionlinewidth\hsize \realcaptionwidth\hsize \def\captionlabel{#1}% \def\captiontext{#2}% - \usecaptionstyle{\caption@style}% + \usecaptionstyle\caption@style \vskip\belowcaptionskip} +% \end{macrocode} +% \end{macro} +% +% \subsection{Support of other packages} +% +% \begin{macro}{\caption@package} +% This macro will execute the code needed to support the package +% named within argument \#1. The parameter \#2 is the command +% which shows if the package is loaded -- it is defined, it is +% already loaded, otherwise not. The parameter \#3 contains code +% which will be executed if no support is required -- this is for +% cleanup purposes. The final parameter \#4 contains the code itself. +% \changes{v2.1c}{9 May 04}{Compatibility warning removed} +% \begin{macrocode} \renewcommand*\caption@package[3]{% \if1\@nameuse{caption@pkt@#1}% \@ifundefined{#2}% @@ -382,12 +847,33 @@ \fi\fi\fi \fi \next} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Support of the \puresf{float} package} +% +% \begin{macrocode} \caption@package{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} +% \end{macrocode} +% +% \begin{macro}{\caption@floatc} +% First we define a helper macro to typeset the caption via \cs{usecaptionstyle}, +% the 1st parameter is the caption style name, +% the 2nd and 3rd are the caption label and text. +% +% \textsf{caption2} has the goal not to modify the output just by +% loading it (without options), therefore we have to be tricky here to +% support \cs{@fs@cfont} which is in fact the same as our \cs{captionlabelfont}. +% So we test if a \cs{captionlabelfont} has been set by the user -- if not +% \cs{@fs@cfont} will be used, otherwise \cs{captionlabelfont}. +% +% \changes{v2.1b}{19 Mar 04}{\cs{realcaptionwidth}$=$\cs{hsize} was missing here} +% \begin{macrocode} \newcommand\caption@floatc[3]{% \ifx\captionlabelfont\@empty \let\captionlabelfont\@fs@cfont @@ -397,7 +883,29 @@ \def\captionlabel{#2}% \def\captiontext{#3}% \usecaptionstyle{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\floatc@plain} +% Now we can redefine the caption code of the \textsf{float} package. +% Here we redefine \cs{floatc@plain} to use our caption code, so +% \texttt{plain} and \texttt{boxed} float types will use the actual +% caption style set by the user. +% \begin{macrocode} \renewcommand*\floatc@plain{\caption@floatc{\caption@style}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\floatc@ruled} +% The support of the \texttt{ruled} float type is a little +% more complex. First we define a caption style `ruled' so the end-user +% can change this caption style afterwards. If the (obsolete) option +% `ruled' is set, we define it in a \textsf{caption} v1.x compatible way, +% otherwise we define it in a \textsf{float} compatible way. +% +% Then we redefine \cs{floatc@ruled} so the caption style `ruled' will +% be used. +% \begin{macrocode} \ifcaption@ruled \dummycaptionstyle{ruled}{\onelinecaptionsfalse\setcaptionmargin{\z@}}% \else @@ -406,7 +914,34 @@ {\@fs@cfont\captionlabel}\space% \fi\captiontext\par}% \fi +% \renewcommand*\floatc@ruled{\caption@floatc{ruled}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\caption@of} +% Typesetting captions outside floats is not so easy with redefined floats, +% because +% \begin{itemize} +% \item The caption code of the \textsf{float} package needs not only +% \cs{@captype} defined, but \cs{@fs@capt} (the command which will typeset the +% caption itself) either. +% \item The caption is only saved within a \cs{vbox}, so the \textsf{float} +% package can typeset the caption later at it's float style specific place +% (that means at top or at the bottom of the float). +% \end{itemize} +% +% Here is the new code: First we check if it's a restyled float by checking if +% \cs{fst@<floattype>} is defined. If yes, we use this command (it will define +% \cs{@fs@capt}). +% Then we execute \cs{@float@setevery}, if it exists (that means we are +% dealing with the \textsf{float} package 1.3 or newer here). +% Now comes the basic trick: +% We redefine the caption typesetting command \cs{@fs@capt}, so it will close +% the \cs{vbox}, typeset the caption outside the vbox and finally start the +% group again so the original \cs{@fs@capt} is happy with closing the group. +% +% \begin{macrocode} \renewcommand*\caption@of[2]{\def\@captype{#2}% \@ifundefined{fst@#2}{}{% \@nameuse{fst@#2}% @@ -414,19 +949,54 @@ \let\caption@fs@capt\@fs@capt \let\@fs@capt\caption@of@float}% #1} +% \end{macrocode} +% +% \begin{macrocode} \newcommand\caption@of@float[2]{\egroup \vskip\abovecaptionskip \normalsize\caption@fs@capt{#1}{#2}% \vskip\belowcaptionskip \bgroup}% +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} \fi} +% \end{macrocode} +% +% \subsubsection{Support of the \puresf{longtable} package} +% +% \begin{macrocode} \caption@package{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} +% \end{macrocode} +% +% \begin{macro}{\LT@makecaption} +% David Carlisle was so kind to introduce a macro called +% \cs{LT@makecaption} in version 3.15 of the \textsf{longtable} +% package which typeset the caption and can be easily redefined. +% +% This is the original definition: +% \begin{quote} +% |\def\LT@makecaption#1#2#3{%|\\ +% | \LT@mcol\LT@cols c{\hbox to\z@{\hss\parbox[t]\LTcapwidth{%|\\ +% | |$\langle$\textit{typeset} |#1{#2: }#3| \textit{as caption}$\rangle$\\ +% | \endgraf\vskip\baselineskip}%|\\ +% | \hss}}}| +% \end{quote} +% +% So we do here: +% First we define a new (dummy) caption style `longtable', +% than we redefine \cs{LT@makecaption} so this style will be used. +% (Remember: |#1| is |\@gobble| in star form of |\caption|, +% and |\@firstofone| otherwise.) +% \begin{macrocode} \dummycaptionstyle{longtable}{} +% \renewcommand\LT@makecaption[3]{% \LT@mcol\LT@cols c{\hbox to\z@{\hss\parbox[t]\hsize{% \ifignoreLTcapwidth @@ -441,7 +1011,26 @@ \usecaptionstyle{longtable}% \endgraf\vskip\baselineskip}% \hss}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} \fi} +% \end{macrocode} +% +% \subsubsection{Support of the \puresf{subfigure} package} +% +% Some of the following code will not work within \cs{if}, +% because of the (yet) undefined \cs{if}\textit{xxx}s. So we simply define +% the critical code within the helper commands \cs{setsubcapstyle} +% and \cs{caption@makesubcaption} already here. +% +% \begin{macro}{\setsubcapstyle} +% This sets the subcaptionstyle to a appropriate value. +% +% If \cs{ifsubcapraggedright} is undefined (it was introduced +% into v2.1 of the \textsf{subfigure} package) we define it first. +% \begin{macrocode} \newcommand*\setsubcapstyle{% \@ifundefined{subcapraggedrightfalse}{% \newif\ifsubcapraggedright}{}% @@ -464,6 +1053,42 @@ \else \subcapstyle{normal}% \fi\fi\fi\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\caption@makesubcaption} +% This will typeset the subcaption. +% We just set all our \cs{caption}\textit{xxx} values to +% the values of \cs{subcap}\textit{xxx} and typeset the +% caption like \textsf{subfigure} within a \cs{hbox}, +% but with the help of \cs{usecaptionstyle}. +% +% But this is not as easy as it seems. We typeset the caption like this: +% \begin{quote} +% |\captionfont|\\ +% | {\capionlabelfont\captionlabel\captionlabeldelim}%|\\ +% |\captionlabelsep\captiontext| +% \end{quote} +% Within \textsf{subfigure} 2.0 the caption will be set quite similar to: +% \begin{quote} +% |\subcapsize|\\ +% | {\subcaplabelfont\captionlabel}%|\\ +% |\space\captiontext| +% \end{quote} +% But within \textsf{subfigure} 2.1 this has changed to: +% \begin{quote} +% |\subcapsize|\\ +% | {\subcaplabelfont\captionlabel}%|\\ +% |\hskip\subfiglabelskip|\\ +% | {\subcapfont\captiontext}}| +% \end{quote} +% So we have to be tricky here: We set \cs{captionlabelfont} to \cs{normalfont} plus +% \cs{subcapsize} \& \cs{subcaplabelfont}, so the font setting in \cs{captionfont} +% will not affect the caption label in subfigure captions. +% +% Note that \cs{hfil} has changed to \cs{hss} from subfigure 2.0 to 2.1, +% so we use \cs{caption@subfig@hss} instead. (We will define this later on.) +% \begin{macrocode} \newcommand\caption@makesubcaption[2]{% \renewcommand*\captionfont{\subcapsize\subcapfont}% \renewcommand*\captionlabelfont{\normalfont\subcapsize\subcaplabelfont}% @@ -475,14 +1100,21 @@ \captionindent\subcapindent \ifsubcapnooneline\onelinecaptionsfalse\else\onelinecaptionstrue\fi \hbox to\@tempdima{% - \caption@subfig@hss\parbox[t]{\@tempdima}{% + \caption@subfig@hss\parbox[t]\@tempdima{% \captionlinewidth\@tempdima \realcaptionwidth\@tempdima \captionlabeltrue \def\captionlabel{#1}% \def\captiontext{\ignorespaces #2}% - \usecaptionstyle{\caption@substyle}}% + \usecaptionstyle\caption@substyle}% \caption@subfig@hss}} +% \end{macrocode} +% \end{macro} +% +% If the subfigure support is not needed, we throw +% the helper macros in the garbage can. +% +% \begin{macrocode} \caption@package{subfigure}{@makesubfigurecaption}{% \let\setsubcapstyle\undefined \let\caption@makesubcaption\undefined}{% @@ -492,9 +1124,36 @@ \let\setsubcapstyle\undefined \let\caption@makesubcaption\undefined \else +% \end{macrocode} +% +% Some stuff has changed from version 2.0 to 2.1 of the +% \textsf{subfigure} package, so we make a branch here. +% If \cs{subcapfont} is undefined we assume v2.0, +% otherwise we assume v2.1 or newer. +% +% \begin{macrocode} \ifx\subcapfont\undefined \PackageInfo{caption2}{subfigure package v2.0 detected} +% \end{macrocode} +% +% \begin{macro}{\subcapfont} +% We define \cs{subcapfont} here so we can use it later +% in common code for \textsf{subfigure} v2.0 and v2.1 (or newer). +% \begin{macrocode} \let\subcapfont\@empty +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\subfigcapwidth} +% \begin{macro}{\setsubcapmargin} +% \begin{macro}{\setsubcapwidth} +% Analogous to \cs{captionwidth}, \cs{setcaptionmargin}, and +% \cs{setcaptionwidth} we define \cs{subfigcapwidth}, +% \cs{setsubcapmargin}, and \cs{setsubcapwidth}. +% +% Note: \cs{subfigcapmargin} is a command in v2.0 of \textsf{subfigure}. +% So we make \cs{subfigcapwidth} a command, too. +% \begin{macrocode} \newcommand*\subfigcapwidth{\z@} \newcommand*\setsubcapmargin{% \subfigcapwidthfalse @@ -502,10 +1161,40 @@ \newcommand*\setsubcapwidth{% \subfigcapwidthtrue \renewcommand*\subfigcapwidth} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\subcaplabelsep} +% Analogous to \cs{captionlabelsep} we define \cs{subcaplabelsep}. +% \begin{macrocode} \newcommand*\subcaplabelsep{\space} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\caption@subfig@hss} +% This will be uses within the caption code itself. +% \begin{macrocode} \let\caption@subfig@hss\hfil +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} \else \PackageInfo{caption2}{subfigure package v2.1 (or newer) detected} +% \end{macrocode} +% +% \begin{macro}{\subfigcapwidth} +% \begin{macro}{\setsubcapmargin} +% \begin{macro}{\setsubcapwidth} +% Analogous to \cs{captionwidth}, \cs{setcaptionmargin}, and +% \cs{setcaptionwidth} we define \cs{subfigcapwidth}, +% \cs{setsubcapmargin}, and \cs{setsubcapwidth}. +% +% Note: \cs{subfigcapmargin} is a length in v2.1 of \textsf{subfigure}. +% So we make \cs{subfigcapwidth} a length, too. +% \begin{macrocode} \newdimen\subfigcapwidth \newcommand*\setsubcapmargin{% \subfigcapwidthfalse @@ -513,12 +1202,49 @@ \newcommand*\setsubcapwidth{% \subfigcapwidthtrue \setlength\subfigcapwidth} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\subcaplabelsep} +% Analogous to \cs{captionlabelsep} we define \cs{subcaplabelsep}. +% \begin{macrocode} \newcommand*\subcaplabelsep{\hskip\subfiglabelskip} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\caption@subfig@hss} +% This will be uses within the caption code itself. +% \begin{macrocode} \let\caption@subfig@hss\hss +% \end{macrocode} +% +% \end{macro} +% \begin{macrocode} \fi +% \end{macrocode} +% +% Here starts the common code for \textsf{subfigure} v2.0 and v2.1. +% +% \begin{macro}{\ifsubfigcapwidth} +% \begin{macro}{\subcapindent} +% \begin{macro}{\subcaplabeldelim} +% Analogous to \cs{ifcaptionwidth}, \cs{captionindent} \& \cs{captionlabeldelim} +% we define \cs{ifsubfigcapwidth}, \cs{subcapindent} \& \cs{subcaplabeldelim} +% \begin{macrocode} \newif\ifsubfigcapwidth \newdimen\subcapindent \newcommand*\subcaplabeldelim{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\subcapstyle} +% Analogous to \cs{captionstyle} we define \cs{subcapstyle} +% and set it (via \cs{setsubcapstyle}) to a appropriate value. +% \begin{macrocode} \newcommand*\subcapstyle[1]{% \expandafter\ifx\csname caption@@#1\endcsname\relax \PackageError{caption2}{Undefined caption style `#1'}{\caption@eh}% @@ -526,11 +1252,41 @@ \def\caption@substyle{#1}% \fi} \setsubcapstyle +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@thesubfigure} +% \begin{macro}{\@thesubtable} +% The \textsf{subfigure} package makes use of \cs{subcaplabelfont} and +% \cs{subfiglabelskip} within its \cs{@thesub}\textit{xxx} macros. +% This is totally in contrast to the way the \textsf{caption2} package +% handle these settings. So we redefine the \cs{@thesub}\textit{xxx} +% to be just the plain label and nothing else. +% +% \begin{macrocode} \renewcommand*\@thesubfigure{\thesubfigure} \renewcommand*\@thesubtable{\thesubtable} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@makesubfigurecaption} +% \begin{macro}{\@makesubtablecaption} +% Now we are ready to redefine \cs{@makesubfigurecaption}. +% \begin{macrocode} \let\@makesubfigurecaption\caption@makesubcaption \let\@makesubtablecaption\caption@makesubcaption +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} \fi} +% \end{macrocode} +% +% That's all folks! +% +% \begin{macrocode} \let\caption@package\undefined % \end{macrocode} % @@ -538,6 +1294,37 @@ %</package> % \fi % +% \begin{thebibliography}{9} +% \bibitem{float} +% Anselm Lingnau: +% \textsl{An Improved Environment for Floats}, +% 2001/11/08 +% \bibitem{longtable} +% David Carlisle: +% \textsl{The longtable package}, +% 2000/10/22 +% \bibitem{rotating} +% Sebastian Rahtz and Leonor Barroca: +% \textsl{A style option for rotated objects in \LaTeX}, +% 1997/09/26 +% \bibitem{subfigure} +% Steven Douglas Cochran: +% \textsl{The subfigure package}, +% 2002/02/14 +% \bibitem{A-W:GMS94} +% Michel Goossens, Frank Mittelbach and Alexander Samarin: +% \newblock \textsl{The {\LaTeX} Companion}, +% \newblock Addison-Wesley, Reading, Massachusetts, 1994. +% \bibitem{Anne} +% Anne Br\"uggemann-Klein: +% \textsl{Einf\"uhrung in die Dokumentverarbeitung}, +% B.G. Teubner, Stuttgart, 1989 +% \bibitem{Kopka-E} +% Helmut Kopka: +% \textsl{\LaTeX -- Erweiterungsm\"oglichkeiten}, +% 3. \"uberarbeitete Auf\/lage, Addison-Wesley, Bonn, 1991 +% \end{thebibliography} +% % \Finale % \endinput |