multicol 环境中 KOMA-Script \section 后的间距

multicol 环境中 KOMA-Script \section 后的间距

我正在使用 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}%
}

在此处输入图片描述

相关内容