
我有一個由以下定義的逐項環境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}