我有一个(相当基本的)自定义环境,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}
如果阅读起来有点困难,我深感抱歉。
无论如何,虽然这个环境完成了工作(在\item
s 之间创建跳过),但它在前面生成了一个额外的跳过。
以下示例显示了这一点:
\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}