我有一个 itemize 环境,其定义如下newlist
:
\newlist{questions}{enumerate}{2}
\setlist[questions,1]{label=\arabic*.,ref=\arabic*}
...
我想知道这些环境中的一个环境中的任意点的环境名称是什么以及当前深度是多少(或某个等效值)
我发现该宏\@listctr
似乎是包含我需要的信息的当前列表计数器的名称(例如questionsii
),但我似乎无法将它与列表名称进行比较(例如\ifthenelse{\equal{\@listctr}{questionsii}}
,\ifx\@listctr\questionsiiname
带有适当的questionsiiname
等)。
对于普通枚举,我可以使用\@enumdepth
,但我找不到任何与enumitem
自定义列表类似的内容。理想情况下,我也不想检查当前环境,这样我可以在列表内的环境中调用它。
我该怎么做才能获取或保存+获取这些信息?
最小工作示例:
\documentclass{article}
\usepackage{enumitem}
\newlist{questions}{enumerate}{2}
\setlist[questions]{label*=\arabic*.}
\makeatletter
\def\currentlist{???} % ???=/@listctr, /@enumctr, etc.
\makeatother
\def\questionsiiname{questionsii}
\begin{document}
\begin{questions}
\item Hello world. The current list is ``\currentlist''.
\begin{questions}
\item My depth is: \ifx\currentlist\questionsiiname 2! \else ??? \fi.
\end{questions}
\end{questions}
\end{document}
答案1
当前列表的名称可以通过 找到\@currenvir
。自定义列表的深度enumitem
存储在宏 中\enitdp@listname
。因此,我们可以构造一个宏来打印列表名称和当前深度:
\makeatletter
\def\currentlist{\@currenvir~\the\csname enitdp@\@currenvir\endcsname}
\makeatother
由于我不太确定您想用这些信息做什么,因此我不会尝试扩展您的示例的条件。
\documentclass{article}
\usepackage{enumitem}
\newlist{questions}{enumerate}{2}
\setlist[questions]{label*=\arabic*.}
\makeatletter
\def\currentlist{\@currenvir~\the\csname enitdp@\@currenvir\endcsname}%
\makeatother
\def\questionsiiname{questionsii}
\begin{document}
\begin{questions}
\item Hello world. The current list is ``\currentlist’’.
\begin{questions}
\item The current list is ``\currentlist’’
\end{questions}
\end{questions}
\end{document}