
Ich möchte die enumerate
Umgebung mit einem optionalen Argument neu definieren. Im Grunde möchte ich \theenumi
sie so neu definieren, dass jedes Mal, wenn ich ein Element beschrifte und es mit aufrufe, \ref
die echte Beschriftung ausgedruckt wird und nicht nur der (arabische) Wert von counter enumi
.
Ich habe es mit dem unten stehenden Code versucht und er funktioniert, abgesehen davon, dass er .
jedem Etikett immer einen zusätzlichen Punkt () hinzufügt. Wenn ich ihn mit aufrufe, \ref
wird jedoch das richtige Etikett gedruckt.
Hier ist ein MWE von dem, was ich versucht habe:
\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}
und dies ist die Ausgabe des obigen Codes:
Wie muss ich es neu definieren, enumerate
um den zusätzlichen Punkt in den Listen zu vermeiden?
Antwort1
Anstatt das Rad neu zu erfinden, ist es viel einfacher, das enumitem
Paket für solche Dinge zu verwenden. Für dieses spezielle Beispiel habe ich einen negativen Kern hinzugefügt, damit die Klammern mit der kursiven Zahl gut abgesetzt sind. Wie Kannappan Sampath anmerkt, können Sie das Format der Referenzen auch separat angeben.
\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}
Antwort2
Hier ist eine Lösung mit 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}