我试图description
通过将每个物品包裹在 中来防止环境中的物品损坏minipage
。(也许这不是一个好方法,但如果可以的话,让我们先把它放在一边,以回答我的问题。)
当我这样做时,第一个项目上方有多余的空间,每个项目后面都有缺失的空间。我将我能想到的每个垂直空间维度都设置为 0,试图找到这个问题。是什么控制了这些垂直空间?
\documentclass{article}
\usepackage{enumitem,blindtext}
\setlength{\parskip}{0cm}
\setlength{\parindent}{0cm}
\setlength{\topskip}{0cm}
\setlength{\topmargin}{0cm}
\setlength{\smallskipamount}{0cm}
\setlength{\medskipamount}{0cm}
\setlength{\bigskipamount}{0cm}
\begin{document}
\blindtext%
\begin{description}[
topsep=0cm, %additional vertical space beyond regular inter-line space; applies both above and below description
partopsep=0cm, %if description starts a new paragraph, this is added to topsep
parsep=0cm, %vertical separation between paragraphs within an environment; includes between items
itemsep=0cm, % Extra separation added to parsep, but only between items
leftmargin=1cm, % Horizontal indent
rightmargin=0cm, %Horizontal cut from right edge; includes first line too.
listparindent=0cm, %For new paragraphs inside an item, how much to indent; doesn't apply to first paragraph
labelwidth=0cm, % Horizontal indentation where content picks up after title. If title is longer, content pushed right, but future items still begin this far inward
labelsep=0cm, % Horizontal space after the title
itemindent=0cm, % How much to indent first line of item
]
\begin{minipage}[t]{\linewidth}
\vspace{0pt}
\item[1.] There is extra space above this item. Where does it come from? There is missing space below this item. Where did it go?
\end{minipage}%
\par
\begin{minipage}[t]{\linewidth}
\vspace{0pt}
\item[2.]\blindtext
\blindtext
\end{minipage}%
\end{description}
There is space missing after the second item too at the end of the description.
\end{document}
答案1
我想我明白了,但欢迎评论。迷你页面的顶部不会自动比迷你页面第一行的底部高出一个基线跳跃。如果我在 、 等后面放置一个右下角,\strut
那么它确保 的顶部比项目第一行的底部高出一个完整的基线跳跃。因此, 的顶部与前一行的基线齐平,最终结果是基线之间有一个基线跳跃。\item[1.]
\item[2.]
minipage
minipage
如果我\strut
在结尾处放置一个 right description
,它可以确保下一行也能按预期运行,尽管我对这背后的原因不太了解。
答案2
更具体地说,第一个项目上方的垂直空间是由\vspace{0pt}
您在 开头放置的引起的minipage[t]
:根据 TeX 计算\vtop
框(构造框的类型minipage[t]
)高度的规则,这会导致框的高度为零,其所有内容都“向下推”到基线以下,从而增加其深度。当此框堆叠在前面的行下方时,\baselineskip
会添加粘连以使 的基线minipage
(正如我们刚才所说,与其中包含的文本的上边缘重合)与前一个基线相距 12pt,这就是额外空间的来源。
我不会再详细分析您示例中的框如何相互连接,因为您已经谈到了 的使用\strut
。相反,我想评论一下minipage
为了避免项目内出现分页符而使用 ,以及事实上,这“不是一个好方法”。如果您的项目都不超过一个段落长度,您可以改为设置为大于\interlinepenalty
或等于 10000 的值,以禁止段落内出现分页符。这是一个最小的工作示例,它还满足了您对项目之间以及整个列表的上方和下方没有垂直间距的要求:
\documentclass{article}
\usepackage{enumitem,lipsum}
\begin{document}
\lipsum[1]
\begin{description}[
nosep, % kills all vertical spacing
before={\interlinepenalty=10000} % prohibit page breaks within
% paragraphs
]
\item[First label] \lipsum[2]
\item[Second label] \lipsum[3]
\item[Third label] \lipsum[4]
\item[Fourth label] \lipsum[5]
\item[And so on] \lipsum[6]
\end{description}
\lipsum[7]
\end{document}
当然,如果一个项目恰好包含多个段落,这种方法仍然允许在同一项目的两个段落之间进行分页;但对于简单的情况,这种方法很有效。显然,在环境的可选参数中,description
您可以添加其他键来设置标签的水平对齐方式。