enumitem 和 \@listdepth

enumitem 和 \@listdepth

使用创建的 itemize 类列表中的标签enumitem似乎不遵循\@listdepth。考虑以下内容。我们定义两种类型的列表

\documentclass{article}

\usepackage{enumitem}

\newlist{foolist}{itemize}{2}
\newlist{barlist}{itemize}{2}
\setlist[foolist,1]{label=\textbullet}
\setlist[foolist,2]{label=\textendash}
\setlist[barlist,1]{label=\textbullet}
\setlist[barlist,2]{label=\textendash}

对于任何一种类型的列表,当列表未嵌套时,我们都应该得到一个项目符号,当列表嵌套时,我们都应该得到一个破折号。然而,实际上,只有当父列表与嵌套列表是同一类型时,才会出现这种情况。

\begin{document}

\makeatletter
\begin{foolist}
  \item Foo \the\@listdepth
    \begin{foolist}
      \item Foo \the\@listdepth
    \end{foolist}
\end{foolist}

\begin{foolist}
  \item Foo \the\@listdepth
    \begin{barlist}
      \item Bar \the\@listdepth
    \end{barlist}
\end{foolist}
\makeatother

\end{document}

上面的代码产生

* Foo 1
  - Foo 2

* Foo 2
  * Bar 2

尽管\@listdepth最后barlist设置了两个 2,但标签是一个项目符号。

我怎样才能使标签完全依赖于值,\@listdepth 而不管列表的类型?

答案1

您可以将\@listdepth其用作密钥的一部分label

在此处输入图片描述

\documentclass{article}

\usepackage{enumitem}% http://ctan.org/pkg/enumitem

\newlist{foolist}{itemize}{2}
\newlist{barlist}{itemize}{2}
\makeatletter
\setlist[foolist]{label={\ifnum\@listdepth=\@ne\textbullet\else\textendash\fi}}
\setlist[barlist]{label={\ifnum\@listdepth=\@ne\textbullet\else\textendash\fi}}
\makeatother
\begin{document}

\makeatletter
\begin{foolist}
  \item Foo \the\@listdepth
    \begin{foolist}
      \item Foo \the\@listdepth
    \end{foolist}
\end{foolist}

\begin{foolist}
  \item Foo \the\@listdepth
    \begin{barlist}
      \item Bar \the\@listdepth
    \end{barlist}
\end{foolist}
\makeatother

\end{document}

相关内容