새 열거 항목 목록의 이름과 깊이를 가져옵니다.

새 열거 항목 목록의 이름과 깊이를 가져옵니다.

다음과 같이 정의된 itemize 환경이 있습니다 newlist.

\newlist{questions}{enumerate}{2}
\setlist[questions,1]{label=\arabic*.,ref=\arabic*}
...

이러한 환경 중 하나 내부의 임의 지점에서 환경 이름이 무엇인지, 현재 깊이가 무엇인지(또는 이와 동등한 것) 알고 싶습니다.

매크로가 \@listctr필요한 정보(예: )가 포함된 현재 목록 카운터의 이름인 것 같지만 목록 이름(예 : 적절한 , 등) questionsii과 비교할 수 없는 것 같습니다 .\ifthenelse{\equal{\@listctr}{questionsii}}\ifx\@listctr\questionsiinamequestionsiiname

일반 열거형을 사용하면 을 사용할 수 있지만 의 사용자 정의 목록 \@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}

코드 출력

관련 정보