The showkeys package^{∗}

David Carlisle

1997/06/12

1 Introduction

sec:intro
showkeys.sty modifies the \label, \ref, \pageref, \cite, and \bibitem com-

mands so that the ‘internal’ key is printed. The package tries hard to position these labels so that the formatting of the rest of the document is unchanged. \label and \bibitem cause the key to appear in a box either in the margin, or in a TEX box of zero width, which may possibly over-print other text. The \ref, \pageref and \cite commands print their arguments in small type, raised just above the line, like this: ^{\underline{sec:intro}} 1. This package works with the fleqn option, the packages in the AMS-L^{A}TEX collection, and the varioref, natbib and harvard packages.

2 Package Options

options

Some people have commented that the printing of the \ref and \cite keys is less useful than the printing of the \label keys and so showkeys now supports two options that can be given in the \usepackage command:

notref to stop the redefinition of \ref and \pageref, and related commands from the varioref package.

notcite to stop the redefinition of \cite and related commands from the harvard and natbib packages.

So if the package is loaded with \usepackage[notref]{showkeys} then \ref will have its standard definition, but \label will print its key argument (usually in the margin).

If you find the printed keys distracting, but don’t want to use the above options to stop them altogether you may use:

color Print the keys in a distinguishing colour. The default value is a light grey.

∗This file has version number v3.12, last revised 1997/06/12.

The colours may be changed by redefining the following two colours after the package is loaded. refkey (also used for \cite) and labelkey (also used for \bibitem). The defaults are:

  \definecolor{refkey}{gray}{.75}
  \definecolor{labelkey}{gray}{.75}

If this option is used the color package will be loaded.

The package accepts two further options.

final to supress the action of this package, for ‘final’ versions.

draft the normal behaviour of this package.

Clearly there is not much point in entering the final option directly in the \usepackage command, as just not loading this package would have the same effect, and execute more quickly, however the final option may be useful as it may be used once in the documentclass command to affect any number of packages that may be loaded. The draft option does not do anything, but is there to honour an informal convention that packages have these options in pairs.

3 More Examples

examples

The only other similar package that I could find in the macro index, ^{\underline{DMJ:mi}} [3], was showlabels.sty, ^{\underline{GN:sl}} [1]. After the first draft of this package was written, I found ^{\underline{anon:sk}} [2] on my local installation! I think the current package is more robust than ^{\underline{anon:sk}} [2], but I thought that showkeys was rather a good name, so I have stolen it for this file.

e^1 1. This has \label immediately after \item.

2. This has the \label at the end.

e^2

A minipage :- Within environments like this minipage, We can not use \marginpar^{1}, so the appearance is slightly different. Here is that enumerate environment again:

m&e^1 1. This has \label immediately after \item.

2. This has the \label at the end.

              m&e^2

Displayed math (without equation counter).

                                0 = 0 disp

Some text refering to the maths on page ^{\underline{disp}} 2, and the item ^{\underline{e^1}} 1.

If showkeys thinks that the current environment is going to produce an “equation number”, then it does not show the label where the \label command occurs, but tries to put it in the margin, as shown with equation ^{\underline{eq:xx}} 1. The package ‘knows’ about the standard equation and eqnarray environments, and also all the numbered alignment environments offered by the AMSL^{A}TEX package, amsmath.

1Actually \marginpar is not used at all in this package now.

1 = 1  (1) eq:xx

                              2 = 2  (2) eqnar:a

3 = 3

                              4 = 4  (3) eqnar:b

Within a figure environment, the \label must not come before the \caption command. If you place \label inside the argument of \caption the label will be shown like this:

Figure 1: Within the caption argument. cap:a

If you place \label immediately after the \caption command it will be shown like this:

Figure 2: Immediately after the caption argument.  cap:b

If you place the \label command at some random point after the \caption command, it may be shown like:

Figure 3: In vertical mode not immediately after a box.

cap:c

References

GN:sl [1] Gil Neiger, showlabels.sty, Undated package, similar to this one, but shows labels inline, affecting the formating of the document.

anon:sk [2] Annonymous, showkeys.sty, Package, dated 14 May 1988. Very similar to this one, also uses \marginpar in outer vertical mode.

DMJ:mi [3] David M. Jones, TEX Macro Index, A catalogue of TEX macros, including L^{A}TEX packages, available from all good TEX archives.

4 The Macros

1 ⟨∗package⟩

First we handle the options. Normally all related comands are defined to show their ‘keys’. But since v3.03 one can specify:

notref to stop the redefinition of \ref (and \pageref, and related commands from varioref package)

notcite to stop the redefinition of \cite and related commands from the harvard and natbib packages.

 2 \DeclareOption{notref}{\let\SK@ref\@empty}
 3 \DeclareOption{notcite}{\let\SK@cite\@empty}

\SK@refcolor \SK@labelcolor Colour commands. Normally no-op.

 4 \let\SK@refcolor\relax
 5 \let\SK@labelcolor\relax

color option loads the color package and defines the colours. Delayed to the end of the package as package loading not allowed in this option section.

 6 \DeclareOption{color}{\AtEndOfPackage{%
 7 \RequirePackage{color}%
 8 \definecolor{refkey}{gray}{.75}%
 9 \definecolor{labelkey}{gray}{.75}%
10 \def\SK@refcolor{\color{refkey}}%
11 \def\SK@labelcolor{\color{labelkey}}}}

Allow final to be specified in the document class options to supress the loading of this package.

12 \DeclareOption{final}{\endinput}
13 \DeclareOption{draft}{}
14 \ProcessOptions
\SK@label \SK@bibitem \SK@lbibitem The saved original definitions
15 \let\SK@label\label
16 \let\SK@bibitem\@bibitem
17 \let\SK@lbibitem\@lbibitem

\label The new definition, print the argument, and then do the old definition.

18 \def\label#1{%
19 \@bsphack
20 \SK@\SK@@label{#1}%
21 \begingroup
22  \SK@label{#1}%
23 \endgroup
24 \@esphack}

\@bibitem \@lbibitem For \bibitem, position the showkeys code as for a standard list with \item and

\label.
25 \def\@bibitem#1{%
26 \SK@bibitem{#1}\SK@\SK@@label{#1}\ignorespaces}
27 \def\@lbibitem[#1]#2{%
28 \SK@lbibitem[#1]{#2}\SK@\SK@@label{#2}\ignorespaces}

\SK@ Grab hold of #2 via \meaning so characters like & and ^do not cause problems later, and pass the result on to the command #1.

29 \def\SK@#1#2{%
30 \protected@edef\@tempa{#2}%
31 \expandafter#1\meaning\@tempa\SK@}

\SK@@label Strip off the initial segment of the \meaning output, and then put the rest either in a \marginpar or in a box of size 0pt, hopefully not disturbing the surrounding text.

32 \def\SK@@label#1>#2\SK@{%

Need to work globally as in some cases like alignments, and fleqn, the counter will be printed in a different group to the \label command.

33 \gdef\SK@lab{\smash{\SK@labelcolor\fbox{%
34  \normalfont\small\ttfamily#2}}}%
35 \ifvmode
36  \if@inlabel

If the \label is straight after \item (\bibitem is handled by this case as well) then the item label has not been added to the page yet. It is hanging around in the box \@labels waiting for the paragraph to start. So just need to attatch the label to this box.

37  \global\setbox\@labels\hbox{%
38  \llap{\SK@lab\SK@lab@relax
39  \kern\@totalleftmargin\kern\marginparsep}%
40  \box\@labels}%
41  \else

If we insert a box into the main vertical list, do not want to change \prevdepth as that would afect vertical spacing in the document. (The box itself should not cause any difference in break points as there is a node there anyway coming from the \write to the aux file.

42  \dimen@\prevdepth
43  \nointerlineskip

The inner vertical mode cases are mainly designed to do the right thing with float captions, but seem to work OK in other cases as well.

44  \ifinner
45  \skip@\lastskip\unskip

In inner vertical mode, attach the label to the right of the immediately preceding box, if it is a box before the current point. Otherwise just put it in a box of zero dimensions, with no interline skip. (This may slightly move the surrounding text (but perhaps not now that \prevdepth is restored.)

46  \advance\skip@\lastskip\unskip
47  \setbox\z@\lastbox
48  \ifvoid\z@
49  \llap{\SK@lab\SK@lab@relax\kern\marginparsep}%
50  \else
51  \hbox{\box\z@\kern\marginparsep\SK@labx}%
52  \fi
53  \vskip\skip@
54  \else

In outer vertical mode, previously used a \vadjust at the start of the next paragraph (and before that used \marginpar). These methods sometimes cause extra space, eg if paragraph starts with a math display, so now just insert the box directly, taking care not to change \prevdepth.

55  \llap{\SK@lab\SK@lab@relax\kern\marginparsep}%
56  \fi
Restore \prevdepth.
57  \prevdepth\dimen@
58  \fi
59 \else

If we are in an numbered equation-style environment, do nothing as the code to print the number will also print the label, otherwise just stick the label at the current point, in a box of zero dimensions.

60  \csname SK@\@currenvir\endcsname
61  \ifSK@equation\else
62  \ifmmode
63  \SK@labx
64  \else

Inner horizontal mode. Not much we can do, just stick it here.

65  \ifinner
66  \rlap\SK@lab
67  \else

In outer horizontal mode use \vadjust to get to the margin.

68  \vadjust{\llap{\SK@lab\kern\marginparsep}}%
69  \fi
70  \SK@lab@relax
71  \fi
72  \fi
73 \fi}

\iftagsleft@ Make sure that this AMSL^{A}TEX command really is an \if..

74 \AtBeginDocument{%
75 \let\SK@eqnnum\@eqnnum
76 \def\@tempa{\let\iftagsleft@\iffalse}%
77 \ifx\iftagsleft@\undefined\@tempa\fi%

\tag@form@ \eqnnum Perhaps if leqno is operative, I should define \@eqnnum with the ‘left’ version, but it does not really matter.

78 \let\SK@tagform@\tagform@
79 \iftagsleft@
80  \def\tagform@#1{%
81  \ifx\df@label\@empty
82  \SK@lab@relax
83  \else
84  \expandafter\SK@@label\meaning\df@label\SK@
85  \fi

 86  \llap{\SK@lab\kern\marginparsep}%
 87  \SK@lab@relax\SK@tagform@{#1}}%
 88  \def\@eqnnum{%
 89  \llap{\SK@lab\kern\displaywidth\kern\marginparsep}%
 90  \SK@lab@relax\SK@eqnnum}%
 91 \else
 92  \def\tagform@#1{%
 93  \ifx\df@label\@empty
 94  \SK@lab@relax
 95  \else
 96  \expandafter\SK@@label\meaning\df@label\SK@
 97  \fi
 98  \SK@tagform@{#1}%
 99  \rlap{\kern\marginparsep\SK@lab}\SK@lab@relax}%
100  \def\@eqnnum{\SK@eqnnum\rlap{\kern\marginparsep\SK@lab}%
101  \SK@lab@relax}%
102 \fi}

\SK@labx Print the label, and then globally reset the print command to \relax.

103 \def\SK@labx{\rlap\SK@lab\global\let\SK@lab\relax}

\SK@lab@relax Clear the label.

104 \def\SK@lab@relax{\global\let\SK@lab\relax}\SK@lab@relax

\SK@equation \SK@eqnarray The following environments print an equation number, so \label should not print its argument at the point where it appears. Note this will fail to show the label if you are in an eqnarray environment, and use \label together with \nonumber This might just about make sense if you are going to use \pageref, but that is too bad…

105 \newif\ifSK@equation
106 \let\SK@equation\SK@equationtrue
107 \let\SK@eqnarray\SK@equationtrue

\eqnarray When the AMS packages are loaded showkeys assumes environments work ‘The AMS way’ However eqnarray (unlike equation) is not redefined, so here we need to remove some of the AMS hacks.

108 \toks@\expandafter{\eqnarray}
109 \edef\eqnarray{\let\noexpand\tagform@\noexpand\SK@tagform@\the\toks@}
\SK@align \SK@alignat \SK@xalignat \SK@xxalignat \SK@gather \SK@multline \SK@flalign The AMS environments
110 \let\SK@align\SK@equationtrue
111 \let\SK@alignat\SK@equationtrue
112 \let\SK@xalignat\SK@equationtrue
113 \let\SK@xxalignat\SK@equationtrue
114 \let\SK@gather\SK@equationtrue
115 \let\SK@multline\SK@equationtrue
116 \let\SK@flalign\SK@equationtrue

\SK@def This macro redefines a command #1. The new definition can make use of the old definition as \SK@old name. If #1 is really a \protect’ed command with the real definition in a ‘space’ command then the ‘space’ version is used as the old definition. Need to test this for each command as some package may have changed the status of a command to being ‘protected’. The new definition is made as if with \DeclareRobustCommand, but with \def syntax for the argument specification.

117 \def\SK@def#1{%
118 \edef\@tempa{\expandafter\@gobble\string#1}%
119 \@ifundefined{\@tempa\space}%
120  {\expandafter\let\csname SK@\@tempa\endcsname#1}%
121  {\expandafter\let\csname SK@\@tempa\expandafter\endcsname
122  \csname\@tempa\space\endcsname}%
123 \expandafter\def\expandafter#1\expandafter{%
124  \expandafter\protect\csname\@tempa\space\endcsname}%
125 \expandafter\def\csname\@tempa\space\endcsname}

The next section redefines \ref and \pageref (unless the notref option was given).

126 \ifx\SK@ref\@empty

Even if notref option is used, need to fudge the varioref commands as they use \label internally.

127 \AtBeginDocument{%
128 \ifx\vpageref\@undefined\else
129  \SK@def\@@vpageref#1[#2]#3{{%
130  \let\label\SK@label
131  \SK@@@vpageref#1[#2]{#3}}}%
132  \DeclareRobustCommand\vref[1]{%
133  \unskip~\ref{#1}%
134  {\let\label\SK@label
135  \SK@@@vpageref\unskip[\unskip\space]{#1}}}%
136 \fi}
137 \else

\ref \pageref Save the redefinition to \begin{document} so that this package can work with packages that redefine \cite. Tested with harvard and natbib packages. Also add code at this point to support varioref.

138 \AtBeginDocument{%
139 \SK@def\ref#1{\SK@\SK@@ref{#1}\SK@ref{#1}}%
140 \SK@def\pageref#1{\SK@\SK@@ref{#1}\SK@pageref{#1}}%
141 \ifx\vpageref\@undefined\else

varioref support.

142  \SK@def\@@vpageref#1[#2]#3{{%
143  \let\label\SK@label\let\ref\SK@ref\let\pageref\SK@pageref
144  \leavevmode\unskip\SK@\SK@@ref{#3}\SK@@@vpageref#1[#2]{#3}}}%
145  \DeclareRobustCommand\vref[1]{%
146  \unskip~\ref{#1}%
147  {\let\label\SK@label\let\ref\SK@ref\let\pageref\SK@pageref

148  \SK@@@vpageref\unskip[\unskip\space]{#1}}}%
149 \fi}
150 \fi

Now redefine \cite unless notcite option given.

151 \ifx\SK@cite\@empty
152 \AtBeginDocument{%
153 \ifx\HAR@checkdef\@undefined\else
154  \expandafter\let\expandafter
155  \SK@HAR@bi\csname\string\harvarditem\endcsname
156  \expandafter\def\csname\string\harvarditem\endcsname[#1]#2#3#4{%
157  \SK@HAR@bi[#1]{#2}{#3}{#4}\SK@\SK@@label{#4}}%
158 \fi}
159 \else
\cite
160 \AtBeginDocument{%
161 \ifx\HAR@checkdef\@undefined

Standard (non-harvard) support, including extra cite commands from natbib and cite.

If cite or overcite is being used, redefine \citen rather than \cite so as not to spoil the space and punctuation calculations done by those packages.

162  \ifx\citen\@undefined
163  \SK@def\cite#1#{\SK@citea{#1}}%
164  \else
165  \SK@def\citen#1{\SK@\SK@@ref{#1}\SK@citen{#1}}%
166  \fi
167  \SK@def\citeauthor#1{\SK@\SK@@ref{#1}\SK@citeauthor{#1}}%
168  \SK@def\citefullauthor#1{\SK@\SK@@ref{#1}\SK@citefullauthor{#1}}%
169  \SK@def\citeyear#1{\SK@\SK@@ref{#1}\SK@citeyear{#1}}%
170 \else

In the harvard style do not redefine individual cite commands. Just redefine one internal command that is used in all the citation forms.

171  \SK@def\HAR@checkdef#1#2{%
172  \expandafter\SK@\expandafter\SK@@ref\expandafter{#1}%
173  \SK@HAR@checkdef{#1}{#2}}%
174  \expandafter\let\expandafter
175  \SK@HAR@bi\csname\string\harvarditem\endcsname
176  \expandafter\def\csname\string\harvarditem\endcsname[#1]#2#3#4{%
177  \SK@HAR@bi[#1]{#2}{#3}{#4}\SK@\SK@@label{#4}}%
178 \fi}
179 \def\SK@citea#1#2{%
180 \SK@\SK@@ref{#2}\SK@cite#1{#2}}
181 \fi

\SK@@ref This is much simpler than the printing of the label, as we know that we can be in horizontal mode.

182 \def\SK@@ref#1>#2\SK@{%
183 \leavevmode\vbox to\z@{%
184  \vss
185  \SK@refcolor
186  \rlap{\vrule\raise .75em%
187  \hbox{\underbar{\normalfont\footnotesize\ttfamily#2}}}}}

188 ⟨/package⟩

Change History

v1.01

General: Initial version . . . . . . . . 1 v1.02

General: Fix incorrect initialisation (FGBDA19@CC1.KULEUVEN.AC.BE) . . . . . . . . . . . . . . . . . . . . . . . . 1

\SK@lab@relax: Execute to ini-

tialise correctly . . . . . . . . . . . . 7 v2.00

General: \eset@font is now standard . . . . . . . . . . . . . . . . . . . . 4 leqno or ams* may now be loaded after showkeys . . . . . . . . . . 1, 3 new version for LaTeX2e . . . . . 1

\iftagsleft@: Defer tests to begin

document . . . . . . . . . . . . . . . . 6 v2.01

General: Fix \ProvidesPackage us-

age. . . . . . . . . . . . . . . . . . . . . 1 v3.00

General: Support harvard, varioref

and natbib packages, . . . . . . . . 1 \cite: Delay \cite redefinition… 9 \pageref: Delay \ref redefinition. 8 \SK@@label: Back up over a pre-

vious skip because of the new

   \belowcaptionskip . . . . . . . . 5

v3.01

\cite: Add \citefullauthor . . . . 9

v3.02 \@lbibitem: New label code. . . . . 4 General: Support new AMS files . . 1

\SK@@label: Add \ifmmode test . . 6

New code for ‘in label’ case. … 5 Use \vadjust in horizontal mode . . . . . . . . . . . . . . . . . . . 6 Use \vadjust instead of \marginpar . . . . . . . . . . . . . . 6

                                       \SK@flalign: Add \SK@flalign . . 7

\tag@form@: Support new AMS

files . . . . . . . . . . . . . . . . . . . . 6 v3.03

General: Add option handling. … 4 \cite: Make redefinition condi-

tional on notcite option . . . . . . 9 \pageref: Make redefinition condi-

tional on notref option . . . . . . 8 \SK@@label: Fix inner horizontal

mode case (broken in 3.02) … 6 v3.04

General: final and draft options handling. . . . . . . . . . . . . . . . . 4 improve varioref support in notref option case, for tools/1744 . . . . . . . . . . . . . . . 8

                                       \SK@@label: \advance added, to to-

tal two successive skips. . . . . . . 5

                                         \marginparskip added in inner

vmode case . . . . . . . . . . . . . . . 5

                                         \nointerlineskip called before

\ifvoid test, not just void case 5 v3.05

\SK@def: Macro added . . . . . . . . . 8 v3.06

General: Fix \harvarditem sup-

port . . . . . . . . . . . . . . . . . . . . 9

                                       \cite: Fix \harvarditem support . 9

v3.07

   \SK@: use \protected@edef for

tools/2147 . . . . . . . . . . . . . . . 4 v3.08

\eqnnum: Missing percent added.

/2215 . . . . . . . . . . . . . . . . . . . 7 v3.09

\eqnarray: Fix eqnarray AMS in-

compatibility. tools/2252 . . . . . 7 \label: Add extra group so brace hack works. Donald Arseneau tools/2147 . . . . . . . . . . . . . . . 4 v3.10

\SK@@label: Inner vertical mode case, put it in the margin. . . . . 5 Insert the box directly . . . . . . . 6 Save prevdepth and restore later 5

v3.11

General: Colour support added, in-

spired by tools/2297 . . . . . . . . 4 v3.12

\cite: Support cite package. tools/2490 . . . . . . . . . . . . . . . 9

Index

Numbers written in italic refer to the page where the corresponding entry is described, the ones underlined to the code line of the definition, the rest to the code lines where the entry is used.

Symbols

\@@vpageref . . . 129, 142

\@bibitem . . . . . . 16, \underline{25} \@bsphack . . . . . . . . 19

\@currenvir . . . . . . . 60

\@empty . . . . . . . . 2,

3, 81, 93, 126, 151 \@eqnnum … 75, 88, 100 \@esphack . . . . . . . . 24 \@gobble . . . . . . . . . 118

\@ifundefined . . . . . 119

\@labels . . . . . . . 37, 40

\@lbibitem . . . . . 17, \underline{25}

\@tempa 30, 31, 76, 77,

118–122, 124, 125

\@totalleftmargin . 39
\@undefined . . . 128,

141, 153, 161, 162

A

\advance . . . . . . . . . 46

\AtBeginDocument 74,

127, 138, 152, 160

\AtEndOfPackage . . . . 6

B

\begingroup . . . . . . . 21

\box . . . . . . . . . . . 40, 51

C \cite . . . . . . . . . . . . \underline{160}

                          \citeauthor . . . . . . . 167
                          \citefullauthor . . . 168

\citen . . . . . . . 162, 165 \citeyear . . . . . . . . 169 \color . . . . . . . . . 10, 11 \csname … 60, 120–

122, 124, 125, 155, 156, 175, 176

D

                          \DeclareOption . . . .

…. 2, 3, 6, 12, 13

                          \DeclareRobustCommand

. . . . . . . . 132, 145 \def . . . . . 10, 11, 18,

25, 27, 29, 32, 76, 80, 88, 92, 100, 103, 104, 117, 123, 125, 156, 176, 179, 182

                          \definecolor . . . . . 8, 9

\df@label 81, 84, 93, 96 \dimen@ . . . . . . . . 42, 57

                          \displaywidth . . . . . 89

E \edef . . . . . . . . 109, 118 \else . . . . . . . 41, 50,

54, 59, 61, 64, 67, 83, 91, 95, 128, 137, 141, 153, 159, 164, 170

                                                   \endcsname 60, 120–

122, 124, 125, 155, 156, 175, 176

\endgroup . . . . . . . . 23 \endinput . . . . . . . . 12 \eqnarray . . . . . . . . \underline{108} \eqnnum . . . . . . . . . . \underline{78}

                                                   \expandafter . . . 31,

84, 96, 108, 118, 120, 121, 123–125, 154, 156, 172, 174, 176

F \fbox . . . . . . . . . . . . 33 \fi . . . . . . . . 52, 56,

58, 69, 71–73, 77, 85, 97, 102, 136, 149, 150, 158, 166, 178, 181

                                                   \footnotesize . . . . . 187

G \gdef . . . . . . . . . . . . 33 \global … 37, 103, 104

H

\HAR@checkdef . . . . .

…. 153, 161, 171

\harvarditem . . . . . .

. 155, 156, 175, 176 \hbox . . . . . . 37, 51, 187

I

\if@inlabel . . . . . . . 36

\iffalse . . . . . . . . . 76 \ifinner . . . . . . . 44, 65 \ifmmode . . . . . . . . . 62

\ifSK@equation . 61, 105
\iftagsleft@ . . . . \underline{74}, 79

\ifvmode . . . . . . . . . 35 \ifvoid . . . . . . . . . . 48 \ifx . . . . . 77, 81, 93,

126, 128, 141, 151, 153, 161, 162

\ignorespaces . . . 26, 28

K

\kern . 39, 49, 51, 55, 68, 86, 89, 99, 100

L

\label . . . . . . 15, \underline{18},

130, 134, 143, 147 \lastbox . . . . . . . . . 47 \lastskip . . . . . . 45, 46

\leavevmode . . . 144, 183

\let …. 2–5, 15–17, 75, 76, 78, 103, 104, 106, 107, 109–116, 120, 121, 130, 134, 143, 147, 154, 174

\llap 38, 49, 55, 68, 86, 89

M

\marginparsep . . . . .

. 39, 49, 51, 55, 68, 86, 89, 99, 100

\meaning …. 31, 84, 96

N

\newif . . . . . . . . . . . 105 \noexpand . . . . . . . . 109

\nointerlineskip . . 43
\normalfont . . . . 34, 187

P

\pageref . . . . . . . . . \underline{138}

\prevdepth . . . . . 42, 57
\ProcessOptions . . . 14

\protect . . . . . . . . . 124

\protected@edef . . . 30

R

\raise . . . . . . . . . . . 186 \ref . . . . . . . . . 133, \underline{138} \relax … 4, 5, 103, 104

\RequirePackage . . . . 7

\rlap 66, 99, 100, 103, 186

S

\setbox . . . . . . . . 37, 47 \SK@ . . 20, 26, 28, \underline{29},

32, 84, 96, 139, 140, 144, 157, 165, 167–169, 172, 177, 180, 182

\SK@@@vpageref . . . .

. 131, 135, 144, 148

\SK@@label 20, 26, 28,

\underline{32}, 84, 96, 157, 177 \SK@@ref . . 139, 140,

144, 165, 167– 169, 172, 180, \underline{182}

\SK@align . . . . . . . . \underline{110}

\SK@alignat . . . . . . . \underline{110}
\SK@bibitem . . . . . \underline{15}, 26

\SK@cite … 3, 151, 180 \SK@citea …. 163, 179

\SK@citeauthor . . . . 167
\SK@citefullauthor . 168

\SK@citen . . . . . . . . 165

\SK@citeyear . . . . . . 169

\SK@def \underline{117}, 129, 139, 140, 142, 163, 165, 167–169, 171

\SK@eqnarray . . . . . . \underline{105}
\SK@eqnnum . 75, 90, 100
\SK@equation . . . . . . \underline{105}
\SK@equationtrue . .

. 106, 107, 110–116

\SK@flalign . . . . . . . \underline{110}
\SK@gather . . . . . . . \underline{110}
\SK@HAR@bi . . . . . . .

. 155, 157, 175, 177

\SK@HAR@checkdef . . 173

\SK@lab . . 33, 38, 49, 55, 66, 68, 86, 89, 99, 100, 103, 104

                          \SK@lab@relax 38, 49,

55, 70, 82, 87, 90, 94, 99, 101, \underline{104}

                          \SK@label . . . \underline{15}, 22,

130, 134, 143, 147

                          \SK@labelcolor  \underline{4}, 11, 33

\SK@labx … 51, 63, \underline{103}

                          \SK@lbibitem . . . . \underline{15}, 28
                          \SK@multline . . . . . . \underline{110}
                          \SK@pageref 140, 143, 147

\SK@ref . . . . . . . . 2,

126, 139, 143, 147

                          \SK@refcolor . \underline{4}, 10, 185
                          \SK@tagform@ . . . . . .

… 78, 87, 98, 109

                          \SK@xalignat . . . . . . \underline{110}
                          \SK@xxalignat . . . . . \underline{110}

\skip@ . . . . . . 45, 46, 53 \small . . . . . . . . . . . 34 \smash . . . . . . . . . . . 33 \space …. 119, 122,

124, 125, 135, 148 \string . . . . . . 118,

155, 156, 175, 176

T

                          \tag@form@ . . . . . . . \underline{78}

\tagform@ 78, 80, 92, 109 \the . . . . . . . . . . . . . 109 \toks@ . . . . . . . 108, 109 \ttfamily . . . . . 34, 187

U

                          \undefined . . . . . . . 77

\underbar . . . . . . . . 187 \unskip . 45, 46, 133,

135, 144, 146, 148

V \vadjust . . . . . . . . . 68 \vbox . . . . . . . . . . . . 183 \vpageref …. 128, 141 \vref . . . . . . . . 132, 145 \vrule . . . . . . . . . . . 186 \vskip . . . . . . . . . . . 53 \vss . . . . . . . . . . . . . 184

Z \z@ . . . . . 47, 48, 51, 183