为什么列表有 \topsep 但没有 \bottomsep?

为什么列表有 \topsep 但没有 \bottomsep?

大多数时候,我喜欢段落之间有一点间距,设置\parskip为 5pt。

但是,我希望我的列表成为前面的文本段落的一部分,但其中的 5pt 来自下一段。

它们看起来应该是这样的:

A paragraph (precedint)

Another paragraph with a list
 * an item
 * another item

Yet another paragraph (following)

并且不喜欢

A paragraph (precedint)

Another paragraph with a list
                                  <I don´t want this space>
 * an item
 * another item

Yet another paragraph (following)

据我了解,列表有一个\topsep添加在前面的文本和后面的文本之间,以及\parskip\partopsep

我看不出如何强制执行像“bottomsep”这样的行为,因为根据 LaTeX 书和 enumitem 手册(\topsep+ \parskip[+ \partopsep]),前面的文本和后面的文本的距离是相同的。

答案1

我认为 OP 实际上并不关心为什么没有\bottomsep宏,而是关心如何解决他们面临的间距问题。

正如OP正确指出的那样,\topsep + \parskip在每个之前和之后添加itemize。使用该选项nosep将删除所有垂直间距,但将保留\parskip每个之前和之后的间距itemize

因此,我们可以做的是使用该选项并在列表前before添加等于长度的负间距:\parskip

\documentclass{article}

\setlength{\parskip}{5pt}
\usepackage{enumitem}
\setlist[itemize]{nosep % removes all spacing, except for \parskip
, before={\vspace*{-\parskip}} %  
}

\begin{document}

Some text

\begin{itemize}
    \item Hello
    \item Bye
    \begin{itemize}
        \item Hello
        \item Bye
    \end{itemize}
    \item Hello
\end{itemize}

Some more text

Even more text

\end{document}

在此处输入图片描述

答案2

我找到了一个解决方案:

\setlength{\parskip}{5pt}
\usepackage{enumitem}
\setlist[itemize]{noitemsep%
, topsep=-5pt%
,after=\newline%
}%

这是最好的解决方案吗?

相关内容