The ccaption package^{∗}

Peter Wilson Catholic University of America

          Now at peter.r.wilson@boeing.com

2002/10/18

Abstract

The ccaption package enables restyling of captions and provides for ‘continuation’ captions, unnumbered captions, bilingual captions, and an ‘anonymous’ caption (a legend) that can be used in any environment. It also provides commands to define captions that can be used outside float environments as well as a mechanism for creating new types of float environments and subfloats.

The package has been tested in conjunction with the tocloft rotating, caption2, sidecap, subfigure, endfloat and hyperref packages.

Contents

1 Introduction 2

2 The ccaption package 3 2.1 Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.2 Changing the caption style . . . . . . . . . . . . . . . . . . . . . . 3 2.3 Continuation captions and legends . . . . . . . . . . . . . . . . . . 6 2.4 Bilingual captions . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.5 Use with the subfigure package . . . . . . . . . . . . . . . . . . . . 12 2.6 Use with the endfloat package . . . . . . . . . . . . . . . . . . . . . 13 2.7 New float environments . . . . . . . . . . . . . . . . . . . . . . . . 14 2.8 How LaTeX makes captions . . . . . . . . . . . . . . . . . . . . . . 18 2.9 Changing the numbering scheme . . . . . . . . . . . . . . . . . . . 21 2.10 Captions with footnotes . . . . . . . . . . . . . . . . . . . . . . . . 21 2.11 Multiple floats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.12 Where LaTeX puts floats . . . . . . . . . . . . . . . . . . . . . . . 23

3 The package code 27 3.1 Caption styling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.2 Continuation captions and legends . . . . . . . . . . . . . . . . . . 31 3.3 Non-float captions . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.4 Bilingual captions . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.5 The subfigure options . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.5.1 Option subfigure20 . . . . . . . . . . . . . . . . . . . . . . . 35 3.5.2 Option subfigure21 . . . . . . . . . . . . . . . . . . . . . . . 39

∗This file has version number v3.1b, last revised 2002/10/18.

3.6 New floats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

A The perils of empty 49

List of Tables

1 Redesigned table caption style . . . . . . . . . . . . . . . . . . . . . 5 2 A multi-part table . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3 Another table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Legendary table (toc 1) . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

Legendary table (toc 2) . . . . . . . . . . . . . . . . . . . . . . . . 8 4 Float placement parameters . . . . . . . . . . . . . . . . . . . . . . 25

List of Figures

1 Long . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1 Lang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2 Long English . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

Lang Deutsch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3 Short English . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 4 A picture is worth a thousand words . . . . . . . . . . . . . . . . . 20 5 A different kind of figure caption . . . . . . . . . . . . . . . . . . . 20 6 Float with two illustrations . . . . . . . . . . . . . . . . . . . . . . 22 7 Illustration 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 8 Illustration 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

1 Introduction

Some publishers require and some authors prefer captioning styles other than the one style provided by LaTeX. The ccaption package provides the tools to design your own captioning styles.

Some publishers require that documents that include multi-part tables use a continuation caption on all but the first part of the multi-part table. For the times where such a table is specified by the author as a set of tables, the ccaption package provides a simple ‘continuation’ caption command to meet this requirement. It also provides a facility for an ‘anonymous’ caption which can be used in any float environment. The package has been tested with the rotating, caption2, sidecap, subfigure (v2.0 and the current version), endfloat and the hyperref packages.

Captions can be defined that are suitable for use in non-float environments, such as placing a picture in a minipage and captioning it just as though it had been put into a normal figure environment. Further, a mechanism is provided for defining new float environments.

These facilities were originally developed in support of a suite for typesetting ISO international standard [Wil96], but they are generally applicable. This manual is typeset according to the conventions of the LaTeX docstrip utility which enables the automatic extraction of the LaTeX macro source files [GMS94].

Section 2 provides a short overview of the commands in the package and shows some examples of their use. This section also gives examples of how LaTeX’s captioning style can be changed to a limited extent without the use of any package and provides general information on floats. For a more comprehensive description of floats read Keith Reckdahl’s excellent Using Imported Graphics in LaTeX2e [Rec97], although this was written before the advent of the ccaption package. The implementation is given in Section 3.

2 The ccaption package

2.1 Options

The package may take one or more options, depending on which other packages are used in conjunction with ccaption. The options are designed so that the package loading order does not matter. The current options are:

subfigure for use with the current version of Steven Douglas Cochran’s subfigure package [Coc95].

subfigure20 when used together with the old version 2.0 of the subfigure package.

caption2 when used together with Harald Axel Sommerfeldt’s caption or caption2 package [Som95].

titles When new floats, and their corresponding ‘List of… ’, are defined, the list headings may be individually configured. The titles option disables the configuration mechanism. This may be useful if, say, the fncychap package is used to redefine the appearance of chapter titles.

For example, if the package is being used with both subfigure version 2.1 and caption then it should be called as:

\usepackage[subfigure,caption2]{ccaption}

2.2 Changing the caption style

The discussion in §2.8 includes example methods for changing the typeset appearance of captions without the benefit of any package. The caption2 and caption packages provides a set of predefined captioning styles, and the ccaption package also provides an easy means of changing the style.

The style of subcaptions is controlled by the subfigure package.

Note that if the caption2 option is used then it is assumed that the caption(2) package is being used and the facilities described in this section are unavailable.

\captiondelim The default captioning style is to put a delimeter in the form of a colon between the caption number and the caption title. The command \captiondelim{⟨delim⟩} can be used to change the delimeter. For example, to have an en-dash instead \captiondelim{--␣} will do the trick. Notice that no space is put between the delimeter and the title unless it is specified in the ⟨delim⟩ parameter. The package initially specifies \captiondelim{: } to give the normal delimeter.

\captionnamefont The ⟨font⟩ specified by \captionnamefont{⟨font⟩} is used for typesetting the caption name; that is, the first part of the caption upto and including the delimeter (e.g., the portion ‘Table 3:’). ⟨font⟩ can be any kind of font specification and/or command and/or text. This first part of the caption is treated like: {<font> Table 3; }, so font declarations, not font text-style commands, are needed, like \captionnamefont{\Large\sffamily} to specify a large sansserif font. The package initially specifies \captionnamefont{} to give the normal font.

\captiontitlefont Similarly, the ⟨font⟩ specified by \captiontitlefont{⟨font⟩} is used for typesetting the title text of a caption. For example, \captiontitlefont{\itshape} for an italic title text. The package initially specifies \captiontitlefont{} to give the normal font.

\captionstyle By default the name and title of a caption are typeset as a block (non-indented) paragraph. \captionstyle{⟨style⟩} can be used to alter this. Sensible values for ⟨style⟩ are: \centering, \raggedleft or \raggedright for styles corresponding to these declarations. The \centerlastline style gives a block paragraph but with the last line centered. The package initially specifies \captionstyle{} to give the normal block paragraph style.

\hangcaption The command \hangcaption will cause captions to be typeset with the

\indentcaption
\normalcaption

second and later lines of a multiline caption title indented by the width of the caption name. The command \indentcaption{⟨length⟩} will indent title lines after the first by ⟨length⟩. These commands are independent of the \captionstyle{...}. Note that a caption will not be simultaneously hung and indented. The \normalcaption command undoes any previous \hangcaption or \indentcaption command. The package initially specifies \normalcaption to give the normal non-indented paragraph style.

\changecaptionwidth Issuing the command \changecaptionwidth will cause the captions to be type-

\normalcaptionwidth
\captionwidth

set within a total width ⟨length⟩ as specified by \captionwidth{⟨length⟩}. Issuing the command \normalcaptionwidth will cause captions to be typeset as normal full width captions. The package initially specifies \normalcaptionwidth and \captionwidth{\linewidth} to give the normal width. If a caption is being set within the side captioned environments from the sidecap package [NiGa98] then it

must be a \normalcaptionwidth caption.
\precaption  The commands \precaption{⟨pretext⟩} and \postcaption{⟨posttext⟩} spec-

\postcaption ify ⟨pretext⟩ and ⟨posttext⟩ that will be processed at the start and end of a caption. For example

\precaption{\rule{\linewidth}{0.4pt}\par}
\postcaption{\rule{\linewidth}{0.4pt}}

will draw a horizontal line above and below the captions. The package initially specifies \precaption{} and \postcaption{} to give the normal appearance.

If any of the above commands are used in a float, or other, environment their effect is limited to the environment. If they are used in the preamble or the main text, their effect persists until replaced by a similar command with a different parameter value. The commands do not affect the apperance of the title in any List of. …

\\ The normal LaTeX command \\[⟨length⟩] can be used within the caption text to start a new line. Remember that \\ is a fragile command, so if it is used within text that will be added to a List of… it must be protected. As examples:

\caption{Title with a \protect\\ new line in both the body and List of}
\caption[List of entry with no new line]{Title with a \\ new line}
\caption[List of entry with a \protect\\ new line]{Title text}

Effectively, a caption is typeset as though it were:

 \precaption

Table 1 Redesigned table caption style

three III
five  V
eight VIII

 {\captionnamefont NAME NUMBER \captiondelim}
 {\captionstyle\captiontitlefont THE TITLE}
 \postcaption

Replacing the above commands by their defaults leads to the simple format:

{NAME NUMBER: }{THE TITLE}

As well as using the styling commands to make simple changes to the captioning style more noticeable modifications can also be made. To change the captioning style so that the name and title are typeset in a sans font it is sufficient to do:

 \captionnamefont{\sffamily}
 \captiontitlefont{\sffamily}

A more obvious change in styling is shown in table 1, which was coded as:

 \begin{table}
 \centering
 \captionnamefont{\sffamily}
 \captiondelim{}
 \captionstyle{\\}
 \captiontitlefont{\scshape}
 \setlength{\belowcaptionskip}{10pt}
 \caption{Redesigned table caption style} \label{tab:style}
 \begin{tabular}{lr} \hline
  ...
 \end{table}

This leads to the approximate caption format (processed within \centering):

{\sffamily NAME NUMBER}{\\ \scshape THE TITLE}

Note that the newline command (\\) cannot be put in the first part of the format (i.e., the {\sffamily NAME NUMBER}); it has to go into the second part, which is

why it is specified via \captionstyle{\\} and not \captiondelim{\\}.

If a mixture of captioning styles will be used you may want to define a special caption command for each non-standard style. For example for the style of the caption in table 1:

 \newcommand{\mycaption}[2][\@empty]{%
   \captionnamefont{\sffamily\hfill}
   \captiondelim{\hfill}
   \captionstyle{\centerlastline\\}
   \captiontitlefont{\scshape}
   \setlength{\belowcaptionskip}{10pt}
   \ifx #1\@empty \caption{#2}\else \caption[#1]{#2}}

NOTE: Any code that involves the @ sign must be either in a package (.sty) file or enclosed between a \makeatletter … \makeatother pairing.

The code for the table 1 example can now be written as:

 \begin{table}
 \centering
 \mycaption{Redesigned table caption style} \label{tab:style}
 \begin{tabular}{lr} \hline
  ...
 \end{table}

Note that in the code for \mycaption I have added two \hfill commands and \centerlastline compared with the original specification. It turned out that the original definitions worked for a single line caption but not for a multiline caption. The additional commands makes it work in both cases, forcing the name to be centered as well as the last line of a multiline title, thus giving a balanced appearence.

2.3 Continuation captions and legends

\contcaption The \contcaption{⟨text⟩} command can be used to put a ‘continuation’ or ‘concluded’ caption into a float environment. It neither increments the float number nor makes any entry into a float listing, but it does repeat the numbering of the previous \caption command.

Table 2 illustrates the use of the \contcaption command. The table was produced from the following code.

   \begin{table}
   \centering
   \caption{A multi-part table} \label{tab:m}
   \begin{tabular}{lc} \hline
    just a single line & 1 \\ \hline
   \end{tabular}
   \end{table}
   \begin{table}
   \centering
   \contcaption{Continued}
   \begin{tabular}{lc} \hline
    just a single line & 2 \\ \hline
   \end{tabular}
   \end{table}
   \begin{table}
   \centering
   \contcaption{Concluded}
   \begin{tabular}{lc} \hline
    just a single line & 3 \\ \hline
   \end{tabular}
   \end{table}

\legend The \legend{⟨text⟩} command is intended to be used to put an anonymous Table 2: A multi-part table

just a single line 1

Table 2: Continued

just a single line 2

caption into a float environment, but may be used anywhere.

For example, the following code was used to produce the two-line table 3. The \legend command can be used within a float independently of any \caption command.

   \begin{table}
   \centering
   \caption{Another table} \label{tab:legend}
   \begin{tabular}{lc} \hline
    A legendary table & 5 \\
    with two lines    & 6 \\ \hline
   \end{tabular}
   \legend{The legend}
   \end{table}

Title legend This is a marginal note with a legend.

Captioned floats are usually thought of in terms of the table and figure environments. There can be other kinds of float. As perhaps a more interesting example, the following code produces the titled marginal note which should be displayed near here.

     \marginpar{\legend{Title legend}
                This is a marginal note with a legend.}

You can even

Legend in running text

use the \legend command in running text, as has been done in this sentence, but I’m not sure why one might want to do that as LaTeX already provides the center environment.

If you want the legend text to be included in the List of… use the \addcontentsline command in conjunction with the \legend. For example:

 \addcontentsline{lot}{table}{Titling text} % left justifified
 \addcontentsline{lot}{table}{\protect\numberline{}Titling text} % indented

The first of these forms will align the first line of the legend text under the normal table numbers. The second form will align the first line of the legend text under the normal table titles. In either case, second and later lines of a multi-line text will be aligned under the normal title lines.

Table 2: Concluded

just a single line 3

Table 3: Another table

A legendary table 5
with two lines  6

The legend

Legendary table

An anonymous table 5
with two lines  6

As an example, the Legendary table is produced by the following code:

   \begin{table}
   \centering
   \captiontitlefont{\sffamily}
   \legend{Legendary table}
   \addcontentsline{lot}{table}{Legendary table (toc 1)}
   \addcontentsline{lot}{table}{\protect\numberline{}Legendary table (toc 2)}
   \begin{tabular}{lc} \hline
    An anonymous table & 5 \\
    with two lines     & 6 \\ \hline
   \end{tabular}
   \end{table}

Look at the List of Tables to see how the two forms of \addcontentsline are typeset.

\abovelegendskip  Correspondingly to the \abovecaptionskip and \belowcaptionskip com-

\belowlegendskip mands associated with the \caption command, the spacing before and after a legend is controlled by the \abovelegendskip and \belowlegendskip commands. If necessary, these can be modified via the \setlength command. By default these are defined to give a half baseline spacing before and after the legend.

\namedlegend As a convenience, the \namedlegend[⟨short-title⟩]{⟨long-title⟩} command is like the \caption command except that it does not number the caption and, by default, puts no entry into a List of… file. Like the \caption command, it picks up the name to be prepended to the title text from the float environment in which it is called (e.g., it may use \tablename if called within a table environment). The following code is the source of the Named legendary table.

 \begin{table}
 \centering
 \captionnamefont{\sffamily}
 \captiontitlefont{\itshape}
 \namedlegend{Named legendary table}
 \begin{tabular}{lr} \hline
 seven & VII \\
 eight & VIII \\ \hline
 \end{tabular}
 \end{table}

\fleg@type The macro \fleg@type{⟨name⟩}, where type is the name of a float environment (e.g., table) is called by the \namedlegend macro. It is provided as a hook Table: Named legendary table

seven VII
eight VIII

that defines the ⟨name⟩ to be used as the name in \namedlegend. Two defaults are provided, namely:

 \newcommand{\fleg@table}{\tablename}
 \newcommand{\fleg@figure}{\figurename}

which may be altered via \renewcommand if desired (put between a \makeatletter and \makeatother pair if done in the document).

\flegtoc@type The macro \flegtoc@type{⟨title⟩}, where type is the name of a float environment (e.g., table) is called by the \namedlegend macro. It is provided as a hook that can be used to add ⟨title⟩ to the listof file. By default it is defined to do nothing, and can be changed via \renewcommand. For instance, it could be changed for tables as:

 \makeatletter
 \renewcommand{\flegtoc@table}[1]{%
   \addcontentsline{lot}{table}{#1}}
 \makeatother

\newfixedcaption The \legend command produces a plain, unnumbered heading. It can also

\renewfixedcaption
\providefixedcaption

be useful sometimes to have named and numbered captions outside a floating environment, perhaps in a minipage if you want the table or picture to appear at a precise location in your document.

The \newfixedcaption[⟨capcommand⟩]{⟨command⟩}{⟨env⟩} command, and its friends, can be used to create a new captioning ⟨command⟩ that may be used outside the float environment ⟨env⟩. Both the environment ⟨env⟩ and a captioning command, ⟨capcommand⟩, for that environment must have been defined before calling \newfixedcaption. Note that \namedlegend can be used as ⟨capcommand⟩.

   The \renewfixedcaption and \providefixedcaption commands take the

same arguments as \newfixedcaption; the three commands are analagous to those in the \newcommand family.

For example, to define a new \figcaption command for captioning pictures outside the figure environment, do

\newfixedcaption{\figcaption}{figure}

The optional ⟨capcommand⟩ argument is the name of the float captioning command that is being aliased. It defaults to \caption. As another example, where the optional argument is required, if you want to create a new continuation caption command for non-floating tables, say \ctabcaption, then do

\newfixedcaption[\contcaption]{\ctabcaption}{table}

Captioning commands created by \newfixedcaption will be named and numbered in the same style as the original ⟨capcommand⟩, can be given a \label, and will appear in the appropriate List of …. They can also be used within floating environments, but will not use the environment name as a guide to the caption name or entry into the List of …. For example, using \ctabcaption in a figure environment will still produce a Table… named caption.

Sometimes captions are required on the opposite page to a figure, and \newfixedcaption can be useful in this context. For example, if figure captions should be placed on an otherwise empty page immediately before the actual figure, then this can be accomplished by the following hack:

 \newfixedcaption{\figcaption}{figure}
  ...
 \afterpage{% fill current page then flush pending floats
   \clearpage
   \begin{midpage}  % vertically center the caption
   \figcaption{The caption}  % the caption
   \end{midpage}
   \clearpage
   \begin{figure}THE FIGURE, NO CAPTION HERE\end{figure}
   \clearpage
 } % end of \afterpage

Note that the afterpage package is required, which is part of the required tools bundle. The midpage package supplies the midpage environment, which can be simply defined as:

 \newenvironment{midpage}{\vspace*{\fill}}{\vspace*{\fill}}

The code might need adjusting to meet your particular requirements. The nextpage package might also be useful in this context as it provides a \cleartoevenpage command which ensures that you get to the next even-numbered page (the \cleardoublepage gets you to the next odd-numbered page and \clearpage gets you to the next page which may be odd or even).

2.4 Bilingual captions

Some documents require bilingual (or more) captions. The package provides a set of commands for bilingual captions. Extensions to the set, perhaps to support trilingual captioning, are left as an exercise for the document author.

\bitwonumcaption Bilingual captions can be typeset by the \bitwonumcaption command. This \bionenumcaption takes 6 arguments as:

\bitwonumcaption[⟨label⟩]{⟨short-1 ⟩}{⟨long-1 ⟩}{⟨NAME⟩}{⟨short-2 ⟩}{⟨long-2 ⟩}

The first, optional argument ⟨label⟩, is the name of a label, if required. ⟨short-1 ⟩ and ⟨long-1 ⟩ are the short (i.e., equivalent to the optional argument to the \caption command) and long caption texts for the main language of the document. The value of the ⟨NAME⟩ argument is used as the caption name for the second language caption, while ⟨short-2 ⟩ and ⟨long-2 ⟩ are the short and long caption texts for the second language. For example, if the main and secondary languages are English and German and a figure is being captioned:

\bitwonumcaption{Short}{Long}{Bild}{Kurz}{Lang}

If the short title text(s) is not required, then leave the appropriate argument(s) either empty or as one or more spaces, like:

\bitwonumcaption[fig:bi1]{}{Long}{Bild}{  }{Lang}

Both language texts are entered into the appropriate List of …, and both texts are numbered.

EXAMPLE FIGURE WITH BITWONUMCAPTION

Figure 1: Long Bild 1: Lang

EXAMPLE FIGURE WITH BIONENUMCAPTION

Figure 2: Long English Bild 2: Lang Deutsch

Figure 1 is an example of using the above code.

The \bionenumcaption command takes the same arguments as \bitwonumcaption. The difference between the two commands is that \bionenumcaption does not number the second language text in the List of. Figure 2 is an example of using

\bionenumcaption.

\bicaption When bilingual captions are typeset via the \bicaption command the second language text is not put into the List of …. The command takes 5 arguments as: \bicaption[⟨label⟩]{⟨short-1 ⟩}{⟨long-1 ⟩}{⟨NAME⟩}{⟨long-2 ⟩}

The optional ⟨label⟩ is for a label if required. ⟨short-1 ⟩ and ⟨long-1 ⟩ are the short and long caption texts for the main language of the document. The value of the ⟨NAME⟩ argument is used as the caption name for the second language caption. The last argument, ⟨long-2 ⟩, is the caption text for the second language (which is not put into the List of). For example, if the main and secondary languages are English and German:

\bicaption{Short}{Long}{Bild}{Langlauf}

If the short title text is not required, then leave the appropriate argument either empty or as one or more spaces.

Figure 3 is an example of using \bicaption and was produced by the following code:

 \begin{figure}
 \centering
 EXAMPLE FIGURE WITH A RULED BICAPTION
 \precaption{\rule{\linewidth}{0.4pt}\par}
 \midbicaption{\precaption{}\postcaption{\rule{\linewidth}{0.4pt}}}
 \bicaption[fig:bi2]{Short English}{Longingly}{Bild}{Langlauf}
 \end{figure}

\bicontcaption Bilingual continuation captions can be typeset via the \bicontcaption command. In this case, neither language text is put into the List of …. This command takes 3 arguments as: \bicontcaption{⟨long-1 ⟩}{⟨NAME⟩}{⟨long-2 ⟩}

⟨long-1 ⟩ is the caption text for the main language of the document. The value

EXAMPLE FIGURE WITH A RULED BICAPTION

Figure 3: Longingly Bild 3: Langlauf of the ⟨NAME⟩ argument is used as the caption name for the second language caption. The last argument, ⟨long-2 ⟩, is the caption text for the second language. For example, if the main and secondary languages are again English and German:

\bicontcaption{Continued}{Bild}{Fortgefahren}

\midbicaption The bilingual captions are implemented by calling \caption twice, once for each language. The command \midbicaption{⟨midtext⟩}, which is similar to the \precaption and \postcaption commands, is executed just before calling the second \caption. Among other things, this can be used to modify the style of the second caption with respect to the first. For example, if there is normally a line above and below normal captions, it is probably undesirable to have a double line in the middle of a bilingual caption. So, for bilingual captions the following may be done within the float before the caption:

 \precaption{\rule{\linewidth}{0.4pt}\par}
 \postcaption{}
 \midbicaption{\precaption{}\postcaption{\rule{\linewidth}{0.4pt}}}

This sets a line before the first of the two captions, then the \midbicaption{...} nulls the pre-caption line and adds a post-caption line for the second caption. The package initially specifies \midbicaption{}.

2.5 Use with the subfigure package

The subfigure package enables the captioning of sub-figures within a larger figure, and similarly for tables. If a figure that includes sub-figures is itself continued then it may be desireable to continue the captioning of the sub-figures. For example, if Figure 3 has three sub-figures, say A, B and C, and Figure 3 is continued then the sub-figures in the continuation should be D, E, etc.

\contsubtop The command \contsubtop[⟨list-entry⟩][⟨subcaption⟩]{⟨text⟩} will continue \contsubbottom the sub-caption numbering scheme across (continued) floats, putting the ⟨subcaption⟩

at the top of the ⟨text⟩. If both optional arguments are supplied, ⟨list-entry⟩ will be the entry in the List of… and ⟨subcaption⟩ will be used as the text for the subcaption. The \contsubbottom command is similar but puts the ⟨subcaption⟩ at the bottom of the ⟨text⟩. In either case, the main caption can be at the top or bottom of the float.

\subconcluded The \subconcluded command is used to indicate that the continued (sub) float has been concluded and the numbering scheme is reinitialized. The command should be placed immediately before the end of the last continued environment.

\subtop The command \subtop[⟨list-entry⟩][⟨subcaption⟩]{⟨text⟩} is in addition to \subbottom the subfigure package commands \subfigure and \subtable. It puts the

⟨subcaption⟩ at the top of the ⟨text⟩, and similarly \subbottom[⟨subcaption⟩]{⟨text⟩} puts ⟨subcaption⟩ at the bottom of the ⟨text⟩.

For example:

 \begin{figure}
 \subbottom{...} % captioned as (a) below
 \subbottom{...} % captioned as (b) below
 \caption{...}
 \end{figure}
 \begin{figure}
 \contsubtop{...} % captioned as (c) above

 \contsubtop{...} % captioned as (d) above
 \contcaption{Concluded}
 \subconcluded
 \end{figure}
 ...
 \begin{table}
 \caption{...}
 \subtop{...}    % captioned as (a) above
 \subbottom{...} % captioned as (b) below
 \end{table}

Depending on the age of your LaTeX distribution, you may find that you have either version 2.0 or a later version of the subfigure package. If you have version 2.0, then call the ccaption package as:

\usepackage[subfigure20]{ccaption}, otherwise as:
\usepackage[subfigure]{ccaption}.

Version 2.1 of the subfigure package uses many package options some of which had been provided as commands in version 2.0. The ccaption commands just described apply to the current version. They also apply to version 2.0 except that the \...top and \...bottom commands do not take the first optional argument as: \...top[⟨subcaption⟩]{⟨text⟩}.

Both versions of subfigure provide the commands \subfigure and \subtable which may be used with the ccaption package (which also provides matching \contsubfigure and \contsubtable commands) but I recommend using the generic \...top and \...bottom commands instead. One reason being that the generic commands can be used for subcaptions in new kinds of floats, whereas the specific \...figure and \...table commands cannot. In the current version of subfigure the placement (top or bottom) of the subcaptions and the expected placement of the main caption are set by package options. Using these options in conjunction with the ccaption package may cause unexpected results, which is another reason for using the generic subcaption commands.

2.6 Use with the endfloat package

The endfloat package [McCG95] has the capability of putting all floats at the end of the printed document and inserting comments in the main text that a float should be placed about there. There is a slight problem if continuation captions are used in conjunction with the package, as endfloat effectively numbers each float whether or not it is captioned, and thus will increment the numbering for and continued float.

One way of getting endfloat and ccaption continued captions to cooperate is to put the following in the document preamble (modifying or extending it to suit):

 \newcommand{\contendfloat}{}
 \renewcommand{\tableplace}{%
    \begin{center}
    [\tablename~\theposttbl\ \contendfloat\ about here.]
    \end{center}
 \newenvironment{conttable}{%
    \addtocounter{posttbl}{-1}%
    \def\contendfloat{(continued)}}{}

 \renewcommand{\figureplace}{%
    \begin{center}
    [\figurename~\thepostfig\ \contendfloat\ about here.]
    \end{center}
 \newenvironment{contfigure}{%
    \addtocounter{postfig}{-1}%
    \def\contendfloat{(continued)}}{}

and then, for a table, in the document:

 ...
 \begin{table}
 \caption{...}
 ...
 \end{table}
 ...
 \begin{conttable}
 \begin{table}
 \contcaption{Continued}
 ...
 \end{table}
 \end{conttable}

and similarly for any continued figures.

2.7 New float environments

The commands in the previous sections have been tested with the caption2 and rotating packages. They will most likely fail if used with the float package because of the way this package redefines the basic \caption command.

The float package, developed by Anselm Lingnau [Lin95], provides a simple scheme for creating new kinds of floats with a variety of captioning styles. Unfortunately the package does not effectively seperate the float creation aspects and the captioning styles. I have therefore included in the ccaption package a poor man’s version of some aspects of the float creation elements that are in float. Both the commands and their coding differ from those in the float package.

\newfloatlist The command \newfloatlist[⟨within⟩]{⟨fenv⟩}{⟨ext⟩}{⟨listname⟩}{⟨capname⟩} creates both a new kind of floating environment called ⟨fenv⟩ and a new kind of ‘List of’ for ⟨fenv⟩; the title of this new listing is ⟨listname⟩. A caption within the environment will be written out to a file with extension ⟨ext⟩. The caption, if present, will start with ⟨capname⟩. For example, if this command had been used to create the figure environment for the article class it would have been used as (remembering that LaTeX uses \listfigurename to store the ‘List of Figures’ text and \figurename to store the ‘Figure’ text):

\newfloatlist{figure}{lof}{\listfigurename}{\figurename}

and the command \listoffigure (generated by \newfloatlist) would typeset the List of Figures.

The optional ⟨within⟩ argument can be used if you want the captions to be numbered within a particular document division, as figures are within the book and report classes with the numbering starting afresh with each new chapter. Creating the figure environment for either of these classes would have used:

\newfloatlist[chapter]{figure}{lof}{\listfigurename}{\figurename}

The captioning style for floats defined with \newfloatlist is the same as for figures and tables in the standard classes.

The \newfloatlist command generates several new commands that you can use for styling the new listing, similar to the facilities given by the tocloft package [Wil01]; for more detailed information you may wish to read the tocloft documentation. For ease of explanation, assume that the command was called as

\newfloatlist{X}{Z}{flist}{fcap}, so that X corresponds to the name of the

new environment ⟨fenv⟩ and Z corresponds to the file extension ⟨ext⟩. The following float environment and commands are then created.

X The new float environment is called X, and can be used as either \begin{X}

or \begin{X*}, with the matching \end{X} or \end{X*}.

\listofX \listofX is similar to \listoffigures, etc., in that it typesets the new listing,

and heads the list with the value of flist. Zdepth The Zdepth counter is analogous to the standard tocdepth counter in that it

specifies that entries in the new listing should not be typeset if their numbering level is greater than Zdepth. The default definition is \setcounter{Zdepth}{1}. To have a subfloat of Z appear in the listing do \setcounter{Zdepth}{2}.

\cftmarkZ This macro sets the appearance of the running heads on the new listing pages.

The default definition gives the same appearance as for the LoF or LoT.

\cftbeforeZtitleskip  The lengths \cftbeforeZtitleskip and \cftafterZtitleskip control the

\cftafterZtitleskip vertical spacing before and after the title of the new listing. By default they are set to give the normal spacing, but you can change them with \setlength if you wish.

\cftZtitlefont The code for typesetting the title of the new listing looks roughly like this

\cftafterZtitle
 \vspace*{\cftbeforeZtitleskip}
 {\cftZtitlefont flist}{\cftafterZtitle}
 \cftmarkZ
 \vskip \cftafterZtitleskip

The default definition of \cftZtitlefont is for a bold font. If, for example, you would prefer the title to be in a large italic font and set flushright you could:

\renewcommand{\cftZtitlefont}{\hfill\Large\itshape}

By default \cftafterZtitle is defined to do nothing; you can change it to serve your own purposes. For example:

\renewcommand{\cftafterZtitle}{\thispagestyle{empty}}

will set the page style of the first page of the new listing to be empty.

\newfloatentry The command \newfloatentry[⟨within⟩]{⟨counter⟩}{⟨ext⟩}{⟨level-1 ⟩} is used internally by \newfloatlist to generate a new counter for the new float environment and to generate the typesetting code for entries in the new listing. The required ⟨counter⟩ argument is the name for a new counter. If the optional ⟨within⟩ argument is used, the counter ⟨counter⟩ will be reset each time the counter ⟨within⟩ is changed. These first two arguments have the same effect as calling \newcounter{⟨counter⟩}[⟨within⟩]. The ⟨ext⟩ argument is the extension for the file holding the entries, and ⟨level-1 ⟩ is one less than the ‘level’ of the entry. Continuing the figure example,

\newfloatlist[chapter]{figure}{lof}{\listfigurename}{\figurename}

will internally call

\newfloatentry[chapter]{figure}{lof}{0}.

\newfloatentry generates a set of commands in addition to those directly generated by \newfloatlist. Assuming, as above, that we had

\newfloatlist{X}{Z}{flist}{fcap} then we will also have

\newfloatentry{X}{Z}{0}. This generates the following. X The counter X matches the environment X. This counter is used for numbering

captions. Remember that it will be reset according to the ⟨within⟩ argument. \theX The command \theX prints the value of the X counter. It is initially defined so

that it prints arabic numerals. If the optional ⟨within⟩ argument is used, \theX is defined as

\renewcommand{\theX}{\thewithin.\arabic{X}} otherwise as
\renewcommand{\theX}{\arabic{X}}.

\cftbeforeXskip This length controls the vertical space above a caption entry in the listing. It

can be changed by using \setlength.

\cftXindent The indentation of a caption entry in the listing from the left margin is \cftXnumwidth given by the length \cftXindent, and the space for the caption number is set

by the length \cftXnumwidth. These may be changed via \setlength or by \setnewfloatindents. The default values for these depend on the value of the ⟨level-1 ⟩ argument. A value of zero for this sets the defaults to the figure and table values. A value of one sets them to the defaults for subfigure and subtable values.

The code for typesetting a caption entry is roughly like:

 {\cftXfont {\cftXpresnum SNUM\cftXaftersnum\hfil} \cftXaftersnumb TITLE}%
            {\cftXleader}{\cftXpagefont PAGE}\cftXafterpnum\par

where SNUM is the caption number, TITLE is the caption text, and PAGE is the page number. The other commands are described below.

\cftXfont This controls the appearance of the number and title. By default it is defined

to use the normal font but it can be changed with \renewcommand.

\cftXpresnum The caption number is typeset in a box of width \cftXnumwidth. Within the

\cftXaftersnum
\cftXaftersnumnb

box, \cftXpresnum is first called, then the number is typeset, then \cftXaftersnum is called and finally there is a \hfil to make the box contents flush left. After the number box is typeset \cftXaftersnumb is called and then the caption text is typeset. By default these three macros are defined to do nothing, but \renewcommand can be used to make them do something interesting.

\cftXleader \cftXleader defines the leader between the text and the page number; it \cftXdotsep can be changed by \renewcommand. By default it produces a dotted leader with

\cftXdotsep space between the dots. It default definition is \newcommand{\cftXdotsep}{4.5} which gives a 4.5mu (math units) seperation. In spite of it appearing to be a length, changes to \cftXdotsep must be made by

\renewcommand.

\cftXpagefont \cftXpagefont specifies the font to be used for typesetting the page number. \cftXafterpnum By default it is set to the normal font. Finally, \cftXafterpnum is called after

setting the page number; by default is does nothing. Both these commands can

be changed by \renewcommand.

Note that \newfloatlist effectively generates all the above commands. Their defaults are set so that the typesetting mimics that for figure and table captions.

It is probable that you can ignore all of them, but if you do want to change something the tocloft documentation provides many examples.

\setnewfloatindents  The command \setnewfloatindents{⟨fenv⟩}{⟨indent⟩}{⟨numwidth⟩} sets

the ⟨fenv⟩’s entry indent to the length ⟨indent⟩ and its numwidth to the length ⟨numwidth⟩. The ⟨fenv⟩ argument is the full name of the (sub)float.

As a fuller example of \newfloatlist, suppose you wanted both figures (which come with the standard classes), and diagrams. You could then do something like the following.

 \usepackage{ccaption}
 ...
 \newcommand{\diagramname}{Diagram}
 \newcommand{\listdiagramname}{List of Diagrams}
 \newfloatlist{diagram}{dgm}{\listdiagramname}{\diagramname}
 \newfixedcaption{\fdiagcaption}{diagram}
 \begin{document}
 ...
 \listoffigures
 \listfofdiagram
 ...
 \begin{diagram}
 \caption{A diagram} \label{diag1}
 ...
 \end{diagram}
 As diagram~\ref{diag1} shows ...
 \begin{minipage}{.9\textwidth}
 \fdiagcaption{Another diagram} \label{diag2}
 ...
 \end{minipage}
 In contrast to diagram~\ref{diag1}, diagram~\ref{diag2} provides ...

As a word of warning, if you mix both floats and fixed environments with the same kind of caption you have to ensure that they get printed in the correct order in the final document. If you do not do this, then the \list... of captions will come out in the wrong order (the lists are ordered according the page number in the typeset document, not your source input order).

\newsubfloat The \newsubfloat{⟨fenv⟩} command, which is only of use with the subfigure package and the subfigure20 or subfigure option, creates subcaptions (\subtop and \subbottom, together with their continued forms) for use within the float environment ⟨fenv⟩ previously defined via \newfloatlist[...]{⟨fenv⟩}{...}.

The \newsubfloat macro internally calls the \newfloatentry command and

assuming our usual \newfloatlist{X}{Z}{flist}{fcap} then \newsubfloat{X}

calls

\newfloatentry[X]{subX}{Z}{1}

so there is a further set of \cftsubX... commands generated for adjusting the typesetting of the subcaption entries. Note that the full name of the entry in the listing is ‘sub⟨fenv⟩’, not just simply ‘⟨fenv⟩’.

\newfloatpagesoff The \newfloatpagesoff{⟨fenv⟩} command will turn off page numbering for list entries for ⟨fenv⟩. This is probably most likely to be used for switching off page numbers for subfloat entries, in which case it should be called as

\newfloatpagesoff{sub⟨fenv⟩}.

\newfloatpageson The \newfloatpageson{⟨fenv⟩} command reverses the effect of a correspond-

ing \newfloatpagesoff{⟨fenv⟩}.

\newfloatenv NOTE: These two macros were in version 2.7 of the package but were re- \listfloats placed in version 3.0 by the functionally extended \newfloatlist and \listofX

commands, respectively.

There is a limit to the number of List of… listings that (La)TeX can handle. Each kind of listing requires a \jobname.ext file and the TeX program has an upper limit on the number of files it can handle. In the most limited circumstance LaTeX requires three files — the log, aux and dvi files. Further files are required for things like a ToC (toc) or an index (idx). If you try and create too many new listings LaTeX will respond with the error message:

                      No room for a new write

If you get such a message the only recourse is to redesign your document.

2.8 How LaTeX makes captions

This section provides an overview of how LaTeX creates captions and gives some examples of how to change the captioning style without having to use any package. The section need not be looked at more than once unless you like reading LaTeX code or you want to make changes to LaTeX’s style of captioning.

The LaTeX kernel provides tools to help in the definition of captions, but it is the particular class that decides on their format.

\caption The kernel (in ltfloat.dtx) defines the caption command via

\def\caption{\refstepcounter\@captype \@dblarg{\@caption\@captype}}

\@captype \@captype is defined by the code that creates a new float environment and is set to the environment’s name (see the code for \@xfloat in ltfloat.dtx). For a figure environment, there is an equivalent to

\def\@captype{figure}.

\@caption The kernel also provides the \@caption{⟨type⟩}[⟨short-title⟩]{⟨full-title⟩} command as:

 \long\def\@caption#1[#2]#3{%
   \par
   \addcontentsline{\csname ext@#1\endcsname}{#1}%    <----
     {\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}%
   \begingroup
      \@parboxrestore
      \if@minipage
        \@setminipage
      \fi
      \normalsize
      \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par % <----
   \endgroup}

where ⟨type⟩ is the name of the environment in which the caption will be used. Putting these three commands together results in the user’s view of the caption command as \caption[⟨short-title⟩]{⟨full-title⟩}.

It is the responsibilty of the class (or package) which defines floats to provide definitions for \ext@type, \fnum@type and \@makecaption which appear in the definition of \@caption (in the lines marked <---- above).

\ext@type This macro holds the name of the extension for a ‘List of… ’ file. For example for the figure float environment there is the definition equivalent to

\newcommand{\ext@figure}{lof}.

\fnum@type This macro is responsible for typesetting the caption number. For example, for the figure environment there is the definition equivalent to

\newcommand{\fnum@figure}{\figurename~\thefigure}.

\@makecaption The \@makecaption{⟨number⟩}{⟨text⟩}, where ⟨number⟩ is a string such as ‘Table 5.3’ and ⟨text⟩ is the caption text, performs the typesetting of the caption, and is defined in the standard classes (in classes.dtx) as the equivalent of:

 \newcommand{\@makecaption}[2]{%
   \vskip\abovecaptionskip       %  <- 1
   \sbox\@tempboxa{#1: #2}%      %  <- 2
   \ifdim \wd\@tempboxa >\hsize
     #1: #2\par                  %  <- 3
   \else
     \global \@minipagefalse
     \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
   \fi
   \vskip\belowcaptionskip}      %  <- 4

\abovecaptionskip Vertical space is added before and after a caption (lines marked 1 and 4 in the \belowcaptionskip code for \@makecaption above) and the amount of space is given by the lengths

\abovecaptionskip and \belowcaptionskip. The standard classes set these to

10pt and 0pt respectively. If you want to change the space before or after a caption, use \setlength to change the values. In figures, the caption is usually placed below the illustration. The actual space between the bottom of the illustration and the baseline of the first line of the caption is the \abovecaptionskip plus the \parskip plus the \baselineskip. If the illustration is in a center environment then additional space will be added by the \end{center}; it is usually better to use the \centering command rather than the center environment.

The actual typesetting of a caption is effectively performed by the code in lines marked 2 and 3 in the code for \@makecaption; note that these are where the colon that is typeset after the number is specified. If you want to make complex changes to the default captioning style you may have to create your own version of \@caption using \renewcommand. On the other hand, many such changes can be achieved by changing the definition of the the appropriate \fnum@type command(s). For example, to make the figure name and number bold:

\renewcommand{\fnum@figure}{\textbf{\figurename~\thefigure}}

REMEMBER: If you are doing anything involving commands that include the @ character, and it’s not in a class or package file, you have to do it within a

\makeatletter and \makeatother pairing. So, if you modify the \fnum@figure

command anywhere in your document it has to be done as:

 \makeatletter
 \renewcommand{\fnum@figure}{......}
 \makeatother

As an example, Figure 4 was created by the following code:

 \makeatletter

A THOUSAND WORDS…

Figure 4: A picture is worth a thousand words

ANOTHER THOUSAND WORDS…

Figure 5 — A different kind of figure caption

 \renewcommand{\fnum@figure}{\textsc{\figurename~\thefigure}}
 \makeatother
 \begin{figure}
 \centering
 A THOUSAND WORDS\ldots
 \caption{A picture is worth a thousand words}\label{fig:sc}
 \end{figure}

As another example, suppose that you needed to typeset the \figurename and its number in a bold font, replace the colon that normally appears after the number by a long dash, and typeset the actual title text in a sans-serif font, as is illustrated by the caption for Figure 5. The following code does this.

 \makeatletter
 \renewcommand{\fnum@figure}[1]{\textbf{\figurename~\thefigure} --- \sffamily}
 \makeatother
 \begin{figure}
  \centering
  ANOTHER THOUSAND WORDS\ldots
 \caption{A different kind of figure caption}\label{fig:sf}
 \end{figure}

Perhaps a little description of how this works is in order. Doing a little bit of TEX’s macro processing by hand, the typesetting lines in \@makecaption (lines 2 and 3) get instantiated like:

\fnum@figure{\figurename~\thefigure}: text

Redefining \fnum@figure to take one argument and then not using the value of the argument essentially gobbles up the colon. Using

\textbf{\figurename~\thefigure}

in the definition causes \figurename and the number to be typeset in a bold font. After this comes the long dash. Finally, putting \sffamily at the end of the redefinition causes any following text (i.e., the actual title) to be typeset using the sans-serif font.

If you do modify \@makecaption, then spaces in the definition may be important; also you must use the comment (%) character in the same places as I have done above.

You may also want to take a look at the caption2 package by Harald Axel Sommerfeldt which provides a ready-made set of differing captioning styles. This basically works by redefining the \@makecaption command to provide some hooks. Of course the ccaption package provides the tools that you need to make most, if not all, of any likely caption styles.

2.9 Changing the numbering scheme

In the article class and its derivatives, captions are numbered continuously throughout the document, while in the book and report classes, numbering starts anew in each chapter.

If you want captions to be numbered anew with sections in the article class you can do this:

 \makeatletter
 \@addtoreset{table}{section}
 \renewcommand{\thetable}{\thesection.\arabic{table}}
 \makeatletter

and similarly for all the other float environments.

If you are using the book or report class and you want the captions to be numbered consecutively throughout the document you can do this:

 \makeatletter
 \@removefromreset{table}{chapter}
 \renewcommand{\thetable}{\arabic{table}}
 \makeatother

and similarly for all the other float environments. Note that you will need the remreset package^{1} which provides the definition of \@removefromreset.

You can play with other combinations of \@addtoreset, \@removefromreset, and \renewcommand{\the...}{...} to get the numbering scheme you want.

2.10 Captions with footnotes

If you want to have a caption with a footnote, think long and hard as to whether this is really essential. It is not normally considered to be good typographic practice, and to rub the point in LaTeX does not make it necessarily easy to do. However, if you (or your publisher) insists, read on.

If it is present, the optional argument to \caption is put into the LoF/LoT as appropriate. If the argument is not present, then the text of the required argument is put into the LoF. In the first case, the optional argument is moving, and in the second case the required argument is moving. The \footnote command is fragile and must be \protected (i.e., \protect\footnote{}) if it is used in a moving argument. If you don’t want the footnote to appear in the LoF, use a footnoteless optional argument and a footnoted required argument.

You will probably be surprised if you just do, for example:

 \begin{figure}
 ...
 \caption[For LoF]{For figure\footnote{The footnote}}
 \end{figure}

because (a) the footnote number may be greater than you thought, and (b) the footnote text has vanished. This later is because LaTeX won’t typeset footnotes ILLUSTRATION 1 ILLUSTRATION 2

1Available on CTAN in tex-archive/macros/latex/contrib/supported/carlise.

Figure 6 — Float with two illustrations

from a float. To get an actual footnote within the float you have to use a minipage, like:

 \begin{figure}
 \begin{minipage}{\linewidth}
 ...
 \caption[For LoF]{For figure\footnote{The footnote}}
 \end{minipage}
 \end{figure}

Now you may find that you get two footnotes for the price of one. Fortunately, if you use the ccaption package without the caption2 option, this will not occur.

When using a minipage as above, the footnote text is typeset at the bottom of the minipage (i.e., within the float). If you want the footnote text typeset at the bottom of the page, then you have to use the \footnotemark and \footnotetext commands like:

 \begin{figure}
 ...
 \caption[For LoF]{For figure\footnotemark}
 \end{figure}
 \footnotetext{The footnote}

This will typeset the argument of the \footnotetext command at the bottom of the page where you called the command. Of course, the figure might have floated to a later page, and then it’s a matter of some manual fiddling to get everything on the same page, and possibly to get the footnote marks to match correctly with the footnote text.

At this point, you are on your own.

2.11 Multiple floats

As far as LaTeX is concerned, a float is a box which certain restrictions as to where it can be placed. You can effectively put what you like inside a float box. Normally there is just a single picture or tabular in a float but you can put as many of these as will fit inside a float.

Three typical cases of multiple figures/tables in a single float come to mind:

• Multiple illustrations/tabulars with a single caption.

• Multiple illustrations/tabulars each individually captioned.

• Multiple illustrations/tabulars with one main caption and individual subcaptions.

The subfigure package is designed for the last of these cases; the others do not require a package.

ILLUSTRATION 3

Figure 7 — Illustration 3

ILLUSTRATION 4

Figure 8 — Illustration 4

Figure 6 is an example of multiple illustrations in a single float with a single caption. This figure was produced by the following code.

 \begin{figure}
 \centering
 \hspace*{\fill} {ILLUSTRATION 1} \hfill {ILLUSTRATION 2} \hspace*{\fill}
 \caption{Float with two illustrations} \label{fig:mult1}
 \end{figure}

The \hspace*{\fill} and \hfill commands were used to space the two illustrations equally. Of course \includegraphics or tabular environments could just as well be used instead of the {ILLUSTRATION N} text.

The following code produces Figures 7 and 8 which are examples of two seperately captioned illustrations in one float.

 \begin{figure}
 \centering
 \begin{minipage}{0.4\textwidth}
   \centering
   ILLUSTRATION 3
   \caption{Illustration 3} \label{fig:mult2}
 \end{minipage}
 \hfill
 \begin{minipage}{0.4\textwidth}
   \centering
   ILLUSTRATION 4
   \caption{Illustration 4} \label{fig:mult3}
 \end{minipage}
 \end{figure}

In this case the illustrations (or graphics or tabulars) are put into seperate minipage environments within the float, and the captions are also put within the minipages. Note that any required \label must also be inside the minipage. If you wished, you could add yet another caption after the end of the two minipages.

Keith Reckdahl [Rec97] provides more examples of this kind of thing.

2.12 Where LaTeX puts floats

The general format for a float environment is:

\begin{float}[⟨loc⟩] ... \end{float} or for double column floats:
\begin{float*}[⟨loc⟩] ... \end{float*}

where the optional argument ⟨loc⟩, consisting of one or more characters, specifies a location where the float may be placed. Note that the multicol package only supports the starred floats and it will not let you have a single column float. The possible ⟨loc⟩ values are one or more of the following:

b bottom: at the bottom of a page. This does not apply to double column floats as they may only be placed at the top of a page. h here: if possible exactly where the float environment is defined. It does not

apply to double column floats.

p page: on a seperate page containing only floats (no text).

t top: at the top of a page.

! make an extra effort to place the float at the earliest place specified by the rest of the argument.

The default for ⟨loc⟩ is tbp, so the float may be placed at the top, or bottom, or on a float-only page; the default works well 95% of the time. Floats of the same kind are output in definition order, except that a double column float may be output before a later single column float of the same kind, or vice-versa^{2}. A float is never put on an earlier page than its definition but may be put on the same or later page of its definition. If a float cannot be placed, all suceeding floats will be held up, and LaTeX can store no more than 16 held up floats. A float cannot be placed if it would cause an overfull page, or it otherwise cannot be fitted according the

the float parameters. A \clearpage or \cleardoublepage or \end{document}

flushes out all unprocessed floats, irrespective of the ⟨loc⟩ and float parameters, putting them on float-only pages.

\suppressfloats You can use the command \suppressfloats[⟨pos⟩] to suppress floats at a given ⟨pos⟩ on the current page. \suppressfloats[t] prevents any floats at the top of the page and \suppressfloats[b] prevents any floats at the bottom of the page. The simple \suppressfloats prevents both top and bottom floats.

The flafter package, which should have come with your LaTeX distribution, provides a means of preventing floats from moving backwards from their definition position in the text. This can be useful to ensure, for example, that a float early in a \section{} is not typeset before the section heading.

Table 4 lists the various float parameters and typical default values. All the lengths are rubber lengths, and the actual defaults depend on both the class and its size option.

Given the displayed defaults, the height of a top float must be less than 70% of the textheight and there can be no more than 2 top floats on a text page. Similarly, the height of a bottom float must not exceed 30% of the textheight and there can be no more than 1 bottom float on a text page. There can be no more than 3 floats (top, bottom and here) on the page. At least 20% of a text page with floats must be text. On a float page (one that has no text, only floats) the sum of the heights of the floats must be at least 50% of the textheight. The floats on a float page should be vertically centered.

It can be seen that with the defaults LaTeX might have trouble finding a place for a float. Consider what will happen if a float is a bottom float whose height is 40% of the textheight and this is followed by a float whose height is 90% of the textheight. The first is too large to actually go at the bottom of a text page but too small to go on a float page by itself. The second has to go on a float page but it is too large to share the float page with the first float. LaTeX is stuck!

At this point it is worthwhile to be precise about the effect of a one character ⟨loc⟩ argument:

2This little quirk is fixed by the fixltx2e package, at least for tables and figures. The package is part of a normal LaTeX distribution.

Table 4: Float placement parameters

Parameter  Controls  Default

Counters — change with \setcounter

topnumber  max number of floats at top of a page  2
bottomnumber  max number of floats at bottom of a page  1
totalnumber  max number of floats on a text page  3
dbltopnumber  like topnumber for double column floats  2

Commands — change with \renewcommand

\topfraction max fraction of page reserved for top floats

0.7

\bottomfraction max fraction of page reserved for bottom floats

0.3

\textfraction  min fraction of page that must have text  0.2

\dbltopfraction  like \topfraction for double column

floats

0.7

\floatpagefraction min fraction of a float page that must have float(s)

0.5

\dblfloatpagefraction like \floatpagefraction for double col-

umn floats

0.5

Text page lengths — change with \setlength

\floatsep vertical space between floats 12pt

\textfloatsep vertical space between a top (bottom)

float and suceeding (preceeding) text

20pt

\intextsep  vertical space above and below an h float  12pt
\dblfloatsep  like \floatsep for double column floats  12pt

\dbltextfloatsep  like \textfloatsep for double column

floats

20pt

Float page lengths — change with \setlength

\@fptop  space at the top of the page  0pt plus 1fil

\@fpsep  space between floats  8pt plus 2fil

\@fpbot  space at the bottom of the page  0pt plus 1fil

\@dblfptop  like \@fptop for double column floats  0pt plus 1fil
\@dblfpsep  like \@fpsep for double column floats  8pt plus 2fil
\@dblfpbot  like \@fpbot for double column floats  0pt plus 1fil

[b] means: ‘put the float at the bottom of a page with some text above it, and nowhere else’. The float must fit into the \bottomfraction space otherwise it and subsequent floats will be held up.

[h] means: ‘put the float at this point and nowhere else’. The float must fit into the space left on the page otherwise it and subsequent floats will be held up.

[p] means: ‘put the float on a page that has no text but may have other floats on it’. There must be at least ‘\floatpagefraction’ worth of floats to go on a float only page before the float will be be output.

[t] means: ‘put the float at the top of a page with some text below it, and nowhere else’. The float must fit into the \topfraction space otherwise it and subsequent floats will be held up.

[!...] means: ‘ignore the \...fraction values for this float’.

You must try and pick a combination from these that will let LaTeX find a place to put your floats. However, you can also can change the float parameters to make it easier to find places to put floats. Some examples are:

• Decrease \textfraction to get more ‘float’ on a text page, but the sum

of \textfraction and \topfraction and the sum of \textfraction and

\bottomfraction should not exceed 1, otherwise the placement algorithm falls apart. A minimum value for \textfraction is about 0.10 — a page with less than 10% text looks better with no text at all, just floats.

• Both \topfraction and \bottomfraction can be increased, and it does not matter if their sum exceeds 1.0. A good typographic style is that floats are encouraged to go at the top of a page, and a better balance is achieved if the float space on a page is larger at the top than the bottom.

• Making \floatpagefraction too small might have the effect of a float page just having one small float. However, to make sure that a float page never has more than one float on it, do:

\renewcommand{\floatpagefraction}{0.01}
\setlength{\@fpsep}{\textheight}
• Setting \@fptop to 0pt, \@fpsep to 8pt and \@fpbot to 0pt plus 1fil

will force floats on a float page to start at the top of the page.

If you are experimenting, a reasonable starting position is:

\setcounter{topnumber}{3}
\setcounter{bottomnumber}{2}
\setcounter{totalnumber}{4}
\renewcommand{\topfraction}{0.85}
\renewcommand{\bottomfraction}{0.5}
\renewcommand{\textfraction}{0.15}
\renewcommand{\floatpagefraction}{0.7}

and similarly for double column floats if you will have any.

One of LaTeX’s little quirks is that on a text page, the ‘height’ of a float is its actual height plus \textfloatsep or \floatsep, while on a float page the ‘height’ is the actual height. This means that when using the default ⟨loc⟩ of [tbp] at least one of the text page float fractions (\topfraction and/or \bottomfraction) must be larger than the \floatpagefraction by an amount sufficient to take account of the maximum text page seperation value.

3 The package code

Announce the name and version of the package, which requires LaTeX2e.

1 ⟨∗usc⟩

 2 \NeedsTeXFormat{LaTeX2e}
 3 \ProvidesPackage{ccaption}[2002/10/18 v3.1b Extended captioning and new floats]

4

In an attempt to avoid name clashes with other packages, all internal commands include the string @cont.

Note (2001/08/03): Older versions of the amsmath package did odd things with \@tempa, \@tempb and \@tempc. I have replaced any original use of these by

\@conttempa, etc.

Do the options first.

\if@contsubfigxx \if@contsubfigxxi \if@contsubfig These three \if... are used to remember if the subfigure20 or subfigure option has been given.

 5 \newif\if@contsubfigxx
 6 \@contsubfigxxfalse
 7 \newif\if@contsubfigxxi
 8 \@contsubfigxxifalse
 9 \newif\if@contsubfig
10 \@contsubfigfalse
11 \DeclareOption{subfigure20}{\@contsubfigxxtrue\@contsubfigxxifalse\@contsubfigtrue}
12 \DeclareOption{subfigure21}{\@contsubfigxxfalse\@contsubfigxxitrue\@contsubfigtrue
13 \PackageWarningNoLine{ccaption}{%
14  The subfigure21 option is deprecated.\MessageBreak
15  Try and use the subfigure option instead}}
16 \DeclareOption{subfigure}{\@contsubfigxxfalse\@contsubfigxxitrue\@contsubfigtrue}

\if@contcapoption This \if... is used to remember if the caption2 option has been given

17 \newif\if@contcapoption
18 \@contcapoptionfalse
19 \DeclareOption{caption2}{\@contcapoptiontrue}

\if@conttitleopt This \if... is used to remember if the titles option has been given

20 \newif\if@conttitleopt
21 \@conttitleoptfalse
22 \DeclareOption{titles}{\@conttitleopttrue}

\ProcessOptions Now process the options.

23

24 \ProcessOptions\relax

25

3.1 Caption styling

The caption styling^{3} is accomplished by redefining the \@makecaption command. First, though, define and initialise the user-level commands.

The styling is only defined if the caption2 option is not given. But first we have to declare some new \if commands before testing the option.

\if@contcw \if@conthang \if@contindent For use when checking caption width and captioning styles styles.

26 \newif\if@contcw
27 \newif\if@conthang
28 \newif\if@contindent

29

Issue a warning if the caption2 option has been used.

30 \if@contcapoption
31 \PackageWarningNoLine{ccaption)}%
32  {You have used the caption2 option.\MessageBreak
33  The ccaption styling commands\MessageBreak
34  are unavailable to you}
35 \else

36

\captiondelim \@contdelim For the caption delimeter.
37 \newcommand{\captiondelim}[1]{\def\@contdelim{#1}}
38 \captiondelim{: }

39

\captionnamefont \@contnfont The font for the caption name.
40 \newcommand{\captionnamefont}[1]{\def\@contnfont{#1}}
41 \captionnamefont{}

42

\captiontitlefont \@conttfont The font for the caption title.
43 \newcommand{\captiontitlefont}[1]{\def\@conttfont{#1}}
44 \captiontitlefont{}

45

\flushleftright \centerlastline These are in addition to the \centering, \raggedleft and \raggedright decla-

rations for paragraphing. \flushleftright sets the skips to TeX’s normal (block) paragraphing values, while \centerlastline sets the skips to give a centered last line in a block paragraph.

46 \newcommand{\flushleftright}{%
47 \leftskip\z@ \rightskip\z@
48 \parfillskip=\z@ plus 1fil}
49 \newcommand{\centerlastline}{%
50 \leftskip=\z@ plus 1fil
51 \rightskip=\z@ plus -1fil
52 \parfillskip=\z@ plus 2fil}

53

3Thanks to Donald Arseneau and Arash Esbatil for their perceptive comments on early versions of the styling code.

\captionstyle \@contcstyle The paragraphing style for the caption.

54 \newcommand{\captionstyle}[1]{\def\@contcstyle{#1}}
55 \captionstyle{}

56

\@contcwidth \captionwidth \changecaptionwidth \normalcaptionwidth The macros for dealing with the caption width.
57 \newlength{\@contcwidth}
58 \newcommand{\captionwidth}[1]{\setlength{\@contcwidth}{#1}}
59 \captionwidth{\linewidth}
60 \newcommand{\changecaptionwidth}{\@contcwtrue}
61 \newcommand{\normalcaptionwidth}{\@contcwfalse}
62 \normalcaptionwidth

63

\@contindw \hangcaption \indentcaption \normalcaption The macros for hanging and indented captions.
64 \newlength{\@contindw}
65 \newcommand{\hangcaption}{\@conthangtrue\@contindentfalse}
66 \newcommand{\indentcaption}[1]{\setlength{\@contindw}{#1}%
67 \@conthangfalse\@contindenttrue}
68 \newcommand{\normalcaption}{\@conthangfalse\@contindentfalse}
69 \normalcaption

70

\precaption \@contpre \postcaption \@contpost \midbicaption \@contmidbi The macros for the pre- and post-caption text/commands, and for the mid-caption command for bilingual captions.

71 \newcommand{\precaption}[1]{\def\@contpre{#1}}
72 \precaption{}
73 \newcommand{\postcaption}[1]{\def\@contpost{#1}}
74 \postcaption{}
75 \newcommand{\midbicaption}[1]{\def\@contmidbi{#1}}
76 \midbicaption{}

77

\@makecaption This is a reimplementation of the kernel \@makecaption command. As well as including the caption typesetting commands it enables captions that include forced newlines (e.g., by \\).

The first part is due to Donald Arseneau^{4} from postings to the CTT newsgroup and Email discussions. The \topskip strut is used whenever the caption is the first part of the float. This means, among other things, that if a caption comes at the top of a page, then the first line of the caption will be aligned with the normal first line of a page. The \abovecaptionskip is only used when there is something above the caption in the current float.

78 \long\def\@makecaption#1#2{\let\@conttempa\relax
79 \ifdim\prevdepth>-99\p@ \vskip\abovecaptionskip
80 \else \def\@conttempa{\vbox to\topskip{}}\fi

\@contfnote \@contfmark The caption title will be typeset twice, firstly to measure its width and secondly to actually typeset it. To avoid problems caused by a footnote in the caption getting processed twice, we temporarily disable the expected relevant commands.

81 \let\@contfnote\footnote \renewcommand{\footnote}[2][]{}
82 \let\@contfmark\footnotemark \renewcommand{\footnotemark}[1][]{}
83 \let\@contlabel\label \renewcommand{\label}[1]{}

4Email: asnd@triumf.ca

Now measure the width of the total caption, not forgetting to take account of the font specifications, and then restore the footnoting.

84 \sbox\@tempboxa{\@contnfont #1\@contdelim \@conttfont #2}
85 \let\footnote\@contfnote
86 \let\footnotemark\@contfmark
87 \let\label\@contlabel

If the caption is less than one line, then the whole caption needs to be centered on the page (otherwise the short caption may be typeset flushleft).

88 \ifdim\wd\@tempboxa<\linewidth \centering \fi
89 \if@contcw

For typesetting at anything other than the normal width, put the caption into a \parbox of the specified width. This must be centered.

90  \centering
91  \parbox{\@contcwidth}{%
92 \fi
93 \if@conthang

For a hanging caption we have to measure the width of the caption name, then typeset the whole caption in a hanging paragraph.

94  \sbox\@tempboxa{\@contnfont #1\@contdelim}
95  \@contpre%
96  {\@contnfont #1\@contdelim}\@conttempa
97  {\@contcstyle\hangindent=\wd\@tempboxa\hangafter=\@ne\@conttfont #2\par}
98 \else
99  \if@contindent

An indented caption is similar, except the amount of indentation is kept in

\@contindw.
100  \@contpre%
101  {\@contnfont #1\@contdelim}\@conttempa
102  {\@contcstyle\hangindent=\@contindw\hangafter=\@ne\@conttfont #2\par}
103  \else

For the normal style, just typeset the caption.

104  \@contpre%
105  {\@contnfont #1\@contdelim}\@conttempa
106  {\@contcstyle\@conttfont #2\par}
107  \fi
108 \fi

Finish off the typesetting by processing the post-text, and if not using the normal width then close off the \parbox, and lastly put in some vertical space.

109 \@contpost
110 \if@contcw
111  \par
112  }  % end of parbox
113 \fi
114 \vskip\belowcaptionskip}

115

This finishes off the non caption2 option.

116 \fi  % end of test (\if@contcapoption) on caption2 option

117

3.2 Continuation captions and legends

\contcaption \contcaption{⟨text⟩} is a user-level command. It is a simplified version of the normal \caption command as it doesn’t have to deal with numbering or list of … entries.

118 \newcommand{\contcaption}{\@contcaption\@captype}

119

\@contcaption This is the workhorse for the \contcaption command. In turn, it uses the \@makecaption command (defined in the usual classes) to do most of its work. It uses the number of the previous \caption command in the same type of float and its implementation includes much of the code used in the LaTeX \@caption command.

120 \long\def\@contcaption#1#2{%
121 \par
122 \begingroup
123  \@parboxrestore
124  \if@minipage
125  \@setminipage
126  \fi
127  \normalsize
128  \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #2}\par
129 \endgroup}

130

\abovelegendskip \belowlegendskip These two lengths control the vertical spacing before and after a legend. We will give these values such that a legend will ocupy an integral number of lines.

131 \newlength{\abovelegendskip}
132 \setlength{\abovelegendskip}{0.5\baselineskip}
133 \newlength{\belowlegendskip}
134 \setlength{\belowlegendskip}{\abovelegendskip}

135

\legend The command is called as \legend{⟨text⟩}. It is intended to be used in a float

environment for an ‘anonymous’ caption, but can be used anywhere.

The implementation is similar to the \caption command but we have to eliminate printing of a delimeter.

136 \newcommand{\legend}[1]{%
137 \par
138 \begingroup
139  \@parboxrestore
140  \if@minipage
141  \@setminipage
142  \fi
143  \normalsize
144  \captiondelim{\mbox{}}
145  \@makecaption{}{\ignorespaces #1}\par
146 \endgroup}

147

\namedlegend \namedlegend[⟨short-title⟩]{⟨long-title⟩} is like the \caption command except that it does not number the caption.

148 \newcommand{\namedlegend}{\@dblarg{\@legend\@captype}}

149

\@legend \@legend{⟨type⟩}[⟨short-title⟩]{⟨long-title⟩} is the workhorse for the \namedlegend command. In turn, it calls \@makelegend. It requires two commands to have been defined, namely \flegtoc@type and \fleg@type. The command \flegtoc@type{⟨text⟩} is responsible for writing a title text to the appropriate listof file. \fleg@type is responsible for typeseting the name of the legend.

150 \long\def\@legend#1[#2]#3{%
151 \par
152 \csname flegtoc@#1\endcsname{#2}%
153 \begingroup
154  \@parboxrestore
155  \if@minipage
156  \@setminipage
157  \fi
158  \normalsize
159  \@makecaption{\csname fleg@#1\endcsname}{\ignorespaces #3}\par
160 \endgroup}

161

\flegtoc@table \flegtoc@figure These macros write a \namedlegend title to the respective listof file. By default they do nothing.

162 \newcommand{\flegtoc@table}[1]{}
163 \newcommand{\flegtoc@figure}[1]{}

164

\fleg@table \fleg@figure These macros typeset the name before the title of a \namedlegend. By default they are defined to mimic the normal captioning style.

165 \newcommand{\fleg@table}{\tablename}
166 \newcommand{\fleg@figure}{\figurename}

167

3.3 Non-float captions

\newfixedcaption \renewfixedcaption \providefixedcaption These commands are defined in terms of their \...command counterparts.

Call as \...fixedcaption[⟨capcommand⟩]{⟨command⟩}{⟨env⟩}

168 \newcommand{\newfixedcaption}[3][\caption]{%
169 \newcommand{#2}{\def\@captype{#3}#1}}
170 \newcommand{\renewfixedcaption}[3][\caption]{%
171 \renewcommand{#2}{\def\@captype{#3}#1}}
172 \newcommand{\providefixedcaption}[3][\caption]{%
173 \providecommand{#2}{\def\@captype{#3}#1}}

174

3.4 Bilingual captions

The bilingual caption commands all use internal grouping so that any changes are kept local. This has the unfortunate side-effect that any \label command must be within the grouping otherwise the wrong number is picked up. To make the coding, if not necessarily the use, of the commands simpler, I have not used the traditional style of square brackets for optional caption text arguments. Instead, empty ‘required’ arguments are used as the implementation means.

\@if@contemptyarg For dealing with empty arguments. \@if@contemptyarg{⟨testarg⟩}{⟨YES⟩}{⟨NO⟩} checks if ⟨testarg⟩ is empty (consists of zero or more spaces only). If it is empty then the ⟨YES⟩ argument is processed otherwise the ⟨NO⟩ argument is processed. The implementation uses code suggested by Donald Arseneau (see section A for some background on this).

175 \begingroup
176 \catcode`\Q=3
177 \long\gdef\@if@contemptyarg#1{\@xif@contmt#1QQ\@secondoftwo\@firstoftwo\@nil}
178 \long\gdef\@xif@contmt#1#2Q#3#4#5\@nil{#4}
179 \endgroup

180

\bitwonumcaption The 6 arguments are: optional label, short and long in language 1, name in language 2, and short and long in language 2. Both texts are put into the List of as numbered entries.

181 \newcommand{\bitwonumcaption}[6][\@empty]{%
182 \begingroup

Check if the first language argument is vacuous, then call the normal \caption for language 1.

183 \@if@contemptyarg{#2}{\caption{#3}}{\caption[#2]{#3}}

Do the optional labeling.

184 \ifx #1\@empty\else
185  \label{#1}
186 \fi

Remove any extra spacing between the captions, and set the NAME for the second caption. Use a command to transfer the NAME to the renewell code to avoid circularity if for example, we are trying to redefine \tablename as \tablename. Decrement the caption counter.

187 \setlength{\abovecaptionskip}{0pt}
188 \setlength{\belowcaptionskip}{0pt}
189 \edef\@conttempc{#4}
190 \expandafter \renewcommand \csname \@captype name\endcsname{\@conttempc}
191 \addtocounter{\@captype}{-1}

Now repeat for the second language caption.

192 \@contmidbi
193 \@if@contemptyarg{#5}{\caption{#6}}{\caption[#5]{#6}}
194 \endgroup

195 }

196

\bionenumcaption The 6 arguments are: optional labelling, short and long in language 1, name in language 2, and short and long in language 2. Both texts are put into the List of, but only the first is numbered.

197 \newcommand{\bionenumcaption}[6][\@empty]{%
198 \begingroup

Check if the first language argument is vacuous, then call the normal \caption for language 1.

199 \@if@contemptyarg{#2}{\caption{#3}}{\caption[#2]{#3}}

Do the optional labeling.

200 \ifx #1\@empty\else
201  \label{#1}
202 \fi

Do the between captions code.

203 \setlength{\abovecaptionskip}{0pt}
204 \setlength{\belowcaptionskip}{0pt}
205 \edef\@conttempc{#4}
206 \expandafter \renewcommand \csname \@captype name\endcsname{\@conttempc}

Use a continuation caption for the second language, not forgetting to add the appropriate unnumbered text to the List.

207 \@contmidbi
208 \contcaption{#6}
209 \@if@contemptyarg{#5}{%
210  \addcontentsline{\csname ext@\@captype\endcsname}{\@captype}%
211  {\protect\numberline{}{\ignorespaces #6}}}{%
212  \addcontentsline{\csname ext@\@captype\endcsname}{\@captype}%
213  {\protect\numberline{}{\ignorespaces #5}}}
214 \endgroup

215 }

216

\bicaption The 5 arguments are: optional labelling, short and long in language 1, name in language 2, and long in language 2. Only the first text is put into the List.

217 \newcommand{\bicaption}[5][\@empty]{%
218 \begingroup

Check if the first language argument is vacuous, then call the normal \caption for language 1.

219 \@if@contemptyarg{#2}{\caption{#3}}{\caption[#2]{#3}}

Do the optional labeling.

220 \ifx #1\@empty\else
221  \label{#1}
222 \fi

Do the between captions code and finally just use \contcaption for the second language.

223 \setlength{\abovecaptionskip}{0pt}
224 \setlength{\belowcaptionskip}{0pt}
225 \edef\@conttempc{#4}
226 \expandafter \renewcommand \csname \@captype name\endcsname{\@conttempc}
227 \@contmidbi
228 \contcaption{#5}
229 \endgroup

230 }

231

\bicontcaption The 3 arguments are long in language 1, name in language 2, and long in language 2.

232 \newcommand{\bicontcaption}[3]{%
233 \begingroup

Call \contcaption for language 1.

234 \contcaption{#1}

Do the between captions code and use \contcaption for the second language.

235 \setlength{\abovecaptionskip}{0pt}
236 \setlength{\belowcaptionskip}{0pt}
237 \edef\@conttempc{#2}
238 \expandafter \renewcommand \csname \@captype name\endcsname{\@conttempc}
239 \@contmidbi
240 \contcaption{#3}
241 \endgroup

242 }

243

3.5 The subfigure options

\@contkeep \@contset \subconcluded \subfigold@contcaption These are common to both subfigure options. \@contkeep stores the cur-

rent sub(figure/table) number in counter @contsubnum and \@contset sets the sub(figure/table) number to the value of @contsubnum. \subconcluded sets the sub(figure/table) number to zero. The original definition of \@contcaption is

kept in \subfigold@contcaption.
244 \if@contsubfig
245 \newcounter{@contsubnum}
246 \newcommand{\@contkeep}{\setcounter{@contsubnum}{\value{sub\@captype}}}
247 \newcommand{\@contset}{\setcounter{sub\@captype}{\value{@contsubnum}}}
248 \newcommand{\subconcluded}{\setcounter{sub\@captype}{0}}
249 \let\subfigold@contcaption\@contcaption

\toclevel@subtable \toclevel@subfigure These are needed if the hyperref package is loaded as well as subfigures.

250 \providecommand{\toclevel@subtable}{1}
251 \providecommand{\toclevel@subfigure}{1}
252 \fi

\if@contmaincaption This is set TRUE after the (cont)caption in a float has been processed. (A \newif cannot be used within an \if...\fi construct.)

253 \newif\if@contmaincaption
254 \@contmaincaptionfalse

\if@contbotsub A flag indicating whether the subcaption is to be at the bottom or top of the subfigure/subtable; TRUE for the subcaption at the bottom.

255 \newif\if@contbotsub
256 \@contbotsubtrue

257

3.5.1 Option subfigure20

In order to eliminate an ordering dependency between the subfigure and ccaption packages, modifications to the original subfigure code have to be done at the start of the document after all packages have been loaded. First for subfigure 2.0, if it is called for.

258 \AtBeginDocument{%
259 \if@contsubfigxx

\caption \contcaption \@float \@dbflt These original commands are all modified to set the value of \if@contmaincaption.

The (cont)caption commands set it to TRUE and the float commands set it FALSE. Additionally, the \@float and \@dbflt commands are modified to zero the subfloat counter, if it is defined.

260 \let\@contoldc\caption
261 \renewcommand{\caption}{\@contmaincaptiontrue\@contoldc}
262 \let\@contoldcont\contcaption
263 \renewcommand{\contcaption}{\@contmaincaptiontrue\@contoldcont}
264 \let\@contoldf\@float
265 \renewcommand{\@float}[1]{\@contmaincaptionfalse
266  \@ifundefined{c@sub#1}{}{\csname c@sub#1\endcsname = 0\relax}
267  \@contoldf{#1}}
268 \let\@contoldff\@dbflt
269 \renewcommand{\@dbflt}[1]{\@contmaincaptionfalse
270  \@ifundefined{c@sub#1}{}{\csname c@sub#1\endcsname = 0\relax}
271  \@contoldff{#1}}

272

\@subfloat This macro from subfigure v2.0 is modified to enable subcaptions to be placed at either the top or bottom of the sub... (the original only placed them at the bottom). First, the subfigure/table is set in a box.

273 \def\@subfloat#1[#2]#3{%
274  \setbox\@tempboxa \hbox{#3}%
275  \@tempdima=\wd\@tempboxa
276  \if@contbotsub

The subcaption is to be put at the bottom, so typeset the figure, followed by the caption, if any.

277  \vtop{%
278  \vbox{\vskip\subfigtopskip
279  \box\@tempboxa}%
280  \ifx \@empty#2\relax \else
281  \vskip\subfigcapskip
282  \@subcaption{#1}{#2}%
283  \fi
284  \vskip\subfigbottomskip}%
285  \else

The subcaption is to be put at the top, so typeset the caption if any, followed by the figure.

286  \vtop{%
287  \ifx \@empty#2\relax \else
288  \vskip\subfigcapskip
289  \begingroup\@subcaption{#1}{#2}\endgroup%
290  \fi
291  \vbox{\vskip\subfigtopskip
292  \box\@tempboxa}%
293  \vskip\subfigbottomskip}%
294  \fi
295  \egroup}

296

\@subcaption The original \@subcaption command produces unexpected results in the ToC (i.e., numberline appears instead of \numberline because of the original internal definition of \protect). I have also modified it so that when a top main caption is being used, it adds the subcaption to the ToC directly.

Sebastien Derriere found that there were problems when fragile commands were used within a continued subcaption. Steven Douglas Cochran kindly provided a fix for this.

297 \renewcommand{\@subcaption}[2]{%
298  \begingroup
299  \let\label\@gobble
300  \let\protect\string      % SDC mod
301  \if@contmaincaption
302  \addcontentsline{\csname ext@#1\endcsname}{#1}%
303  {\protect\numberline{\csname p@#1\endcsname\csname the#1\endcsname}%
304  {\ignorespaces #2}}%
305  \gdef\@subfigcaptionlist{}
306  \else
307  \xdef\@subfigcaptionlist{%
308  \@subfigcaptionlist,%
309 %%        {\string\numberline {\@currentlabel}%   % SDC mod
310  {\protect\numberline {\@currentlabel}%   % SDC mod
311  \noexpand{\ignorespaces #2}}}%
312  \fi
313  \endgroup
314  \@nameuse{@make#1caption}{\@nameuse{@the#1}}{#2}}

315

\subfigure \subtable These are revised versions of the original commands. They are now aliases for \subbottom and \subtop respectively. In their original form they were both effectively aliases for \subbottom only.

316 \let\subfigure\subbottom
317 \let\subtable\subtop
318 \fi

319 }

The end of the \AtBeginDocument code for subfigure20.

Do the remaining code for the subfigure20 option, if called for.

320 \if@contsubfigxx

\subbottom \@contsubbody \subbottom[⟨caption⟩]{⟨text⟩} typesets a subcaption when the main caption is at the end of the float environment. The code is a slight modification of the original \subfigure command in that the bottom flag is added and set to true and the subcaption number is stored. The caption number must be locally advanced if the main caption has not yet been processed (i.e., is at the bottom of the float). As most of the code is common with \subtop it is placed into the \@contsubbody macro.

321 \newcommand{\subbottom}{%
322  \@contbotsubtrue
323  \@contsubbody}

324

325 \newcommand{\@contsubbody}{%
326  \bgroup
327  \if@contmaincaption\else
328  \advance\csname c@\@captype\endcsname\@ne

329  \fi
330  \refstepcounter{sub\@captype}\@contkeep%
331  \leavevmode
332  \@ifnextchar [%
333  {\@subfloat{sub\@captype}}
334  {\@subfloat{sub\@captype}[\@empty]}}

335

\contsubbottom \subbody@cont The continued version of \subbottom. It restores the kept subcaption number before incrementing and keeping it. As most of the code is common with

 \contsubtop it is kept in the \subbody@cont.
336 \newcommand{\contsubbottom}{%
337  \@contbotsubtrue
338  \subbody@cont}

339

340 \newcommand{\subbody@cont}{%
341  \bgroup
342  \@contset
343  \refstepcounter{sub\@captype}\@contkeep%
344  \leavevmode
345  \@ifnextchar [%
346  {\@subfloat{sub\@captype}}
347  {\@subfloat{sub\@captype}[\@empty]}}

348

\subtop \subtop[⟨caption⟩]{⟨text⟩} typesets a subcaption at the top of the subfigure/table. This is almost identical to \subbottom.

349 \newcommand{\subtop}{%
350  \@contbotsubfalse
351  \@contsubbody}

352

\contsubtop The continued version of \subtop.

353 \newcommand{\contsubtop}{%
354  \@contbotsubfalse
355  \subbody@cont}

356

\@contcaption The \@contcaption command must be modified to add the listed subcaptions (if any, and there should be none for top main captions) to the ToC. A simplified version of the subfigure redefinition of \@caption.

357 \long\def\@contcaption#1#2{%
358  \subfigold@contcaption{#1}{#2}%
359  \@for \@conttempa:=\@subfigcaptionlist \do {%
360  \ifx\@empty\@conttempa\relax \else
361  \addcontentsline
362  {\@nameuse{ext@sub#1}}%
363  {sub#1}%
364  {\@conttempa}%
365  \fi}%
366  \gdef\@subfigcaptionlist{}}

367

\contsubtable \contsubfigure Aliases for \contsubtop and \contsubbottom, respectively.
368 \let\contsubtable\contsubtop
369 \let\contsubfigure\contsubbottom

370

The end of the subfigure20 option code.

371 \fi

372

This is the end of the version 2.0 code.

3.5.2 Option subfigure21

\caption \contcaption \@float \@dbflt These original commands are all modified to set the value of \if@contmaincaption.

The (cont)caption commands set it to TRUE and the float commands set it FALSE. Additionally, the \@float and \@dbflt commands are modified to zero the subfloat counter, if it is defined.

373 \if@contsubfigxxi
374 \let\@contoldc\caption
375 \renewcommand{\caption}{\@contmaincaptiontrue\@contoldc}
376 \let\@contoldcont\contcaption
377 \renewcommand{\contcaption}{\@contmaincaptiontrue\@contoldcont}
378 \let\@contoldf\@float
379 \renewcommand{\@float}[1]{\@contmaincaptionfalse
380  \@ifundefined{c@sub#1}{}{\csname c@sub#1\endcsname = 0\relax}
381  \@contoldf{#1}}
382 \let\@contoldff\@dbflt
383 \renewcommand{\@dbflt}[1]{\@contmaincaptionfalse
384  \@ifundefined{c@sub#1}{}{\csname c@sub#1\endcsname = 0\relax}
385  \@contoldff{#1}}
386 \fi

387

\@contsubfloat This is a version of the subfigure \subfigure command. The revised version stores the subcounter.

388 \newcommand{\@contsubfloat}{%
389 \bgroup
390 \let\subfig@oldlabel=\label
391 \let\label=\sub@label
392 \refstepcounter{sub\@captype}\@contkeep%   % <- change here
393 \@ifnextchar [%
394  {\@@cont@subfloat}%
395  {\@@cont@subfloat[\@empty]}}

396

\@@contsubfloat This is a revised version of the subfigure \@subfigure command (just the called macronames are changed).

397 \def\@@contsubfloat[#1]{%
398 \@ifnextchar [%
399  {\@@@contsubfloat{sub\@captype}[#1]}%
400  {\@@@contsubfloat{sub\@captype}[\@empty #1][#1]}}

401

\@@@contsubfloat This is a modified version of the subfigure \@subfloat command. Essentially the

 \csname if#1topcap\endcsname constructs are replaced by \if@contbotsub.

This is actually only required for user-defined floats where I haven’t been able to work out if it is possible to create new \if#1... commands within a command that has a a parameter #1.

402 \long\def\@@@contsubfloat#1[#2][#3]#4{%
403 \@tempcnta=\@ne
404 \ifsf@tight
405  \if@minipage
406  \@tempcnta=\z@
407  \else
408  \ifdim\lastskip=\z@
409  \@tempcnta=\@ne
410  \else
411  \@tempcnta=\tw@
412  \fi
413  \fi
414 \fi
415 \if@contbotsub
416  \def\subfig@top{\subfigtopskip}%
417  \def\subfig@bottom{\subfigbottomskip}%
418 \else
419  \def\subfig@top{\subfigbottomskip}%
420  \def\subfig@bottom{\subfigtopskip}%
421 \fi
422 \setbox\@tempboxa \hbox{#4}%
423 \@tempdima=\wd\@tempboxa
424 \vtop\bgroup
425  \vbox\bgroup
426  \ifcase\@tempcnta
427  \@minipagefalse
428  \or
429  \vspace{\subfig@top}
430  \or
431  \ifdim \lastskip=\z@ \else
432  \@tempskipb\subfig@top\relax\@xaddvskip
433  \fi
434  \fi
435  \if@contbotsub
436  \box\@tempboxa\egroup
437  \ifx \@empty#3\relax \else
438  \vskip\subfigcapskip
439  \@subcaption{#1}{#2}{#3}%
440  \fi
441  \else
442  \ifx\@empty#3\relax \else
443  \@subcaption{#1}{#2}{#3}%
444  \vskip\subfigcapskip
445  \vskip\subfigcaptopadj
446  \fi\egroup
447  \box\@tempboxa
448  \fi
449  \vspace{\subfig@bottom}

450 \egroup
451 \egroup}

452

\cont@subfig@oldcaption Keep the definition of \@caption.
453 \let\cont@subfig@oldcaption\@caption

454

The remainder of the subfigure21 option code.

\doxxi@contcaption This command redefines the \@contcaption command to flush out any pending subcaptions. The redefinition cannot be done within \if...\fi because of the internal \if... creation. The code is simplified from the subfigure v2.1 redefinition

 of \@caption.
455 \newcommand{\doxxi@contcaption}{%
456 \long\def\@contcaption##1##2{%
457  \if@contbotsub
458  \@listsubcaptions{##1}%
459  \subfigold@contcaption{##1}{##2}
460  \else
461  \subfigold@contcaption{##1}{##2}
462  \@listsubcaptions{##1}%
463  \fi}

464 }

465

We can now call the rest of the subfigure21 code, if required.

466 %%%\if@contsubfigxxi

467

\subbottom \@contsubbody \subbottom[⟨list-entry⟩][⟨subcaption⟩]{⟨text⟩} typesets a subcaption below the ⟨text⟩. Most of the work is performed by the \@contsubbody macro.

468 \newcommand{\subbottom}{%
469  \@contbotsubtrue
470  \@contsubbody}

471

472 \newcommand{\@contsubbody}{%
473  \bgroup
474  \let\subfig@oldlabel=\label
475  \let\label=\sub@label
476  \if@contmaincaption\else
477  \advance\csname c@\@captype\endcsname\@ne
478  \fi
479  \refstepcounter{sub\@captype}\@contkeep%
480  \leavevmode
481  \@ifnextchar [%
482  {\@@contsubfloat}%
483  {\@@contsubfloat[\@empty]}}

484

\contsubbottom \subbody@cont These are the continued versions of \subbottom and \@contsubbody.
485 \newcommand{\contsubbottom}{%
486  \@contbotsubtrue
487  \subbody@cont}

489 \newcommand{\subbody@cont}{%
490  \bgroup
491  \let\subfig@oldlabel=\label
492  \let\label=\sub@label
493  \@contset
494  \refstepcounter{sub\@captype}\@contkeep%
495  \leavevmode
496  \@ifnextchar [%
497  {\@@contsubfloat}%
498  {\@@contsubfloat[\@empty]}}

499

\subtop \contsubtop These are similar to \subbottom and \contsubbottom except that they put the

subcaption on top of the ⟨text⟩.

500 \newcommand{\subtop}{%
501  \@contbotsubfalse
502  \@contsubbody}

503

504 \newcommand{\contsubtop}{%
505  \@contbotsubfalse
506  \subbody@cont}

507

\contsubfigure This a simplified version of \subfigure in that the main caption counter is not incremented (we should be in a continued float), and the subcounter is restored before being incremented.

508 \newcommand{\contsubfigure}{%
509  \bgroup
510  \let\subfig@oldlabel=\label
511  \let\label=\sub@label
512  \@contset
513  \refstepcounter{sub\@captype}\@contkeep%
514  \@ifnextchar [%
515  {\@@contsubfloat}%
516  {\@@contsubfloat[\@empty]}}

517

\@contsf \@contst These are versions of the \subfigure and \subtable macros written using the ccaption style.

518 \newcommand{\@contsf}{\@contbotsubtrue%
519 \ifsubfiguretopcap\@contbotsubfalse\fi%
520 \@contsubbody}
521 \newcommand{\@contst}{\@contbotsubtrue%
522 \ifsubtabletopcap\@contbotsubfalse\fi%
523 \@contsubbody}

524

Now these can be used if appropriate within the \AtBeginDocument code. But first call for the new version of \@contcaption.

525 \if@contsubfigxxi

526

527 \doxxi@contcaption

529 \AtBeginDocument{%
530  \let\@subfloat\@@@contsubfloat
531  \let\@subfigure\@@contsubfloat
532  \let\subfigure\@contsf
533  \let\subtable\@contst
534  \let\contsubfigure\contsubbottom
535  \let\contsubtable\contsubtop
536  \long\def\@caption#1[#2]#3{%
537  \cont@subfig@oldcaption{#1}[{#2}]{#3}}

538 }

539

The end of the subfigure21 option code.

540 \fi

541

3.6 New floats

To define a float environment, say fenv, the following macros must be defined:

• \fps@fenv The default placement specifier (normally tbp).

• \ftype@fenv The type number which is an integer and a power of 2.

• \ext@fenv The file extension for the contents list.

• \c@fenv A counter for the environment (for caption numbering).

• \fnum@fenv A macro to generate the caption ‘number’.

• \l@fenv A macro to produce an entry in a list of. …

• \flegtoc@fenv A macro to write a \namedlegend title to a listof file.

• \fleg@fenv A macro to typeset the name of a \namedlegend.

• \toclevel@fenv Holding a bookmark level.

Note that the \fleg... macros are only required for the ccaption package, and \toclevel@fenv is only required if the hyperref package is being used. The others are required for any new float, whether or not the ccaption package is being used.

newflo@tctr A counter for the type number of a new float. Normally figures are of type 1, tables type 2, and the next float type is then 4, and so on.

542 \newcounter{newflo@tctr}
543 \@ifundefined{c@figure}{\setcounter{newflo@tctr}{1}}{
544 \@ifundefined{c@table}{\setcounter{newflo@tctr}{2}}{
545  \setcounter{newflo@tctr}{4}}}

546

\cftdot \cftdotsep \cftdotfill \@cfttocstart \@cfttocfinish These macros are also provided by the tocloft package, but we need them in any event.

547 \providecommand{\cftdot}{.}
548 \providecommand{\cftdotsep}{4.5}
549 \providecommand{\cftdotfill}[1]{%

550 \leaders\hbox{$\m@th\mkern #1 mu \hbox{\cftdot}\mkern #1 mu$}\hfill}
551 \providecommand{\@cfttocstart}{%
552 \@ifundefined{chapter}{}{%
553  \if@twocolumn
554  \@restonecoltrue\onecolumn
555  \else
556  \@restonecolfalse
557  \fi}}
558 \providecommand{\@cfttocfinish}{%
559 \@ifundefined{chapter}{}{\if@restonecol\twocolumn\fi}}

560

\newfloatentry \newfloatentry[⟨within⟩]{⟨counter⟩}{⟨ext⟩}{⟨level-1 ⟩} generates the commands for typesetting a caption in a float and a caption in a listing.

561 \newcommand{\newfloatentry}[4][\@empty]{%

{\c@X \atop \theX} Create the new counter. An error if it exists.

562 \@ifundefined{c@#2}{%
563  \ifx \@empty#1\relax
564  \newcounter{#2}
565  \else
566  \@ifundefined{c@#1}{\PackageWarning{ccaption}%
567  {#1 has no counter for use as a `within'}
568  \newcounter{#2}}%
569  {\newcounter{#2}[#1]%
570  \expandafter\edef\csname the#2\endcsname{%
571  \expandafter\noexpand\csname the#1\endcsname.\noexpand\arabic{#2}}}
572  \fi
573  \setcounter{#2}{0}

574 }

575 {\PackageError{ccaption}{#2 has been previously defined}{\@eha}}

576

That finishes off the error checking, rest is defined in any event

\l@X \l@X{title}{page} typesets the entry in the listing, but only if the Zdepth is greater than ⟨level-1 ⟩.

577 \@namedef{l@#2}##1##2{%
578  \ifnum \@nameuse{c@#3depth} > #4\relax
579  \vskip \@nameuse{cftbefore#2skip}
580  {\leftskip \@nameuse{cft#2indent}\relax
581  \rightskip \@tocrmarg
582  \parfillskip -\rightskip
583  \parindent \@nameuse{cft#2indent}\relax\@afterindenttrue
584  \interlinepenalty\@M
585  \leavevmode
586  \@tempdima \@nameuse{cft#2numwidth}\relax
587  \expandafter\let\expandafter\@cftbsnum\csname cft#2presnum\endcsname
588  \expandafter\let\expandafter\@cftasnum\csname cft#2aftersnum\endcsname
589  \expandafter\let\expandafter\@cftasnumb\csname cft#2aftersnumb\endcsname
590  \advance\leftskip\@tempdima \null\nobreak\hskip -\leftskip
591  {\@nameuse{cft#2font}##1}\nobreak
592  \@nameuse{cft#2fillnum}{##2}}
593 \fi

594  }  % end of \l@#2

595

Now define all the layout commands used by \l@X. The default values for these correspond to those for figure and table entries.

\cftbeforeXskip
596 \expandafter\newlength\csname cftbefore#2skip\endcsname
597  \setlength{\@nameuse{cftbefore#2skip}}{\z@ \@plus .2\p@}
\cftXindent
\cftXnumwidth
598 \expandafter\newlength\csname cft#2indent\endcsname
599 \expandafter\newlength\csname cft#2numwidth\endcsname

Set the default values for the indent and numwidth depending on the entry’s level. A level of 1 (⟨level-1 ⟩ = 0) corresponds to a figure.

600 \ifcase #4\relax  % 0
601  \setlength{\@nameuse{cft#2indent}}{1.5em}
602  \setlength{\@nameuse{cft#2numwidth}}{2.3em}
603 \or               % 1
604  \setlength{\@nameuse{cft#2indent}}{3.8em}
605  \setlength{\@nameuse{cft#2numwidth}}{3.2em}
606 \or               % 2
607  \setlength{\@nameuse{cft#2indent}}{7.0em}
608  \setlength{\@nameuse{cft#2numwidth}}{4.1em}
609 \or               % 3
610  \setlength{\@nameuse{cft#2indent}}{10.0em}
611  \setlength{\@nameuse{cft#2numwidth}}{5.0em}
612 \else             % anything else
613  \setlength{\@nameuse{cft#2indent}}{1.5em}
614  \setlength{\@nameuse{cft#2numwidth}}{2.3em}
615 \fi
\cftXfont \cftXpresnum \cftXaftersnum \cftXaftersnumb \cftXdotsep \cftXleader \cftXpagefont \cftXafterpnum And the rest of the commands
616 \@namedef{cft#2font}{\normalfont}
617 \@namedef{cft#2presnum}{}
618 \@namedef{cft#2aftersnum}{}
619 \@namedef{cft#2aftersnumb}{}
620 \@namedef{cft#2dotsep}{\cftdotsep}
621 \@namedef{cft#2leader}{\normalfont\cftdotfill{\@nameuse{cft#2dotsep}}}
622 \@namedef{cft#2pagefont}{\normalfont}
623 \@namedef{cft#2afterpnum}{}

\cftXfillnum This typesets the leader and the page number.

624 \@namedef{cft#2fillnum}##1{%
625  {\@nameuse{cft#2leader}}\nobreak
626  \hb@xt@\@pnumwidth{\hfil\@nameuse{cft#2pagefont}##1}%
627  \@nameuse{cft#2afterpnum}\par}

\toclevel@X This is required for the hyperref package.

628 \@namedef{toclevel@#2}{#4}
 The end of \newfloatentry
629 } % end \newfloatentry

630

\newfloatlist \newfloatlist[⟨within⟩]{⟨fenv⟩}{⟨ext⟩}{⟨listname⟩}{⟨capname⟩} creates the commands for a new float environment ⟨fenv⟩ (aka X) and a new List of for ⟨fenv⟩, using ⟨ext⟩ (aka Z) as the file extension.

631 \newcommand{\newfloatlist}[5][\@empty]{%

Call \newfloatentry[within]{X}{Z}{0} to set up for typesetting the entry.

632 \ifx \@empty#1\relax
633  \newfloatentry{#2}{#3}{0}
634 \else
635  \newfloatentry[#1]{#2}{#3}{0}
636 \fi

\ftype@X Define the float type, set it to the float counter, and double the counter afterwards.

637 \@namedef{ftype@#2}{\value{newflo@tctr}}
638 \addtocounter{newflo@tctr}{\value{newflo@tctr}}

\ext@X Zdepth Define \ext@X for the file extension and set the new Zdepth depth counter to 1.

639 \@namedef{ext@#2}{#3}  % file extension
640 \newcounter{#3depth}
641 \setcounter{#3depth}{1}

642

\cftmarkZ \cftmarkZ specifies the marks for the page headings for the new listing.

643 \@namedef{cftmark#3}{%
644  \@mkboth{\MakeUppercase{#4}}{\MakeUppercase{#4}}}

645

\listofX \listofX typesets the listing.

646 \if@conttitleopt

For the titles option, basically copy the code from the standard \tableofcontents command definition.

647 \@namedef{listof#2}{%
648  \@cfttocstart
649  \@ifundefined{chapter}{\section*{#4}}{\chapter*{#4}}
650  \@nameuse{cftmark#3}
651  \@starttoc{#3}%
652  \@cfttocfinish}
653 \else

Otherwise, provide a fully parameterised heading style.

654 \@namedef{listof#2}{%
655  \@cfttocstart
656  \par
657  \begingroup
658  \parindent\z@ \parskip\z@
659  \@nameuse{@cftmake#3title}
660  \@starttoc{#3}%
661  \endgroup
662  \@cfttocfinish}
663 \fi

664

\@cftmakeZtitle \@cftmakeZtitle typeset the title heading for the liusting.

665 \@namedef{@cftmake#3title}{%
666  \@ifundefined{chapter}{%
667  \vspace{\@nameuse{cftbefore#3titleskip}}}{%
668  \vspace*{\@nameuse{cftbefore#3titleskip}}}
669  \interlinepenalty\@M
670  {\@nameuse{cft#3titlefont}#4}{\@nameuse{cftafter#3title}}
671  \@nameuse{cftmark#3}
672  \par\nobreak
673  \vskip \@nameuse{cftafter#3titleskip}
674  \@afterheading}

675

\cftbeforeZtitleskip \cftafterZtitleskip \cftZtitlefont \cftafterZtitle Define the lengths and commands for controlling the title heading layout. The

values depend on whether the document is chaptered or not.

676 \expandafter\newlength\csname cftbefore#3titleskip\endcsname
677 \expandafter\newlength\csname cftafter#3titleskip\endcsname
678 \@ifundefined{chapter}{%
679  \setlength{\@nameuse{cftbefore#3titleskip}}{3.5ex \@plus 1ex \@minus .2ex}
680  \setlength{\@nameuse{cftafter#3titleskip}}{2.3ex \@plus .2ex}
681  \@namedef{cft#3titlefont}{\normalfont\Large\bfseries}
682  }{%
683  \setlength{\@nameuse{cftbefore#3titleskip}}{50pt}
684  \setlength{\@nameuse{cftafter#3titleskip}}{40pt}
685  \@namedef{cft#3titlefont}{\normalfont\Huge\bfseries}

686 }

687  \@namedef{cftafter#3title}{}

688

\fps@X \fnum@X \flegtoc \fps@X is the default float placement specification, \fnum@X typesets the caption name and number, and \flegtoc@X is for named legends.

689 \@namedef{fps@#2}{tbp}                     % position
690 \@namedef{fnum@#2}{#5~\@nameuse{the#2}}    % caption naming
691 \@namedef{flegtoc@#2}##1{}                 % named legend

692

{X \atop X*} Finally define the new float environment, in both normal and starred forms.

693 \newenvironment{#2}{\@float{#2}}{\end@float}
694 \newenvironment{#2*}{\@dblfloat{#2}}{\end@dblfloat}

This ends the definition of \newfloatlist.

695 } % end \newlistof

696

\newfloatenv Up to version 2.7 of the package the command \newfloatenv[⟨within⟩]{⟨fenv⟩}{⟨ext⟩}{⟨capname⟩} created a new float environment. It was replaced in later versions by \newfloatlist. Print a warning message if it is used.

697 \newcommand{\newfloatenv}[4][\@empty]{%
698 \PackageError{ccaption}{\protect\newfloatenv\space has been replaced
699  by\MessageBreak
700  \protect\newfloatlist}{\@eha}

701 }

702

\listfloats Up to version 2.7 the \listfloats{⟨fenv⟩}{⟨heading⟩} command produced a list of floats for ⟨fenv⟩. It was replaced in later versions by the generated command \listoffenv. Print an error message.

703 \newcommand{\listfloats}[2]{%
704 \PackageError{ccaption}{\protect\listfloats{#1}{...} has been
705  replaced by\MessageBreak
706  \protect\listof #1}{\@eha}

707 }

708

To define subcaptions for use in a new float environment, say fenv, the following macros must be defined [Coc95]:

• A new counter subfenv for subcaption numbering.

• A new counter extdepth, where ext is the file extension for the contents list of fenv, for setting the contents depth.

• \thesubfenv for the formatting of the subcaption number.

• \@thesubfenv for typesetting the number.

• \@@thesubfenv for alternative label reference.

• \p@subfenv for prepending to the subcaption number when it is referenced.

• \ext@subfenv the file extension for the contents list.

• \l@subfenv for formatting the contents list entry.

• \@makesubfenvcaption for typesetting the subcaption.

• \toclevel@subfenv for hyperref bookmarks

\newsubfloat \newsubfloat{⟨fenv⟩} creates the commands for a new subfloat for ⟨fenv⟩ (aka X).

709 \newcommand{\newsubfloat}[1]{%
Call \newfloatentry[X]{subX}{extX}{1} to get most of the work done.
710 \newfloatentry[#1]{sub#1}{\@nameuse{ext@#1}}{1}
\ext@subX \thesubX \@thesubX \@@thesubX \p@subX \@makesubXcaption And now for the rest of the commands for subcaptions.
711 \@namedef{ext@sub#1}{\csname ext@#1\endcsname}
712 \@namedef{thesub#1}{(\alph{sub#1})}
713 \@namedef{@thesub#1}{{\subcaplabelfont\@nameuse{thesub#1}}\space}
714 \@namedef{@@thesub#1}{\@nameuse{thesub#1}}
715 \@namedef{p@sub#1}{\csname the#1\endcsname}
716 \@namedef{@makesub#1caption}{\@makesubfigurecaption}

717 }

718

\newfloatpagesoff \newfloatpagesoff{⟨fenv⟩} switches off page numbers in the listing for entries of type ⟨fenv⟩. It does this by redefining the \cftXfillnum command.

719 \DeclareRobustCommand{\newfloatpagesoff}[1]{
720 \@namedef{cft#1fillnum}##1{%
721  \parfillskip=\z@ plus1fil\@nameuse{cft#1afterpnum}\par}}

722

\newfloatpageson \newfloatpageson{⟨fenv⟩} switches on page numbers in the listing for entries of type ⟨fenv⟩. It does this by redefining the \cftXfillnum command to its default specification.

723 \DeclareRobustCommand{\newfloatpageson}[1]{
724 \@namedef{cft#1fillnum}##1{%
725  {\@nameuse{cft#1leader}}\nobreak
726  \hb@xt@\@pnumwidth{\hfil\@nameuse{cft#1pagefont}##1}%
727  \@nameuse{cft#1afterpnum}\par}}

728

\setnewfloatindents \setnewfloatindents{⟨fenv⟩}{⟨indent⟩}{⟨width⟩} sets the indent and numwidth for the float entry ⟨fenv⟩.

729 \newcommand{\setnewfloatindents}[3]{%
730 \setlength{\@nameuse{cft#1indent}}{#2}
731 \setlength{\@nameuse{cft#1numwidth}}{#3}

732 }

733

The end of this package.

734 ⟨/usc⟩

A The perils of empty

My original code for the \@if@contemptyarg command was as follows:

 \newcommand{\@if@contemptyarg}[3]{%
   \edef\@conttemp{\zap@space#1 \@empty}
   \ifx\@empty\@conttemp\relax #2\else #3\fi}

This uses the \zap@space kernel command and I wrote the code after looking at various code bits in the kernel and other packages, but I can’t now remember which ones.

Donald Arseneau kindly pointed out the error of my ways and provided the robust solution which is used in the body of this package. The following is a slightly edited version of an email he sent me on the subject.

I’m not sure how exactly it is supposed to work because there are cases for which it will fail spectacularly. [These involved testing an an argument that included macros of various forms] There are several errors I am sure of though:

• You used \edef which is not allowed in LaTeX — this creates a moving argument without any protection from \protect. Fragile commands will produce stack overflows and other errors. Even if you use \protected@edef, as is correct, you still make a moving argument to no purpose.

• \zap@space is not valid for general arguments. It fails if it ever sees an empty macro following a space. [e.g., \def\none{} used

         as \@if@contemptyarg{ \none}{}{}]

• By making \@if@contemptyarg skip over one of its parameters (#2, #3) you make it fail for nesting tabular or array environments.

• \@if@contemptyarg is itself a fragile command, and will require \protect if it ever appears in a title or other moving argument. Since it is possible to do the test by expandable operations alone, it should be done that way.

        I suggest you read CTAN:tex-archive/info/aro-bend/answer.002

for a past discussion of detecting empty arguments, and then use a definition of \@if@contemptyarg based on that discussion. You’ll find it in amsgen.dtx, or use instead the improved version ….

The definition of \@if@contemptyarg is based on the improved version that Donald supplied, only the macro names being changed.

References

[Coc95] Steven Douglas Cochran. The subfigure package. February 2002. (Available from CTAN as file subfigure.dtx)

[GMS94] Michel Goossens, Frank Mittelbach, and Alexander Samarin. The LaTeX Companion. Addison-Wesley Publishing Company, 1994.

[Lin95] Anselm Lingnau. An Improved Environment for Floats. March 1995. (Available from CTAN as file float.dtx)

[McCG95] James Darrell McCauley and Jeff Goldberg. The endfloat package. October 1995. (Available from CTAN as file endfloat.dtx)

[NiGa98] Rolf Niepraschk and Hubert Gäßlein. The sidecap package. June 1998. (Available from CTAN as file sidecap.dtx)

[Rec97] Keith Reckdahl. Using Imported Graphics in LaTeX2e. December 1997. (Available from CTAN as file info/epslatex.ps or

          info/epslatex.pdf)

[Som95] Harald Axel Sommerfeldt. The caption package. October 1995. (Available from CTAN as file caption2.dtx)

[Wil96] Peter R. Wilson. LaTeX for standards: The LaTeX package files user manual. NIST Report NISTIR, June 1996.

[Wil01] Peter R. Wilson. The tocloft package. March 2001. (Available from

          CTAN as file tocloft.dtx)

Index

Numbers written in italic refer to the page where the corresponding entry is described; numbers underlined refer to the code line of the definition; numbers in roman refer to the code lines where the entry is used.

Symbols

\@@@contsubfloat . .

. 399, 400, \underline{402}, 530

                          \@@cont@subfloat . .

. . . . . . . . 394, 395

                          \@@contsubfloat  \underline{397},

482, 483, 497, 498, 515, 516, 531 \@@thesubX . . . . . . . \underline{711}

\@afterheading . . . . 674
\@afterindenttrue . 583

\@caption . 17, 453, 536

\@captype . . . . . 17,

118, 148, 169, 171, 173, 190, 191, 206, 210, 212, 226, 238, 246–248, 328, 330, 333, 334, 343, 346, 347, 392, 399, 400, 477, 479, 494, 513

\@cftasnum . . . . . . . 588
\@cftasnumb . . . . . . . 589
\@cftbsnum . . . . . . . 587
\@cftmakeZtitle . . . \underline{665}
\@cfttocfinish . . . .

…. \underline{547}, 652, 662

\@cfttocstart . . . . .

…. \underline{547}, 648, 655

\@contbotsubfalse .

…. 350, 354, 501, 505, 519, 522

\@contbotsubtrue . .

. 256, 322, 337, 469, 486, 518, 521

\@contcapoptionfalse 18
\@contcapoptiontrue 19
\@contcaption . 118,

\underline{120}, 249, \underline{357}, 456

\@contcstyle . . . . . .

. . \underline{54}, 97, 102, 106

\@contcwfalse . . . . . 61
\@contcwidth . . . . \underline{57}, 91
\@contcwtrue . . . . . . 60
\@contdelim . . . . \underline{37},

84, 94, 96, 101, 105

\@contfmark . . . . . \underline{81}, 86
\@contfnote . . . . . \underline{81}, 85
\@conthangfalse . 67, 68
\@conthangtrue . . . . 65
\@contindentfalse 65, 68
\@contindenttrue . . 67
\@contindw . . . . \underline{64}, 102
\@contkeep . . . . . . .

. \underline{244}, 330, 343, 392, 479, 494, 513

\@contlabel . . . . . 83, 87
\@contmaincaptionfalse

. . . . . . . . 254, 265, 269, 379, 383

\@contmaincaptiontrue

. 261, 263, 375, 377

\@contmidbi . . . . \underline{71},

192, 207, 227, 239

\@contnfont . . . . \underline{40},

84, 94, 96, 101, 105

\@contoldc . . . . . . .

. 260, 261, 374, 375

\@contoldcont . . . . .

. 262, 263, 376, 377

\@contoldf . . . . . . .

. 264, 267, 378, 381

\@contoldff . . . . . . .

. 268, 271, 382, 385

\@contpost . . . . \underline{71}, 109

\@contpre \underline{71}, 95, 100, 104

\@contset . . . . . . . .

. \underline{244}, 342, 493, 512 \@contsf . . . . . \underline{518}, 532 \@contst . . . . . \underline{518}, 533

\@contsubbody . . . . .

…. \underline{321}, 351, \underline{468}, 502, 520, 523

\@contsubfigfalse . 10
\@contsubfigtrue . .

. . . . . . . 11, 12, 16

\@contsubfigxxfalse

. . . . . . . 6, 12, 16

\@contsubfigxxifalse

. . . . . . . . . . 8, 11

\@contsubfigxxitrue

. . . . . . . . . 12, 16

\@contsubfigxxtrue . 11
\@contsubfloat . . . . \underline{388}
\@conttempa . . . . . . .

78, 80, 96, 101, 105, 359, 360, 364

\@conttempc . . . 189,

190, 205, 206, 225, 226, 237, 238

\@conttfont . . . . . . .

\underline{43}, 84, 97, 102, 106

\@conttitleoptfalse 21
\@conttitleopttrue . 22
\@currentlabel 309, 310

\@dbflt . . . . . . \underline{260}, \underline{373} \@dblarg . . . . . . . . . 148

\@dblfloat . . . . . . . 694

\@eha . . . . . 575, 700, 706

\@firstoftwo . . . . . . 177

\@float . . . . . . \underline{260}, \underline{373} \@for . . . . . . . . . . . . 359

\@if@contemptyarg .

…. \underline{175}, 183, 193, 199, 209, 219

                          \@ifnextchar . . . . . .

. 332, 345, 393, 398, 481, 496, 514

                          \@ifundefined . . . . .

. 266, 270, 380, 384, 543, 544, 552, 559, 562, 566, 649, 666, 678

\@legend . . . . . 148, \underline{150}

                          \@listsubcaptions .

. . . . . . . . 458, 462

                          \@makecaption . . 18,

\underline{78}, 128, 145, 159

                          \@makesubXcaption . \underline{711}
                          \@makesubfigurecaption

. . . . . . . . . . . 716

                          \@minipagefalse . . . 427
                          \@namedef . . . . . . . .

. 577, 616–624, 628, 637, 639, 643, 647, 654, 665, 681, 685, 687, 689–691, 711–716, 720, 724

                          \@nameuse . 314, 362,

578–580, 583, 586, 591, 592, 597, 601, 602, 604, 605, 607, 608, 610, 611, 613, 614, 621, 625–627, 650, 659, 667, 668, 670, 671, 673, 679, 680, 683, 684, 690, 710, 713, 714, 721, 725–727, 730, 731

                          \@parboxrestore . . .

…. 123, 139, 154

                          \@pnumwidth . . . 626, 726
                          \@restonecolfalse . 556
                          \@restonecoltrue . . 554
                          \@secondoftwo . . . . . 177
                          \@setminipage . . . . .

…. 125, 141, 156

                          \@starttoc . . . 651, 660
                          \@subcaption . . 282,

289, \underline{297}, 439, 443

                          \@subfigcaptionlist

. . . . . . . . 305, 307, 308, 359, 366

                          \@subfigure . . . . . . . 531

\@subfloat   \underline{273}, 333,

334, 346, 347, 530

\@tempskipb . . . . . . . 432

\@thesubX . . . . . . . . \underline{711}

\@tocrmarg . . . . . . . 581
\@xaddvskip . . . . . . . 432
\@xif@contmt . . 177, 178

\\ . . . . . . . . . . . . . . . 3

A

\abovecaptionskip .

. . . . . . 18, 79, 187, 203, 223, 235

\abovelegendskip 7, \underline{131}
\addcontentsline . .

. 210, 212, 302, 361

\addtocounter . 191, 638
\AtBeginDocument . .

. . . . . . . . 258, 529

B

\baselineskip . . . . . 132
\belowcaptionskip .

. . . . . 18, 114, 188, 204, 224, 236

\belowlegendskip 7, \underline{131}
\bicaption . . . . 10, \underline{217}
\bicontcaption . 10, \underline{232}
\bionenumcaption 9, \underline{197}
\bitwonumcaption 9, \underline{181}

C

\c@X . . . . . . . . . . . . . \underline{562} \caption 17, 168, 170,

172, 183, 193, 199, 219, \underline{260}, \underline{373}

\captiondelim 2, \underline{37}, 144
\captionnamefont . 3, \underline{40}
\captionstyle . . . . 3, \underline{54}
\captiontitlefont 3, \underline{43}
\captionwidth . . . . 3, \underline{57}

\catcode . . . . . . . . . 176

\centering . . . . . 88, 90
\centerlastline . . . \underline{46}
\cftafterZtitle 14, \underline{676}
\cftafterZtitleskip

. . . . . . . . 14, \underline{676}

\cftbeforeXskip 15, \underline{596}
\cftbeforeZtitleskip

. . . . . . . . 14, \underline{676} \cftdot . . . . . . . . . . \underline{547}

\cftdotfill . . . \underline{547}, 621
\cftdotsep . . . \underline{547}, 620

\cftmarkZ . . . . . 14, \underline{643}

                          \cftXafterpnum . 15, \underline{616}
                          \cftXaftersnum . 15, \underline{616}
                          \cftXaftersnumb . . . \underline{616}
                          \cftXaftersnumnb . . 15
                          \cftXdotsep . . . . 15, \underline{616}
                          \cftXfillnum . . . . . . \underline{624}

\cftXfont . . . . . 15, \underline{616}

                          \cftXindent . . . . 15, \underline{598}
                          \cftXleader . . . . 15, \underline{616}
                          \cftXnumwidth . . 15, \underline{598}
                          \cftXpagefont . . 15, \underline{616}
                          \cftXpresnum . . . 15, \underline{616}
                          \cftZtitlefont . 14, \underline{676}
                          \changecaptionwidth

. . . . . . . . . . 3, \underline{57} \chapter . . . . . . . . . 649

                          \cont@subfig@oldcaption

. . . . . . . . \underline{453}, 537

                          \contcaption . . . . . .

5, \underline{118}, 208, 228, 234, 240, \underline{260}, \underline{373}

                          \contsubbottom . 11,

\underline{336}, 369, \underline{485}, 534

                          \contsubfigure . . . .

…. \underline{368}, \underline{508}, 534

                          \contsubtable . \underline{368}, 535
                          \contsubtop . . . . 11,

\underline{353}, 368, \underline{500}, 535 \csname 128, 152, 159,

190, 206, 210, 212, 226, 238, 266, 270, 302, 303, 328, 380, 384, 477, 570, 571, 587–589, 596, 598, 599, 676, 677, 711, 715

D

                          \DeclareRobustCommand

. . . . . . . . 719, 723 \do . . . . . . . . . . . . . 359

                          \doxxi@contcaption .

. . . . . . . . \underline{455}, 527

E \edef . . . . . . . . 189,

205, 225, 237, 570

                          \endcsname . . . . . . .

. 128, 152, 159, 190, 206, 210, 212, 226, 238, 266, 270, 302, 303, 328, 380, 384, 477, 570, 571, 587–589, 596, 598, 599, 676, 677, 711, 715

environments:

X* . . . . . . . . . . . . \underline{693} X . . . . . . . . . 14, \underline{693} \ext@subX . . . . . . . . \underline{711} \ext@type . . . . . . . . 18 \ext@X . . . . . . . . . . . \underline{639}

F

                                                   \figurename . . . . . . . 166
                                                   \fleg@figure . . . . . . \underline{165}
                                                   \fleg@table . . . . . . . \underline{165}
                                                   \fleg@type . . . . . . . . 8

\flegtoc . . . . . . . . . \underline{689}

                                                   \flegtoc@figure . . . \underline{162}
                                                   \flegtoc@table . . . . \underline{162}
                                                   \flegtoc@type . . . . . . 8
                                                   \flushleftright . . . \underline{46}
                                                   \fnum@type . . . . . . . 18

\fnum@X . . . . . . . . . . \underline{689} \footnote . . . . . . 81, 85

                                                   \footnotemark . . . 82, 86

\fps@X . . . . . . . . . . . \underline{689} \ftype@X . . . . . . . . . \underline{637}

H

                                                   \hangafter . . . . 97, 102
                                                   \hangcaption . . . . . 3, \underline{64}

\hb@xt@ . . . . . . 626, 726 \Huge . . . . . . . . . . . . 685

I

                                                   \if@contbotsub   \underline{255},

276, 415, 435, 457

                                                   \if@contcapoption .

. . . . . . \underline{17}, 30, 116

                                                   \if@contcw . \underline{26}, 89, 110
                                                   \if@conthang . . . . \underline{26}, 93
                                                   \if@contindent . . \underline{26}, 99
                                                   \if@contmaincaption

. \underline{253}, 301, 327, 476

                                                   \if@contsubfig . . \underline{5}, 244
                                                   \if@contsubfigxx . .

. . . . . . \underline{5}, 259, 320

                                                   \if@contsubfigxxi .

. . \underline{5}, 373, 466, 525

                                                   \if@conttitleopt  \underline{20}, 646
                                                   \if@minipage . . . . . .

. 124, 140, 155, 405

                                                   \if@restonecol . . . . 559
                                                   \if@twocolumn . . . . . 553

\ifsf@tight . . . . . . . 404
\ifsubfiguretopcap . 519
\ifsubtabletopcap . 522
\ignorespaces . . . . .

. 128, 145, 159, 211, 213, 304, 311

\indentcaption . . . 3, \underline{64}
\interlinepenalty .

. . . . . . . . 584, 669

L

\l@ . . . . . . . . . . . . . 594 \l@X . . . . . . . . . . . . . \underline{577} \label 83, 87, 185, 201,

221, 299, 390, 391, 474, 475, 491, 492, 510, 511

\Large . . . . . . . . . . . 681 \lastskip …. 408, 431 \leaders . . . . . . . . . 550 \leftskip 47, 50, 580, 590 \legend . . . . . . . . 6, \underline{136}

\linewidth . . . . . 59, 88
\listfloats . . . . 17, \underline{703}

\listof . . . . . . . . . . 706 \listofX . . . . . . 14, \underline{646}

M

\MakeUppercase . . . . 644

\mbox . . . . . . . . . . . . 144

\MessageBreak . . . . .

14, 32, 33, 699, 705

\midbicaption . . . 11, \underline{71}

\mkern . . . . . . . . . . . 550

N

\namedlegend . . . . 7, \underline{148}
\newfixedcaption 8, \underline{168}
\newflo@tctr . . . . . . \underline{542}
\newfloatentry . 14,

\underline{561}, 633, 635, 710

\newfloatenv . . . 17, \underline{697}
\newfloatlist . . . . .

. . . . . 13, \underline{631}, 700

\newfloatpagesoff .

. . . . . . . . 17, \underline{719}

\newfloatpageson 17, \underline{723}

\newif … 5, 7, 9, 17, 20, 26–28, 253, 255

                          \newlistof . . . . . . . 695
                          \newsubfloat . . . 16, \underline{709}

\noexpand …. 311, 571

                          \normalcaption . . . 3, \underline{64}
                          \normalcaptionwidth

. . . . . . . . . . 3, \underline{57}

                          \normalfont . . . 616,

621, 622, 681, 685

                          \normalsize 127, 143, 158

O

                          \onecolumn . . . . . . . 554

P \p@subX . . . . . . . . . . \underline{711}

                          \PackageError . . . . .

…. 575, 698, 704

                          \PackageWarning . . . 566
                          \PackageWarningNoLine

. . . . . . . . . 13, 31 \parbox . . . . . . . . . . 91

                          \parindent . . . 583, 658

\parskip . . . . . . . . . 658

                          \postcaption . . . . . 3, \underline{71}
                          \precaption . . . . . . 3, \underline{71}
                          \prevdepth . . . . . . . 79
                          \ProcessOptions . . . \underline{23}
                          \providecommand . . .

. 173, 250, 251, 547–549, 551, 558

                          \providefixedcaption

. . . . . . . . . 8, \underline{168}

                          \ProvidesPackage . . . 3

Q \Q . . . . . . . . . . . . . . 176

R

                          \renewfixedcaption .

. . . . . . . . . 8, \underline{168}

S \sbox . . . . . . . . . . 84, 94 \section . . . . . . . . . 649

                          \setnewfloatindents

. . . . . . . . 16, \underline{729} \string . . . . . . 300, 309

                          \sub@label . . . . . . .

. 391, 475, 492, 511

                                                   \subbody@cont . . . . .

. \underline{336}, 355, \underline{485}, 506

                                                   \subbottom . . . . . . .

. 11, 316, \underline{321}, \underline{468}

                                                   \subcaplabelfont . . 713
                                                   \subconcluded . . 11, \underline{244}
                                                   \subfig@bottom . . . .

…. 417, 420, 449

                                                   \subfig@oldlabel . .

. 390, 474, 491, 510

                                                   \subfig@top . . . . . . .

. 416, 419, 429, 432

                                                   \subfigbottomskip .

. 284, 293, 417, 419

                                                   \subfigcapskip . . . .

. 281, 288, 438, 444

                                                   \subfigcaptopadj . . 445
                                                   \subfigold@contcaption

. \underline{244}, 358, 459, 461

                                                   \subfigtopskip . . . .

. 278, 291, 416, 420

                                                   \subfigure . . . \underline{316}, 532

\subtable …. \underline{316}, 533 \subtop 11, 317, \underline{349}, \underline{500}

                                                   \suppressfloats . . . 23

T

                                                   \tablename . . . . . . . 165

\thesubX . . . . . . . . . \underline{711} \theX . . . . . . . . . 15, \underline{562}

                                                   \toclevel@subfigure  \underline{250}
                                                   \toclevel@subtable . \underline{250}
                                                   \toclevel@X . . . . . . . \underline{628}

\topskip . . . . . . . . . 80

                                                   \twocolumn . . . . . . . 559

V \value 246, 247, 637, 638 \vbox . . 80, 278, 291, 425 \vtop . . . . . 277, 286, 424

X \X . . . . . . . . . . . . . . 15 X (environment) . 14, \underline{693} X* (environment) … \underline{693} \xdef . . . . . . . . . . . . 307

Z \Zdepth . . . . . . . 14, \underline{639}