summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/subfigmat/subfigmat.sty
blob: 7f873d0f5a5808cd807dbf3498c271aa62b2b2c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
% subfigmat.sty - version 1.0 <27 feb 1999>
%
% defines an array/matrix-type environment for subfigures and
% subtables of the form,
%
%  \begin{subfigmatrix}{NC}
%    \subfigure[]{..}
%     ...
%  \end{subfigmatrix}
%
% where NC is the number of subfigures per row (i.e., the
% number of columns).  the subfigures are ordered from
% left-to-right, then top-to-bottom.

% the environment is used within a float environment such as
% figure or table.  each subfigure should have a variable width
% tied to the local \linewidth value so each can be shrunk or
% expanded to accomate the requested layout.
%
% The environment does not require ``square'' matrices since it
% only works on a row-by-row basis; thus you could have a 2 x 4,
% a 1 x 3, or a 4 x 2 if you so choose.  if you neglect to give
% it a full row, such as the case of a 3 x 3 matrix with only
% 8 elements, it simply fills the rows from left to right until
% it runs out of elements.
%
% for further information, see the example and other notes after
% the \endinput in this file.
%
\ProvidesPackage{subfigmat}[1999/02/27 v1.0 Subfigure Matrix Package]
\RequirePackage{subfigure}[1995/03/06]
%
% define and initialize the internal variables:
\newlength{\sfm@width}%               Subfigure width
\newlength{\sfmcolsep}%               Subfigure column separation
\setlength{\sfmcolsep}{2\tabcolsep}%  Use twice tabular column separation
\newcounter{sfm@count}%               Item count
%
% the environment:
\newenvironment{subfigmatrix}[1]{%
  \begingroup%
  \centering%
  \vspace*{-\subfigtopskip}% remove the vertical spacing inserted
                           % by the subfigure package (version 2.0)
    %
    % Save the "real" subfigure macro and start the item counter off
    % at -1 to detect the first item.
    % Set the \sfm@width to the single element size.
    %
    \let\sfm@subfigure\subfigure%
    \setcounter{sfm@count}{-1}%
    \setlength{\sfm@width}{\linewidth}%
    \addtolength{\sfm@width}{\sfmcolsep}%
    \addtolength{\sfm@width}{-#1\sfmcolsep}%
    \divide\sfm@width by#1
    \@ifundefined{Gin@scalex}%
    \relax % we are not running graphicx!
    {\setkeys{Gin}{width=\sfm@width,keepaspectratio}}%
    %
    % Redefine the \subfigure and \subtable macros locally to this
    % environment so that we can wrap them with minipages.
    %
    \def\subfigure{%
      \ifnum \value{sfm@count} = -1
      % very first item
        \setcounter{sfm@count}{1}%
      \else% Not very first item
        \addtocounter{sfm@count}{1}%
        \ifnum \value{sfm@count} = 1
          % Beginning of next column, finish the last column.
          \\%
        \else%
          % middle or last item
          \hfill%
          \ifnum #1 = \value{sfm@count}%
            % Reset the counter of at the end of the row.
            \setcounter{sfm@count}{0}%
          \fi%
        \fi%
      \fi%
      \sfm@subfigure}%
    \let\subtable\subfigure%
  }{%
    \\%
  \endgroup}%
%
\endinput

further example:

  if you wanted to create a figure with four subfigures in a tiled
  or matrix format of 2 x 2, the following would suffice,

    \begin{figure}
      \begin{subfigmatrix}{2}
        \subfigure[]{...}
        \subfigure[]{...}
        \subfigure[]{...}
        \subfigure[]{...}
      \end{subfigmatrix}
      \caption{Example.}
      \label{f:eg}
    \end{figure}

  the result would look similar to the following,

        [subfig]     [subfig]
           (a)          (b)

        [subfig]     [subfig]
           (c)          (d)

         Figure 1: Example.

notes:

  comments, bugs, fixes can be sent to w.l.kleb@larc.nasa.gov.
  what becomes of them is another story. ;)

  each subfigure is placed within a minipage of the proper width
  to fit NC subfigures within the current float's \linewidth,
  accounting for 2\tabcolsep's worth of space between each
  adjacent subfigure.

  \linewidth is a fairly general length.  it is equal to
  \textwidth for single-column formats, \columnwidth for multiple-
  column documents (and also single-column documents), or
  according to a \parbox or minipage environment.

  if you are using the graphicx package, the subfigure widths are
  automatically set to the local \linewidth.

  the separation between figures can be changed via the
  \sfmcolsep variable, e.g.,

     \setlength{\sfmcolsep}{\hspace{0.2in}}

  to set a ``hard'' inter-column spacing as opposed to the
  default behavior of tying the inter-column spacing to the
  documents tabular column spacing (\tabcolsep}.

to do:

  transposed ordering: from top-to-bottom, then left-to-right.

history:

  25 Feb 1999  Bil Kleb <w.l.kleb@larc.nasa.gov> [v1.0]
     Edited for Arseneau-style release to ctan.
     Changed \sfm@colsep to a more user-tunable \sfmcolsep.

  27 Feb 1997  Bil Kleb <w.l.kleb@larc.nasa.gov>
     Minor changes.

  27 Feb 1997  Steven Douglas Cochran <sdc+@cs.cmu.edu>
     Created.

  24 Feb 1997  Bil Kleb <w.l.kleb@larc.nasa.gov>
     Posted question to news:comp.text.tex.

distribution:

 this program can redistributed and/or modified under the terms
 of the LaTeX Project Public License Distributed from CTAN
 archives in directory macros/latex/base/lppl.txt; either
 version 1 of the License, or (at your option) any later version.