
다음과 같이 정의된 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}