
Me gustaría redefinir el enumerate
entorno con un argumento opcional. Básicamente, quiero redefinir \theenumi
para que cada vez que etiquete un elemento y lo llame \ref
se 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, \ref
imprime 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:
¿Cómo debo redefinir enumerate
para evitar el punto adicional en las listas?
Respuesta1
En lugar de reinventar la rueda, es mucho más fácil utilizar el enumitem
paquete 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}
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}