为什么 \parskip 不一致地在节标题后添加空格?

为什么 \parskip 不一致地在节标题后添加空格?

已经存在几个问题涉及由于设置\parskip为非零值而导致的节标题后的额外垂直空间。

在这里,我只是想了解为什么在普通段落前添加了额外的空格,但在列表前没有添加。(我认为这是一个合理的问题,而不是重复的。)

如下图所示,当该部分以一些文本开始时,会有额外的空间:

无 parskip(左)与 parskip(右),段落

但是,当部分以 itemize 开始时,没有多余的空间:

无 parskip(左)与 parskip(右),逐项列出

以下是我使用的代码:

\documentclass[11pt]{article}

\parskip=\smallskipamount

\usepackage{enumitem}

\newlist{compactlist}{itemize}{3}
\setlist[compactlist]{%
  label=\enskip\textbullet,
  partopsep=0pt,
  topsep=0pt,
  parsep=0pt,
}

\usepackage{blindtext}

\begin{document}
\section{Parskip}
%% \blindtext
\begin{compactlist}
  \item \blindtext
\end{compactlist}

\end{document}

答案1

\parskip是 TeX 基元,在 LaTeX 构造中可设置为各种值,因此在文档开头直接设置它会产生明确的效果,但可能不如预期。特别是 LaTeX 列表可操纵\parskip以控制列表前和项目之间的间距,特别是在列表前,它会根据 \partopsep和重置为值\topsep

答案2

最后我通过查看 LaTeX 的源代码弄清楚了发生了什么。

当常规段落位于节标题之后时,标题与段落第一行之间的垂直间距为AFTERSKIP + \parskip,其中AFTERSKIP是在文档类中硬编码的跳过。可以通过重新定义节宏、等来更改\section\subsection

但是,当列表结构(包括诸如centerflushleft、等环境flushright)位于节标题之后时,垂直间距会有所不同。节标题后面的第一个命令会AFTERSKIP照常添加 ,然后\item列表中的第一个命令会添加\parskip - \parsep,但它会添加\addvspace,这可能会产生令人费解的结果。

因为 实际添加的空间\addvspace还取决于 的值\lastskip(在本例中为AFTERSKIP)。例如,如果\parskip - \parsep小于或等于AFTERSKIP,则\addvspace不会添加任何内容。如果\parskip - \parsep大于AFTERSKIP\addvspace则将添加空间,但会删除AFTERSKIP!总之,在节标题和列表构造之间插入的垂直空间取决于这 3 个参数 - AFTERSKIP\parskip和- 以及添加垂直空间\parsep的 规则。\addvspace

相关内容