我的一个文档中出现了奇怪的垂直间隙,只有当我multicol
与 一起使用时才会出现\documentclass[parskip=half]{scrreprt}
。
最小示例
\documentclass[parskip=half]{scrreprt}
\usepackage{multicol}
\begin{document}
\begin{multicols}{2}
\subsubsection{title}
this \\
is \\
a long \\
text
\vfill
\columnbreak
\subsubsection{title}
foo
\end{multicols}
\end{document}
输出
我期望“foo”位于左列的顶行,而不是底行。那里出了什么问题?
答案1
multicols
当第一列中的文本很短时,这是相当标准的行为:
\documentclass{article}
\usepackage{multicol}
\begin{document}
\begin{multicols}{2}
\subsubsection{title}
Broken text that spreads over two lines to demonstrate behaviour.
\columnbreak
\subsubsection{title}
foo
\end{multicols}
\begin{multicols}{2}
\subsubsection{title}
Broken text that spreads over two lines to demonstrate behaviour.
Now extended to another line.
\columnbreak
\subsubsection{title}
foo
\end{multicols}
\end{document}
\subsection
后面有可拉伸的胶水,并在multicols
第一个示例中使用它来尝试平衡列的底部。当差异较大时,胶水就不足以实现这一点。(在您的示例中,您看到更大的垂直空间,因为parskip=half
设置选项后有更多的胶水可用;令人惊讶的是,正如@lockstep 指出的那样。)
为了解决这个问题,实际上有一个简单的解决方案,使用\raggedcolumns
以下命令multicol
:
\documentclass{article}
\usepackage{multicol}
\begin{document}
\begin{multicols}{2}
\raggedcolumns
\subsubsection{title}
Broken text that spreads over two lines to demonstrate behaviour.
\columnbreak
\subsubsection{title}
foo
\end{multicols}
Text below
\end{document}
我在下面添加了文本multicols
来证明与环境不同,在这种情况下页面不会刷新multicols*
。
答案2
虽然我不知道发生了什么,但我可以根据事情按预期进行的事实提供一种解决方法:将( )parskip=full
定义中包含的可拉伸性降低到()。parskip=half
plus 0.5\baselineskip
parskip=full
plus 0.1\baselineskip
\documentclass[parskip=half]{scrreprt}
\makeatletter
\setparsizes{\z@}{.5\baselineskip \@plus .1\baselineskip}{%
1em \@plus 1fil}%
\makeatother
\usepackage{multicol}
\begin{document}
\begin{multicols}{2}
\subsubsection{title}
this \\
is \\
a long \\
text
\vfill
\columnbreak
\subsubsection{title}
foo
\end{multicols}
\end{document}