The sidecap package

Rolf Niepraschk (niepraschk@ptb.de)  Hubert Gäßlein

v1.6f – 2003/06/06

Abstract

This package defines the new environments SCfigure and SCtable, analogous to figure and table, which make it easy to typeset captions sideways.

Additionally, a wide environment is defined; it allows to use the margin area, e. g., for figures wider than \textwidth.

1 Introduction

In some cases it may be useful to typeset the caption aside the figure or the table. For this purpose the package sidecap defines the new environments SCfigure and SCtable. The figure or the table and the caption are put into two minipages that are positioned side by side and centered as a whole. The space between the minipages is \sidecaptionsep. The correct positioning with respect to left and right pages requires at least two compilation runs.

2 Usage

\usepackage[⟨option⟩]{sidecap}
\begin{SCtable}  [⟨relwidth⟩][⟨float⟩] ...  \end{SCtable}
\begin{SCfigure} [⟨relwidth⟩][⟨float⟩] ...  \end{SCfigure}
\begin{SCtable*} [⟨relwidth⟩][⟨float⟩] ...  \end{SCtable*}
\begin{SCfigure*}[⟨relwidth⟩][⟨float⟩] ...  \end{SCfigure*}

⟨option⟩ – outercaption (default): Caption appears left on left pages and right on right pages. innercaption: Caption appears right on left pages and left on right pages. leftcaption, rightcaption: Caption is always on the left or right, respectively. wide: The floating objects may extend into the margin area.

raggedright, raggedleft, ragged: Better justification for

small captions. The ragged2e package is used if available.

⟨relwidth⟩ – optional; caption width relative to the width of the figure or table. A large value (e.g., 50) reserves the maximum width that is possible. Default is \sidecaptionrelwidth (which is initialized to 1.0).

⟨float⟩ – optional; like the floating position parameter of the original table/figure environments. Default is tbp.

3 REQUIRED PACKAGES 2

\begin{wide} ... \end{wide}

The wide environment may be used inside figure and table environments as well as in the normal text.

3 Required packages

This package requires the standard L^{A}TEX package ifthen.

4 Supported packages

This package is compatible with L^{A}TEX package hyperref (tested with version 6.71v as of 2001/11/12). If the raggedright or raggedleft or ragged package option has been given, then captions will be set with ragged margin. The ragged2e package will be used if it can be found.

5 The implementation

5.1 Register allocation and auxiliary macros

1 ⟨∗package⟩

2

 3 \RequirePackage{ifthen}

4

 5 \@ifdefinable{\SC@BOXWD}{\newdimen\SC@BOXWD}
 6 \@ifdefinable{\SC@CAPWD}{\newdimen\SC@CAPWD}
 7 % 2 noetig ???
 8 \@ifdefinable{\SC@tempdima}{\newdimen\SC@tempdima}
 9 \@ifdefinable{\SC@tempdimb}{\newdimen\SC@tempdimb}
10 \newcounter{SC@C} \newsavebox{\SC@BOX} \newcommand*{\SC@FLOAT}{}
11 \newcommand*{\SC@IDENT}{SC@\number\value{SC@C}}
12 \newcommand*\SC@label[1]{\gdef\SC@LABtext{#1}\ignorespaces}
13 \newcommand*\SC@orig@caption{} \newcommand*\SC@orig@label{}
14 \newcommand*\sidecaptionsep{} \newcommand*\SC@pageref{}
15 \edef\sidecaptionsep{\the\marginparsep}
16 \newcommand*\sidecaptionrelwidth{1.0}
17 \newcommand*\sidecaptionvpos[2]{% 2002/08/31
18 \@namedef{SC@#1@vpos}{#2}%

19 }

20

21 \newboolean{SC@wide}
22 \def\SC@widefalse{\global\let\ifSC@wide\iffalse}
23 \def\SC@widetrue {\global\let\ifSC@wide\iftrue}

24

25 % Kann man auf dieses Laengenregister verzichten? Nein! (RN) <****>

26

27 \newcommand*\SC@calcwidths[1]{%
28 \SC@tempdima#1\relax
29 \SC@BOXWD\wd\SC@BOX
30 \SC@CAPWD\SC@fraction\SC@BOXWD
31 \@tempdima\SC@BOXWD
32 \advance\@tempdima\SC@CAPWD

5 THE IMPLEMENTATION 3

33 \advance\@tempdima\sidecaptionsep
34 \ifdim\@tempdima>\SC@tempdima
35  \advance\SC@CAPWD-\@tempdima
36  \advance\SC@CAPWD\SC@tempdima
37 \fi
38 \SC@tempdimb\@tempdima

39 }

40

41 %\newcommand*{\isSC@WIDEi}[2]{#2}  %default: false
42 %\newcommand*{\isSC@WIDEii}[2]{#2} %default: false
43 \newcommand*{\isSC@WIDEi}[2]{\ifSC@wide#1\else#2\fi}  %default: false
44 \newcommand*{\isSC@WIDEii}[2]{\ifSC@wide#1\else#2\fi} %default: false

45

46 %\newcommand*{\isSC@First}[2]{#1} %default: true

47

48 \newcommand*\SC@justify{}
49 \newcommand*\SC@justify@caption{}
50 \newcommand*\SC@justify@body{}

51

52 \newboolean{SC@origRagged} \setboolean{SC@origRagged}{false} %% ???
\SC@SaveCommands
53 \newcommand*{\SC@SaveCommands}{%
54  \let\SC@orig@caption=\caption \let\SC@orig@label=\label%

55 }

56 \SC@SaveCommands % necessary? or even wrong?

5.2 Package hyperref compatibility

Note: The \pageref doesn’t work with hyperref …:-(

57 \if@twoside
58 \newcommand*{\isSC@ODD}[2]{%
59  \ifthenelse{\isodd{\SC@pageref{\SC@IDENT}}}{#1}{#2}}
60 \else
61 \newcommand*{\isSC@ODD}[2]{#1}%
62 \fi

5.3 Option processing

63 \DeclareOption{innercaption}{%
64 \renewcommand*{\SC@FLOAT}[2]{%
65  \isSC@ODD{{#1}\hspace{\sidecaptionsep}{#2}} {{#2}\hspace{\sidecaptionsep}{#1}}}
66 \renewcommand*\SC@justify@caption{%
67  \isSC@ODD{\RaggedLeft}{\RaggedRight}}

68 }

69

70 \DeclareOption{outercaption}{%
71 \renewcommand*{\SC@FLOAT}[2]{%
72  \isSC@ODD{{#2}\hspace{\sidecaptionsep}{#1}} {{#1}\hspace{\sidecaptionsep}{#2}}}
73 \renewcommand*\SC@justify@caption{%
74  \isSC@ODD{\RaggedRight}{\RaggedLeft}}

75 }

 77 \DeclareOption{rightcaption}{%
 78 \renewcommand*{\SC@FLOAT}[2]{{#2}\hspace{\sidecaptionsep}{#1}}
 79 \def\SC@justify@caption{\RaggedRight}%

80 }

81

 82 \DeclareOption{leftcaption}{%
 83 \renewcommand*{\SC@FLOAT}[2]{{#1}\hspace{\sidecaptionsep}{#2}}
 84 \def\SC@justify@caption{\RaggedLeft}%

85 }

 86 \DeclareOption{wide}{%
 87 \renewcommand*{\isSC@WIDEi}[2]{\if@twocolumn #2\else #1\fi}% ???
 88 \renewcommand*{\isSC@WIDEii}[2]{#1}}

These ‘ragged… ’ options should stay here, behind the ‘… caption’ options!

 89 \DeclareOption{raggedright}{%
 90 \def\SC@justify{\RaggedRight}}
 91 \DeclareOption{raggedleft}{%
 92 \def\SC@justify{\RaggedLeft}}
 93 \DeclareOption{ragged}{%
 94 \def\SC@justify{\SC@justify@caption}%   \let ?

95 }

 96 \DeclareOption{origragged}{\setboolean{SC@origRagged}{true}}
 97 \DeclareOption{margincaption}{%
 98 \ds@outercaption\ds@outerbody\ds@wide
 99 \let\ds@innercaption\@empty
100 \let\ds@leftcaption\@empty
101 \let\ds@rightcaption\@empty
102 \def\SC@calcwidths#1{%
103  \SC@tempdimb#1\relax
104  \SC@BOXWD\SC@tempdimb  % *-form !!! ???
105  \advance\SC@BOXWD-\marginparwidth
106  \advance\SC@BOXWD-\marginparsep
107  \SC@CAPWD\marginparwidth

108 }% 109 }

110 \DeclareOption{innerbody}{%
111 \def\SC@justify@body{%
112  \isSC@ODD{\RaggedRight}{\RaggedLeft}}

113 }

114

115 \DeclareOption{outerbody}{%
116 \def\SC@justify@body{%
117  \isSC@ODD{\RaggedLeft}{\RaggedRight}}

118 }

119

120 \DeclareOption{centerbody}{%
121 \def\SC@justify@body{\Centering}

122 }

123

124 \DeclareOption{rightbody}{%
125 \def\SC@justify@body{\RaggedLeft}%

127

128 \DeclareOption{leftbody}{%
129 \def\SC@justify@body{\RaggedRight}%

130 }

131 \ExecuteOptions{outercaption}
132 %%\InputIfFileExists{sidecap.cfg}{}{} % hier ? % 2002/06/14
133 \ProcessOptions\relax
134 \AtBeginDocument{%
135 \ifSC@origRagged\else
136  \@ifpackageloaded{ragged2e}{}%

137 {%

138  \IfFileExists{ragged2e.sty}{%
139 \RequirePackage[NewParameters]{ragged2e}}%

140 {%

141  \PackageWarningNoLine{sidecap}{%
142  Package `ragged2e' not found -- expect bad formatting}%

143 }% 144 }

145 \fi
146 \@ifundefined{RaggedRight}%

147 {%

148  \let\RaggedLeft\raggedleft
149  \let\RaggedRight\raggedright
150  \let\Centering\centering
151 }{}
152 \@ifpackageloaded{hyperref}%
153  {\let\SC@pageref=\hypergetpageref}%

154 {%

155  \@ifpackageloaded{babel}%
156  {\let\SC@pageref=\org@pageref}%
157  {\let\SC@pageref=\pageref}%

158 } 159 }

5.4 User-level macros (environments)

SCfigure Simply passes the first (optional) parameter and the required one, in this case ‘figure’, to SC@float . The figure caption should be bottom aligned.

160

161 %\newcommand*\SCfigureVpos{b}% 2002/06/14
162 \@ifdefinable\SC@figure@vpos{\def\SC@figure@vpos{b}}
163 \newenvironment{SCfigure}{\SC@float[\SC@figure@vpos]{figure}}{\endSC@float}
164 \newenvironment{SCfigure*}{\SC@dblfloat[\SC@figure@vpos]{figure}}{\endSC@dblfloat}

165

SCtable Simply passes the first (optional) parameter and the required one, in this case ‘table’, to SC@float . The table caption should be top aligned.

166

167 %\newcommand*\SCtableVpos{t}% 2002/06/14
168 \@ifdefinable\SC@table@vpos{\def\SC@table@vpos{t}}
169 \newenvironment{SCtable}{\SC@float[\SC@table@vpos]{table}}{\endSC@float}
170 \newenvironment{SCtable*}{\SC@dblfloat[\SC@table@vpos]{table}}{\endSC@dblfloat}

wide This is an environment that allows to extend the width of the text body (or of a floating environment) by using the margin space. It shouldn’t be used in twocolumn text.

172 %

173 \newenvironment{wide}%

174 {%

175 \@parboxrestore% 2002/06/14 -- SW-Arch.: wozu? 2002/08/24
176 \advance\linewidth\marginparwidth
177 \advance\linewidth\marginparsep
178 \ifx\label\SC@label
179 ⟨+debug⟩  \typeout{WIDE: inside SCfloat}%
180  \SC@widetrue
181 \else
182 ⟨+debug⟩  \typeout{WIDE: outside SCfloat}%
183  \begin{lrbox}\SC@BOX  % \begin necessary: --> \@noitemerr
184  \minipage\linewidth
185 \fi

186 }% 187 {%

188 \ifx\label\SC@label

189 ⟨+debug⟩

190 \typeout{WIDE: inside SCfloat}%
191  %\renewcommand*{\isSC@WIDEi}[2]{\if@twocolumn ##2\else ##1\fi}%
192  %\renewcommand*{\isSC@WIDEii}[2]{##1}%
193  %\let\isSC@WIDE\isSC@WIDEi
194 \else

195 ⟨+debug⟩

196 \typeout{WIDE: outside SCfloat}%
197  \endminipage
198  \end{lrbox}%  \end necessary: --> \@noitemerr
199  \global\advance\c@SC@C\@ne
200  \SC@orig@label{\SC@IDENT}% nicht \ref... !!!
201  \trivlist \item\relax
202  \isSC@ODD{\def\SC@hpos{l}}{\def\SC@hpos{r}}%

203 ⟨+debug⟩

204 \typeout{WIDE: \string\linewidth=\the\linewidth}%
205  \noindent\makebox[\textwidth][\SC@hpos]{\copy\SC@BOX}% \usebox{\SC@BOX}
206  \endtrivlist
207 \fi

208 }

209

5.5 Internal macros

5.5.1 Collecting arguments

The new internal float environment, similar/analogous to L^{A}TEX’s @float environment. Syntax: \SC@float[⟨vpos⟩]{⟨name⟩}[⟨relwidth⟩][⟨fps⟩]

• Parameter ⟨vpos⟩ (optional) is the vertical positioning of the caption.

• Parameter ⟨name⟩ (required) is the name of the ‘original’ L^{A}TEX floating environment (e.g., ‘figure’ or ‘table’).

• Parameter ⟨relwidth⟩ (optional) is the desired relative width of the caption.

• Parameter ⟨fps⟩ (optional) is the usual L^{A}TEX float positioning specifier.

The usual ‘cascading’ programming style is applied (cf. L^{A}TEX’s \@float).

\SC@float Initially, the first optional parameter is checked for.

210 \def\SC@float{\SC@SaveCommands\@ifnextchar[\SC@xfloat{\SC@xfloat[c]}}

\SC@xfloat Then the first and second parameters are consumed and the third one is checked for.

211 \def\SC@xfloat[#1]#2{\@ifnextchar[%
212 {\SC@yfloat{#1}{#2}}%
213 {\SC@zfloat{#1}{#2}{\sidecaptionrelwidth}[\@nameuse{fps@#2}]}}

\SC@yfloat Again, the fourth (and last) parameter is checked for.

214 \def\SC@yfloat#1#2[#3]{\@ifnextchar[%
215 {\SC@zfloat{#1}{#2}{#3}}%
216 {\SC@zfloat{#1}{#2}{#3}[\@nameuse{fps@#2}]}}

5.5.2 Capturing the float’s contents

\SC@zfloat Finally, here is the macro that does all the work.

217 \def\SC@zfloat#1#2#3[#4]{%
218 \def\SC@vpos{#1}%
219 \expandafter\edef\csname fps@#2\endcsname{#4}%
220 \def\SC@captype{#2}%
221 \ifx#3\@empty\def\SC@fraction{1}\else\def\SC@fraction{#3}\fi%

The \caption and \label commands must be redefined.

222 \let\SC@CAPtext\@empty \let\SC@OPTCAPtext\@empty \let\SC@LABtext\@empty%
223 \renewcommand\caption[2][]{\gdef\SC@OPTCAPtext{##1}%
224 \gdef\SC@CAPtext{##2}\ignorespaces}% \SC@justify
225 \let\label=\SC@label
226 \@namedef{fnum@#2}{\mbox{\@nameuse{#2name}~\@nameuse{the#2}}}% caption2 ?

Save the figure or table (or whatever) in a box.

227 \SC@widefalse
228 \begin{lrbox}\SC@BOX  % \begin necessary: --> \@noitemerr
229 %%% \strut

230 }%

231

\SC@dblfloat Analogous to L^{A}TEX’s \@dblfloat.
232 \def\SC@dblfloat{%
233 \SC@SaveCommands%
234 \if@twocolumn\let\reserved@a\SC@dbflt\else\let\reserved@a\SC@float\fi
235 \reserved@a}
236 \def\SC@dbflt{\SC@float}

5.5.3 Output the float’s contents

\endSC@float Outputs the figure or table (or whatever) and the caption.

237 \def\endSC@float{%
238 %%% \strut
239 \end{lrbox}%  \end necessary: --> \@noitemerr
240 ⟨+debug⟩ \typeout{onecolumn}%
241 \let\isSC@WIDE\isSC@WIDEi%
242 \def\@FLOAT{\@float}\def\end@FLOAT{\end@float}%
243 \isSC@WIDE%
244  {\@tempdima\textwidth % \columnwidth ???
245  \advance\@tempdima\marginparwidth
246  \advance\@tempdima\marginparsep}%
247  {\@tempdima\columnwidth}%
248 ⟨+debug⟩ \typeout{endSC@float: \string\@tempdima=\the\@tempdima}%
249 \endSC@FLOAT\@tempdima}%

\endSC@dblfloat Ditto for *-forms of floats.

250 \def\endSC@dblfloat{%
251 \end{lrbox}%  \end necessary: --> \@noitemerr
252 ⟨+debug⟩ \typeout{twocolumn}%
253 \let\isSC@WIDE\isSC@WIDEii%
254 \def\@FLOAT{\@dblfloat}\def\end@FLOAT{\end@dblfloat}%
255 \isSC@WIDE%
256  {\@tempdima\textwidth%
257  \advance\@tempdima\marginparwidth
258  \advance\@tempdima\marginparsep}%
259  {\@tempdima\textwidth}%

260 ⟨+debug⟩

261 \typeout{endSC@dblfloat: \string\@tempdima=\the\@tempdima}%
262 \endSC@FLOAT\@tempdima}%

\endSC@FLOAT Sets the caption width. If caption width plus figure/table width (plus separation space) is too large then the caption width is set equal to the remaining width.

263 \def\endSC@FLOAT#1{%
264 \SC@calcwidths{#1}%

\@FLOAT Calls the L^{A}TEX float command with the two minipages inside a main minipage.

265 \@FLOAT{\SC@captype}%
266  \abovecaptionskip\z@skip
267  \belowcaptionskip\z@skip

Creates a label for each figure or table (etc.) for later determination if the page is odd or even. The counter SC@C must be incremented before.

268  \global\advance\c@SC@C\@ne
269  \SC@orig@label{\SC@IDENT}% nicht \ref... !!!
\isSC@WIDE
270  \isSC@WIDE%
271  {\ifdim\SC@tempdimb>\textwidth % ???
272  \isSC@ODD{\def\SC@hpos{l}}{\def\SC@hpos{r}}%
273  \else%
274  \def\SC@hpos{c}%

275  \fi
276  \@tempdimc\textwidth}% ???
277  {\@tempdimc\SC@tempdima\def\SC@hpos{c}}%
278  \makebox[\@tempdimc][\SC@hpos]{%

\SC@FLOAT Has two parameters. The first parameter is the minipage with the caption text inside and the last parameter is the minipage with the body of the figure or table inside.

279  \SC@FLOAT%
280  {\minipage[\SC@vpos]{\SC@CAPWD}%
281  %% \nointerlineskip %\offinterlineskip%
282  %% \kern0pt\relax
283  \hrule \@height\z@\@depth\z@  %%% Testen, Doku. (Implementierung) !!!
284  %\show\SC@justify@caption
285 %%%           \tracingall\tracingonline=0
286 \SC@justify
287 \let\@arrayparboxrestore\relax % sonst Blocksatz! (\@parboxrestore)
288 \let\usecaptionmargin\relax % sonst Pseudo-Blocksatz, nicht-alternierend!
289 %    \isSC@ODD {\RaggedRight }{\RaggedLeft }
290 %%%    A B C
291 %   \isSC@ODD{\typeout{xxxxx ungerade}}{\typeout{xxxxx gerade}}%
292 %   \def\@makecaption##1##2{##1: ##2\endgraf}%
293 % \@parboxrestore
294 % \@setminipage
295 \iffalse
296 % DEBUG:
297  \endgraf
298  \@makecaption{\csname fnum@\SC@captype\endcsname}%
299  {\ignorespaces \SC@CAPtext}%
300  \endgraf
301 \else
302  % \ifthenelse{\equal{\SC@OPTCAPtext}{\@empty}}%
303  \ifx\SC@OPTCAPtext\@empty% Noetig?
304 % FM: strut needed twice for multiline captions
305  \SC@orig@caption[\SC@CAPtext]%
306  {\strut\ignorespaces\SC@CAPtext\unskip\strut}% \expandafter\protect
307  \else
308 % FM: strut needed twice for multiline captions
309 % FM: if \SC@CAPtext can contain trailing banks then we also need \unskip
310 % FM: (not checked)
311  \SC@orig@caption[\SC@OPTCAPtext]% \expandafter\protect
312  {\strut\ignorespaces\SC@CAPtext\unskip\strut}% \expandafter\protect
313  \fi
314  \unskip% ??? Dok. !!!
315  \ifx\SC@LABtext\@empty\else
316  \SC@orig@label{\SC@LABtext}\fi%  \expandafter\protect
317 \fi
318 %%%    X Y Z
319  \hrule \@height\z@\@depth\z@
320  \endminipage}%
321  {\minipage[\SC@vpos]{\SC@BOXWD}%
322  %% \nointerlineskip %\offinterlineskip%
323  %% \kern0pt\relax

Change History 10

324  \hrule \@height\z@\@depth\z@
325  \SC@justify@body
326  \unhbox\SC@BOX % \strut \unhbox/\usebox{\SC@BOX}%  TESTEN!
327  % \kern0pt\relax
328  \hrule \@height\z@\@depth\z@
329  \endminipage}%

330 }%

331 \end@FLOAT%

332 }

333 \InputIfFileExists{sidecap.cfg}{}{} % hier ? % 2002/06/14

334 ⟨/package⟩

Change History

v1.0 (RN)

General: New . . . . . . . . . . . . . . . 1 v1.1 (RN/HjG)

General: First public version …. 1 v1.2 (HjG)

General: Proposal for amendments 1 v1.3 (RN/HjG)

General: Unsuccessful attempt to

make star-forms work . . . . . . . 1 v1.4c (HjG)

General: Successful (?) attempt to make star-forms work, plus some amendments . . . . . . . . . . 1

v1.4d (RN)

General: New (LPPL) license …. 1 v1.5a (RN)

General: New Option and environment ‘wide’; some small changes . . . . . . . . . . . . . . . . . 4

v1.5b (RN)

General: New Option ‘raggedright’ as suggested by James Kilfiger (mailto:mapdn@csv.warwick.ac.uk) . . . . . . . . . . . . . . . . . . . . . . . . 4

v1.5d (RN/HjG)

General: Compatibility with ‘hyperref’, thanks to Heiko Oberdiek . . . . . . . . . . . . . . . . 3 Slight amendments to documentation. . . . . . . . . . . . . . . . . . . 1

v1.5e (RN)

\SC@SaveCommands: \SC@AtFirstCall:

Saves the old meaning of

\caption and \label at first

call of some SC macros (compatibility with ‘hyperref’). . . . . 3

v1.5f (RN)

General: New option ‘raggedleft’ . . 4 v1.5g (RN)

General: New option ‘ragged’ …. 4 v1.5h (RN/HjG)

General: Environment wide does the right thing now outside SCfloat environments. . . . . . . . 1 Improved compatibility with package hyperref. . . . . . . . . . . 1

\SC@SaveCommands:  Renamed

\SC@AtFirstCall 3 v1.6 (RN)

General: “Smart” loading of package ragged2e. More simple code for hyperref compatibilty

(\hypergetpageref). . . . . . . . . 5

v1.6 (RN/HjG)

General: New option ‘margincaption’ added. . . . . . . . . . . . . . . 4 Oneside mode had been forgotten ;-) . . . . . . . . . . . . . . . . . . . . . 3

v1.6d (RN/HjG)

General: Simplify internal calculations using primitive operators where possible and useful, saving tokens (suggested by Frank Mittelbach. . . . . . . . . . . . . . . . 1

v1.6f (RN/HjG)

General: Test for presence of package babel (\org@pageref). . . . . 5

Index 11

Index

Numbers written in italic refer to the page where the corresponding entry is described, the ones \underline{underlined} to the definition, the rest to the places where the entry is used.

Symbols

\@FLOAT 242, 254, 265, \underline{265}

\@arrayparboxrestore

. . . . . . . . . . . 287

\@dblfloat . . . . . . . 254

\@depth 283, 319, 324, 328 \@empty 99–101, 221,

222, 302, 303, 315 \@float . . . . . . . . . . 242 \@height . . . . . . . . .

. 283, 319, 324, 328

\@ifdefinable . . . . .

5, 6, 8, 9, 162, 168

\@ifnextchar . . . . . .

…. 210, 211, 214

\@ifpackageloaded .

…. 136, 152, 155

\@ifundefined . . . . . 146
\@makecaption . 292, 298

\@namedef . . . . . 18, 226 \@nameuse . 213, 216, 226 \@ne . . . . . . . . . 199, 268

\@noitemerr . . . 183,

198, 228, 239, 251

\@parboxrestore . . .

…. 175, 287, 293

\@setminipage . . . . . 294
\@tempdima . . . . 31–

35, 38, 244–249, 256–259, 261, 262

\@tempdimc . . . 276–278

A

\abovecaptionskip . 266

\advance 32, 33, 35, 36, 105, 106, 176, 177, 199, 245, 246, 257, 258, 268

\AtBeginDocument . . 134

B

\begin . . . . . . . 183, 228

\belowcaptionskip . 267

C

\c@SC@C . . . . . . 199, 268 \caption . . . . . . 54, 223

\Centering . . . 121, 150

                          \centering . . . . . . . 150
                          \columnwidth . . 244, 247

\copy . . . . . . . . . . . . 205 \csname . . . . . . 219, 298

D

                          \DeclareOption . . . .

… 63, 70, 77, 82, 86, 89, 91, 93, 96, 97, 110, 115, 120, 124, 128

\def 22, 23, 79, 84, 90, 92, 94, 102, 111, 116, 121, 125, 129, 162, 168, 202, 210, 211, 214, 217, 218, 220, 221, 232, 236, 237, 242, 250, 254, 263, 272, 274, 277, 292

                          \ds@innercaption . . 99
                          \ds@leftcaption . . . 100
                          \ds@outerbody . . . . . 98
                          \ds@outercaption . . 98
                          \ds@rightcaption . . 101

\ds@wide . . . . . . . . . 98

E \edef . . . . . . . . . 15, 219 \else . 43, 44, 60, 87,

135, 181, 191, 194, 221, 234, 273, 301, 307, 315

\end . . . . . . 198, 239, 251

                          \end@dblfloat . . . . . 254

\end@FLOAT 242, 254, 331

                          \end@float . . . . . . . 242
                          \endcsname . . . 219, 298

\endgraf . . 292, 297, 300

                          \endminipage . . . . . .

…. 197, 320, 329

                          \endSC@dblfloat . . .

…. 164, 170, \underline{250}

                          \endSC@FLOAT . . . . . .

…. 249, 262, \underline{263}

                          \endSC@float . . . . . .

…. 163, 169, \underline{237}

                                                   \endtrivlist . . . . . . 206

environments:

SCfigure . . . . . . \underline{160} SCtable . . . . . . . \underline{166} wide . . . . . . . . . . \underline{172} \equal . . . . . . . . . . . 302

                                                   \ExecuteOptions . . . 131
                                                   \expandafter . . 219,

306, 311, 312, 316

F \fi 37, 43, 44, 62, 87,

145, 185, 191, 207, 221, 234, 275, 313, 316, 317

G \gdef . . . . . 12, 223, 224 \global . 22, 23, 199, 268

H \hrule 283, 319, 324, 328 \hspace . . 65, 72, 78, 83

                                                   \hypergetpageref . . 153

I

                                                   \if@twocolumn . . . . .

. . . . . 87, 191, 234

                                                   \if@twoside . . . . . . . 57

\ifdim . . . . . . . . 34, 271 \iffalse . . . . . . 22, 295

                                                   \IfFileExists . . . . . 138
                                                   \ifSC@origRagged . . 135

\ifSC@wide 22, 23, 43, 44

                                                   \ifthenelse . . . . 59, 302

\iftrue . . . . . . . . . . 23 \ifx . . . . . . . . . 178,

188, 221, 303, 315

                                                   \ignorespaces . . 12,

224, 299, 306, 312

                                                   \InputIfFileExists .

. . . . . . . . 132, 333 \isodd . . . . . . . . . . . 59

                                                   \isSC@First . . . . . . . 46
                                                   \isSC@ODD . . . . . . . .

. 58, 61, 65, 67, 72, 74, 112, 117, 202, 272, 289, 291

\isSC@WIDE . . . . . . .

. 193, 241, 243, 253, 255, 270, \underline{270}

\isSC@WIDEi . . . . 41,

43, 87, 191, 193, 241

\isSC@WIDEii . . . . . .

42, 44, 88, 192, 253 \item . . . . . . . . . . . . 201

K

\kern . . . . . 282, 323, 327

L

\label . 54, 178, 188, 225 \let . . . . . . . . 22, 23,

54, 94, 99–101, 148–150, 153, 156, 157, 193, 222, 225, 234, 241, 253, 287, 288

\linewidth . . . . . . .

. 176, 177, 184, 204

M

\makebox . . . . . 205, 278

\marginparsep . . 15,

106, 177, 246, 258

\marginparwidth 105,

107, 176, 245, 257 \mbox . . . . . . . . . . . . 226 \minipage . 184, 280, 321

N

\newboolean . . . . . 21, 52
\newcommand . . 10–14,

16, 17, 27, 41– 44, 46, 48–50, 53, 58, 61, 161, 167

\newcounter . . . . . . . 10

\newdimen …. 5, 6, 8, 9

\newenvironment 163,

164, 169, 170, 173

\newsavebox . . . . . . . 10

\noindent . . . . . . . . 205

\nointerlineskip . .

. . . . . . . . 281, 322 \number . . . . . . . . . . 11

O

\offinterlineskip .

. . . . . . . . 281, 322

\org@pageref . . . . . . 156

P

\PackageWarningNoLine

. . . . . . . . . . . 141 \pageref . . . . . . . . . 157

\ProcessOptions . . . 133

\protect . . . . . . . . .

. 306, 311, 312, 316

R

\RaggedLeft . . . . 67,

74, 84, 92, 112, 117, 125, 148, 289

\raggedleft . . . . . . . 148
\RaggedRight . . . 67,

74, 79, 90, 112, 117, 129, 149, 289

\raggedright . . . . . . 149

\ref . . . . . . . . . 200, 269 \relax . . . . . 28, 103,

133, 201, 282, 287, 288, 323, 327

\renewcommand 64, 66,

71, 73, 78, 83, 87, 88, 191, 192, 223

\RequirePackage . 3, 139
\reserved@a . . . 234, 235

S

\SC@BOX . . . . . 10, 29,

183, 205, 228, 326

\SC@BOXWD . . . . . . 5,

29–31, 104–106, 321

\SC@calcwidths . . . .

. . . . . 27, 102, 264

\SC@CAPtext . . . . . . .

. 222, 224, 299, 305, 306, 309, 312

\SC@captype 220, 265, 298
\SC@CAPWD . . . 6, 30,

32, 35, 36, 107, 280 \SC@dbflt …. 234, 236

\SC@dblfloat . . . . . .

…. 164, 170, \underline{232}

\SC@figure@vpos 162–164
\SC@FLOAT . . . 10, 64,

71, 78, 83, 279, \underline{279}

\SC@float . . . . 163,

169, \underline{210}, 234, 236

\SC@fraction . . . 30, 221

\SC@hpos . . 202, 205,

272, 274, 277, 278 \SC@IDENT 11, 59, 200, 269

\SC@justify . . . . 48,

90, 92, 94, 224, 286

\SC@justify@body . .

. . 50, 111, 116, 121, 125, 129, 325

\SC@justify@caption

. . . . . . 49, 66, 73, 79, 84, 94, 284

\SC@label . . . . . . . .

. 12, 178, 188, 225

\SC@LABtext . . . . . . .

. 12, 222, 315, 316

\SC@OPTCAPtext 222,

223, 302, 303, 311

\SC@orig@caption . .

. . 13, 54, 305, 311

\SC@orig@label . . . .

13, 54, 200, 269, 316

\SC@pageref . . . . . . .

14, 59, 153, 156, 157

\SC@SaveCommands . .

. . \underline{53}, 56, 210, 233

\SC@table@vpos 168–170
\SC@tempdima . . . . . .

. 8, 28, 34, 36, 277

\SC@tempdimb . . . . . .

9, 38, 103, 104, 271 \SC@vpos . . 218, 280, 321

\SC@widefalse . . 22, 227
\SC@widetrue . . . 23, 180
\SC@xfloat . . . 210, \underline{211}
\SC@yfloat . . . 212, \underline{214}
\SC@zfloat . . . . . . .

. 213, 215, 216, \underline{217} SCfigure (environ-

ment) . . . . . . \underline{160}

\SCfigureVpos . . . . . 161

SCtable (environment) \underline{166}

\SCtableVpos . . . . . . 167
\setboolean . . . . . 52, 96

\show . . . . . . . . . . . . 284

\sidecaptionrelwidth

. . . . . . . . 16, 213

\sidecaptionsep . . .

. . . . . . 14, 15, 33, 65, 72, 78, 83

\sidecaptionvpos . . 17

\string … 204, 248, 261 \strut . . . . . . . 229,

238, 306, 312, 326

T

\textwidth 205, 244,

256, 259, 271, 276 \the … 15, 204, 248, 261

\tracingall . . . . . . . 285
\tracingonline . . . . 285

\trivlist . . . . . . . . 201 \typeout 179, 182, 190,

196, 204, 240, 248, 252, 261, 291

U

\unhbox . . . . . . . . . . 326 \unskip 306, 309, 312, 314 \usebox . . . . . . 205, 326

\usecaptionmargin . 288

V

\value . . . . . . . . . . . 11

W

\wd . . . . . . . . . . . . . 29 wide (environment) . . \underline{172}

Z

\z@ . . 283, 319, 324, 328 \z@skip . . . . . . 266, 267