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