如何在使用 minipages (或 \parboxes) 时保持恒定的 baselineskip?

如何在使用 minipages (或 \parboxes) 时保持恒定的 baselineskip?

minipage当使用a来框选一个文本段落时, minipaged 文本的第一行与前一个文本段落的最后一行比标准文本段落中的连续两行更近;类似地, 内的最后一行文本minipage与 之后的第一行文本minipage也更近。

以下 MWE 说明了这一点:

\documentclass{article}
\usepackage{lipsum}

\newcommand\Text{Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit,
vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur dictum gravida
mauris. Nam arcu libero, nonummy eget, consectetuer id, vulputate a, magna.\textbullet}

\begin{document}

\Text

\noindent\begin{minipage}{\linewidth}
\Text
\end{minipage}

\Text

\end{document}

即使使用minipages (或es) ,​​如何保证基线跳过恒定?\parbox

在此处输入图片描述

答案1

对于顶部,请使用[t]规范。对于底部,您可以在小页面之后恢复最后一行的深度

\documentclass{article}
\usepackage{lipsum}

\newcommand\Text{Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit,
vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur dictum gravida
mauris. Nam arcu libero, nonummy eget, consectetuer id, vulputate a, magna.\textbullet}

\begin{document}

\hrule

\begin{minipage}{.45\textwidth}
\Text

\noindent\begin{minipage}[t]{\linewidth}
\Text
\par\xdef\tpd{\the\prevdepth}
\end{minipage}

\prevdepth\tpd
\Text
\end{minipage}\hfill
\begin{minipage}{.45\textwidth}
\Text

\Text

\Text
\end{minipage}
\hrule
\end{document}

在此处输入图片描述

解释

当 TeX 在垂直模式下堆叠盒子时(例如在完成一个段落后),它会插入线间胶目的是使连续基线彼此保持固定距离。

让我们以基线跳过的标准值 12pt 为例b(固定距离)对于 10pt 大小的文档。TeX 在堆叠到框时所做的是:

  • 测量深度d顶部框的大小,即其中有多少字符超出基线以下;

  • 测量身高H底部框的大小,即其中的字符高出基线的量;

  • 计算b - h - d

然后 TeX 会查看另一个参数,跳行限制,我们称之为。 如果b - h - d,长度为b - h - d插入到两个框之间。行跳过限制告诉 TeX 何时应将两个框视为“彼此太近”:事实上,如果b - h - d<,TeX 将在两个框之间插入一个长度为“lineskip”(另一个参数)的垂直空格。

然而,TeX 认为盒子minipage就像大的字符,因此它们会影响上述计算。

minipage构建完成后,其高度和深度将等于小页面总大小的一半。但如果[t]选择此选项,其高度将与其中第一行的高度相同,其余部分将计入深度。

因此,当我们有

\Text

\noindent\begin{minipage}{\linewidth}
\Text
\end{minipage}

\Text

上述计算肯定会得出负值b - h - d,因为 的minipage深度非常大。所以\lineskip胶水会插入。 上方不会有问题minipage,因为 TeX 会考虑的高度恰好是里面第一行的高度。

有一个出口。事实上,TeX 并没有真正使用d但是,名为 的内部参数的值\prevdepth被设置为“垂直列表”中最后一个框的深度,并且可以改变。

因此我们衡量d对于里面的最后一行,minipage\par(这将终止段落并将其贡献给的垂直列表minipage)并将此值保存在里面\tpd

\xdef\tpd{\the\prevdepth}

商店全球\tpd的值中\prevdepth。有必要全局执行此操作,因为minipage形成一个组(在 中也是如此\parbox)。然后,在说 之前\Text,也就是开始一个段落之前,我们恢复参数\prevdepth以具有之前计算的值。因此,TeX 将表现得像一个深度框d位于新段落第一行之上,忘记了 的深度minipage

因此,行间粘连的计算将与段落最后一行minipage位于段落第一行之上的情况相同。

答案2

\strut在 的任一端添加\Text,这通常会有所帮助。

相关内容