仅在列表环境的顶层更改 \itemsep

仅在列表环境的顶层更改 \itemsep

我不是 LaTeX 程序员,但我必须处理这一点。我有一个定义questionlist环境的类文件。这是一个可以嵌套的列表环境。我希望\itemsep仅针对顶层(即最低深度)设置不同于默认值。我该怎么做?

代码在这里(取自类文件):

\newcount\@qlistdepth \@qlistdepth = 0
\@definecounter{qlisti}
\@definecounter{qlistii}
\@definecounter{qlistiii}
\@definecounter{qlistiv}
\def\questionlist{%
  \ifnum \@qlistdepth >\thr@@\@toodeep\else
    \advance\@qlistdepth\@ne
    \edef\@qlistctr{qlist\romannumeral\the\@qlistdepth}%
      \expandafter
      \list
        \csname label\@qlistctr\endcsname
        {\parsep1ex%
         \itemsep1ex%      this should only be used at depth=0
         \labelwidth1em%
         \labelsep0.5em%
         \leftmargin1.5em%
         \usecounter\@qlistctr\def\makelabel##1{\hss\llap{##1}}}
  \fi}
\let\endquestionlist = \endlist
\renewcommand\theqlisti{\@arabic\c@qlisti}
\renewcommand\theqlistii{\@alph\c@qlistii}
\renewcommand\theqlistiii{\@roman\c@qlistiii}
\renewcommand\theqlistiv{\@Alph\c@qlistiv}
\newcommand\labelqlisti{\theqlisti.}
\newcommand\labelqlistii{(\theqlistii)}
\newcommand\labelqlistiii{\theqlistiii.}
\newcommand\labelqlistiv{\theqlistiv.}

为了回应一些评论,我想说,我正是想要同样的结果就像在这里(回答 Keks Dose),但绝不是通过修改我的.tex文件。相反,我想修改给定的代码(因此这不是重复的)。也许有一种方法可以用包编写我想要的相同列表enumitem,但这超出了我的范围。

答案1

无需明确设置代码,而是使用以下条件进行设置

\ifnum\@qlistdepth=1 \itemsep1ex\fi

上述条件检查questionlist深度计数器的值。由于它在使用时是前进的,所以最低深度实际上是 1。

这是一个完整的例子,其中有相当大的\itemsep条件设置,如上所示,只是为了突出选择:

在此处输入图片描述

\documentclass{article}

\makeatletter
\newcount\@qlistdepth \@qlistdepth = 0
\@definecounter{qlisti}
\@definecounter{qlistii}
\@definecounter{qlistiii}
\@definecounter{qlistiv}
\def\questionlist{%
  \ifnum \@qlistdepth >\thr@@\@toodeep\else
    \advance\@qlistdepth\@ne
    \edef\@qlistctr{qlist\romannumeral\the\@qlistdepth}%
      \expandafter
      \list
        \csname label\@qlistctr\endcsname
        {\parsep1ex%
         \ifnum\@qlistdepth=1\itemsep5ex\fi%      this should only be used at depth = 0
         \labelwidth1em%
         \labelsep0.5em%
         \leftmargin1.5em%
         \usecounter\@qlistctr\def\makelabel##1{\hss\llap{##1}}}
  \fi}
\let\endquestionlist = \endlist
\renewcommand\theqlisti{\@arabic\c@qlisti}
\renewcommand\theqlistii{\@alph\c@qlistii}
\renewcommand\theqlistiii{\@roman\c@qlistiii}
\renewcommand\theqlistiv{\@Alph\c@qlistiv}
\newcommand\labelqlisti{\theqlisti.}
\newcommand\labelqlistii{(\theqlistii)}
\newcommand\labelqlistiii{\theqlistiii.}
\newcommand\labelqlistiv{\theqlistiv.}
\makeatother

\begin{document}

\begin{questionlist}
  \item First item - level 1
  \item Second item - level 1
  \begin{questionlist}
    \item First item - level 2
    \item Second item - level 2
    \begin{questionlist}
      \item First item - level 3
      \item Second item - level 3
      \begin{questionlist}
        \item First item - level 4
        \item Second item - level 4
        \item Last item - level 4
      \end{questionlist}
      \item Last item - level 3
    \end{questionlist}
    \item Last item - level 2
  \end{questionlist}
  \item Last item - level 1
\end{questionlist}

\end{document}

否则,所选的默认字体大小将取决于所选的默认字体大小。也就是说,\itemsep无论您使用10pt11pt还是12pt文档类选项, 的长度都会有所不同。

相关内容