By default, when a label is created, it takes on the appearance of the
counter labelled: specifically, it is set to
\the<
counter
>
- what would be used if you
asked to typeset the counter in your text. This isn't always what you
need: for example, if you have nested enumerated lists with the outer
numbered and the inner labelled with letters, one might expect to want
to refer to items in the inner list as "2(c)". (Remember, you can
change the structure of list items.)
The change is of course
possible by explicit labelling of the parent and using that label to
construct the typeset result - something like
\ref{parent-item}(\ref{child-item})which would be both tedious and error-prone. What's more, it would be undesirable, since you would be constructing a visual representation which is inflexible (you couldn't change all the references to elements of a list at one fell swoop).
LaTeX in fact has a label-formatting command built into every label
definition; by default it's null, but it's available for the user to
program. For any label <counter> there's a LaTeX internal
command \p@<
counter>
; for example, a label definition
on an inner list item is done (in effect) using the command
\p@enumii{
. So to change the labels on all
inner lists, put the following patch in your preamble:
\theenumii
}
\makeatletter \renewcommand{\p@enumii}[1]{\theenumi(#1)} \makeatotherThe analagous change works for any counter that gets used in a
\label
command.