
Ich habe eine Itemize-Umgebung, die wie folgt definiert ist newlist
:
\newlist{questions}{enumerate}{2}
\setlist[questions,1]{label=\arabic*.,ref=\arabic*}
...
Ich möchte an einem beliebigen Punkt innerhalb einer dieser Umgebungen wissen, wie die Umgebung heißt und wie hoch die aktuelle Tiefe ist (oder etwas Entsprechendes).
Ich habe herausgefunden, dass das Makro \@listctr
der Name des aktuellen Listenzählers mit den Informationen zu sein scheint, die ich brauche (z. B. questionsii
), aber ich kann ihn scheinbar nicht mit dem Listennamen vergleichen (z. B. \ifthenelse{\equal{\@listctr}{questionsii}}
mit \ifx\@listctr\questionsiiname
entsprechendem questionsiiname
, usw.).
Bei einer einfachen Aufzählung könnte ich verwenden \@enumdepth
, aber ich kann nichts Ähnliches für enumitem
benutzerdefinierte Listen finden. Außerdem möchte ich idealerweise nicht die aktuelle Umgebung überprüfen, sodass ich dies innerhalb einer Umgebung innerhalb einer Liste aufrufen kann.
Was kann ich tun, um diese Informationen zu erhalten oder zu speichern/abzurufen?
Minimales Arbeitsbeispiel:
\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}
Antwort1
Den Namen der aktuellen Liste finden Sie mit \@currenvir
. Die Tiefe einer enumitem
benutzerdefinierten Liste wird im Makro gespeichert \enitdp@listname
. Wir können also ein Makro konstruieren, um den Listennamen und die aktuelle Tiefe auszudrucken:
\makeatletter
\def\currentlist{\@currenvir~\the\csname enitdp@\@currenvir\endcsname}
\makeatother
Da ich nicht ganz sicher bin, was Sie mit den Informationen machen möchten, werde ich nicht versuchen, näher auf die Bedingung in Ihrem Beispiel einzugehen.
\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}