如何在双列环境中使用灵活的 \vspace(带粘性)并改变行距

如何在双列环境中使用灵活的 \vspace(带粘性)并改变行距

我有一个双列环境\baselinestretch,并且想\vspace在每个段落前插入一个带粘连的行。但是,不是将垂直间距调整到列的高度,而是将列延伸到底部。如果两列中只有一列有段落分隔符,则会导致一列比另一列长。

仅当行距已更改时才会发生此问题,无论是通过更改\baselinestretch还是通过\linespread。使用multicol包时会发生这种情况,但使用twocolumndocumentclass 选项时也会发生这种情况。据我所知,它也与 所选择的值无关\vspace

由于该项目(字典的部分内容已经印刷完成)的格式规范非常严格,因此更改格式是不可能的。

这是一个最简单的例子:

\documentclass[a4paper,10pt]{book}
\usepackage{multicol}
\usepackage{lipsum}

\renewcommand{\baselinestretch}{1.05}

\newcommand{\spc}{\vspace{12pt plus 12pt}}

\begin{document}
\begin{multicols}{2}

\lipsum*[1-6]
\par\spc
\lipsum*[7-12]
\par\spc
\lipsum*[13-14]
\par\spc
\lipsum*[15-20]
\par\spc
\lipsum*[21-25]

\end{multicols}
\end{document}

结果中我们可以看到,每个带有 的列都\par\vspace被延伸了,导致第 2 页和第 4 页的底部不平整。这里以第二页为例: 第 2 页:左栏错误延伸

我希望有人能告诉我这里缺少什么。

答案1

并不是说左列被延长了,右列就一定短了,因为只能容纳那么多行,再多一行就太长了。相反,左列的高度是指定的,因为段落空间(应该通过设置来指定,\parskip而不是在每次换行时添加\vspace)会延伸到最后一行指定的高度\textheight

你应该总是让 textheight 成为(新的)baselineskip+topskip 的倍数

\documentclass[a4paper,10pt]{book}
\usepackage{multicol}
\usepackage{lipsum}

\renewcommand{\baselinestretch}{1.05}\normalfont
\setlength\textheight{\dimexpr\topskip+47\baselineskip}
\setlength\parskip{12pt plus 12pt}

\begin{document}
\begin{multicols}{2}

\lipsum*[1-6]

\lipsum*[7-12]

\lipsum*[13-14]

\lipsum*[15-20]

\lipsum*[21-25]

\end{multicols}
\end{document}

相关内容