Le package caption2^{∗}^{†}

Harald Axel Sommerfeldt ^{‡}

axel@hp1.ang-physik.uni-kiel.de Harald_Sommerfeldt @ W (MausNet)

1995/10/09

Résumé Le package caption2 offre diverses manières d’adapter les légendes dans les environnements flottants tels que figure, table, sidewaysfigure et sidewaystable. Les paquetages L^{A}TEX suivants sont supportés : float, longtable et subfigure. Mais il fonctionne aussi très bien avec les packages suivants : floatfig, rotating, supertabular et wrapfig.

1 Documentation ? Quelle documentation ?

Je^{1} suis désolé de le dire, mais il n’y a pas encore de documentation fournie avec la nouvelle version de ce package. Et elle est encore en version beta. J’espère remédier à ces deux problèmes le plus tôt possible ; pour l’instant mon temps libre est trés trés très limité ; j’ai donc décidé de rendre publique cette version beta publique. Cette nouvelle version est presque compatible avec la dernière version officielle (1.4b), donc vous pouvez encore utiliser l’ancienne documentation. Voici ce qui diffère de la version 1.4b :

– Si le package caption détecte un package float chargé, il ne redéfinira plus le style boxed de flottants. Si vous voulez l’ancien comportement, il vous fait spécifier l’option boxed au package caption2.

– Tout ce qui était dit à propos du package subfigure dans l’ancienne documentation n’est plus vrai ; le package caption2 est désormais adapté la nouvelle version 2.0 de ce package. En particulier, le paquetage caption2 ne redéfinira

  plus \@thesubfigure et \@thesubtable et il ne forcera pas \subcapsize –

vous devez maintenant le faire vous-mêmes si vous le désirez, par exemple avec le code suivant :

∗Version : 2.0(BETA), dernière révision du 1995/10/09.

†Titre original : The caption2 package

‡Traduction française par Jean-Pierre Drucbert <Jean-Pierre.Drucbert@onecert.fr>, du 10/07/2000.

1H.A. Sommerfeldt

      \usepackage[normalsize]{subfigure}
      \usepackage[large]{caption}

Ainsi vous pouvez chargez le package caption2 avant le package subfigure maintenant sans problème, et en fait c’est l’ordre recommandé. Ne tenez pas compte de ce que dit l’ancienne documentation ou celle du package subfigure !

En résumé, le nouveau package caption2 ne donnera pas de résultats différents pour vos documents si vous le chargez simplement (sans options). Si vous êtes vraiment intéressés par les (si nombreuses !) nouvelles possibilités de ce package totalement réécrit, regardez le document de test fourni (f-test2.tex) pour avoir une idée des nouvelles commandes et possibilités. Et n’hésitez pas à envoyer un courrier à l’auteur du package si vous avez des questions.

1.1 Quelques notes…

Si vous utilisez la nouvelle commande \setcaptionwidth pour forcer la largeur absolue d’un caption, vous n’êtes plus autorisés à changer \captionmargin ensuite ! Utilisez plutôt la nouvelle commande \setcaptionmargin pour le faire. Les longues tables (longtable) tiendront encore compte de \LTcapwidth, même si vous forcez votre propre largeur via \setcaptionwidth\setcaptionmargin. Pour éviter ce problème, utilisez le code ci-dessus juste après avoir chargé le package

caption2 :
     \dummycaptionstyle{longtable}{}

ou spécifiez simplement la nouvelle option de package longtable. Ce package a été développé et testé avec les versions suivantes d’autres packages :

package version date
float 1.2c 1995/03/29
longtable 3.15  1995/06/15
rotating 2.9  1995/04/07
subfigure 2.0  1995/03/06

Peut-être fonctionne-t-il avec des versions plus anciennes, peut-être pas… En tout cas : si vous êtes intéssés par les versions rotated (comme sidewaysfigure ou sidewaystable) de nouveaux flottants (définis avec le package float), jetez un coup d’œil au package rotfloat, qui provient d’un jeune homme très talentueux, avec un style trés allemand dans l’écriture des doc. en anglais (si jamais il en écrit !) et avec une trés grande gueule - moi :-)

2 Remerciements

Je remercie David Carlisle pour son aide dans l’écriture du support de longtable : sans les modifications dans son package ceci n’aurait pas été possible.

3 Le code (pas vraiment documenté)

 1 \NeedsTeXFormat{LaTeX2e}[1994/12/01]
 2 \ProvidesPackage{caption2}[1995/10/09 v2.0 caption package (AS)]
 3 \typeout{Package: caption v2.0(BETA) <1995/10/09> (Harald Sommerfeldt)}
 4 %
 5 % message de détection des packages
 6 \let\caption@message\undefined
 7 \newcommand*\caption@package[1]{%
 8 \ifx\caption@message\undefined
 9  \message{\space\space\space\space\space\space\space\space\space
10  packages detected:}
11  \let\caption@message\empty
12 \fi
13 \message{#1}}

14 %

15 % truc "interne"
16 \newlength\realcaptionwidth
17 \newsavebox\captionbox

18 %

19 % Code d'initialisation, truc "normal"
20 \newcommand*\captionsize{}
21 \newcommand*\captionfont{\captionsize}
22 \newcommand*\captionlabelfont{}
23 \newcommand*\captionlabeldelim{:}
24 \newdimen\captionlabelsep
25 \sbox\captionbox{ }
26 \setlength\captionlabelsep{\wd\captionbox}
27 \newdimen\captionmargin
28 \newdimen\captionwidth
29 % utilisé seulement par le style de légende "indent", mais il
30 % peut être utilisé dans les styles définis par l'utilisateur
31 \newdimen\captionindent
32 \newif\ifonelinecaptions
33 \newif\iftakecaptionwidth

34 %

35 %\newcommand*\setcaptionfont[1]{%
36 %  \def\captionfont{#1}}
37 %\newcommand*\setcaptionlabelfont[1]{%
38 %  \def\captionlabelfont{#1}}
39 \newcommand*\setcaptionmargin[1]{%
40 \setlength\captionmargin{#1}%
41 \takecaptionwidthfalse}
42 \newcommand*\setcaptionwidth[1]{%
43 \setlength\captionwidth{#1}%
44 \takecaptionwidthtrue}

45 %

46 % \newcaptionstyle, \renewcaptionstyle & \defcaptionstyle
47 \newcommand\newcaptionstyle[2]{%
48 \expandafter\ifx\csname caption@@#1\endcsname\relax

49  \defcaptionstyle{#1}{#2}%
50 \else
51  \PackageError{caption}{Caption style `#1' already defined}{}%
52 \fi}
53 \newcommand\renewcaptionstyle[2]{%
54 \expandafter\ifx\csname caption@@#1\endcsname\relax
55  \PackageError{caption}{Caption style `#1' undefined}{}%
56 \else
57  \defcaptionstyle{#1}{#2}%
58 \fi}
59 \newcommand\defcaptionstyle[2]{%
60 \@namedef{caption@@#1}{#2}}
61 \newcommand*\dummycaptionstyle[2]{%
62 \defcaptionstyle{#1}{%
63  \expandafter\ifx\csname caption@@\caption@style\expandafter\endcsname%
64  \csname caption@@#1\endcsname
65  \PackageError{caption}{You can't use the caption style `#1' directy}{%
66  The caption style `#1' is only a dummy and does not really exists.%
67  \MessageBreak You have to redefine it (with \protect\renewcaptionstyle)
68  before you can select\MessageBreak it with \protect\captionstyle.}%
69  \else
70  #2\usecaptionstyle{\caption@style}%
71  \fi}}

72 %

73 % styles de titres pré-implémentés, tous avec les étiquettes et
74 % les textes séparés par \captionlabeldelim
75 \newcaptionstyle{normal}{\caption@make{normal}}
76 \newcaptionstyle{center}{\caption@make{center}}
77 \newcaptionstyle{flushleft}{\caption@make{flushleft}}
78 \newcaptionstyle{flushright}{\caption@make{flushright}}
79 \newcaptionstyle{centerlast}{\caption@make{centerlast}}
80 \newcaptionstyle{hang}{\caption@make{hang}}
81 \newcaptionstyle{indent}{\caption@make{indent}}

82 %

83 % \captionstyle
84 \newcommand*\captionstyle[1]{%
85 \expandafter\ifx\csname caption@@#1\endcsname\relax
86  \PackageError{caption}{Undefined caption style `#1'}{}%
87 \else
88  \def\caption@style{#1}%
89 \fi}

90 %

91 % Options
92 \DeclareOption{normal}{\captionstyle{normal}}
93 \DeclareOption{center}{\captionstyle{center}}
94 \DeclareOption{flushleft}{\captionstyle{flushleft}}
95 \DeclareOption{flushright}{\captionstyle{flushright}}
96 \DeclareOption{centerlast}{\captionstyle{centerlast}}
97 \DeclareOption{anne}{\ExecuteOptions{centerlast}}
98 \DeclareOption{hang}{\captionstyle{hang}}

 99 \DeclareOption{isu}{\ExecuteOptions{hang}}
100 \DeclareOption{indent}{\captionstyle{indent}}

101 %

102 \DeclareOption{oneline}{\onelinecaptionstrue}
103 \DeclareOption{nooneline}{\onelinecaptionsfalse}

104 %

105 \DeclareOption{scriptsize}{\renewcommand*\captionsize{\scriptsize}}
106 \DeclareOption{footnotesize}{\renewcommand*\captionsize{\footnotesize}}
107 \DeclareOption{small}{\renewcommand*\captionsize{\small}}
108 \DeclareOption{normalsize}{\renewcommand*\captionsize{\normalsize}}
109 \DeclareOption{large}{\renewcommand*\captionsize{\large}}
110 \DeclareOption{Large}{\renewcommand*\captionsize{\Large}}

111 %

112 \DeclareOption{up}{\renewcommand*\captionlabelfont{\upshape}}
113 \DeclareOption{it}{\renewcommand*\captionlabelfont{\itshape}}
114 \DeclareOption{sl}{\renewcommand*\captionlabelfont{\slshape}}
115 \DeclareOption{sc}{\renewcommand*\captionlabelfont{\scshape}}
116 \DeclareOption{md}{\renewcommand*\captionlabelfont{\mdseries}}
117 \DeclareOption{bf}{\renewcommand*\captionlabelfont{\bfseries}}
118 \DeclareOption{rm}{\renewcommand*\captionlabelfont{\rmfamily}}
119 \DeclareOption{sf}{\renewcommand*\captionlabelfont{\sffamily}}
120 \DeclareOption{tt}{\renewcommand*\captionlabelfont{\ttfamily}}

121 %

122 \DeclareOption{boxed}{\AtEndOfPackage{%
123 \ifx\caption@@ruled\undefined
124  \PackageWarningNoLine{caption}{%
125  Option `boxed' is set but there is no `float' package\MessageBreak
126  around here, so this option will be totally ignored}
127 \else
128  \dummycaptionstyle{boxed}{}%
129 \fi}}
130 \DeclareOption{ruled}{\AtEndOfPackage{%
131 \ifx\caption@@ruled\undefined
132  \PackageWarningNoLine{caption}{%
133  Option `ruled' is set but there is no `float' package\MessageBreak
134  around here, so this option will be totally ignored}
135 \else
136  \dummycaptionstyle{ruled}{\onelinecaptionsfalse\setcaptionmargin{0pt}}%
137 \fi}}

138 %

139 \DeclareOption{longtable}{\AtEndOfPackage{%
140 \ifx\caption@@longtable\undefined
141  \PackageWarningNoLine{caption}{%
142  Option `longtable' is set but there is no `longtable' package\MessageBreak
143  around here, so this option will be totally ignored}
144 \else
145  \dummycaptionstyle{longtable}{}%
146 \fi}}

147 %

148 \DeclareOption*{\AtEndOfPackage{%

149 \InputIfFileExists{\CurrentOption.caption}{}{%
150  \PackageError{caption}{File `\CurrentOption.caption' not found}{%
151  You selected the unknown package option `\CurrentOption', so I
152  thought you want to\MessageBreak
153  input the definition file `\CurrentOption.caption' here
154  -- but there is no one!}}}}

155 %

156 \ExecuteOptions{normal,oneline}
157 \ProcessOptions

158 %

159 % \@makecaption
160 \renewcommand\@makecaption[2]{%
161 \vskip\abovecaptionskip
162 \realcaptionwidth\linewidth
163 \def\captionlabel{#1}%
164 \def\captiontext{#2}%
165 \usecaptionstyle{\caption@style}%
166 \vskip\belowcaptionskip}

167 %

168 % Aides pour les styles de caption définis par l'utilisateur
169 \newcommand*\caption@canterr[1]{%
170 \PackageError{caption}{You can't use \protect#1
171  in normal text}{The usage of \protect#1 is only
172  allowed inside code declared with\MessageBreak \protect\defcaptionstyle,
173  \protect\newcaptionstyle \space or \protect\renewcaptionstyle.}}
174 \newcommand\onelinecaption[2]{%
175 \ifx\captiontext\undefined
176  \caption@canterr{\onelinecaption}%
177 \else
178  \def\caption@temp{#2}%
179  \ifonelinecaptions
180  \sbox\captionbox{#1}%
181  \ifdim\wd\captionbox >\realcaptionwidth
182  \caption@temp
183  \else
184  {\centering\usebox{\captionbox}\par}%
185  \fi
186  \else
187  \caption@temp
188  \fi
189  \let\caption@temp\undefined
190 \fi}
191 \newcommand*\usecaptionmargin{%
192 \ifx\captiontext\undefined
193  \caption@canterr{\usecaptionmargin}%
194 \else
195  \iftakecaptionwidth
196  \leftskip\realcaptionwidth
197  \advance\leftskip by -\captionwidth
198  \divide\leftskip by 2

199  \rightskip\leftskip
200  \realcaptionwidth\captionwidth
201  \else
202  \leftskip\captionmargin
203  \rightskip\captionmargin
204  \advance\realcaptionwidth by -2\captionmargin
205  \fi
206 \fi}
207 \newcommand*\usecaptionstyle[1]{%
208 \ifx\captiontext\undefined
209  \caption@canterr{\usecaptionstyle}%
210 \else
211  \@ifundefined{caption@@#1}%
212  {\PackageError{caption}{Caption style `#1' undefined}{}}%
213  {\@nameuse{caption@@#1}}
214 \fi}

215 %

216 % code équivalent pour normal, center, centerlast, hang et indent
217 \newcommand*\caption@make[1]{%
218 \usecaptionmargin\captionfont
219 \def\caption@label{%
220  {\captionlabelfont\captionlabel\captionlabeldelim}%
221  \hskip\captionlabelsep}%
222 \onelinecaption{\caption@label\captiontext}%
223  {\@nameuse{caption@@@#1}}}

224 %

225 % les styles de titres pré-implémentés
226 \newcommand*\caption@@@normal{%
227 \caption@label\captiontext\par}
228 \newcommand*\caption@@@center{%
229 \parbox[t]{\realcaptionwidth}{\centering
230 \caption@label\captiontext\par}}%
231 \newcommand*\caption@@@flushleft{%
232 \parbox[t]{\realcaptionwidth}{\raggedright
233 \caption@label\captiontext\par}}%
234 \newcommand*\caption@@@flushright{%
235 \parbox[t]{\realcaptionwidth}{\raggedleft
236 \caption@label\captiontext\par}}%
237 \newcommand*\caption@@@centerlast{%
238 \advance\leftskip by 0pt plus 1fil%
239 \advance\rightskip by 0pt plus -1fil%
240 \parfillskip0pt plus 2fil%
241 \caption@label\captiontext\par}
242 \newcommand*\caption@@@hang{%
243 \sbox\captionbox{\caption@label}%
244 \hangindent\wd\captionbox\noindent
245 \usebox\captionbox\captiontext\par}
246 \newcommand*\caption@@@indent{%
247 \hangindent\captionindent\noindent
248 \caption@label\captiontext\par}

Prise en charge du package float

249 \ifx\floatc@plain\undefined
250 \else
251 \caption@package{float}

252 %

253 % interface package float -> package caption
254 \newcommand\caption@floatc[3]{%
255  \realcaptionwidth\linewidth
256  \def\captionlabel{#2}%
257  \def\captiontext{#3}%
258  \usecaptionstyle{#1}}

259 %

260 % Le style plain des flottants utilise maintenant le style de caption pré-implémenté
261 \renewcommand\floatc@plain{\caption@floatc{\caption@style}}

262 %

263 % le style "boxed" des flottants, aussi (mais peut être modifier avec \renewcaptionstyle)
264 \dummycaptionstyle{boxed}{\def\captionlabelfont{\bfseries}}
265 \newcommand\floatc@boxed{\caption@floatc{boxed}}
266 % maintenant, il faut seulement encore se préoccuper que les changements
267 %soient aussi pris en compte dans \fs@boxed (au lieu de floatc@plain)...
268 \let\caption@boxed\fs@boxed
269 \renewcommand\fs@boxed{\let\floatc@plain\floatc@boxed\caption@boxed}

270 %

271 % le style "ruled" des flottants fontionne heureusement sans problème
272 \newcaptionstyle{ruled}{{\bfseries\captionlabel} \captiontext\par}
273 \renewcommand*\floatc@ruled{\caption@floatc{ruled}}

274 %

275 \fi

Prise en charge du package longtable

276 \ifx\LT@makecaption\undefined
277 \else
278 \caption@package{longtable}
279 \dummycaptionstyle{longtable}{\setcaptionwidth\LTcapwidth}
280 \renewcommand\LT@makecaption[3]{%
281  \LT@mcol\LT@cols c{\hbox to\z@{\hss\parbox[t]\linewidth{%
282  \realcaptionwidth\linewidth
283  \ifx#1\@gobble
284  \def\captionlabel{}%
285  \def\captionlabeldelim{}%
286  \captionlabelsep\z@
287  \else
288  \def\captionlabel{#2}%
289  \fi
290  \def\captiontext{#3}%
291  \usecaptionstyle{longtable}%
292  \endgraf\vskip\baselineskip}%
293  \hss}}}
294 \fi

Prise en charge du package subfigure

295 \newcommand*\addtosubcaption[1]{}
296 \@ifundefined{@makesubfigurecaption}{}{%
297 \caption@package{subfigure}
\subcapsize
298 \newcommand*\subcapstyle[1]{%
299  \expandafter\ifx\csname caption@@#1\endcsname\relax
300  \PackageError{caption}{Undefined caption style `#1'}{}%
301  \else
302  \def\caption@substyle{#1}%
303  \fi}
 Détection de \caption@substyle.
304 \subcapstyle{normal}
305 \ifsubcaphang
306  \subcapstyle{hang}
307 \fi
308 \ifsubcapcenter
309  \subcapstyle{center}
310 \fi
311 \ifsubcapcenterlast
312  \subcapstyle{centerlast}
313 \fi

NOTE : \subfigcapmargin n’est pas une longueur, c’est une commande. Donc \subfigcapwidth est aussi une commande !

314 \newif\iftakesubfigcapwidth
315 \newcommand*\subfigcapwidth{0pt}
316 % seulement utilisé par le style "indent", mais peut-être utile pour
317 % des styles définis pas l'utilisateur.
318 \newlength\subcapindent
\setsubcapmargin
\setsubcapwidth
319 \newcommand*\setsubcapmargin[1]{%
320  \renewcommand*\subcapfigmargin{#1}%
321  \takesubfigcapwidthfalse}
322 \newcommand*\setsubcapwidth[1]{%
323  \renewcommand*\subcapfigwidth{#1}%
324  \takesubfigcapwidthtrue}
325 \renewcommand\@makesubfigurecaption[2]{%
326  \realcaptionwidth\@tempdima
327  \def\captionlabel{#1}%
328  \def\captiontext{#2}%
329  \let\captionfont\subcapsize
330  \let\captionlabelfont\relax
331  \let\captionlabeldelim\empty
332  \captionlabelsep0pt
333  \ifsubcapnooneline\onelinecaptionsfalse\else\onelinecaptionstrue\fi
334  \iftakesubfigcapwidth\takecaptionwidthtrue\else\takecaptionwidthfalse\fi

335  \setlength\captionmargin{\subfigcapmargin}%
336  \setlength\captionwidth{\subfigcapwidth}%
337  \captionindent\subcapindent
338  \hbox{\parbox[t]\@tempdima{\strut\usecaptionstyle{\caption@substyle}}}}
339 \renewcommand*\addtosubcaption[1]{%
340  \let\caption@makesubfigurecaption\@makesubfigurecaption
341  \renewcommand\@makesubfigurecaption[2]{%
342  #1\caption@makesubfigurecaption}
343  \let\@makesubtablecaption\@makesubfigurecaption}}

Nettoyage

344 \ifx\caption@message\undefined
345 \else\message{^^J}\let\caption@message\undefined\fi
346 \let\caption@package\undefined
347 \let\caption@subcapsize\undefined

Références

[1] Anselm Lingnau : An Improved Environment for Floats, 1995/03/25

[2] Sebastian Rahtz and Leonor Barroca : A style option for rotated objects in L^{A}TEX, 1994/10/02

[3] Harald Axel Sommerfeldt : The rotfloat package, 1995/03/30

[4] Steven Douglas Cochran : The subfigure package, 1995/03/06

[5] Michel Goossens, Frank Mittelbach and Alexander Samarin : The L^{A}TEX Companion, Addison-Wesley, Reading, Massachusetts, 1994.

[6] Anne Brüggemann-Klein : Einführung in die Dokumentverarbeitung, B.G. Teubner, Stuttgart, 1989

[7] Helmut Kopka : L^{A}TEX– Erweiterungsmöglichkeiten, 3. überarbeitete Auflage, Addison-Wesley, Bonn, 1991

Change History

v1.0

General : Première version . . . . . . 1 v1.1

General : Nouveau type de titre :

centerlast . . . . . . . . . . . . . . 2 v1.2

General : Fonctionne aussi maintenant avec les envirronements

      figure* et table* . . . . . . . . . 1

Support du package float . . . . . 2 v1.3

   General : Support de \captionlabelfont

dans les sous-titres . . . . . . . . . 2 v1.4

General : \captionsize changé en \captionfont . . . . . . . . . . . . . 2 Nouvelle option : nooneline … 2

v1.4b

General : Adaptation à la version

2.8 du package rotating . . . . . . 2 v2.0

General : Rééciture totale ; nombreuses nouvelles commandes et caractéristiques . . . . . . . . . . . . 1 Support du package longtable . . 2