
Gostaria de redefinir o enumerate
ambiente com um argumento opcional. Basicamente, quero redefinir \theenumi
para que cada vez que eu rotular um item e chamá-lo, \ref
eu imprima o rótulo real, e não apenas o valor (árabe) de counter enumi
.
Tentei com o código abaixo e funciona, exceto pelo fato de sempre adicionar um ponto extra ( .
) a cada rótulo. Quando eu ligo, \ref
ele imprime a etiqueta correta.
Aqui está um MWE do que eu tentei:
\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}
e esta é a saída do código acima:
Como devo redefinir enumerate
para evitar o ponto extra nas listas?
Responder1
Em vez de reinventar a roda, é muito mais fácil usar o enumitem
pacote para esse tipo de coisa. Para este exemplo específico, adicionei um kern negativo para que os parênteses fiquem bem espaçados com o numeral em itálico. Como aponta Kannappan Sampath, você também pode especificar o formato das referências separadamente.
\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}
Responder2
Aqui está uma solução com 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}