重新定義「枚舉」環境的枚舉問題

重新定義「枚舉」環境的枚舉問題

我想用enumerate可選參數重新定義環境。基本上我想重新定義,\theenumi以便每次我標記一個項目並調用它時,\ref我都會打印出真正的標籤,而不僅僅是 counter 的(阿拉伯語)值enumi

我嘗試使用下面的程式碼,它可以工作,除了它總是.為每個標籤添加一個額外的點()。當我用它調用它時,它\ref會列印正確的標籤。

這是我嘗試過的 MWE:

\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}

這是上面程式碼的輸出:

上述MWE的輸出

我應該如何重新定義enumerate以避免清單中出現多餘的點?

答案1

與其重新發明輪子,不如使用enumitem包包來完成這類事情要容易得多。對於這個特定的範例,我添加了負緊排,以便括號與斜體數字間隔良好。正如 Kannappan Sampath 所指出的那樣,您也可以單獨指定參考文獻的格式。

\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}

在此輸入影像描述

答案2

這是一個解決方案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}

在此輸入影像描述

相關內容