The subfig Package^{∗}

Steven Douglas Cochran

Digital Mapping Laboratory, School of Computer Science

Carnegie-Mellon University, 5000 Forbes Avenue Pittsburgh, PA 15213–3890 USA

                cochran@ieee.org
                 sdc@cs.cmu.edu

2004/01/28

Abstract

This article documents the L^{A}TEX package ‘subfig’, which provides support for the inclusion of small, ‘sub’, figures and tables. It simplifies the positioning, captioning and labeling of such objects within a single figure or table environment and to continue a figure or table across multiple pages. In addition, this package allows such sub-captions to be written to a List-of-Floats page as desired. The ‘subfig’ package requires the ‘caption’ package by H.A. Sommerfeldt and replaces the older ‘subfigure’ package.

∗This paper documents the subfig package ver: 1.2, last revised 2004/01/28.

Contents

1 Introduction 8 1.1 Do You Need This Package? . . . . . . . . . . . . . . . . . . . . . . 8

2 Package Commands 9

2.1 Preamble Commands . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.1.1 The \usepackage Command . . . . . . . . . . . . . . . . . 10 2.1.2 The \newsubfloat Command . . . . . . . . . . . . . . . . . 10

2.1.3 The \DeclareCaptionListOfFormat Command . . . . . . 10

2.2 General Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.2.1 The \subfloat Command . . . . . . . . . . . . . . . . . . . 10 2.2.2 The \subref Command . . . . . . . . . . . . . . . . . . . . 11 2.2.3 The \ContinuedFloat Command . . . . . . . . . . . . . . . 11 2.2.4 The \listsubcaptions Command . . . . . . . . . . . . . . 13 2.2.5 The \captionsetup Command . . . . . . . . . . . . . . . . 14

3 Options: Keywords and Values 15 3.1 Configuration Files . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.2 Options from the Caption Package . . . . . . . . . . . . . . . . . . 15

3.2.1 Caption Font Settings . . . . . . . . . . . . . . . . . . . . . 18 3.2.2 Caption Shape Settings . . . . . . . . . . . . . . . . . . . . . 19 3.2.3 Caption Justification Options . . . . . . . . . . . . . . . . . 35 3.2.4 Caption Label Options . . . . . . . . . . . . . . . . . . . . . 37 3.2.5 Caption Position Option . . . . . . . . . . . . . . . . . . . . 38

3.3 Options from the Subfig Package . . . . . . . . . . . . . . . . . . . 40 3.3.1 The Subfig List-of-Floats Specification . . . . . . . . . . . . 40 3.3.2 The Subfig Layout . . . . . . . . . . . . . . . . . . . . . . . 41 3.3.3 The Subfig Package Startup . . . . . . . . . . . . . . . . . . 41

4 Compatibility With Other Packages. 43 4.1 Caption Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.2 float Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.3 Other Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.4 Backward Compatibility with the Subfigure Package . . . . . . . . 45

5 Some Examples 47 5.1 A Simple Example . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 5.2 A More Advanced Example . . . . . . . . . . . . . . . . . . . . . . 48 5.3 An Example Without Sub-caption Text . . . . . . . . . . . . . . . 49

6 Frequently Asked Questions (FAQs) 51 6.1 “My sub-floats are not aligned along their bottoms. Why?” …. 51 6.2 “How can I get my floats/sub-floats to line up the way I want?” . . 52 6.3 “I have too many sub-floats for one page, How can I spread them

over two or more pages and continue the numbering?” . . . . . . . 52 6.4 “Why do I get a garbled caption or an error when I use square

brackets?” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 6.5 “I set an option and it had no effect. What is happening?” …. 52

7 The Code 54 7.1 Identification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 7.2 Load and Extend the caption Package . . . . . . . . . . . . . . . . 54 7.3 Options Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 7.4 Generalized List-of-Floats . . . . . . . . . . . . . . . . . . . . . . . 56 7.5 Create New Sub-floats . . . . . . . . . . . . . . . . . . . . . . . . . 57 7.6 Layout Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 7.7 Process the Package Options . . . . . . . . . . . . . . . . . . . . . 58 7.8 Define the Sub-float Layout . . . . . . . . . . . . . . . . . . . . . . 59 7.9 Connect the Sub-float Captions to the caption Package . . . . . . . 61 7.10 Subfig Caption Processing for the List-of-Floats Files . . . . . . . . 61 7.11 Subfig Label Handling . . . . . . . . . . . . . . . . . . . . . . . . . 62 7.12 Support for Continued Figures . . . . . . . . . . . . . . . . . . . . 63 7.13 Automate the Sub-float Listings . . . . . . . . . . . . . . . . . . . 64 7.14 Provide Compatibility for the hyperref Package . . . . . . . . . . . 65 7.15 Provide Compatibility for the float Package . . . . . . . . . . . . . 65 7.16 Provide Compatibility for the fixltx2e Package . . . . . . . . . . . . 65

8 Acknowledgments 66

List of Figures

1 Here are two figures side-by-side. . . . . . . . . . . . . . . . . . . . 9 2 First. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3 Second. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4 Here are the first two figures of a continued figure. . . . . . . . . . 12 5 Levels at which keyword/values pairs may be set to apply to, or

override earlier keyword/values pairs, for floats and sub-floats. … 14 6 Float caption. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

(a) Sub-float caption. . . . . . . . . . . . . . . . . . . . . . . . . 18 7 Font Size Options. . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

(a) Option [font=Large] . . . . . . . . . . . . . . . . . . . . . . . 18 (b) Option [font=large] . . . . . . . . . . . . . . . . . . . . . . . 18 (c) Option [font=normalsize] . . . . . . . . . . . . . . . . . . . 18 (d) Option [font=small] . . . . . . . . . . . . . . . . . . . . . . . 18 (e) Option [font=footnotesize] . . . . . . . . . . . . . . . . . . 18 (f) Option [font=scriptsize] . . . . . . . . . . . . . . . . . . . 18

8 Other Font Options. . . . . . . . . . . . . . . . . . . . . . . . . . . 20 (a) Option [font={rm,md,up}] . . . . . . . . . . . . . . . . . . . 20 (b) Option [font={rm,md,it}] . . . . . . . . . . . . . . . . . . . 20 (c) Option [font={rm,md,sl}] . . . . . . . . . . . . . . . . . . . 20 (d) Option [font={rm,md,sc}] . . . . . . . . . . . . . . . . . . . 20 (e) Option [font={rm,bf,up}] . . . . . . . . . . . . . . . . . . . 20 (f) Option [font={rm,bf,it}] . . . . . . . . . . . . . . . . . . . 20 (g) Option [font={rm,bf,sl}] . . . . . . . . . . . . . . . . . . . 20 (h) Option [font={rm,bf,sc}] . . . . . . . . . . . . . . . . . . . 20 (i) Option [font={sf,md,up}] . . . . . . . . . . . . . . . . . . . 20 (j) Option [font={sf,md,it}] . . . . . . . . . . . . . . . . . . . 20 (k) Option [font={sf,md,sl}] . . . . . . . . . . . . . . . . . . . 20 (l) Option [font={sf,md,sc}] . . . . . . . . . . . . . . . . . . . 20 (m) Option [font={sf,bf,up}] . . . . . . . . . . . . . . . . . . . 20 (n) Option [font={sf,bf,it}] . . . . . . . . . . . . . . . . . . . 20 (o) Option [font={sf,bf,sl}] . . . . . . . . . . . . . . . . . . . 20 (p) Option [font={sf,bf,sc}] . . . . . . . . . . . . . . . . . . . 20 (q) Option [font={tt,md,up}] . . . . . . . . . . . . . . . . . . . 20 (r) Option [font={tt,md,it}] . . . . . . . . . . . . . . . . . . . 20 (s) Option [font={tt,md,sl}] . . . . . . . . . . . . . . . . . . . 20 (t) Option [font={tt,md,sc}] . . . . . . . . . . . . . . . . . . . 20 (u) Option [font={tt,bf,up}] . . . . . . . . . . . . . . . . . . . 20 (v) Option [font={tt,bf,it}] . . . . . . . . . . . . . . . . . . . 20 (w) Option [font={tt,bf,sl}] . . . . . . . . . . . . . . . . . . . 20 (x) Option [font={tt,bf,sc}] . . . . . . . . . . . . . . . . . . . 20

9 Options [singlelinecheck=false]. . . . . . . . . . . . . . . . . . . 21 10 Options [ ]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

11 Options [indention=10pt,singlelinecheck=false]. . . . . . . . 21

12 Options [indention=10pt]. . . . . . . . . . . . . . . . . . . . . . . 21

13 Options [hangindent=10pt,singlelinecheck=false]. . . . . . . . 22

14 Options [hangindent=10pt]. . . . . . . . . . . . . . . . . . . . . . . 22

15 Options [hangindent=10pt,indention=10pt,

singlelinecheck=false] . . . . . . . . . . . . . . . . . . . . . . . 22

16 Options [hangindent=10pt,indention=10pt]. . . . . . . . . . . . 22
17 Options [parskip=5pt,singlelinecheck=false]. . . . . . . . . . 22

18 Options [parskip=5pt]. . . . . . . . . . . . . . . . . . . . . . . . . 23

19 Options [parskip=5pt,indention=10pt,singlelinecheck=false]. 23

20 Options [parskip=5pt,indention=10pt]. . . . . . . . . . . . . . . 23

21 Options [parskip=5pt,hangindent=10pt,

singlelinecheck=false] . . . . . . . . . . . . . . . . . . . . . . . 23

22 Options [parskip=5pt,hangindent=10pt]. . . . . . . . . . . . . . 23
23 Options [parskip=5pt,hangindent=10pt,indention=10pt,

singlelinecheck=false] . . . . . . . . . . . . . . . . . . . . . . . 24

24 Options [parskip=5pt,hangindent=10pt,indention=10pt]. . . . 24
25 Options [format=hang,singlelinecheck=false]. . . . . . . . . . 24

26 Options [format=hang,]. . . . . . . . . . . . . . . . . . . . . . . . . 24

27 Options [format=hang,indention=10pt,singlelinecheck=false]. 24

28 Options [format=hang,indention=10pt]. . . . . . . . . . . . . . . 25

29 Options [format=hang,hangindent=10pt,

singlelinecheck=false] . . . . . . . . . . . . . . . . . . . . . . . 25

30 Options [format=hang,hangindent=10pt]. . . . . . . . . . . . . . 25
31 Options [format=hang,hangindent=10pt,indention=10pt,

singlelinecheck=false] . . . . . . . . . . . . . . . . . . . . . . . 25

32 Options [format=hang,hangindent=10pt,indention=10pt]. . . . 25
33 Options [format=hang,parskip=5pt,singlelinecheck=false]. . 26

34 Options [format=hang,parskip=5pt]. . . . . . . . . . . . . . . . . 26

35 Options [format=hang,parskip=5pt,indention=10pt,

singlelinecheck=false] . . . . . . . . . . . . . . . . . . . . . . . 26

36 Options [format=hang,parskip=5pt,indention=10pt]. . . . . . . 26
37 Options [format=hang,parskip=5pt,hangindent=10pt,

singlelinecheck=false] . . . . . . . . . . . . . . . . . . . . . . . 26

38 Options [format=hang,parskip=5pt,hangindent=10pt]. . . . . . 27
39 Options [format=hang,parskip=5pt,hangindent=10pt,
    indention=10pt,singlelinecheck=false] . . . . . . . . . . . . . 27
40 Options [format=hang,parskip=5pt,hangindent=10pt,

indention=10pt] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

41 Options [margin=10pt,singlelinecheck=false]. . . . . . . . . . 27

42 Options [margin=10pt]. . . . . . . . . . . . . . . . . . . . . . . . . 27

43 Options [margin=10pt,indention=10pt,singlelinecheck=false]. 28

44 Options [margin=10pt,indention=10pt]. . . . . . . . . . . . . . . 28

45 Options [margin=10pt,hangindent=10pt,

singlelinecheck=false] . . . . . . . . . . . . . . . . . . . . . . . 28

46 Options [margin=10pt,hangindent=10pt]. . . . . . . . . . . . . . 28
47 Options [margin=10pt,hangindent=10pt,indention=10pt,

singlelinecheck=false] . . . . . . . . . . . . . . . . . . . . . . . 28

48 Options [margin=10pt,hangindent=10pt,indention=10pt]. . . . 29
49 Options [margin=10pt,parskip=5pt,singlelinecheck=false]. . 29

50 Options [margin=10pt,parskip=5pt]. . . . . . . . . . . . . . . . . 29

51 Options [margin=10pt,parskip=5pt,indention=10pt,

singlelinecheck=false] . . . . . . . . . . . . . . . . . . . . . . . 29

52 Options [margin=10pt,parskip=5pt,indention=10pt]. . . . . . . 29
53 Options [margin=10pt,parskip=5pt,hangindent=10pt,

singlelinecheck=false] . . . . . . . . . . . . . . . . . . . . . . . 30

54 Options [margin=10pt,parskip=5pt,hangindent=10pt]. . . . . . 30
55 Options [margin=10pt,parskip=5pt,hangindent=10pt,
    indention=10pt,singlelinecheck=false] . . . . . . . . . . . . . 30
56 Options [margin=10pt,parskip=5pt,hangindent=10pt,

indention=10pt] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

57 Options [margin=10pt,format=hang,singlelinecheck=false]. . 31

58 Options [margin=10pt,format=hang]. . . . . . . . . . . . . . . . . 31

59 Options [margin=10pt,format=hang,indention=10pt,

singlelinecheck=false] . . . . . . . . . . . . . . . . . . . . . . . 31

60 Options [margin=10pt,format=hang,indention=10pt]. . . . . . . 31
61 Options [margin=10pt,format=hang,hangindent=10pt,

singlelinecheck=false] . . . . . . . . . . . . . . . . . . . . . . . 32

62 Options [margin=10pt,format=hang,hangindent=10pt]. . . . . . 32

63 Options [margin=10pt,format=hang,hangindent=10pt,
    indention=10pt,singlelinecheck=false] . . . . . . . . . . . . . 32
64 Options [margin=10pt,format=hang,hangindent=10pt,

indention=10pt] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

65 Options [margin=10pt,format=hang,parskip=5pt,

singlelinecheck=false] . . . . . . . . . . . . . . . . . . . . . . . 33

66 Options [margin=10pt,format=hang,parskip=5pt]. . . . . . . . . 33
67 Options [margin=10pt,format=hang,parskip=5pt,
    indention=10pt,singlelinecheck=false] . . . . . . . . . . . . . 33
68 Options [margin=10pt,format=hang,parskip=5pt,

indention=10pt] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

69 Options [margin=10pt,format=hang,parskip=5pt,
    hangindent=10pt,singlelinecheck=false] . . . . . . . . . . . . 34
70 Options [margin=10pt,format=hang,parskip=5pt,

hangindent=10pt] . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

71 Options [margin=10pt,format=hang,parskip=5pt,
    hangindent=10pt,indention=10pt,singlelinecheck=false] . . 35
72 Options [margin=10pt,format=hang,parskip=5pt,
    hangindent=10pt,indention=10pt] . . . . . . . . . . . . . . . . . 35
73 Options [justification=justified,singlelinecheck=false]. . 36
74 Options [justification=centerfirst,singlelinecheck=false]. 36
75 Options [justification=centerlast,singlelinecheck=false]. . 36
76 Options [justification=centering,singlelinecheck=false]. . 36
77 Options [justification=Centering,singlelinecheck=false]. . 36
78 Options [justification=raggedleft,singlelinecheck=false]. . 37
79 Options [justification=RaggedLeft,singlelinecheck=false]. . 37
80 Options [justification=raggedright,singlelinecheck=false]. 37
81 Options [justification=RaggedRight,singlelinecheck=false]. 37

82 Options [labelformat=empty]. . . . . . . . . . . . . . . . . . . . . 38 83 Options [labelformat=simple]. . . . . . . . . . . . . . . . . . . . . 38 84 Options [labelformat=parens]. . . . . . . . . . . . . . . . . . . . . 38 85 Options [labelsep=none]. . . . . . . . . . . . . . . . . . . . . . . . 39 86 Options [labelsep=colon]. . . . . . . . . . . . . . . . . . . . . . . 39 87 Options [labelsep=period]. . . . . . . . . . . . . . . . . . . . . . . 39 88 Options [labelsep=space]. . . . . . . . . . . . . . . . . . . . . . . 39 89 Options [labelsep=quad]. . . . . . . . . . . . . . . . . . . . . . . . 39 90 Options [labelsep=newline]. . . . . . . . . . . . . . . . . . . . . . 40 91 Sub-float Layout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

(a) Standard layout (Sub-float: position=bottom). . . . . . . . . 42 (b) Standard layout without a caption (Sub-float: position=bottom) 42 (c) Reversed layout (Sub-float: position=top). . . . . . . . . . . 42 (d) Standard layout without a caption (Sub-float: position=bottom) 42

92 Three sub-floats. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 (a) First. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 (b) Second figure. . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 (c) Third. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 93 Two subfigures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

93.1 First. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 93.2 Second. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

94 A set of four subfigures. . . . . . . . . . . . . . . . . . . . . . . . . 50

List of Tables

1 \subfloat calling arguments. . . . . . . . . . . . . . . . . . . . . . 11 2 Keywords with Defaults and Values. . . . . . . . . . . . . . . . . . 16 3 Example font attribute substitutions. . . . . . . . . . . . . . . . . . 19 4 subfig specific options. . . . . . . . . . . . . . . . . . . . . . . . . . 40

List of Maps

1 This example shows two small maps. . . . . . . . . . . . . . . . . . 44 1a First map. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 1b Second map. . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

1 Introduction

This package provides support for the manipulation and reference of small or ‘sub’ floats within a single floating (e.g., figure or table) environment^{1} It is convenient to use this package when your sub-floats are to be separately captioned, referenced, or when such sub-captions are to be included on a List-of-Floats page.

This package is a replacement for the subfigure package, from which it was derived. However, the new subfig package is not completely backward compatible (see section 4.4. Therefore, a new name was called for. The newer package is smaller and easier to use than the older package, however, it now requires that the following packages be available:

• caption

• everysel

• keyval

• ragged2e

It will work without the ragged2e and everysel packages if you do not use the following justification options: ‘Center’, ‘RaggedRight’ and ‘RaggedLeft’. NOTE: ‘center’, ‘raggedright’ and ‘raggedleft’ will work without the above two packages.

1.1 Do You Need This Package?

Before using the subfig package, consider the following to see if you really need it.

1. If you simply want to center your figure on the page, then you can use

     \centerline, \centering or the center environment to do so.

2. If your figure has a short width or if you wrap your figure in a \parbox or a minipage of a short width, then you can place multiple figures or tables side-by-side^{2}. For example, the following will put two images side-by-side in a single figure as shown in figure 1:

          \begin{figure}%
            \centering
            \parbox{1.2in}{...figure code...}%
            \qquad
            \begin{minipage}{1.2in}%
              ...figure code...
            \end{minipage}%
            \caption{Here are two figures side-by-side.}%
            \label{fig:1figs}%
          \end{figure}

1Section 4.2 describes how to add support for additional float environments.

2You might have to use the optional position arguments ‘[b]’ or ‘[t]’ if the figures are of different heights (see [7, page 218]).

Figure 1: Here are two figures side-by-side.

Figure 2: First.  Figure 3: Second.

3. Finally, if you place the caption inside the \parbox or minipage, then the width of the caption will be limited to the width of the parbox or minipage as shown in figures 2 and 3:

          \begin{figure}%
            \centering
            \parbox{1.2in}{%
              ...figure code...
              \caption{First.}%
              \label{fig:2figsA}}%
            \qquad
            \begin{minipage}{1.2in}%
              ...figure code...
              \caption{Second.}%
              \label{fig:2figsB}%
            \end{minipage}%
          \end{figure}

For more information on typesetting figures and tables, see the document “Using Imported Graphics in L^{A}TEX 2ε” by Keith Reckdahl [6].

2 Package Commands

In this section, we describe the commands defined by the subfig package and three commands from the caption package that are needed or very useful in setting and changing the package options.

2.1 Preamble Commands

In the preamble of your L^{A}TEX file, you may load the subfig package, define new and extended options and create new sub-floats. See the documentation for the caption package for other preamble commands that may be used to customize the caption portion of a sub-float.

2.1.1 The \usepackage Command

\usepackage[⟨KV-list⟩]{subfig}

The optional argument list to the subfig package is in the form of a KV-list or “Key-Value list” (see [4] for more detail). The KV-list is composed of a comma-separated list of keywords with optional values. The keywords without a value indicate that a default value is to be used. This list is bound to the variable “subfloat” and is re-evaluated each time a \subfloat is encountered. These initial values may also be viewed, removed or changed with the \showcaptionsetup[uniq]{subfloat}, \clearcaptionsetup[subfloat] and/or \captionsetup[subfloat]{⟨KV-list⟩} commands.

2.1.2 The \newsubfloat Command

\newsubfloat        \newsubfloat[⟨KV-list⟩]{⟨float-name⟩}

In addition to the caption packages declaration commands, the subfig package defines the \DeclareCaptionListOfFormat to define how the caption label should be formatted for the List-of-Floats.

The KV-list passed to the new sub-float is placed at the top “level”. For example the options for a figure sub-float are added to the name “subfigure”. See section 2.2.5 below, for more detail about option layers.

2.1.3 The \DeclareCaptionListOfFormat Command
\DeclareCaptionListOfFormat       \DeclareCaptionListOfFormat{⟨keyword⟩}{⟨code⟩}

The \DeclareCaptionListOfFormat command allows the specification of how the sub-caption references are shown on the List-of-Floats pages. See section 3.3.1 for more details on setting up and adjusting the List-of-Floats entries.

2.2 General Commands

These commands are available within the body of the paper and the commands

\captionsetup, \showcaptionsetup and \clearcaptionsetup are available any-

time after loading either the caption or subfig packages.

2.2.1 The \subfloat Command

\subfloat \subfloat[⟨list entry⟩][⟨sub-caption⟩]{⟨body⟩}

This command creates the sub-float in the floating environment. In a figure environment it creates a subfigure. The required argument contains the sub-float object or “body”. This is the code that imports or creates the figure portion of the sub-float.

Table 1: \subfloat calling arguments.

Sub-float Command  List-of-Floats Caption Sub-float Caption

\subfloat{body}

\subfloat[ ]{body}  (b) . . . . . . . . . .  (b)
\subfloat[Sub-caption.]{body}  (c) Sub-caption. … (c) Sub-caption.
\subfloat[ ][Sub-caption.]{body}  (d) Sub-caption.
\subfloat[ ][ ]{body}  (e)
\subfloat[List entry.][Sub-caption.]{body} (f) List entry. …  (f) Sub-caption.
\subfloat[List entry.][ ]{body}  (g) List entry. …  (g)

The two optional arguments control the caption. If only one optional argument is present, than a caption label is generated and if any text is included in the optional argument, than it becomes the caption argument.

Normally, if a caption is present, it is also included on the List-of-Floats page. However, if a second optional argument is present, than the first one controls what is on the List-of-Floats page and the second is the caption text. If the Listof-Floats argument is empty, than nothing is printed on the List-of-Floats page. Otherwise, if there is text in the List-of-Floats argument, than that text is used on the List-of-Floats page rather than the text in the other optional argument.

See Table 1 for more detail on the \subfloat command’s arguments.

2.2.2 The \subref Command

\subref        \subref{⟨label⟩}
\subref*        \subref*{⟨label⟩}

The \subref command is provided to give an alternative reference to a sub-float. The standard \ref command returns a label built by concatenating the \p@float + \thesubfloat, which is often of the form “1a”. The \subref command returns the label shown on the List-of-Floats page, which may be in the format “(a)” (i.e., if ‘listofformat=subparens’, see section 2.2.4). This may be combined with a reference to the main caption to give something of the form “1(a)”, or used within the main caption to refer to a specific local sub-float.

The starred form of the command simply returns the \thesubfloat value, which, for sub-floats is usually something like “a”.

2.2.3 The \ContinuedFloat Command
\ContinuedFloat        \ContinuedFloat

It sometimes occurs, especially when using sub-floats, that a single figure needs to be continued across pages. The \ContinuedFloat command is placed at the beginning of the floating environment or after changing \@captype inside the floating environment to make the next figure, table or other floating \caption a

(a)  (b)

Figure 4: Here are the first two figures of a continued figure.

(c)  (d)

Figure 4: Here are the last two figures of a continued figure.

continuation of the last float \caption of the same type. It does this by saving the sub-float numbering internally and keeping the float numbering from advancing.

In order to keep subsequent float entries from appearing on the List-of-Floats page, you can use the \caption command with the optional argument present, but empty; as shown in figure 4 (and on the list-of-figures page). We also suppress the sub-caption entry with the optional list-of argument empty since there is no accompanying text.

     \begin{figure}%
       \centering
       \subfloat[][]{...figure code...}%
       \qquad
       \subfloat[][]{...figure code...}%
       \caption{Here are the first two figures of a continued figure.}%
       \label{fig:cont}%
     \end{figure}
     \begin{figure}%
       \ContinuedFloat
       \centering
       \subfloat[][]{...figure code...}%
       \qquad
       \subfloat[][]{...figure code...}%
       \caption[]{Here are the last two figures of a continued figure.}%
       \label{fig:cont}%
     \end{figure}

2.2.4 The \listsubcaptions Command
\listsubcaptions        \listsubcaptions

The last command provided by the subfigure package is the \listsubcaptions. This is automatically called in most cases by the \caption command and at the end of the float environment. However, the following example shows a rare situation in which the user will every have to use the \lastsubcaptions command as shown in the definition of the \zaptype command.

\documentclass{article}
\usepackage{subfloat}
\setcounter{lofdepth}{2}
\setcounter{lotdepth}{2}

⋮

\makeatletter
  \def\zaptype#1{%
      \listsubcaptions  % Finish the last set of sub-floats before
      \def\@captype{#1}}%   switching to another float type.
\makeatother

⋮

\begin{document}

⋮

\listoffigures
\listoftables
\clearpage
\begin{table}%
  \begin{center}%
    \caption{Table caption.}%
      \subfloat[Tab one]{X}\quad
      \subfloat[Tab two]{X}\\
    %
    \zaptype{figure}%
    %
      \subfloat[Fig one]{Y}\quad
      \subfloat[Fig two]{Y}
    \caption{Figure caption.}%
  \end{center}%
\end{table}

⋮

\end{document}

Hint: Don’t change the list-of properties of sub-floats until just before you use a \subfloat command, or just after you have executed a \listsubcaptions command. Otherwise, the wrong ‘listofformat’ or spacing might use the new values for sub-floats that have not been fully processed yet.

[figure: 1.; (global); 2.; “figure”; “table”; … other floats…; 3.; “subfloat”; 4.; “subfigure”; “subtable”; … other sub-floats…]

Figure 5: Levels at which keyword/values pairs may be set to apply to, or override earlier keyword/values pairs, for floats and sub-floats.

2.2.5 The \captionsetup Command

\captionsetup        \captionsetup[⟨variable⟩]{⟨KV-list⟩}

The \captionsetup command is actually part of the caption package, but is very important is you want to adjust some option in the subfig package. If the optional “variable” is left out, than the settings are made at the global level; otherwise, the settings are bound to the variable and executed just before being used.

There are four “levels” at which you can define options to apply to a sub-float (Figure 5. The first level is the default or global values of the various options, which are set either by the package, by a configuration file or by the optional Key-Value list in the \usepackage command when loading the caption package.

The second “level” consists of those options bound to the various floats. These are set by the \captionsetup with the optional argument set to the float name. For example, the command:

\captionsetup[table]{position=top}

would indicate that the “table” caption will come before its subfigures rather than after, as is the default.

The third “level” consists of those options bound to the special variable “subfloat”. These are value that hold across all sub-floats, but which are different than the global or float values. One such item is the “font” size, which is usually either null or normalsized, but which is set to be footnotesized for the sub-float captions.

The fourth “level” holds those options bound to a specific sub-float, say “subfigure”. An example is the caption ‘position’ relative to the subfigure itself.

3 Options: Keywords and Values

Table 2 shows all of the formal keywords and values from both the caption and the subfig packages. These may be used on the \usepackage options line, or with

the \captionsetup command.

3.1 Configuration Files

The default settings and layout of the subfig package can be modified by loading a configuration file. The subfig ‘config’ option loads a configuration file after the package is setup, but before the “subfigure” or “subtable” sub-floats have been created (with the \newsubfloat command) and before the package options have been processed. See section 4.4 for an example of using the subfig.cfg file to emulate the subfigure package.

Without a value, the ‘config’ keyword loads the file subfig.cfg. Use the value to load another file, for instance, ‘config=altsf.cfg’. When used outside the package options, the ‘config’ keyword is processed by the caption package and loads

caption.cfg by default.

Hint: The package pre-defines the following values by adding them to the “subfloat” variable list with the \captionsetup command before loading the configuration file(s):

       \captionsetup[subfloat]{%
           font=footnotesize,
           labelformat=parens,labelsep=space,
           listofformat=subparens}

If these are not desired, than they may be removed at the beginning of a configuration file with the command:

       \clearcaptionsetup{subfloat}

The options are not added to the “subfloat” list until after the configuration file(s) are loaded.

3.2 Options from the Caption Package

The subfig package uses the caption package commands to typeset the captions under each sub-float. The settings used in the captions come from three sources. The first is the global settings provided by the caption package. The second is the keys and key/value pairs stored on the “subfloat” variable. The third is the keys and key/value pairs stored on (for figure sub-floats) the “subfigure” variable. In these three sources, if a key appears most recent value is used.

Therefore, you can keep all of your common settings associated with the “subfloat” variable and, if needed, special settings for individual sub-float types (figure, table, etc.) on the associated variable (e.g., “subfigure”, “subtable”, etc.).

The package options supplied with the \usepackage command are bound to the “subfloat” variable, and so, affect all of the sub-floats. The one exception to Table 2: Keywords with Defaults and Values. (Note: Entries Enclosed in ’[]’ In-

dicate Initial Values Rather than Defaults.)

PACKAGE KEYWORD DEFAULT  VALUE(S)

/ [INIT]

Caption  config  “caption.cfg” <filename>

Package

font (size) [default] default

scriptsize  rm md up
footnotesize sf bf it
small tt sl
normalsize  sc

large Large

labelfont  [default]
textfont  [default]

style  [default]  default

ruled

singlelinecheck 1 (true)  <boolean>
format  [default]  default

hang

indention  [0pt]  <length>
hangindent  [0pt]  <length>
width  [\hsize]  <length>
margin  [0pt]  <length>
justification  [default]  justified (default)

centering centerfirst centerlast raggedleft raggedright Centering RaggedLeft RaggedRight

labelformat  [default]  empty

simple (default) parens

Table 2: Keywords with Defaults and Values (cont).

PACKAGE KEYWORD DEFAULT VALUE(S)

/ [INIT]

Caption  labelseparator [default]  none
Package  (labelsep)  colon (default)
(cont.)  period

space quad newline

position^{3}  top

bottom

Subfig  config  “subfig.cfg” <filename>
Package  listofformat  [parens]  empty

simple parens subsimple subparens

listofindent  3.8em  <length>
listofnumwidth 2.5em  <length>
farskip  10pt  <length>
captionskip  4pt  <length>
topadjust  0pt  <length>
nearskip  0pt  <length>

this is the ‘config’ or ‘config=filename’ option that is executed immediately. This is handy for two reasons, the first is that you only want to load a configuration file once (not every time you use a sub-float; and, second the ‘config’ keyword, without a value, will only load the “subfloat.cfg” file when used on the options line, therefore you can set common options in both the float and sub-float captions with the command:

\usepackage[config, labelfont={sf,bf}, textfont=sf]{caption,subfig}

which will load the “caption.cfg” file and set the label and text fonts and also load the subfig.cfg file and set the sublabel and subtext fonts. Here we don’t use the ‘font’ key, since this is initialized with the default font sizes to be used

3Only the ‘top’ and ‘bottom’ values are allowed for the ‘position’ option with the subfig package. If no value is set, than ‘bottom’ is assumed.

                           [Sub-float Body]

(a) Sub-float caption.

Figure 6: Float caption.

           [font=Large]

(a) Short caption.

                                              [font=large]

(b) Short caption.

         [font=normalsize]

(c) Short caption.

                                              [font=small]

(d) Short caption.

        [font=footnotesize]

(e) Short caption.

                                            [font=scriptsize]

(f) Short caption.

Figure 7: Font Size Options.

and defaults to ‘normalsized’ for the float captions and to ‘footnotesized’ for the sub-float captions, as shown in figure 6.

Next we will review the options provided by the caption package. First the font settings, then the shape options, the justification and the other caption options that affect the sub-floats. Next, we review the options provided by the subfig package.

3.2.1 Caption Font Settings

There are three font variables that can be set to control the float or sub-float captions. They are ‘font’, ‘labelfont’ and ‘textfont’. The “font” variable is applied to both the caption label and text; and is usually^{4} used to specify the size of the caption and the other two variables are used to specify the other aspects of the font, the family, series and shape. The “labelfont” variable is used to specify the font used for the caption label and separator, while the “textfont” specifies that for the caption text.

Each of these variables can have one value from each of the four columns in the “VALUE” section of table 2 associated with the font keywords. If nothing is specified for one of the four sections, than that aspect of the current font is used.

Figures 7(a–f) show the effect of the font size options on the “font” variable.

4But not always, careful use of these three variables can produce useful effects. Their application is as:

{\font {\labelfont <label><separator>}{\textfont <text>}

Table 3: Example font attribute substitutions.^{6}

Figure Desired Options Substitution Reason Actual Options
8 (h)  rm,bf,sc  undefined  rm,bf,\underline{up}
8 (j)  sf,md,it  unavailable in size 10  sf,md,\underline{sl}
8 (l)  sf,md,sc  unavailable in size 10  \underline{rm},md,sc
8 (n)  sf,bf,it  undefined  sf,bf,\underline{up}
8 (o)  sf,bf,sl  undefined  sf,bf,\underline{up}
8 (p)  sf,bf,sc  undefined  sf,bf,\underline{up}
8 (u)  tt,bf,up  unavailable in size 10  tt,\underline{md},up
8 (v)  tt,bf,it  unavailable in size 10  tt,\underline{md},it
8 (w)  tt,bf,sl  unavailable in size 10  tt,\underline{md},\underline{up}
8 (x)  tt,bf,sc  unavailable in size 10  tt,\underline{md},\underline{up}

Figures 8(a–x) show the effect of all combinations of the other font settings on the “textfont” variable. Note that not all combinations are necessarily available.^{5} Where the specified font attributes are not available L^{A}TEX will substitute an alternate font. For instance, when compiling this file on one system, L^{A}TEX substituted alternate fonts for the requested ones in ten of the twenty-four cases (See table 3^{6}. Recompiling this documentation on your system and looking at the L^{A}TEX warnings will show you any combinations that are not available for you.

3.2.2 Caption Shape Settings

There are seven options for setting the sub-caption shape or “format”. The default setting is produced by

\captionsetup[subfigure]{style=default, margin=0pt, parskip=0pt, hanginden=0pt, indention=0pt, singlelinecheck=true}

which is shown in figure 10. Figure 9 shows the same thing, but without setting the ‘singlelinecheck’ to true. You can see that the ‘singlelinecheck’ option only affects the short caption.

Any or all of the other shape option may be used at one time, since they define orthogonal aspects of the caption shape. The other options are:

• ‘singlelinecheck’, (Boolean) which causes a caption that will fit on one line to be centered below the figure (actually, to use the singlelinecheck format);

• ‘indent’, (length) which indents the caption text of each line of each paragraph (except the first line of the first paragraph);

• ‘hangindent’, (length) which indents the caption text of all but the first line of each paragraph;

• ‘parskip’, (length) which adds some extra space between separate paragraphs in a caption;

5To modify the fonts used in your document and make specific combinations of family, shape and style available, see the NFSS documentation in The Latex Companion [8].

6This table is only valid with one distribution of L^{A}TEX. Examine the L^{A}TEX log for font warnings for your specific system.

[font={rm,md,up}]

(a) Short caption.

                                  [font={rm,md,it}]

(b) Short caption.

[font={rm,md,sl}]

(c) Short caption.

                                  [font={rm,md,sc}]

(d) Short caption.

[font={rm,bf,up}]

(e) Short caption.

                                  [font={rm,bf,it}]

(f) Short caption.

[font={rm,bf,sl}]

(g) Short caption.

                                  [font={rm,bf,sc}]

(h) Short caption.

[font={sf,md,up}]

(i) Short caption.

                                  [font={sf,md,it}]

(j) Short caption.

[font={sf,md,sl}]

(k) Short caption.

                                  [font={sf,md,sc}]

(l) Short caption.

[font={sf,bf,up}]

(m) Short caption.

                                  [font={sf,bf,it}]

(n) Short caption.

[font={sf,bf,sl}]

(o) Short caption.

                                  [font={sf,bf,sc}]

(p) Short caption.

[font={tt,md,up}]
(q) Short caption.

                                  [font={tt,md,it}]
                                 (r) Short caption.
[font={tt,md,sl}]
(s) Short caption.

                                  [font={tt,md,sc}]
                                 (t) Short caption.
[font={tt,bf,up}]
(u) Short caption.

                                  [font={tt,bf,it}]
                                 (v) Short caption.
[font={tt,bf,sl}]
(w) Short caption.

                                  [font={tt,bf,sc}]
                                 (x) Short caption.

Figure 8: Other Font Options.

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 9: Options [singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 10: Options [ ].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 11: Options [indention=10pt,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 12: Options [indention=10pt].

• ‘hang’, which causes the label to hang out to the left of the caption text, ‘normal’ turns it off; and,

• ‘margin’, (length) which sets extra space to either side of the caption, the option ‘width’ may also be used. This sets the margins to provide the requested width of the caption.

Figures 9 thru 72 show the different combinations of these formats.

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 13: Options [hangindent=10pt,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 14: Options [hangindent=10pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 15: Options [hangindent=10pt,indention=10pt,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 16: Options [hangindent=10pt,indention=10pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 17: Options [parskip=5pt,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 18: Options [parskip=5pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 19: Options [parskip=5pt,indention=10pt,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 20: Options [parskip=5pt,indention=10pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 21: Options [parskip=5pt,hangindent=10pt,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 22: Options [parskip=5pt,hangindent=10pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 23: Options [parskip=5pt,hangindent=10pt,indention=10pt,
singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 24: Options [parskip=5pt,hangindent=10pt,indention=10pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 25: Options [format=hang,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 26: Options [format=hang,].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 27: Options [format=hang,indention=10pt,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 28: Options [format=hang,indention=10pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 29: Options [format=hang,hangindent=10pt,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 30: Options [format=hang,hangindent=10pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 31: Options [format=hang,hangindent=10pt,indention=10pt,
singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 32: Options [format=hang,hangindent=10pt,indention=10pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 33: Options [format=hang,parskip=5pt,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 34: Options [format=hang,parskip=5pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 35: Options [format=hang,parskip=5pt,indention=10pt,
singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 36: Options [format=hang,parskip=5pt,indention=10pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 37: Options [format=hang,parskip=5pt,hangindent=10pt,
singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 38: Options [format=hang,parskip=5pt,hangindent=10pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 39: Options [format=hang,parskip=5pt,hangindent=10pt,
indention=10pt,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 40: Options [format=hang,parskip=5pt,hangindent=10pt,
indention=10pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 41: Options [margin=10pt,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 42: Options [margin=10pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 43: Options [margin=10pt,indention=10pt,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 44: Options [margin=10pt,indention=10pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 45: Options [margin=10pt,hangindent=10pt,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 46: Options [margin=10pt,hangindent=10pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 47: Options [margin=10pt,hangindent=10pt,indention=10pt,
singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 48: Options [margin=10pt,hangindent=10pt,indention=10pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 49: Options [margin=10pt,parskip=5pt,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 50: Options [margin=10pt,parskip=5pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 51: Options [margin=10pt,parskip=5pt,indention=10pt,
singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 52: Options [margin=10pt,parskip=5pt,indention=10pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 53: Options [margin=10pt,parskip=5pt,hangindent=10pt,
singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 54: Options [margin=10pt,parskip=5pt,hangindent=10pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 55: Options [margin=10pt,parskip=5pt,hangindent=10pt,
indention=10pt,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 56: Options [margin=10pt,parskip=5pt,hangindent=10pt,
indention=10pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 57: Options [margin=10pt,format=hang,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 58: Options [margin=10pt,format=hang].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 59: Options [margin=10pt,format=hang,indention=10pt,
singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 60: Options [margin=10pt,format=hang,indention=10pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 61: Options [margin=10pt,format=hang,hangindent=10pt,
singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 62: Options [margin=10pt,format=hang,hangindent=10pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 63: Options [margin=10pt,format=hang,hangindent=10pt,
indention=10pt,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 64: Options [margin=10pt,format=hang,hangindent=10pt,
indention=10pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 65: Options [margin=10pt,format=hang,parskip=5pt,
singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 66: Options [margin=10pt,format=hang,parskip=5pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 67: Options [margin=10pt,format=hang,parskip=5pt,indention=10pt,
singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 68: Options [margin=10pt,format=hang,parskip=5pt,
indention=10pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 69: Options [margin=10pt,format=hang,parskip=5pt,hangindent=10pt,
singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 70: Options [margin=10pt,format=hang,parskip=5pt,hangindent=10pt].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 71: Options [margin=10pt,format=hang,parskip=5pt,hangindent=10pt,
         indention=10pt,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 72: Options [margin=10pt,format=hang,parskip=5pt,hangindent=10pt,
         indention=10pt].

3.2.3 Caption Justification Options

There are nine options for setting the sub-caption format. The first is ‘justified’ which produces the format shows in figure 73. Only one of these options is allowed at a time. If multiple options appear, then only the last is used. The Figures 74 thru 81 show the rest of these formats. The shape options selected along with each format option is the default (see Figure 10), this shows the effect of the justification option on a single line caption.

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 73: Options [justification=justified,singlelinecheck=false].

(a) Short caption.

(b) This is a long

caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 74: Options [justification=centerfirst,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come

linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come

bluegrass foxes see.

Figure 75: Options [justification=centerlast,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish:

Knows bluebird gathering come linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come

bluegrass foxes see.

Figure 76: Options [justification=centering,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 77: Options [justification=Centering,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish:

Knows bluebird gathering come

linkbats eats blue see.

Knows a bird gathering artworks graphically blue attended are come

bluegrass foxes see.

Figure 78: Options [justification=raggedleft,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 79: Options [justification=RaggedLeft,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 80: Options [justification=raggedright,singlelinecheck=false].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 81: Options [justification=RaggedRight,singlelinecheck=false].

3.2.4 Caption Label Options

There are three options for setting the sub-caption ‘labelformat’ as shown in figures 82–84. This is the label number and not any following punctuation or separator space (see below for setting these). The three cases are:

• ‘empty’: Without any label.

• ‘simple’: Just the label number.

• ‘parens’: The label number surrounded by ’()’.

The latter option, ‘parens’, is the default for sub-floats.

Short caption.

This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 82: Options [labelformat=empty].

a Short caption. b This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 83: Options [labelformat=simple].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 84: Options [labelformat=parens].

Figures 85–90 show the options for setting the punctuation and separator space following the figure number. These options are set with the ‘labelseparator’ keyword.

The label separator options are:

• ‘none’ Nothing is added after the label.

• ‘colon’ A colon followed by a \space is added following the label.

• ‘period’ A period followed by a \space is added following the label.

• ‘space’ Just a \space is added following the label.

• ‘quad’ A \quad space is added following the label.

• ‘newline’ A new line is inserted after the label.

3.2.5 Caption Position Option

The caption package ‘position’ option specifies whether the caption appears before or after the figure or table. This can adjust the relative spacing used to separate the float from the surrounding text. However, for the subfig package, it serves a more important function. That is it determines if the sub-floats belong to or are associated with the last \caption command to be given, or the next one to be

(a)Short caption.

(b)This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 85: Options [labelsep=none].

(a): Short caption.

(b): This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 86: Options [labelsep=colon].

(a). Short caption.

(b). This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 87: Options [labelsep=period].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 88: Options [labelsep=space].

(a) Short caption.

(b) This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 89: Options [labelsep=quad].

(a)

Short caption.

(b)

This is a long caption of gibberish: Knows bluebird gathering come linkbats eats blue see. Knows a bird gathering artworks graphically blue attended are come bluegrass foxes see.

Figure 90: Options [labelsep=newline].

Table 4: subfig specific options.

KeyWord  Value  Notes
‘listofformat’  ‘empty’  Label format: (none)
‘simple’  Label format: ##
‘parens’  Label format: #(#)
‘subsimple’ Label format: #
‘subparens’ Label format: (#)
‘listofindent’  <length> Entry indention on List-of-Floats page.
‘listofnumwidth’ <length> Space allocated for entry label.
‘farskip’  <glue>  Glue placed opposite the sub-float caption.
‘captionskip’  <glue>  Glue placed between the sub-float and the caption.
‘topadjust’  <glue>  Extra glue added to ‘captionskip’ when above the sub-

float.

‘nearskip’  <glue>  Glue placed opposite the caption from the sub-float.

executed sometime in the future. If you find that you sub-references do not agree with the top-level labels, than you may need to specifically set the ‘position’. This is best done when loading the caption package, but may be done at anytime with

the \captionsetup command.

3.3 Options from the Subfig Package

In addition to the options provided by the caption package, the subfig package provides the options shown in Table 4.

3.3.1 The Subfig List-of-Floats Specification

The first three options control and adjust the way that the sub-float number is displayed on the List-of-Floats page. The ‘listofformat’ shows how or if the subfloat number is shown. Where there are two ‘#’ signs in the List-of-Page label formats, the first one stands for the \p@<sub-float type> value and the second for the \the<sub-float type> value. Where there is only one ‘#’ it stands for the latter.

The ‘listofindent’ keyword sets the total indentation from the left margin, while the ‘listofnumwidth’ keyword controls the width of box for the label number. This is also the amount of extra indentation added to second and later lines of a multiple line entry.

3.3.2 The Subfig Layout

The layout of the sub-float contains several internal values which may be changed to customize appearance of the object. The following illustration shows the relationship of these values. Figure 91(a) shows the standard layout with the caption following the figure. The figure is vertically centered with some vertical space added above. If this is a float at the top of the page, than the space is suppressed. If the caption of the float follows the subfigures, than ‘farskip’ indicates the amount of space to skip. Otherwise, if the float caption precedes the subfigures, than ‘nearskip’ indicates the value to use. The best way to think of these two skips is that the ‘nearskip’ is closer to the main float caption than the ‘farskip’. After the subfigure, more vertical space, ‘captionskip’, is added between the subfigure and the sub-caption. Finally, ‘nearskip’ (or ‘farskip’) of vertical space added below. The baseline is located at the bottom of the figure. It is along this baseline that adjacent subfigure boxes are aligned.

Figure 91(c) shows the reversed case where the sub-caption precedes the figure (i.e., ‘position=top’). In this case the ‘farskip’ and ‘nearskip’ are placed according to the position of the float caption as above and the ‘captionskip’ is increased by ‘topadjust’. The other two cases, figures 91(b and d), show the cases where there is no caption. Note that the ‘captionskip’ (and ‘topadjust’ is left out when there is no caption. Again, note also, for all of these cases, that the space at the top of the subfigure is automatically removed for items that are the first box in a vertical list or other than the first box in a horizontal list. This allows tighter packing of the sub-floats and the full use of the page or minipage.

Each of these values ‘farskip’, ‘captionskip’, ‘topadjust’, ‘nearskip’, and ‘margin’ may be changed from their defaults (see table tab:keywords) to adjust the subfigure for the current layout style. In addition, they may all assume negative values, which in some cases may solve problems with the layout, but is not recommended, in general.

3.3.3 The Subfig Package Startup

The startup sequence for the subfig package is to first load the caption package (with no options) if it has not already been loaded. Next it sets the following default values on the “subfloat” variable:

       \captionsetup[subfloat]{%
           font=footnotesize,
           labelformat=parens,labelsep=space,
           listofformat=subparens}

↕ (‘farskip’ or ‘nearskip’)

sub-float body

Baseline

↕ ‘captionskip’

\overleftrightarrow{‘margin’}  sub-caption  \overleftrightarrow{‘margin’}

↕ ‘nearskip’ or ‘farskip’

(a) Standard layout (Sub-float: position=bottom).

↕ (‘farskip’ or ‘nearskip’)

sub-float body

Baseline

↕ ‘nearskip’ or ‘farskip’

(b) Standard layout without a caption (Sub-float: position=bottom)

↕ (‘farskip’ or ‘nearskip’)

\overleftrightarrow{‘margin’}  sub-caption  \overleftrightarrow{‘margin’}
Baseline  ↕ ‘captionskip’+‘topadjust’

sub-float body

↕ ‘nearskip’ or ‘farskip’

(c) Reversed layout (Sub-float: position=top).

Baseline  ↕ (‘farskip’ or ‘nearskip’)

sub-float body

↕ ‘nearskip’ or ‘farskip’

(d) Standard layout without a caption (Sub-float: position=bottom)

Figure 91: Sub-float Layout. If the respective float caption position is ‘bottom’, than the ‘farskip’ is used at the top and the ‘nearskip’ is used at the bottom. If the respective float caption position is ‘top’, than these skips are reversed.

This overrides the caption package default in which the font is undefined and uses that of the surrounding document^{7}; the label is ‘simple’ and followed by a ‘colon’ and space. It also defines the ‘listofformat’ at this level in the case that it is added to the caption package. Note that if the default settings to the “subfloat” list are not desired, they may be removed with a \clearcaptionsetup command (see section 3.1). Also the current settings may be checked using the following (here for a subfigure):

       \showcaptionsetup{figure}
       \showcaptionsetup{subfloat}
       \showcaptionsetup{subfigure}

placed just before the \subfloat will show in the log what overrides are being applied at that point.

Second, any configuration files are loaded. If there are more than one listed in the \usepackage options list, than they are loaded in the order specified in the list.

Next, the other (non-‘config’) options in the \usepackage options list are added to the “subfloat” list.

Finally, the subfig package finishes defining its functions and if the configuration file(s) have not already defined the sub-floats: “subfigure” and “subtable”, than they are defined.

4 Compatibility With Other Packages.

This section discusses specific aspects of compatibility with other packages with which the subfig package is often used.

4.1 Caption Package

The subfig package requires the caption package in order to format the sub-float captions. However, the ‘position’ keyword option may only take two values when used with the subfig package; those are, ‘top’ and ‘bottom’. Any other value will be treated as if ‘position=bottom’ was specified.

By default (without the subfig.cfg loaded), the ‘position’ values are expected to be defined prior to loading the subfig package or defined afterward. However they are defined, it is up to the user to insure that the captions are used correctly with the sub-captions, because using a caption, that is expected to precede the sub-captions, after the sub-captions (or vise-versa) will cause the list-of and label references to be incorrect.

7If, in fact, ‘font’ is defined in the caption options list before loading the subfig package; than the above redefinition on the “subfloat” variable will hide that setting from all of the sub-floats.

If you want them to have the same overall font setting (let’s say “bf,sl”), than you will need to add one of the following sets of commands:

\setcaption[subfloat]{font={footnotesize,bf,sl}} or

\setcaption{labelfont={bf,sl},textfont={bf,sl}}

4.2 float Package

To create a new sub-float, you first need a new floating environment. If you have that, great, otherwise, load the float package and create one with a series of commands similar to the following. Here we create a new map environment so that the subfig package will work with it.

     \usepackage{float}
     \newfloat{map}{tbph}{lom}
     \restylefloat*{map}
     \floatstyle{plain}
     \floatname{map}{Map}
     \captionsetup[map]{position=top}
     \newcommand{\listofmaps}{\listof{map}{List of Maps}}

Then you can then create the new sub-float with:

     \newsubfloat[position=top,listofformat=subsimple]{map}

now the \subfloat command will work in the map environment.

For example, the following code generates map 1:

     \begin{map}%
       \centering
       \caption{This example shows two small maps.}%
       \label{map:example}%
       \subfloat[First map.]{...figure code...}%
       \qquad
       \subfloat[Second map.]{...figure code...}%
     \end{map}

Map 1: This example shows two small maps.

(a) First map.  (b) Second map.

4.3 Other Packages

The subfig package has been tested with the following packages and is known to work correctly.^{8}

• caption

• fixltx2e

• float

• hyperref

• captcont

4.4 Backward Compatibility with the Subfigure Package

The following code sets up a configuration file to make the subfig package be nearly compatible with the older subfigure package. The major difference is that the spacing is not quite the same due to internal changes in the sub-float setup and that some of the old tweaks that involved changing internal variables often will no longer work.

The largest difference after the subfig.cfg is loaded is that the old ‘topskip’ and ‘bottomskip’ no longer exist and their replacements ‘farskip’ and ‘nearskip’ act differently. The new skips also surround the sub-caption and sub-float body, but where the ‘bottomskip’ was always next to the sub-caption, the new ‘nearskip’ is always nearer the man (float) caption. The other two vary in the same way. Normally, this difference is minor and can be ignored, but in some cases you will need to adjust them to get your desired look and feel.

\subfigure \subtable The first section creates the \subfigure and the \subtable commands.

 1 \@ifundefined{c@subfigure}{\newsubfloat{figure}}{}
 2 \def\subfigure{\subfloat}
 3 \@ifundefined{c@subtable}{\newsubfloat{table}}{}
 4 \def\subtable{\subfloat}

Next we restore the caption value-keywords for the option list. Currently these are available within the main document with the \captionsetup command. However, this may change in a later release of the subfig package.

 5 \DeclareCaptionOption{normal}[]{\caption@setformat{default}}
 6 \DeclareCaptionOption{isu}[]{\caption@setformat{hang}}
 7 \DeclareCaptionOption{hang}[]{\caption@setformat{hang}}
 8 \DeclareCaptionOption{center}[]{\caption@setjustification{centering}}
 9 \DeclareCaptionOption{anne}[]{\caption@setjustification{centerlast}}
10 \DeclareCaptionOption{centerlast}[]{\caption@setjustification{centerlast}}
11 \DeclareCaptionOption{nooneline}[]{\caption@setbool{slc}{0}}
12 \DeclareCaptionOption{scriptsize}[]{\def\captionfont{\scriptsize}}

8If you find any problem with these or any other package, please create a small example demonstrating the problem and send it to the author.

13 \DeclareCaptionOption{footnotesize}[]{\def\captionfont{\footnotesize}}
14 \DeclareCaptionOption{small}[]{\def\captionfont{\small}}
15 \DeclareCaptionOption{normalsize}[]{\def\captionfont{\normalsize}}
16 \DeclareCaptionOption{large}[]{\def\captionfont{\large}}
17 \DeclareCaptionOption{Large}[]{\def\captionfont{\Large}}
18 \DeclareCaptionOption{up}[]{\l@addto@macro\captionlabelfont\upshape}
19 \DeclareCaptionOption{it}[]{\l@addto@macro\captionlabelfont\itshape}
20 \DeclareCaptionOption{sl}[]{\l@addto@macro\captionlabelfont\slshape}
21 \DeclareCaptionOption{sc}[]{\l@addto@macro\captionlabelfont\scshape}
22 \DeclareCaptionOption{md}[]{\l@addto@macro\captionlabelfont\mdseries}
23 \DeclareCaptionOption{bf}[]{\l@addto@macro\captionlabelfont\bfseries}
24 \DeclareCaptionOption{rm}[]{\l@addto@macro\captionlabelfont\rmfamily}
25 \DeclareCaptionOption{sf}[]{\l@addto@macro\captionlabelfont\sffamily}
26 \DeclareCaptionOption{tt}[]{\l@addto@macro\captionlabelfont\ttfamily}
27 \DeclareCaptionOption{ruled}[1]{\caption@setbool{ruled}{#1}}
28 \DeclareCaptionOption{singlelinecheck}[1]{\caption@setbool{slc}{#1}}
29 \DeclareCaptionOption{oneline}[1]{\caption@setbool{slc}{#1}}
30 \DeclareCaptionOption{justified}[]{\caption@setjustification{justified}}
31 \DeclareCaptionOption{centering}[]{\caption@setjustification{centering}}
32 \DeclareCaptionOption{centerfirst}[]{\caption@setjustification{centerfirst}}
33 \DeclareCaptionOption{flushright}[]{\caption@setjustification{raggedleft}}
34 \DeclareCaptionOption{raggedleft}[]{\caption@setjustification{raggedleft}}
35 \DeclareCaptionOption{raggedright}[]{\caption@setjustification{raggedright}}
36 \DeclareCaptionOption{RaggedRight}[]{\caption@setjustification{RaggedRight}}
37 \DeclareCaptionOption{RaggedLeft}[]{\caption@setjustification{RaggedLeft}}
38 \DeclareCaptionOption{Centering}[]{\caption@setjustification{Centering}}

The second list of value-keywords allows the uppercase font options to set the font for the caption text.

39 \DeclareCaptionOption{UP}[]{\l@addto@macro\captiontextfont\upshape}
40 \DeclareCaptionOption{IT}[]{\l@addto@macro\captiontextfont\itshape}
41 \DeclareCaptionOption{SL}[]{\l@addto@macro\captiontextfont\slshape}
42 \DeclareCaptionOption{SC}[]{\l@addto@macro\captiontextfont\scshape}
43 \DeclareCaptionOption{MD}[]{\l@addto@macro\captiontextfont\mdseries}
44 \DeclareCaptionOption{BF}[]{\l@addto@macro\captiontextfont\bfseries}
45 \DeclareCaptionOption{RM}[]{\l@addto@macro\captiontextfont\rmfamily}
46 \DeclareCaptionOption{SF}[]{\l@addto@macro\captiontextfont\sffamily}
47 \DeclareCaptionOption{TT}[]{\l@addto@macro\captiontextfont\ttfamily}

Next, the subfigure “*topcap” and “*bottomcap” options are emulated using the new “position” option.

48 \DeclareCaptionOption{figbotcap}[]{\captionsetup[figure]{position=bottom}}
49 \DeclareCaptionOption{tabbotcap}[]{\captionsetup[table]{position=bottom}}
50 \DeclareCaptionOption{FIGBOTCAP}[]{\captionsetup[figure]{position=bottom}%
51  \captionsetup[subfigure]{position=bottom}}
52 \DeclareCaptionOption{TABBOTCAP}[]{\captionsetup[table]{position=bottom}%
53  \captionsetup[subtable]{position=bottom}}
54 \DeclareCaptionOption{figtopcap}[]{\captionsetup[figure]{position=top}}
55 \DeclareCaptionOption{tabtopcap}[]{\captionsetup[table]{position=top}}
56 \DeclareCaptionOption{FIGTOPCAP}[]{\captionsetup[figure]{position=top}%

57  \captionsetup[subfigure]{position=top}}
58 \DeclareCaptionOption{TABTOPCAP}[]{\captionsetup[table]{position=top}%
59  \captionsetup[subtable]{position=top}}

Then, the “loose” and “tight” options are approximately emulated.

60 \DeclareCaptionOption{loose}[]{%
61  \captionsetup[subfloat]{farskip=10pt,topadjust=0pt,captionskip=10pt,%
62  nearskip=10pt,margin=10pt}}
63 \DeclareCaptionOption{tight}[]{%
64  \captionsetup[subfloat]{farskip=5pt,topadjust=0pt,captionskip=3pt,%
65  nearskip=5pt,margin=0pt}}

Finally, we set the subfigure defaults beyond what is set in the subfig package. We only need to set the default to the ‘loose’ settings.

66 \captionsetup[subfloat]{loose}

5 Some Examples

The easiest way to show the use of this package is to give a few examples. The two most important things to remember when working with the subfig package are that (1) the sub-floats are aligned along their baselines (see figure 91 and (2) that whitespace in the floating environments are significant and affect the layout.

The baseline of the sub-float is usually at the bottom of the sub-float body or (when the sub-caption appears at the top) at the bottom of the sub-caption and the ‘captionskip’ space—which is usually the same as the top of the sub-float. However sometimes, especially when using the tabular, array, or minipage environments to build the figure, the baseline appears elsewhere. The above three environments are all aligned at their center by default but that may be changed with the optional ‘[t]’ or ‘[b]’ arguments. As a last resort you can wrap all of your figures in a \vtop box with a \vbox to 0pt{\null} at the top followed by the sub-float body.

If your sub-float is not quite centered or where you want it to be, the problem is often a space character being placed to one side or the other of the sub-float body. Some general rules of thumb are:^{9}

• Two end-of-lines following each other (ignoring any whitespace) are turned into a \par or paragraph break.

• Multiple whitespace (including the end-of-line) are compressed into a single space.

• The spaces after a macro command name (e.g., \foo) are ignored.

• A ‘%’ character at the end of the line suppresses the end-of-line and all of the spaces (if any) at the beginning of the next line.

To suppress significant extra whitespace, you can add some ‘%’ characters at the end of each line that doesn’t end with a command name. This is more than is required, but extra ‘%’ usually don’t cause a problem.

9See chapters 7 and 8 of “The TEXbook” [9] for details.

(a) First.

(b) Second figure.

(c) Third.

Figure 92: Three sub-floats.

Figure 92 contains two top ‘subfigures’ and subfigure 92c.^{10}

5.1 A Simple Example

The first example, shown in figure 92, specifies \centering to horizontally center the set of sub-floats, and uses \\ and some horizontal space (using \qquad) to control the placement of the sub-floats. Note that the alignment of the top two sub-floats is along the bottom of the body portion of each.

       \begin{figure}%
         \centering
         \subfloat[First.]{...}\qquad
         \subfloat[Second figure.]{...}\\
         \subfloat[Third.]{\label{3figs-c}...}%
         \caption{Three sub-floats.}
         \label{3figs}
       \end{figure}

⋮

       Figure~\ref{3figs} contains two top `subfigures' and
       subfigure~\ref{3figs-c}.

5.2 A More Advanced Example

A second example, shown in figure 93, demonstrates how to change the sub-float labels and have the sub-captions printed on the List-of-Figures.

The first \renewcommand changes the reference to \thesubfigure to return both the figure number and the subfigure number separated with a period. The next two \renewcommand’s turn off the \p@subfigure (since it is now included in \thesubfigure and adds the colon and space to the subfigure label. Later in the file, the lofdepth is set to “2” so allow the subfigure captions to show and the \listoffigures is loaded. Finally, the figure is defined and a little following text is given that refers to it.

10In this and later boxed figures, the boxes are intended to represent a portion of the page in which the figure occurs. This is usually to show the figure along with some text or to show the effect of some option on multiple pages.

       \renewcommand{\thesubfigure}{\thefigure.\arabic{subfigure}}
       \captionsetup[subfigure]{labelformat=simple,labelsep=colon,
                                listofformat=subsimple}
       \makeatletter
         \renewcommand{\p@subfigure}{}
       \makeatother

⋮

       \setcounter{lofdepth}{2}
       \listoffigures

⋮

       \begin{figure}%
         \centering
         \subfloat[First.]{%
           \label{fig:first}%
           ...figure code...}%
         \qquad
         \subfloat[Second.]{%
           \label{fig:second}%
           ...figure code...}%
         \caption{Two subfigures.}
       \end{figure}

⋮

       See figures~\ref{fig:first} and \ref{fig:second}.

5.3 An Example Without Sub-caption Text

The last example, shown in figure 94, demonstrates a commonly required format where the subfigure are just labeled and the description occurs in the main caption. This is easy to do by using the “empty” optional caption arguments “[ ][ ]”. This creates a label for the subfigure in the text, but it does not show on the List-of-Figures page. However, by default the caption may not be perfectly centered, so \subfiglabelskip is reduced to zero points to ensure that there is not any extra space hidden in the sub-caption. To refer to the subfigure label within the text or the main caption, you can use the \subref command, which is similar to the \ref command, but does not carry the figure number.

List of Figures

⋮ 93 Two subfigures. . . . . . . . . . . . . . . . . 50

93.1 First. . . . . . . . . . . . . . . . . . . 50 93.2 Second. . . . . . . . . . . . . . . . . . 50

⋮

93.1: First.  93.2: Second.

Figure 93: Two subfigures.

See figures 93.1 and 93.2.

List of Figures

⋮ 94 A set of four subfigures. . . . . . . . . . . . 50

⋮

(a)  (b)

(c)  (d)

Figure 94: A set of four subfigures: (a) describes the first subfigure; (b) describes the second subfigure;

(c) describes the third subfigure; and, (d) describes the last subfigure.

The text references the main figure as figure 94 or part of it as figures 94a–c.

\listoffigures

⋮

\begin{figure}%
\centering
\subfloat[][]{%
  \label{fig:ex3-a}%
  ...figure code...}%
\hspace{8pt}%
\subfloat[][]{%
  \label{fig:ex3-b}%
  ...figure code...}\\
\subfloat[][]{%
  \label{fig:ex3-c}%
  ...figure code...}%
\hspace{8pt}%
\subfloat[][]{%
  \label{fig:ex3-d}%
  ...figure code...}%
\caption[A set of four subfigures.]{A set of four subfigures:
         \subref{fig:ex3-a} describes the first subfigure;
         \subref{fig:ex3-b} describes the second subfigure;
         \subref{fig:ex3-c} describes the third subfigure; and,
         \subref{fig:ex3-d} describes the last subfigure.}%
\label{fig:ex3}%
\end{figure}

⋮

The text references the main figure as figure~\ref{fig:ex3}
or part of it as
figures~\ref{fig:ex3}\subref*{fig:ex3-a}--\subref*{fig:ex3-c}.

6 Frequently Asked Questions (FAQs)

The five most frequently asked questions about the subfig package are:

6.1 “My sub-floats are not aligned along their bottoms. Why?”

Remember! The subfig package aligns sub-floats along their baselines with the sub-caption (if any) sticking out above or below. The above problem is usually due to using a minipage, tabular or array environment that, by default, places the baseline at the center of the box that it generates. If the two sub-floats are different sizes, or if one sub-float is generated in some other way with its baseline not at the expected place (perhaps an \includegraphics), then the sub-float will be misaligned. One solution is to use the environment options ‘[t]’ or ‘[b]’ to move the baseline to the top or bottom rather than the center.

6.2 “How can I get my floats/sub-floats to line up the way I want?”

A similar question, but this one is caused by extra whitespace in the source text generating spaces next to the floats, and \par’s generated by blank lines. The main thing is be aware that extra whitespace can move floats and sub-floats around, sometimes a lot and sometimes just a little so that they look “wrong”. Placing too many ‘%’s at the end of the lines is better than too few in the various float environments. (See the discussion of “white space” in section 5.)

6.3 “I have too many sub-floats for one page, How can I spread them over two or more pages and continue the numbering?”

The \ContinuedFloat command makes creating continued floating environments easy. See the discussion in section 2.2.3.

6.4 “Why do I get a garbled caption or an error when I use

square brackets?”

   \subfloat[SHIFT: ``register[3] $<<=$ 3;'']{... float text ...}

Since the \subfloat command has an optional argument, delimited with square brackets, before their required argument, you cannot use the ‘]’ character at the top level of either the ⟨sub-caption⟩ or ⟨list entry⟩ argument. To overcome this problem, you must wrap all or the portion of the text containing the ‘]’ character, in a pair of curly brackets (see [7, § C.1.1] for more detail). For example:

   \subfloat[SHIFT: ``register{[3]} $<<=$ 3;'']{... float text ...}

or

   \subfloat[{SHIFT: ``register[3] $<<=$ 3;''}]{... float text ...}.

6.5 “I set an option and it had no effect. What is happening?”

Most likely, the option that you set is being overridden. Reread the option scoping in section 2.2.5 and use the following commands to find out if your option is being set and if it is being overridden (here for a subtable):

       \showcaptionsetup{table}
       \showcaptionsetup{subfloat}
       \showcaptionsetup{subtable}

For instance, if you change the ‘textfont’ at the “table” level and the “subfloat” has another setting for ‘textfont’, than the change will work for table floats, but not for subtables, since the “subfloat” definition will override it. You can either add the ‘textfont’ change to the “subfloat” (which will affect all sub-floats) or to the “subtable” which overrides the overridden change.

7 The Code

7.1 Identification

Check L^{A}TEX release and announce the subfig package.

67 \NeedsTeXFormat{LaTeX2e}[1994/12/01]
68 \ProvidesPackage{subfig}[2004/01/28 ver: 1.2 subfig package]

7.2 Load and Extend the caption Package

This version of the subfig package is dependent on the new caption package by Axel Sommerfeldt [1]. These packages were rewritten in order to both improve the processing and to reduce the amount of redundant code.

First we load the caption package if it has not already been loaded.

69 \RequirePackage{caption}[2003/12/20]

\sf@ifpositiontop First we make sure that the \caption@position is recognizable to the subfig code. We assume that if it is not the same as \@firstoftwo (e.g., ‘top’), than it must be \@secondoftwo, or ‘bottom’.

70 \def\sf@ifpositiontop{%
71 \ifx\caption@position\@firstoftwo \let\next\@firstoftwo \else
72 \let\next\@secondoftwo \fi \next}
\DeclareCaptionListOfFormat \caption@setlistofformat Next, we define the \DeclareCaptionListOfFormat command which controls how

the sub-float captions appear on the List-Of-Floats pages. Note that this command can only be used to define new formats in the preamble. The format may be changed at anytime using the \captionsetup command

73 \def\DeclareCaptionListOfFormat#1{%
74 \@namedef{caption@lstfmt@#1}##1##2}
75 \@onlypreamble\DeclareCaptionListOfFormat
76 \def\caption@setlistofformat#1{%
77 \@ifundefined{caption@lstfmt@#1}{%
78  \PackageError
79  {subfig}%
80  {Undefined caption list-of format `#1'}%
81  {\caption@eh}%
82 }{%
83 \expandafter\let\expandafter\caption@lstfmt
84  \csname caption@lstfmt@#1\endcsname}}

Using this command, we define some common formats and the new keyword, ‘listofformat’, to change the setting.

85 \DeclareCaptionListOfFormat{empty}{}
86 \DeclareCaptionListOfFormat{simple}{#1#2}
87 \DeclareCaptionListOfFormat{parens}{#1(#2)}
88 \DeclareCaptionListOfFormat{subsimple}{#2}
89 \DeclareCaptionListOfFormat{subparens}{(#2)}
90 \DeclareCaptionOption{listofformat}{\caption@setlistofformat{#1}}

\sf@indent \sf@numwidth We also add two new keywords, ‘listofindent’ and ‘listofnumwidth’, which set the lengths used to show where and how wide the caption label will be when typeset. These are used as the fourth and fifth arguments of the \dottedxxxline command, see section 7.4 for more detail.

 91 \def\sf@indent{3.8em}
 92 \define@key{caption}{listofindent}[3.8em]{\def\sf@indent{#1}}
 93 \def\sf@numwidth{2.5em}
 94 \define@key{caption}{listofnumwidth}[2.5em]{\def\sf@numwidth{#1}}

7.3 Options Processing

\sf@config \sf@split \ProcessPackageOptions In order to work within the caption package, the subfig package saves most of the options provided via \usepackage and (re-)applies them each time a sub-float is started. The one exception is the ‘config’ keyword, which is executed immediately. To accomplish this, we use a modified version of the keyval package processing. ‘Config’ entries are detected and executed, while other keywords are passed back to add to the “subfloat” list. (NOTE: Currently the ‘config’ files are unable to use \captionsetup without its optional argument.)

 95 \newcounter{KVtest}
 96 \def\sf@config{config}
 97 \def\sf@split#1=#2=#3\relax{%
 98 \setcounter{KVtest}{1}%
 99 \KV@@sp@def\@tempa{#1}%
100 \ifx\@tempa\@empty
101 \else\ifx\@tempa\sf@config
102  \setcounter{KVtest}{2}%
103  \expandafter\let\expandafter\@tempc
104  \csname\KV@prefix\@tempa\endcsname
105  \ifx\@tempc\relax
106  \KV@errx
107  {\@tempa\space undefined}%
108  \else\ifx\@empty#3\@empty
109  \KV@default
110  \else
111  \KV@@sp@def\@tempb{#2}%
112  \expandafter\@tempc\expandafter{\@tempb}\relax
113  \fi\fi
114 \fi\fi}
115 \def\ProcessPackageOptions{%
116 \def\KV@prefix{KV@\@currname @}%
117 \let\@tempc\relax
118 \let\caption@tempa\@empty
119 \@for\CurrentOption:=\@classoptionslist\do{%
120  \@ifundefined{KV@caption@\CurrentOption}{}{%
121  \edef\caption@tempa{\caption@tempa,\CurrentOption,}%
122  \@expandtwoargs\@removeelement\CurrentOption
123  \@unusedoptionlist\@unusedoptionlist}}%

124 \edef\caption@tempb{\@ptionlist{\@currname.\@currext}}%
125 \@for\CurrentOption:=\caption@tempb\do{%
126  \expandafter\sf@split\CurrentOption==\relax
127  \ifnum\c@KVtest<2\relax
128  \edef\caption@tempa{\caption@tempa,\CurrentOption,}%
129  \fi}%
130 \edef\caption@tempa{%
131  \noexpand\captionsetup[subfloat]{\caption@tempa}}%
132 \caption@tempa}

7.4 Generalized List-of-Floats

\dottedxxxline This is a generalized wrapper for the \@dottedtocline command for sub-float entries. It checks for the level based on the output file extension (second argument) and not using only the \@tocdepth, as the \@dottedtocline command does. The arguments of the \@dottedxxxline command are:

1. \underline{Main Float Type Relative to the Sub-float}.

2. \underline{File Extension}. The usual values are: lof or lot. The internal val-

  ues \ext@subfigure and \ext@subtable hold these extensions.

3. \underline{Level}. By default this is ‘2’ for sub-floats. If the level is greater than ⟨Ext⟩depth (where \underline{⟨Ext⟩} is the second argument, above), then no line is produced.

4. \underline{Indent}. Total indentation from the left margin.

5. \underline{Numwidth}. Width of box for the label number if the \underline{Title} has a \numberline command. This is also the amount of extra indentation added to second and later lines of a multiple line entry.

6. \underline{Title}. Contents of entry (e.g., the ⟨list entry⟩ or ⟨sub-caption⟩).

7. \underline{Page}. The page number of the figure or table.

The final two arguments, \underline{title} and \underline{page}, are automatically appended to the value of \l@subfigure (and symmetrically for other sub-float types).

133 \def\@dottedxxxline#1#2#3#4#5#6#7{%
134 \begingroup
135  \@ifundefined{caption@setfloattype}%
136  \caption@settype
137  \caption@setfloattype
138  {#1}
139  \caption@settype{subfloat}%
140  \caption@settype{sub#1}%
141  \ifnum #3>\@nameuse{c@#2depth}\else
142  \@dottedtocline{\z@}{#4}{#5}{#6}{#7}%
143  \fi
144 \endgroup}

7.5 Create New Sub-floats

\newsubfloat \@newsubfloat This command is used to create new types of sub-floats. It is used during the subfig configuration to create the two standard float types: “subfigure” and “subtable” and may be used anywhere in the preamble to create other types of sub-floats (see section 4.2).

145 \newif\ifmaincaptiontop
146 \def\newsubfloat{%
147 \@ifnextchar[  %] bracket matching
148  {\@newsubfloat}
149  {\@newsubfloat[]}}
150 \def\@newsubfloat[#1]#2{%
151 \@ifundefined{c@sub#2}{%
152  \newcounter{sub#2}[#2]
153  \newcounter{sub#2@save}%
154  \@namedef{sub#2name}{}%
155  \@namedef{p@sub#2}{\@nameuse{the#2}}%
156  \@namedef{thesub#2}{\alph{sub#2}}%
157  \@namedef{ext@sub#2}{\@nameuse{ext@#2}}%
158  \@namedef{l@sub#2}{%
159  \@dottedxxxline{#2}%
160  {\@nameuse{ext@sub#2}}{2}{\sf@indent}{\sf@numwidth}}%
161  \@ifundefined{c@\@nameuse{ext@#2}depth}{%
162  \expandafter\newcounter\expandafter{\@nameuse{ext@#2}depth}%
163  \expandafter\addtocounter\expandafter{\@nameuse{ext@#2}depth}\@ne}{}%
164  \edef\sf@counterlist{%
165  \@ifundefined{sf@counterlist}{}%
166  {\sf@counterlist,}sub#2}%
167  \captionsetup[sub#2]{#1}%
168 }{%
169  \PackageWarning{subfig}{%
170  The sub#2\space type is already defined.}%

171 }}

172 \@onlypreamble\@newsubfloat
173 \@onlypreamble\newsubfloat

7.6 Layout Parameters

sf@farskip sf@captopadj sf@capskip sf@nearskip We now create the sub-float layout parameters. We do it now so that the values will be available during the configuration and options processing, below.

174 \newskip\sf@farskip
175 \sf@farskip 10\p@
176 \define@key{caption}{farskip}[10\p@]{\sf@farskip=#1}
177 \newdimen\sf@captopadj
178 \sf@captopadj \z@
179 \define@key{caption}{topadjust}[\z@]{\sf@captopadj=#1}

180 \newskip\sf@capskip
181 \sf@capskip 4\p@
182 \define@key{caption}{captionskip}[4\p@]{\sf@capskip=#1}
183 \newskip\sf@nearskip
184 \sf@nearskip \z@
185 \define@key{caption}{nearskip}[5\p@]{\sf@nearskip=#1}
\caption@@orig
\sf@oldcaption
\@caption

186 \let\caption@@orig\@caption
187 \let\sf@oldcaption\caption@@orig
188 \def\@caption{\caption@}

7.7 Process the Package Options

1. Set the default (override) values in “subfloat”.

2. Load the configuration file(s) if ‘config’ keyword is given. (Use \captionsetup to change options.)

3. Process the options list using the KV macros. (Note, the ‘config’ option is processed before any other option in the package list above.) The options are added to the end of “subfloat”.

4. Process calls to \captionsetup throughout the paper.

189 \captionsetup[subfloat]{%
190  font=footnotesize,
191  labelformat=parens,labelsep=space,
192  listofformat=subparens}
193 \define@key{subfig}{config}[subfig]{%
194 \InputIfFileExists{#1.cfg}{%
195  \typeout{***********************************************^^J%
196  * Subfig configuration file #1.cfg used ^^J%
197  ***********************************************}%
198 }{%
199  \PackageWarning{subfig}{Configuration file #1.cfg not found}}%

200 }

201 \ProcessPackageOptions
202 \@ifundefined{c@subfigure}{\newsubfloat{figure}}{}
203 \@ifundefined{c@subtable}{\newsubfloat{table}}{}
204 \AtEndOfPackage{%
205 \global\let\KV@config@\relax
206 \global\let\sf@split\relax
207 \global\let\ProcessPackageOptions\relax
208 \global\let\@unprocessedoptions\relax
209 \let\CurrentOption\@empty

210 }

7.8 Define the Sub-float Layout

\sf@top \sf@bottom \subfloat \sf@subfloat \sf@@subfloat \sf@@@subfloat The main command is \subfloat. This command takes the figure code and the

optional caption and builds a vertical box that contains them along with some additional padding as defined by the layout parameters defined in section 7.6

211 \newskip\sf@top
212 \newskip\sf@bottom
213 \def\subfloat{%
214 \ifx\@captype\@undefined
215  \@latex@error{\noexpand\subfloat outside float}\@ehd
216  \expandafter\@gobble
217 \else
218  \expandafter\@firstofone
219 \fi
220 {\sf@subfloat}}
221 \def\sf@subfloat{%
222 \begingroup
223  \@ifundefined{caption@setfloattype}%
224  \caption@settype
225  \caption@setfloattype
226  \@captype
227  \sf@ifpositiontop{%
228  \maincaptiontoptrue
229  }{%
230  \maincaptiontopfalse

231 }%

232  \caption@settype{subfloat}%
233  \caption@settype{sub\@captype}%
234  \let\sf@oldlabel=\label
235  \let\label=\subfloat@label
236  \ifmaincaptiontop\else
237  \advance\@nameuse{c@\@captype}\@ne
238  \fi
239  \refstepcounter{sub\@captype}%
240  \setcounter{sub\@captype @save}{\value{sub\@captype}}%
241  \@ifnextchar [%  %] match left bracket
242  {\sf@@subfloat}%
243  {\sf@@subfloat[\@empty]}}
244 \long\def\sf@@subfloat[#1]{%
245  \@ifnextchar [%  %] match left bracket
246  {\sf@@@subfloat{sub\@captype}[{#1}]}%
247  {\sf@@@subfloat{sub\@captype}[\@empty{#1}][{#1}]}}
248 \long\def\sf@@@subfloat#1[#2][#3]#4{%
249  \@tempcnta=\@ne
250  \if@minipage
251  \@tempcnta=\z@
252  \else\ifdim \lastskip=\z@ \else

253  \@tempcnta=\tw@
254  \fi\fi
255  \ifmaincaptiontop
256  \sf@top=\sf@nearskip
257  \sf@bottom=\sf@farskip
258  \else
259  \sf@top=\sf@farskip
260  \sf@bottom=\sf@nearskip
261  \fi
262  \leavevmode
263  \setbox\@tempboxa \hbox{#4}%
264  \@tempdima=\wd\@tempboxa
265  \vtop\bgroup
266  \vbox\bgroup
267  \ifcase\@tempcnta
268  \@minipagefalse
269  \or
270 %%       \leaders\vrule\vskip\sf@top                  %debug
271  \vskip\sf@top
272  \or
273  \ifdim \lastskip=\z@ \else
274  \@tempskipb\sf@top\relax\@xaddvskip
275  \fi
276  \fi
277  \sf@ifpositiontop{%
278  \ifx \@empty#3\relax \else
279  \@subcaption{#1}{#2}{#3}%
280 %%          \leaders\vrule width.8pt\vskip\sf@capskip    %debug
281 %%          \leaders\vrule width1.2pt\vskip\sf@captopadj %debug
282  \vskip\sf@capskip
283  \vskip\sf@captopadj
284  \fi\egroup
285  \hrule width0pt height0pt depth0pt
286  \box\@tempboxa
287  }{%
288  \box\@tempboxa\egroup
289  \ifx \@empty#3\relax \else
290 %%          \leaders\vrule width.8pt\vskip\sf@capskip    %debug
291  \vskip\sf@capskip
292  \hrule width0pt height0pt depth0pt
293  \@subcaption{#1}{#2}{#3}%
294  \fi

295 }%

296 %%    \leaders\vrule\vskip\sf@bottom  %debug
297  \vskip\sf@bottom
298  \egroup
299  \ifmaincaptiontop\else
300  \global\advance\@nameuse{c@\@captype}\m@ne
301  \fi
302 \endgroup}

7.9 Connect the Sub-float Captions to the caption Package

\@subcaption This command first adds the sub-caption to the list of sub-captions for printing later (after the main caption is printed, which is either before the next caption or at the end of the current float environment). Next, we make room for the sub-caption and call the caption package \caption@make command to print it.

303 \long\def\@subcaption#1#2#3{%
304 \ifx \relax#2\relax \else
305  \bgroup
306  \let\label=\@gobble
307  \let\protect=\string
308  \def\@subcaplabel{%
309  \caption@lstfmt{\@nameuse{p@#1}}{\@nameuse{the#1}}}%
310  \xdef\sf@captionlist{%
311  \sf@captionlist,%
312  {\protect\numberline{\@subcaplabel}\noexpand{\ignorespaces #2}}}%
313  \egroup
314 \fi
315 \bgroup
316  \ifx \relax#3\relax
317  \let\captionlabelsep=\relax
318  \fi
319  \hb@xt@\the\@tempdima{%
320  \hss
321  \parbox[t]{\the\@tempdima}{%
322  \caption@make
323  {\@nameuse{sub\@captype name}}%
324  {\@nameuse{thesub\@captype}}%
325  {#3}}%
326  \hss}%
327 \egroup}

7.10 Subfig Caption Processing for the List-of-Floats Files

\sf@captionlist \listsubcaptions \@listsubcaptions \caption@ \sf@addcontentsline The \listsubcaptions command writes the list of sub-captions to the list-of

file. This is done so that they will follow the associated caption in the file. The \listsubcaptions command is (optionally) called by the \caption command and at the end of the float environment by the internal \end@float command. In rare instances the user may need to call it also, see section 2.2.4 for an example.

328 \def\sf@captionlist{}
329 \def\listsubcaptions{%
330 \@ifstar
331  {\gdef\sf@captionlist{}}%
332  {\@listsubcaptions{\@captype}}}
333 \def\@listsubcaptions#1{%
334 \@ifundefined{@captype}{}{%
335  \@ifundefined{ext@sub#1}{}{%
336  \@for \sf@temp:=\sf@captionlist \do {%

337  \ifx \@empty\sf@temp\relax \else
338  \sf@addcontentsline
339  {\@nameuse{ext@sub#1}}%
340  {sub#1}%
341  {\sf@temp}%
342  \fi}}}%
343 \gdef\sf@captionlist{}}
344 \long\def\caption@#1[#2]#3{%
345 \@ifundefined{caption@setfloattype}%
346  \caption@settype
347  \caption@setfloattype
348  \@captype
349 \sf@ifpositiontop{%
350  \@listsubcaptions{#1}%
351  \sf@oldcaption{#1}[{#2}]{#3}%
352 }{%
353  \sf@oldcaption{#1}[{#2}]{#3}%
354  \@listsubcaptions{#1}%

355 }}

356 \AtBeginDocument{%
357 \let\sf@addcontentsline=\addcontentsline}

7.11 Subfig Label Handling

\sf@oldlabel \subfloat@label \sub@label \sf@sub@label \sf@@sub@label \subref \subref* The label handling has three aspects. The first is that the label for a sub-

float is defined as the \p@<sub-float type> value prepended to the \the<subfloat type> value. Secondly, the \subref command is similar, except that it shows label as formatted on the list-of page. Finally, we need to check for the hyperref package and provide the extended reference format if it is present.

358 \let\sf@oldlabel=\relax
359 \def\subfloat@label{%
360 \@ifnextchar(%   %) match left parenthesis
361  {\sf@sub@label}
362  {\sf@sub@label(Sub\@captype\space
363  \@ifundefined{thechapter}{}{%
364  \@nameuse{thechapter}\space}%
365  \@nameuse{p@sub\@captype}%
366  \@nameuse{thesub\@captype}.)}}
367 \let\sub@label=\subfloat@label
368 \def\sf@sub@label(#1)#2{%
369 \ifhyperrefloaded
370  \protected@edef\@currentlabelname{%
371  \expandafter\strip@period #1\relax.\relax\@@@}%
372 \fi
373 \sf@@sub@label{#2}}

374 \def\sf@@sub@label#1{%
375 \@bsphack
376 \sf@oldlabel{#1}%
377 \ifhyperrefloaded
378  \protected@write\@auxout{}{%
379  \string\newlabel{sub@#1}%
380  {{\caption@lstfmt
381  {\@nameuse{p@sub\@captype}}%
382  {\@nameuse{thesub\@captype}}}%
383  {\@nameuse{thesub\@captype}}%
384  {\expandafter\strip@period\@currentlabelname\relax.\relax\@@@}%
385  {\@currentHref}%
386  {}}}%
387 \else
388  \protected@write\@auxout{}{%
389  \string\newlabel{sub@#1}%
390  {{\caption@lstfmt
391  {\@nameuse{p@sub\@captype}}%
392  {\@nameuse{thesub\@captype}}}%
393  {\@nameuse{thesub\@captype}}}}%
394 \fi
395 \@esphack}
396 \def\subref{%
397 \@ifstar
398  \sf@@subref
399  \sf@subref}
400 \def\sf@subref#1{\ref{sub@#1}}
401 \def\sf@@subref#1{\pageref{sub@#1}}

7.12 Support for Continued Figures

\ContinuedFloat \sf@caption Now we add the ability to have continued floating environments and have it work

with the sub-floats without having to load the captcont package.

Add \ContinuedFloat at the beginning of a float environment or after a \caption or after (re)setting \@captype and before any \subfloat command or the \caption which is to be continued.

If the \caption is followed by an empty option (e.g., \caption[]{caption text}) than no entry is made in the List-of-Floats pages for this caption. The associated sub-floats may or may not appear in the List-of-Floats pages depending on their optional arguments.

Keep compatibility with the captcont package if it is loaded. But still provide

 the \ContinuedFloat command.
402 \newif\if@ccflag
403 \@ccflagfalse
404 \AtBeginDocument{%

405 %

406 \let\sf@refstepcounter=\refstepcounter

407 %

408 \@ifpackageloaded{captcont}{}{%
409  \def\refsteponlycounter#1{%
410  \if@ccflag
411  \global\expandafter\advance\csname c@#1\endcsname\@ne
412  \let\sf@temp\protect
413  \def\protect{\noexpand\protect\noexpand}%
414  \edef\@currentlabel{\csname p@#1\endcsname\csname the#1\endcsname}%
415  \let\protect\sf@temp
416  \else
417  \sf@refstepcounter{#1}%
418  \fi
419  \@ccflagfalse}%

420 }% 421 %

422 \def\ContinuedFloat{%
423  \addtocounter{\@captype}{\m@ne}%
424  \setcounter{sub\@captype}{\value{sub\@captype @save}}%
425  \@ccflagtrue}}
426 \def\sf@caption{%
427 \let\refstepcounter=\refsteponlycounter
428 \sf@savecaption}
429 \AtBeginDocument{
430 \let\sf@savecaption=\caption
431 \let\caption=\sf@caption

432 }

7.13 Automate the Sub-float Listings

sf@end@float sf@end@dblfloat end@dblfloat Use the end@float and end@dblfloat hooks to process the List-of-Floats subcaptions at the end of a float environment so that the page numbers will be correct.

433 \let\sf@end@float=\end@float
434 \def\end@float{%
435 \@ifundefined{sf@counterlist}{}{%
436  \@for\sf@temp:=\sf@counterlist\do{%
437  \setcounter{\sf@temp}{\z@}}%
438  \@listsubcaptions{\@captype}}%
439 \sf@end@float}%
440 \let\sf@end@dblfloat=\end@dblfloat
441 \def\end@dblfloat{%
442 \@ifundefined{sf@counterlist}{}{%
443  \@for\sf@temp:=\sf@counterlist\do{%
444  \setcounter{\sf@temp}{\z@}}%
445  \@listsubcaptions{\@captype}}%
446 \sf@end@dblfloat}

7.14 Provide Compatibility for the hyperref Package

447 \newif\ifhyperrefloaded
448 \AtBeginDocument{%
449 \@ifpackageloaded{hyperref}{%
450  \hyperrefloadedtrue

451 %

452  \def\sf@setref#1sub#2\relax{%
453  \@namedef{theHsub#2\expandafter}{\@nameuse{the#2}.\arabic{sub#2}}%
454  \@namedef{toclevel@sub#2}{1}%

455 } 456 %

457  \@for\sf@temp:=\sf@counterlist\do{%
458  \expandafter\sf@setref\sf@temp\relax}%

459 %

460  \global\let\sf@setref\relax

461 %

462 }{}%

7.15 Provide Compatibility for the float Package

463 \@ifpackageloaded{float}{%
464  \let\sf@endfloatbox=\@endfloatbox
465  \def\@endfloatbox{%
466  \listsubcaptions
467  \sf@endfloatbox}%
468 }{}%

7.16 Provide Compatibility for the fixltx2e Package

We also provide compatibility with the older fix2col package that the fixltx2e package supersedes.

469 \@ifpackageloaded{fixltx2e}{%
470  \def\end@dblfloat{%
471  \if@twocolumn
472  \@ifundefined{sf@counterlist}{}{%
473  \@for\sf@temp:=\sf@counterlist\do{%
474  \setcounter{\sf@temp}{\z@}}%
475  \@listsubcaptions{\@captype}}%
476  \@endfloatbox
477  \ifnum\@floatpenalty <\z@
478  \@largefloatcheck
479  \global\dp\@currbox1sp %
480  \expandafter\@gobble\sf@end@float
481  \fi
482  \else
483  \end@float
484  \fi}%
485 }{%

486  \@ifpackageloaded{fix2col}{%
487  \def\end@dblfloat{%
488  \if@twocolumn
489  \@ifundefined{sf@counterlist}{}{%
490  \@for\sf@temp:=\sf@counterlist\do{%
491  \setcounter{\sf@temp}{\z@}}%
492  \@listsubcaptions{\@captype}}%
493  \@endfloatbox
494  \ifnum\@floatpenalty <\z@
495  \@largefloatcheck
496  \global\dp\@currbox1sp %
497  \expandafter\@gobble\sf@end@float
498  \fi
499  \else
500  \end@float
501  \fi}}{}%

502 } 503 }

504 \endinput

8 Acknowledgments

This package was adapted from the subfigure package, which was originally written to automatically line up some figure boxes and place labels under them for my Ph.D. dissertation, years ago. I thought it useful and uploaded it to the Internet community and later to CTAN. Many people have asked questions or given comments which collectively have changed and improved the usefulness of that package. In 2002, Michel Goossens requested an updated version of the subfigure package to feature in the second edition of The L^{A}TEXCompanion. In collaboration with Axel Sommerfeldt and with many suggestions from Frank Mittelbach, this package was developed. It uses the new version of the caption package (with which the subfigure had a large overlap in function), re-written by Axel Sommerfeldt for the same book. This version both simplifies the original package code and, unfortunately, forces it to be backward in-compatible with the subfigure package, therefore the change in the package name from subfigure to subfig.

A few people have contributed more than most to the development of the prior subfigure package and to the present subfig package. I want to thank them publicly and they are, alphabetically:

• Frederic Darboux for searching out and finding several incompatibilities with other packages.

• Harald Harders for his suggestion of the \subref command and modifying \label within the subfigure package to save local references to the subfigs that are often needed. Also, for the suggestion of supporting the ’ragged2e’ justification options.

• William ‘bil’ L. Kleb for his extensive suggestions for improvement for this package.

• Frank Mittelbach for numerous suggestions for improvement and a more logical API.

• Heiko Oberdiek and James A. Bednar for their help with coexisting with the hyperref and html packages. Also, Ingele Roelens for pointing out some further compatibility problems when using the hyperref package with PDFL^{A}TEX.

• Axel Reichert for his request for a ‘hang’ caption style since the subcaptions tend to have a short width. And, for his request for some way of referencing the individual subfigs in the main caption without the figure number.

• Harald Axel Sommerfeldt for the work that he did to adjust his caption package as necessary to support the subfig package.

• Peter Wilson for the work that he did to adjust his ccaption package (and other packages) as necessary to support the subfigure package when they are loaded together.

References

[1] Harald Axel Sommerfeldt, The caption Package, Version 3.0, 2003/12/21. (Available from CTAN as file caption.dtx.)

[2] Peter Wilson, The ccaption Package, Version 1.0a, 2001/08/15. (Available from

CTAN as file ccaption.dtx.)

[3] Peter Wilson, The tocloft Package, Version 2.2, 2001/14/17. (Available from

CTAN as file ccaption.dtx.)

[4] David Carlisle, The keyval Package, Version 1.13, 1999/03/16. (Available from CTAN as file keyval.dtx.)

[5] Sebastian Rahtz, Hypertext marks in L^{A}TEX, 2002/04/05/. (Available from

CTAN as file hyperref.dtx.)

[6] Keith Reckdahl, Using Imported Graphics in L^{A}TEX 2ε, 1997/12/15. (Available from CTAN as file epslatex.pdf)

[7] Leslie Lamport, LaTeX User’s Guide and Reference Manual, 2nd edition, Addison-Wesley, Reading, Massachusetts, 1994.

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

[9] Donald Ervin Knuth, The TEXbook, Addison-Wesley, Reading, Massachusetts, 1986.

[10] Leslie Lamport, Frank Mittelbach, and Johannes Braams, Standard Document Classes for L^{A}TEX version 2e Version 1.4e, 2001/04/01. (Available from

CTAN as file classes.dtx.)

[11] Anselm Lingnau, An Improved Environment for Floats. Version 1.3d, 2001/11/08. (Available from CTAN as file float.dtx.)

Change History

v1.0

General: Created (based on the sub-

figure package. . . . . . . . . . . . . 1 v1.1

General: Added explanation for multiple ‘#’ signs in the Table ??. . . . . . . . . . . . . . . . . . 35

Changed \captionlistofformat
to \caption@lstfmt. . . . . . . . 56

Removed ‘position’ settings from initial setup to allow the class or other external settings to control the initial settings of the default (‘bottom’) and table (‘top’) positions. . . . . . . . . . . 53 Updated ‘listofformat’ value from ‘simple’ to ‘subsimple’. 39, 43, 53 Updated the values and the default for the keyword ‘listofformat’ in Table ??. . . . . . . . . . 10

\caption@setlistofformat:
Changed \captionlistofformat
to \caption@lstfmt. . . . . . . . 49
\subref*: Changed \captionlistofformat
to \caption@lstfmt. . . . . . . . 58

Fixed bug wherein the subreference could ignore any prefix numbering when set on the listof page. . . . . . . . . . . . . . . . . 58

v1.2

\@newsubfloat:  Changed

first parameter of the

\dotttedxxxline to use the

float rather than the sub-float name. . . . . . . . . . . . . . . . . . . 52 Removed code setting a default ‘position’ in the new subfloat based on its corresponding float. . . . . . . . . . . . . . . . . . . 52 General: Added documentation for

the \subref* command. . . . . . 6 Added footnote to reference NFSS. . . . . . . . . . . . . . . . . . 13 Added missing space. . . . . . . . 10 Added the reset of the

                                       \CaptionOption to keep this

package from influencing other packages using the variable… 53 Added this section. . . . . . . . . 36 Changed ‘indent’ to ‘indention’. 10 Changed first parameter to send float name rather than sub-float name. . . . . . . . . . . . . . . . . . . 51 Changed the names ‘topskip’ to ‘farskip’, and ‘bottomskip’ to ‘nearskip’. Added a hyphen to “sub-float” and “sub-caption” where they occurs as regular text to match the usage in The L^{A}TEXCompanion. Also fixed bug in the alternative code if the multirow package is not found. . 1 Fine-tuned the defaults for ‘farskip’, ‘topadjust’, ‘captionskip’, and ‘nearskip’. . . . . . . . 10 Fixed old reference to

                                       \subfigure to \subfloat. . . . 43

Fixed references. . . . . . . . . . . 14 Fixed spelling error. . . . . . . . . 56 Fixed typo: “Someg eneral” to “Some general”. . . . . . . . . . . 42

                                      Removed \captionsetup of de-

faults for ‘farskip’, ‘topadjust’, ‘captionskip’, and ‘nearskip’; because these are defaulted above. Any change can be added to the “subfloat” variable. . . . . . . . . . . . . . . . . . . . 53 Removed ‘widespace’. . . . . . . . 10 Removed duplicate line. . . . . . 39 Removed mention of undocumented and/or unre-

leased  \topcaption  and
\bottomcaption commands. . 38

Removed separate setting of the mapname since the caption package now fixes the float com-

mand \restylefloat*. Also,

the same fix in the prolog of this document. . . . . . . . . . . . . . . 39 Removed two extra commas in the figure options lists. . . . . . 14 Rewrote description of the layout. . . . . . . . . . . . . . . . . . . . 10

\dottedxxxline: Added commands

to set the float caption keyword/values. . . . . . . . . . . . . . 51

sf@nearskip: Fine-tuned defaults for ‘farskip’, ‘topadjust’, ‘captionskip’, and ‘nearskip’. . . . . 52

\sf@@@subfloat: Changed method

of setting the float caption settings to first check for

\caption@setfloattype and to

use that if present. . . . . . . . . 54 Changed the top and bottom skips to be placed opposite the main caption rather than the sub-caption; I decided that that looked better. . . . . . . . . . . . . 54 Inserted another \hrule of zero size to kill extra vertical space from being added. . . . . . . . . . 54

                                   \sf@addcontentsline: Changed

method of setting the float caption settings to first check for

                                       \caption@setfloattype and to

use that if present. . . . . . . . . 57 Simplified \caption@ at the suggestion of Axel Sommerfeldt. . 57

\subref*: Added a starred-form of the \subref command. . . . . . 58

Changed  \thepage  to

                                       \@nameuse{thesub\@captype}

so that a starred-form of the \subref command will work to extract the simple form of the subfigure number using the \pageref mechanism. . . . . . . 58

\subtable: Added default setting of ‘loose’. . . . . . . . . . . . . . . . 40 Removed code that forces the figure or table to be in some place. The default will be ‘bottom’ if nothing else is set. . . . . . . . . 40

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

\@caption . . . . . . . . \underline{186}

\@captype . . . . 214,

226, 233, 237, 239, 240, 246, 247, 300, 323, 324, 332, 348, 362, 365, 366, 381–383, 391– 393, 423, 424, 438, 445, 475, 492

\@ccflagfalse . 403, 419

                   \@ccflagtrue . . . . . . 425
                   \@currentHref . . . . . 385
                   \@currentlabel . . . . 414
                   \@currentlabelname .

. . . . . . . . 370, 384

                   \@currname . . . 116, 124
                   \@dottedxxxline 133, 159
                   \@endfloatbox . . . . .

. 464, 465, 476, 493

                   \@listsubcaptions .

. . . . . . . . \underline{328}, 438, 445, 475, 492

                                             \@newsubfloat . . . . . \underline{145}
                                             \@subcaplabel . 308, 312
                                             \@subcaption . . . . . .

…. 279, 293, \underline{303} \@tempa 99–101, 104, 107 \@tempb . . . . . . 111, 112

                                             \@tempboxa . . . . . . .

. 263, 264, 286, 288 \@tempc 103, 105, 112, 117

                                             \@tempcnta . . . . . . .

. 249, 251, 253, 267 \@tempdima 264, 319, 321

\@tempskipb . . . . . . . 274

C

\c@KVtest . . . . . . . . 127 \caption . . . . . 430, 431 \caption@ …. 188, \underline{328}

\caption@@orig . . . . \underline{186}
\caption@eh . . . . . . . 81
\caption@lstfmt . . .

. 83, 309, 380, 390

\caption@make . . . . . 322
\caption@position . 71
\caption@setbool . .

. . . . . . . 11, 27–29

\caption@setfloattype

…. 137, 225, 347

\caption@setformat .

. . . . . . . . . . . 5–7

\caption@setjustification

. . . . . 8–10, 30–38

\caption@setlistofformat

. . . . . . . . . . . . \underline{73}

\caption@settype . .

. 136, 139, 140, 224, 232, 233, 346

\caption@tempa 118,

121, 128, 130–132

\caption@tempb 124, 125
\captionfont . . . . 12–17
\captionlabelfont .

. . . . . . . . . 18–26

\captionlabelsep . . 317
\captionsetup . . . . .

. . 9, 48–59, 61, 64, 66, 131, 167, 189

\captiontextfont 39–47
\ContinuedFloat . 6, \underline{402}

D

\DeclareCaptionListOfFormat

. . . . . . . . . . 5, \underline{73}

\DeclareCaptionOption

. 5–50, 52, 54– 56, 58, 60, 63, 90

\dottedxxxline . . . . \underline{133}

E

\end@dblfloat . \underline{433},

440, 441, 470, 487

\end@float . . . . . . .

. 433, 434, 483, 500

H

\hyperrefloadedtrue 450

I

\if@ccflag . . . 402, 410
\if@twocolumn . 471, 488
\ifhyperrefloaded .

…. 369, 377, 447

\ifmaincaptiontop .

. 145, 236, 255, 299

K

\KV@@sp@def . . . . 99, 111
\KV@config@ . . . . . . . 205
\KV@default . . . . . . . 109

\KV@errx . . . . . . . . . 106

\KV@prefix . . . 104, 116

L

\listsubcaptions . .

. . . . . . 8, \underline{328}, 466

M

\maincaptiontopfalse

. . . . . . . . . . . 230

\maincaptiontoptrue 228

N

\newsubfloat . . . . 1,

3, 5, \underline{145}, 202, 203

P

\ProcessPackageOptions

. . . . . \underline{95}, 201, 207

R

\refsteponlycounter

. . . . . . . . 409, 427

S

\sf@@@subfloat . . . . \underline{211}
\sf@@sub@label . . . . \underline{358}
\sf@@subfloat . . . . . \underline{211}
\sf@@subref . . . 398, 401
\sf@addcontentsline  \underline{328}
\sf@bottom . . . . . . . \underline{211}

\sf@capskip . . . . . . .

. \underline{174}, 180–182, 280, 282, 290, 291

\sf@caption . . . . . . . \underline{402}
\sf@captionlist . . .

…. 310, 311, \underline{328}

\sf@captopadj . \underline{174},

177–179, 281, 283

\sf@config . . . . . . . \underline{95}
\sf@counterlist . . .

. 164, 166, 436, 443, 457, 473, 490

\sf@end@dblfloat . .

…. \underline{433}, 440, 446

\sf@end@float . 433,

\underline{433}, 439, 480, 497

\sf@endfloatbox 464, 467
\sf@farskip 174, \underline{174},

175, 176, 257, 259

\sf@ifpositiontop .

. \underline{70}, 227, 277, 349

\sf@indent . . . . \underline{91}, 160
\sf@nearskip . . \underline{174},

183–185, 256, 260

\sf@numwidth . . . \underline{91}, 160
\sf@oldcaption . . . .

…. \underline{186}, 351, 353

\sf@oldlabel . . 234, \underline{358}
\sf@refstepcounter .

. . . . . . . . 406, 417

\sf@savecaption 428, 430

\sf@setref 452, 458, 460 \sf@split . . . . . \underline{95}, 206

\sf@sub@label . . . . . \underline{358}
\sf@subfloat . . . . . . \underline{211}
\sf@subref . . . 399, 400

\sf@temp . . 336, 337, 341, 412, 415, 436, 437, 443, 444, 457, 458, 473, 474, 490, 491

\sf@top . . . . . . . . . . \underline{211}

\sub@label . . . . . . . \underline{358}
\subfigure . . . . . . . . \underline{1}

\subfloat . . 2, 4, 5, \underline{211}

\subfloat@label 235, \underline{358}

\subref . . . . . . . . 6, \underline{358} \subref* . . . . . . . 6, \underline{358} \subtable . . . . . . . . . \underline{1}