如何检查列表中第一个 \item 是否为列表的开头?

如何检查列表中第一个 \item 是否为列表的开头?

我有一个(相当基本的)自定义环境,skipitemize如下所示:

\newenvironment{skipitemize}
[1][1]
{\itemize\let\olditem\item\renewcommand\item[1][#1]{\ifnum0=##1\relax\else\ifnum1=##1\smallskip\else\ifnum2=##1\medskip\else\ifnum3=##1\bigskip\else\relax\fi\fi\fi\fi\olditem\relax}}
{\enditemize}

如果阅读起来有点困难,我深感抱歉。

无论如何,虽然这个环境完成了工作(在\items 之间创建跳过),但它在前面生成了一个额外的跳过。

以下示例显示了这一点:

\documentclass{article}
\newenvironment{skipitemize}
[1][1]
{\itemize\let\olditem\item\renewcommand\item[1][#1]{\ifnum0=##1\relax\else\ifnum1=##1\smallskip\else\ifnum2=##1\medskip\else\ifnum3=##1\bigskip\else\relax\fi\fi\fi\fi\olditem\relax}}
{\enditemize}
\begin{document}
Not so much spacing below here.

\begin{itemize}
    \item Foo
    \item Bar
\end{itemize}
\newpage
More spacing below here.

\begin{skipitemize}[3]
    \item Foo
    \item Bar
\end{skipitemize}

在我看来,额外的空间看起来很丑。

有没有办法检查我是否位于列表中的第一个项目(即列表的开头),并抑制列表第一个项目之前的跳过?

谢谢你!

答案1

你真正想要的是增加\itemsep

\documentclass{article}

\newenvironment{skipitemize}[1][1]
  {\itemize\increaseitemsep{#1}}
  {\enditemize}

\newcommand{\increaseitemsep}[1]{%
  \addtolength{\itemsep}{%
    \ifcase#1\relax
      % 0, do nothing
    \or
      \smallskipamount % 1
    \or
      \medskipamount % 2
    \or
      \bigskipamount % 3
    \fi
  }%
}



\begin{document}
Not so much spacing below here.

\begin{itemize}
    \item Foo
    \item Bar
\end{itemize}

More spacing below here.

\begin{skipitemize}[3]
    \item Foo
    \item Bar
\end{skipitemize}

\end{document}

在此处输入图片描述

相关内容