How to change the format of labels

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{\theenumii}. So to change the labels on all inner lists, put the following patch in your preamble:

  \makeatletter
  \renewcommand{\p@enumii}[1]{\theenumi(#1)}
  \makeatother
The analagous change works for any counter that gets used in a \label command.