我正在使用 KOMA-Scriptscrartcl
类和multicol
包编写一篇两栏论文。但是,我从一个列标题、标题和命名部分开始,它们占据了我的第一页的大部分内容。在我的 MWE 中,这个空间被以下内容占用\rule
:
\documentclass[parskip=half]{scrartcl}
\usepackage{lipsum}
\usepackage{multicol}
\usepackage{bera}
\usepackage[charter]{mathdesign}
\RedeclareSectionCommand[
afterskip=1ex]{section}
\begin{document}
\rule{\textwidth}{15cm}
\begin{multicols}{2}
\section*{Section 1}
\lipsum[1-2]
\end{multicols}
\end{document}
如您所见,段落的划分非常不合理,只有最后一行被推到了下一页。同时,“第 1 节”后的空白非常大,尽管我将 的值定义为仅 1ex afterskip
,根据 KOMA-Script 文档,这是处理节标题后空白的“官方”方法。实际应用的空间显然大于 1ex。
如果我进一步降低该值(例如降低至 <0.1ex),段落的第一行在某个时候会“跳”起来,我得到了所需的行为。但这取决于所使用的字体,并且不适用于我喜欢的字体。
我认为这只是 LaTeX 算法根据其标准调整空白,但在这种情况下似乎毫无意义。
更新:
我已经更新了 MWE 以包含我的字体(Bera sans 代表 sans,Charter 代表正文),因为问题似乎与字体有关。在这个更新的情况下,即使设置afterskip=1sp
和也\raggedcolumn
无济于事。我也对只设置afterskip
为最小的数字感到有点不好意思,因为我不想影响我所有的章节标题。这真的只是 latex 在垂直空间上摸索,还是有其他参数参与?
答案1
该parskip=half
选项会导致节标题后出现额外空间。因此您必须afterskip=1sp
与一起使用parskip=half
。
\documentclass[
parskip=half% inserts additional space after \section
]{scrartcl}
\usepackage{lipsum}
\usepackage{multicol}
\RedeclareSectionCommand[
afterskip=1sp]{section}
\begin{document}
\rule{\textwidth}{15cm}
\begin{multicols}{2}
\section*{Section 1}
\lipsum[1-2]
\end{multicols}
\end{document}
此外,该\flushcolumns
命令(由环境使用multicolumns
)还可能插入额外的空格。这就是为什么当我删除该选项时仍然有一段距离parskip=half
:
为了避免这种情况,您可以使用\raggedcolumns
。
代码:
\documentclass[
%parskip=half% inserts additional space after \section
]{scrartcl}
\usepackage{lipsum}
\usepackage{multicol}
\RedeclareSectionCommand[
afterskip=1sp]{section}
\begin{document}
\noindent%< added
\rule{\textwidth}{15cm}
\begin{multicols}{2}
\raggedcolumns% <- added
\section*{Section 1}
\lipsum[1-2]
\end{multicols}
\end{document}
更新:afterskip
您只能在环境内部更改for 部分multicols
。也许您可以在那里使用 parindent 而不是 parskip。
\documentclass[parskip=half]{scrartcl}
\usepackage{lipsum}
\usepackage{multicol}
\usepackage{bera}
\usepackage[charter]{mathdesign}
%\RedeclareSectionCommand[afterskip=1ex]{section}
\usepackage{etoolbox}
\AtBeginEnvironment{multicols}{%
\raggedcolumns%
\RedeclareSectionCommand[afterskip=1sp]{section}%
\KOMAoptions{parskip=false}%
}
\begin{document}
\rule{\textwidth}{15cm}
\begin{multicols}{2}
\section*{Section 1}
\lipsum[1-2]
\end{multicols}
\section*{Section 2}
\lipsum
\end{document}
或者你可以parskip=full
在里面 使用multicols
\AtBeginEnvironment{multicols}{%
\raggedcolumns%
\RedeclareSectionCommand[afterskip=1sp]{section}%
\KOMAoptions{parskip=full}%
}