有没有什么办法可以定义通用的枚举标签?

有没有什么办法可以定义通用的枚举标签?

如果我定义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}

代码 1 的结果

然后我就可以得到上面的结果了。但是,深度达到 4 之后,此代码就不起作用了。重新定义很容易\labelenumiv,但关键是生成标签时保持此模式直到枚举列表的深度限制。

自定义标签用于枚举超过 4 级

这篇文章使用方法解决了类似的问题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}

在此处输入图片描述

相关内容