枚举问题重新定义“枚举”环境

枚举问题重新定义“枚举”环境

我想用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}

在此处输入图片描述

相关内容