# \ref should use enumerate label name

I have done this:

\begin{enumerate}
\renewcommand{\labelenumi}{\textbf{S.\theenumi}}
\item a
\item \label{l} b
\item c. goto \ref{l}
\end{enumerate}


The \ref just uses the enumerate number. But I want it to be the full enumerate label.

I also could just type S.\ref{l} but that has the two disadvantages that

1. if I update the enumerate label, I also have to update this reference,
2. together with hyperref, this doesn't look so nice.

How would be a clean/nice way to solve this?

-

You can use the enumitem package:

\documentclass{article}
\usepackage{enumitem}

\begin{document}

\begin{enumerate}[label=\textbf{S.\arabic*}]
\item a
\item \label{l} b
\item c. goto \ref{l}
\end{enumerate}

\end{document}


or

\begin{enumerate}[label=\textbf{S.\arabic*},ref=S.\arabic*]
\item a
\item \label{l} b
\item c. goto \ref{l}
\end{enumerate}


if you don't want the reference to be boldfaced.

-

For your attempt properly work, you need redefine the counter representation (\theenumi) as well as the label associated with it (\labelenumi). This separates the formatting from the counter when you're using \ref:

\documentclass{article}
\begin{document}
\begin{enumerate}
\renewcommand{\labelenumi}{\textbf{\theenumi}}
\renewcommand{\theenumi}{S.\arabic{enumi}}
\item a
\makeatletter
\show\@currentlabel
\makeatother
\item \label{l} b
\item c. goto \ref{l}
\end{enumerate}
\end{document}


This also works nicely with hyperref. However, in general, it is much easier to use enumitem since it can be used in a global or localized setting using a key-value approach; very convenient.

-