
我想用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}
這是上面程式碼的輸出:
我應該如何重新定義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}