我正在使用 enumitem 包来处理列表,在某些情况下是嵌套列表。我想定义一个命令\staritem
,在项目前添加星号,而不依赖于知道嵌套列表的级别。例如,代码
\documentclass{article}
\usepackage{enumitem}
\newcommand\staritem{???}
\begin{document}
\begin{enumerate}[label=(\alph*)]
\item Item 1
\staritem Item 2
\item Item 3
\begin{enumerate}[label=(\roman*)]
\item Item 3.1
\item Item 3.2
\staritem Item 3.3
\end{enumerate}
\end{enumerate}
\end{document}
应该输出:
(a)第 1 项
*(b)第 2 项
(c)第 3 项
(一)第3.1项
(二)第3.2项
*(三)第3.3项
我知道这一点\item[*\theenumi]
并\item[*\theenumii]
能做这项工作,但我希望能够灵活地不告知嵌套枚举环境的级别。
答案1
当前计数器名称可以作为 访问\@enumctr
。
\@currentlabel
如果您不希望带星号的项目的交叉引用带有 *,请删除该行。
\documentclass{article}
\usepackage{enumitem}
\makeatletter
\newcommand\staritem{%
\par\refstepcounter{\@enumctr}%
\edef\@currentlabel{*\@currentlabel}%
\item[{\makebox[0pt][r]{*}}\csname the\@enumctr\endcsname]%
}
\makeatother
\begin{document}
\ref{test}
\begin{enumerate}[label=(\alph*)]
\item Item 1
\staritem\label{test} Item 2
\item Item 3
\begin{enumerate}[label=(\roman*)]
\item Item 3.1
\item Item 3.2
\staritem Item 3.3
\end{enumerate}
\end{enumerate}
\end{document}
答案2
你可以使用这个:
\documentclass{article}
\usepackage{enumitem}
\newcommand\staritem{\item[*\csname theenum\roman{enumi}\endcsname]}
\begin{document}
\begin{enumerate}[label=(\alph*)]
\item Item 1
\staritem Item 2
\item Item 3
\begin{enumerate}[label=(\roman*)]
\item Item 3.1
\item Item 3.2
\staritem Item 3.3
\end{enumerate}
\end{enumerate}
\end{document}
截屏: