Problema de enumeración que redefine el entorno "enumerar"

Problema de enumeración que redefine el entorno "enumerar"

Me gustaría redefinir el enumerateentorno con un argumento opcional. Básicamente, quiero redefinir \theenumipara que cada vez que etiquete un elemento y lo llame \refse imprima la etiqueta real, y no solo el valor (árabe) de counter enumi.

Probé con el código siguiente y funciona excepto por el hecho de que siempre agrega un punto adicional ( .) a cada etiqueta. Sin embargo , cuando lo llamo, \refimprime la etiqueta correcta.

Aquí hay un MWE de lo que probé:

\documentclass{book}
\usepackage{enumerate}
%%
%%
\let\oldenumerate\enumerate
\let\endoldenumerate\endenumerate
\renewenvironment{enumerate}[1][\arabic{enumi}.]% Defaults to 1. 2. 3. ...
{%
    \bgroup\renewcommand\theenumi{#1}%
    \oldenumerate%
}%
{%
    \endoldenumerate\egroup%
}%
\begin{document}
First list with default enumeration
\begin{enumerate}
\item First item
\item Second item
\end{enumerate}
Second list with custom enumeration
\begin{enumerate}[(\emph{\roman{enumi}})]
\item First item
\item Second item
\end{enumerate}
Labels have an extra dot in the lists, but references \ref{a} and \ref{b} are printed correctly.
\end{document}

y este es el resultado del código anterior:

Salida del MWE anterior

¿Cómo debo redefinir enumeratepara evitar el punto adicional en las listas?

Respuesta1

En lugar de reinventar la rueda, es mucho más fácil utilizar el enumitempaquete para este tipo de cosas. Para este ejemplo en particular, agregué un kern negativo para que los paréntesis queden bien espaciados con el número en cursiva. Como señala Kannappan Sampath, también puedes especificar el formato de las referencias por separado.

\documentclass{article}
\usepackage{enumitem}
\begin{document}
Second list with custom enumeration
\begin{enumerate}[label=(\kern-.5pt\emph{\roman*}),ref=(\roman*)]
\item First item \label{a}
\item Second item \label{b}
\end{enumerate}
Labels have an extra dot in the lists, but references \ref{a} and \ref{b} are printed correctly.
\end{document}

ingrese la descripción de la imagen aquí

Respuesta2

Aquí hay una solución con enumitem:

\documentclass{book}
\usepackage{enumitem}
%%% Set the default: number followed by a period
\setlist[enumerate,1]{label=\arabic*.}

\begin{document}
First list with default enumeration
\begin{enumerate}
\item First item
\item\label{a} Second item
\end{enumerate}
Second list with custom enumeration
\begin{enumerate}[label=(\emph{\roman*})]
\item First item
\item\label{b} Second item
\end{enumerate}
Labels have an extra dot in the lists, and references
\ref{a} and \ref{b} are printed correctly.
\end{document}

ingrese la descripción de la imagen aquí

información relacionada