新しい列挙項目リストの名前と深さを取得します

新しい列挙項目リストの名前と深さを取得します

次のように定義された 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}

コードの出力

関連情報