如果我定义numberenum
如下,
\newenvironment{numberenum}
{\renewcommand{\labelenumi}{(\arabic{enumi})}
\renewcommand{\labelenumii}{(\arabic{enumi}.\arabic{enumii})}
\renewcommand{\labelenumiii}{(\arabic{enumi}.\arabic{enumii}.\arabic{enumiii})}
\begin{enumerate}}
{\end{enumerate}}
\begin{numberenum}
\item depth 1
\begin{enumerate}
\item depth 2
\begin{enumerate}
\item depth 3
\end{enumerate}
\end{enumerate}
\end{numberenum}
然后我就可以得到上面的结果了。但是,深度达到 4 之后,此代码就不起作用了。重新定义很容易\labelenumiv
,但关键是生成标签时保持此模式直到枚举列表的深度限制。
这篇文章使用方法解决了类似的问题label*
。但我的情况因为括号而更加棘手。有没有什么方法可以numberenum
正确定义?
答案1
编辑:咳咳。我刚刚意识到还有一种更简单的方法可以完成同样的事情……
该enumitem
包有一个format
键,通常用于设置项目标签的字体(该font
键是它的别名)。格式化的标签将看起来像<format>{<label>}
,其中是键<format>
的值,是键的值。format
<label>
label
您可以定义一个将其参数括在括号中的宏并将其用作键format
,如下所示:(我将标签加粗以表明这仍然是可能的,但您不能交换\bfseries
和\parenthesize
。)
\documentclass{article}
\usepackage{enumitem}
\renewlist{enumerate}{enumerate}{10} %% <- set the max depth to 10
\newcommand*\parenthesize[1]{(#1)}
\setlist[enumerate]{label*=.\arabic*,format=\bfseries\parenthesize,leftmargin=2em}
\setlist[enumerate,1]{label=\arabic*} %% <- set the base level label separately
\begin{document}
\begin{enumerate}
\item this is level 1
\item this is still level 1
\begin{enumerate}
\item this is level 2
\item this is still level 2
\begin{enumerate}
\item this is level 3
\item this is still level 3
\begin{enumerate}
\item this is level 4
\item this is still level 4
\begin{enumerate}
\item this is level 5 \label{deepitem}
\item this is still level 5
\end{enumerate}
\end{enumerate}
\end{enumerate}
\end{enumerate}
\end{enumerate}
This is a reference to second-to-last item: \ref{deepitem}.
\end{document}