Newer
Older
Publications / SIRC_2006 / subfigure.sty
%$% subfigure.sty
%$% Subfigure/table command for use with the LaTeX figure environment.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Copyright (C) 1988-1995 Steven Douglas Cochran.
%%%
%%% The subfigure style is made available for academic and research
%%% purposes only.  No commercial license is hereby granted.  Copying
%%% and other reproduction is authorized only for research, education,
%%% and other non-commercial purposes.  No warranties, either
%%% expressed or impiled, are made regarding the operation, use, or
%%% results of the subfigure style.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% @LaTeX-style-file{
%%%    Author              = "Steven Douglas Cochran",
%%%    Version             = "2.0 (LaTeX209 version)",
%%%    Date                = "1995 Mar 06",
%%%    Time                = "12:43:14 EDT",
%%%    Filename            = "subfigure.sty",
%%%    Address             = "Digital Mapping Laboratory
%%%                           School of Computer Science
%%%                           Carnegie-Mellon University
%%%                           5000 Forbes Avenue
%%%                           Pittsburgh, PA 15213-3891
%%%                           USA",
%%%    Telephone           = "(412) 268-5654",
%%%    FAX                 = "(412) 268-5576",
%%%    checksum            = "23098 438 1899 18286",
%%%    Email               = "sdc+@CS.CMU.EDU (Internet)",
%%%    CodeTable           = "ISO/ASCII",
%%%    Keywords            = "LaTeX, float, figure, table",
%%%    Supported           = "yes",
%%%    Abstract            = "LaTeX document-style option for
%%%                           providing support for the inclusion of
%%%                           small `sub' figures and tables.  It
%%%                           simplifies the positioning, captioning
%%%                           and labeling of them within a single
%%%                           figure or table environment.",
%%%    DocString           = "The checksum field above contains a CRC-16
%%%                           checksum as the first value, followed by
%%%                           the equivalent of the standard UNIX wc
%%%                           (word count) utility output of lines,
%%%                           words, and characters.  This is produced
%%%                           by Robert Solovay's checksum utility."
%%% }
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% $Log:       subfigure.sty,v $
%$%  Revision 2.0  95/03/06  12:43:14  sdc
%$%  This version of `subfigure' is the first to be ported to LaTeX2e
%$%  (with backward compatibility to LaTeX 2.09).  "\subfigure" and
%$%  "\subtable" are now identical and the environment controls
%$%  internal differences between them.  Now, the caption setting
%$%  portion of "\@subfloat" is broken into the separate macros
%$%  "\@makesubfigurecaption" and "\@makesubtablecaption" to allow a
%$%  separate hook for the modification of how the caption is
%$%  constructed and to allow the table and figure captions to be
%$%  different.  In addition, support of the `normal', `hang',
%$%  `center', `centerlast', 'nooneline'; `scriptsize', \ldots,
%$%  `Large'; `up', `it', `sl', `sc', `md', `bf', `rm', `sf', and `tt'
%$%  package options were added for compatibility with the caption.sty
%$%  by H.A. Sommerfeldt.}  
%$%  
%$%  Revision 1.6  93/05/13  12:58:34  sdc
%$%  Changed to use the \thefigure macro in building the referenced
%$%  label.  The old form caused a problem when used with the
%$%  report.sty as pointed out by Andrew Anselmo
%$%  (anselmo@cumesb.mech.columbia.edu).  Also modified to restrict
%$%  the scope of the subfigure \label to the body of the subfigure.
%$%  Added \@thesubfigure to allow a separate labeling of the
%$%  subfigure in the figure and in the text.  By default it is the
%$%  same as \thesubfigure with space appended.  Added some hooks to
%$%  print the subfigure captions to the list-of-figures file if
%$%  desired.  Finally, added the corresponding support for sub-tables
%$%  as well as sub-figures.  NOTE: the optional caption is now a
%$%  moving argument and any fragile commands that appear in the
%$%  caption must be preceded by a \protect (just like that of the
%$%  \caption command).
%$%   
%$%  Revision 1.5  92/08/11  23:13:12  sdc
%$%  Fixed a bug which caused an problem with captions that contained  
%$%  expressions like \sqrt;  This was pointed out by Tom Scavo
%$%  (scavo@cie.uoregon.edu).  A separate bug was fixed which caused
%$%  different sized captions to be misaligned;  This problem was
%$%  pointed out by Simon Marshall (S.Marshal@Hull.ac.uk).  Also
%$%  cleaned up the code a mite and *changed* the figure spacing so that
%$%  if no optional section is given, then the figure is only followed
%$%  by \subfigbottomskip and not that plus (\subfigcapskip + \strut
%$%  height).  This should make it easier to adjust spacing as desired.
%$%   
%$%  Revision 1.4  92/06/27  10:40:34  sdc
%$%  Added a hack to allow the \label command to be used within the
%$%  body of the subfigure giving a reference label in the form
%$%  \arabic{thefigure}\thesubfigure.  Added standard file header for
%$%  style.  
%$%   
%$%  Revision 1.3  90/10/22  17:04:28  cochran
%$%  Changed test for empty caption inside of \@subfigure to compare
%$%  tokens and not the caption vs. \@empty.  The former (incorrect)
%$%  test caused an error when the first two letters of the caption
%$%  were the same.
%$%
%$%  Revision 1.2  89/08/30  07:18:29  cochran
%$%  Added a separate bottom margin and expanded the comments.
%$%
%$%  Revision 1.1  88/11/02  11:03:46  cochran
%$%  Initial revision.
%$%
%$%  05 Mar 86  cochran@dworkin.usc.edu (USC-IRIS)
%$%  Created.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%$% Usage:  \documentstyle[...,subfigure,...]{...}
%$%
%$%             \subfigure[CAPTIONtext]{FIGUREbox}
%%%
%%% Creates a subfigure box with an optional CAPTION under a FIGURE.
%%% The FIGURE is centered with \subfigtopskip of vertical space added
%%% above.  If there is a CAPTION, then \subfigcapskip vertical space
%%% is added below the FIGURE followed by the CAPTION.  Finally,
%%% \subfigbottomskip of vertical space added at the bottom.  
%%%
%%% If a CAPTION is given (including a null CAPTION `[]') then the
%%% subfigure is labeled with a counter formatted by the macro
%%% `\thesubfigure' which returns `(a)', `(b)', etc.  If desired,
%%% this macro may be redefined.  The counter used for labeling the
%%% subfigures is `subfigure' and is incremented for each subfigure
%%% regardless of whether a CAPTION was printed.
%%%
%$%             \subfigure[CAPTIONtext]{FIGUREbox}
%%%
%%% The subtable command is symmetric to the subfigure command defined
%%% above.   
%%%
%%% One example of use is to surround the figure in a center
%%% environment or to specifying \centering:
%%%
%%%                                          *---------*   
%%%   \newcommand{\goodgap}{%                |  ..   . |   *---------*  
%%%     \hspace{\subfigtopskip}%             |  .   .  |   | . .  .  |  
%%%     \hspace{\subfigbottomskip}}          | .. . .  |   | .  . .. |  
%%%   ...                                    *---------*   *---------*    
%%%   \begin{figure}%                         (a) First     (b) Second   
%%%     \centering                                          Figure 
%%%     \subfigure[First]{...}\goodgap      
%%%     \subfigure[Second Figure]{...}\\           *---------*
%%%     \subfigure[Third]{\label{3figs-c}...}%     | . .. .  |
%%%     \caption{Three Subfigures.}                | . .. .  |
%%%     \label{3figs}                              *---------*
%%%   \end{figure}                                  (c) Third
%%%   ...                                   Figure 1. Three Subfigures.    
%%%   Figure~\ref{3figs} contains        
%%%   two top `subfigures' and           Figure 1 contains two top `sub-
%%%   Figure~\ref{3figs-c}.              figures' and Figure 1(c).
%%%
%%% A second example is to change the way that the subfigures are labeled
%%% and to have the subfigure captions printed in the list-of-figures.
%%%
%%%   \renewcommand{\thesubfigure}{\thefigure.\arabic{subfigure}}
%%%   \makeatletter
%%%     \renewcommand{\@thesubfigure}{\thesubfigure:\space}
%%%     \renewcommand{p@subfigure}{}
%%%   \makeatother
%%%   ...
%%%   \setcounter{lofdepth}{2}
%%%   \listoffigures
%%%   ...
%%%   \begin{figure}%
%%%     \begin{center}%
%%%       \subfigure[First]{%         *--------------*  *--------------*   
%%%         \label{fig:first}%        |  ..   .  .   |  | . ... .. . . |  
%%%         ...}%                     |  .  .   .  . |  | .  .  . . .. |  
%%%       \goodgap                    | .. . .  . .  |  | . . . .. ..  |
%%%      \subfigure[Second]{%         *--------------*  *--------------*   
%%%         \label{fig:second}%  
%%%         ...}%                        1.1: First        1.2: Second
%%%     \end{center}%
%%%     \caption{Two Subfigures.}          Figure 1. Two Subfigures.
%%%   \end{figure}                   
%%%   ...                             See subfigures 1.1 and 1.2.  
%%%   See subfigures \ref{fig:first}  
%%%   and \ref{fig:second}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Options:
%%%
%%%  I. Subfloat caption shape.
%%%     By default the caption paragraphs are centered under the
%%%     subfigure or table with a little indentation at each side.
%%%     There are three options that may be used to change the shape
%%%     of the centered paragraph -- they only have an effect when the
%%%     caption is more than one line long.  These should be set in
%%%     the preamble of your LaTeX file:
%%%     
%%%          \subcaphangtrue        Causes the label to be a hanging
%%%                                 indentation to the caption paragraph.
%%%          \subcapcentertrue      Causes each line of the paragraph
%%%                                 to be separately centered.
%%%          \subcapcenterlasttrue  Causes the last line only to be 
%%%                                 centered.
%%%          \subcapnooneline       If a caption fits on one line it
%%%                                 will, by default, be centered.
%%%                                 This option left-justifies the one
%%%                                 line caption.
%%%
%%%     The hang option may be used in addition to either center
%%%     option.  (If both center options are true it is the same as if
%%%     only the \subcapcenter was true.)
%%%     
%%%     
%%% II. Subfloat label font.
%%%     The subfloat label font may be separately set by changing the
%%%     definition of \subcaplabelfont.  For example:
%%%     
%%%          \newcommand{\subcaplabelfont}{\it}
%%%     
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%
%%%  Identification
%%%
\ifx\if@compatibility\undefined\else
  \NeedsTeXFormat{LaTeX2e}
  \ProvidesPackage{subfigure}[1995/03/06 v2.0 subfigure package]
  \typeout{Package: subfigure 1995/03/06 v2.0}
\fi

%%%
%%%  Initialization and Shared constants
%%%
\newif\ifsubcaphang
\newif\ifsubcapcenter
\newif\ifsubcapcenterlast
\newif\ifsubcapnooneline

%%
%% Common values (mention of `subfig' in names is for upward compatibility)
%%
\newcommand{\subfigtopskip}{10pt}    % Length from the top of the subfloat
                                     %   box to the begining of the FIGURE box.
\newcommand{\subfigbottomskip}{10pt} % Length from the bottom of the CAPTION
                                     %   to the bottom of the subfloat.
\newcommand{\subfigcapskip}{10pt}    % Length from the bottom of the FIGURE box
                                     %   to the begining of the CAPTION.
\newcommand{\subfigcapmargin}{10pt}  % Indentation of the caption from the
                                     %   sides of the subfloat box (This should
                                     %   always be positive).
\newcommand{\subcapsize}{}           % Size of the CAPTION font.
\newcommand{\subcaplabelfont}{}      % Font of the caption label.

%%
%% Subfigure values
%%
\newcounter{subfigure}[figure]          % Subfigure counter.
\def\thesubfigure{(\alph{subfigure})}   % Generate CAPTION label (text).
\newcommand{\@thesubfigure}{%           % Generate CAPTION label (figure).
  {\subcaplabelfont\thesubfigure}\space}
\let\p@subfigure\thefigure              % Figure number for \label.

\let\ext@subfigure\ext@figure           % Default SubFigure file extension.
\newcommand{\l@subfigure}{%             % How to print an LOF subfigure line.
  \@dottedxxxline{\ext@subfigure}{2}{3.9em}{2.3em}}
\newcounter{lofdepth}                   % LOF depth counter.
\setcounter{lofdepth}{1}                % Default is to NOT print an LOF line.

%%
%% Subtable values
%%
\newcounter{subtable}[table]            % Subtable counter.
\def\thesubtable{(\alph{subtable})}     % Generate CAPTION label (text).
\newcommand{\@thesubtable}{%            % Generate CAPTION label (figure).
  {\subcaplabelfont\thesubtable}\space}
\let\p@subtable\thetable                % Figure number for \label.

\let\ext@subtable\ext@table             % Default SubTable file extension.
\newcommand{\l@subtable}{%              % How to print an LOT subtable line.
  \@dottedxxxline{\ext@subtable}{2}{3.9em}{2.3em}}
\newcounter{lotdepth}                   % LOT depth counter.
\setcounter{lotdepth}{1}                % Default is to NOT print an LOT line.


%%
%% Declaration of options
%%
\ifx\if@compatibility\undefined
  \subcaphangfalse
  \subcapcenterfalse
  \subcapcenterlastfalse
  \subcapnoonelinefalse
  \def\subcapsize{\footnotesize}
\else
  \DeclareOption{normal}{%
    \subcaphangfalse
    \subcapcenterfalse
    \subcapcenterlastfalse}
  \DeclareOption{hang}{\subcaphangtrue}
  \DeclareOption{center}{\subcapcentertrue}
  \DeclareOption{centerlast}{\subcapcenterlasttrue}
  \DeclareOption{nooneline}{\subcapnoonelinetrue}
  \DeclareOption{isu}{\ExecuteOption{hang}}
  \DeclareOption{anne}{\ExecuteOption{centerlast}}

  \DeclareOption{scriptsize}{\renewcommand{\subcapsize}{\scriptsize}}
  \DeclareOption{footnotesize}{\renewcommand{\subcapsize}{\footnotesize}}
  \DeclareOption{small}{\renewcommand{\subcapsize}{\small}}
  \DeclareOption{normalsize}{\renewcommand{\subcapsize}{\normalsize}}
  \DeclareOption{large}{\renewcommand{\subcapsize}{\large}}
  \DeclareOption{Large}{\renewcommand{\subcapsize}{\Large}}
  \DeclareOption{up}{\renewcommand{\subcaplabelfont}{\upshape}}
  \DeclareOption{it}{\renewcommand{\subcaplabelfont}{\itshape}}
  \DeclareOption{sl}{\renewcommand{\subcaplabelfont}{\slshape}}
  \DeclareOption{sc}{\renewcommand{\subcaplabelfont}{\scshape}}
  \DeclareOption{md}{\renewcommand{\subcaplabelfont}{\mdseries}}
  \DeclareOption{bf}{\renewcommand{\subcaplabelfont}{\bfseries}}
  \DeclareOption{rm}{\renewcommand{\subcaplabelfont}{\rmfamily}}
  \DeclareOption{sf}{\renewcommand{\subcaplabelfont}{\sffamily}}
  \DeclareOption{tt}{\renewcommand{\subcaplabelfont}{\ttfamily}}

  \ExecuteOptions{normal,footnotesize}
  \ProcessOptions
\fi


%%%
%%% Define the subfigure and subtable commands
%%%
\newcommand{\subfigure}{%
  \bgroup
    % Since the table caption is usually generated later, we
    % must locally anticipate the future value of its counter.  
    \advance\csname c@\@captype\endcsname\@ne
    \refstepcounter{sub\@captype}%
    \leavevmode
    \@ifnextchar [%
      {\@subfloat{sub\@captype}}%
      {\@subfloat{sub\@captype}[\@empty]}}
\let\subtable\subfigure

%%%
%%% Define the common subfloat macro
%%%
\def\@subfloat#1[#2]#3{%
    \setbox\@tempboxa \hbox{#3}%
    \@tempdima=\wd\@tempboxa
    \vtop{%
      %% Put the top spacing and the figure in the top box
      \vbox{%
        \vskip\subfigtopskip
        \box\@tempboxa}%
      %% Now skip down and add the caption paragraph
      %%   (unless #2 == \@empty)
      \ifx \@empty#2\relax \else
        \vskip\subfigcapskip
        \@subcaption{#1}{#2}%
      \fi
      %% Finally add the bottom spacing.
      \vskip\subfigbottomskip}%
  \egroup}

\newcommand{\@subfigcaptionlist}{}

\newcommand{\@subcaption}[2]{%
  \begingroup
    \let\label\@gobble
    \def\protect{\string\string\string}%
    \xdef\@subfigcaptionlist{%
      \@subfigcaptionlist,%
      {\protect\numberline {\@currentlabel}%
       \noexpand{\ignorespaces #2}}}%
  \endgroup
  \@nameuse{@make#1caption}{\@nameuse{@the#1}}{#2}}

\newcommand{\@makesubfigurecaption}[2]{%
  \setbox\@tempboxa \hbox{%
    \subcapsize
    \ignorespaces #1%
    \ignorespaces #2}%
  \@tempdimb=-\subfigcapmargin
  \multiply\@tempdimb\tw@
  \advance\@tempdimb\@tempdima
    \hbox to\@tempdima{%
      \hfil
      \ifdim \wd\@tempboxa >\@tempdimb
        \subfig@caption{#1}{#2}%
      \else\ifsubcapnooneline
        \subfig@caption{#1}{#2}%
      \else 
        \box\@tempboxa
      \fi\fi
      \hfil}}

\let\@makesubtablecaption\@makesubfigurecaption

\newcommand{\subfig@caption}[2]{%
  \ifsubcaphang
    \sbox{\@tempboxa}{%
      \subcapsize
      \ignorespaces #1}%
    \addtolength{\@tempdimb}{-\wd\@tempboxa}%
    \usebox{\@tempboxa}%
    \subfig@captionpar{\@tempdimb}{#2}%
  \else
    \subfig@captionpar{\@tempdimb}{#1#2}%
  \fi}

\newcommand{\subfig@captionpar}[2]{%
  \parbox[t]{#1}{%
    \strut
    \ifsubcapcenter
      \setlength{\leftskip}{\@flushglue}%
      \setlength{\rightskip}{\@flushglue}%
      \setlength{\parfillskip}{\z@skip}%
    \else\ifsubcapcenterlast
      \addtolength{\leftskip}{0pt plus 1fil}%
      \addtolength{\rightskip}{0pt plus -1fil}%
      \setlength{\parfillskip}{0pt plus 2fil}%
    \fi\fi
    \subcapsize
    \ignorespaces #2}}

%%%
%%% Generalized wrapper for the \@dottedtocline macro.  This checks for
%%% the level based on the output file (#1) and not using only
%%% \@tocdepth.  
%%%
\newcommand{\@dottedxxxline}[6]{%
  \ifnum #2>\@nameuse{c@#1depth}\else
    \@dottedtocline{0}{#3}{#4}{#5}{#6}
  \fi}

%%%
%%% Finally, wrap the \@caption macro to dump any sub-captions saved
%%% after calling the standard \@caption.
%%%
\let\subfig@oldcaption\@caption

\long\def\@caption#1[#2]#3{%
  \subfig@oldcaption{#1}[{#2}]{#3}%
  \@for \@tempa:=\@subfigcaptionlist \do {%
    \ifx\@empty\@tempa\relax \else
      \addcontentsline
        {\@nameuse{ext@sub#1}}%
        {sub#1}%
        {\@tempa}%
    \fi}%
  \gdef\@subfigcaptionlist{}}
\endinput

%%% 
%%% End of file `subfigure.sty'.