KOMA-Script 的章节顶部分离

KOMA-Script 的章节顶部分离

我制作了一个切换开关,用于切换 KOMA-Script 中各章节的行为,以便将它们放在同一页上(有点像章节)。我希望标题和章节之间有一致的分隔,但似乎有所不同。我使用 来patchcmd截取clearpage部分\scr@startchapter并注入切换开关,并使用 vspace 控制章节之间的分隔。对于从新页面开始的章节,我以为这\gdef\chapterheadstartvskip{\vspace*{19pt}}可以解决问题,但有时似乎不起作用。我注意到未应用间距的章节,标题是空白的——我认为这是因为前一章仍处于“活动”状态。

下面的 MWE。

\documentclass[letterpaper,twoside=false]{scrbook}
\usepackage{blindtext}
\usepackage[enable]{pagegrid}

\usepackage[headsepline]{scrlayer-scrpage}

\RedeclareSectionCommand[beforeskip=20pt]{chapter}

\def\chapterpagestyle{scrheadings}

\usepackage{xpatch}
\usepackage{etoolbox}
\newtoggle{ChapOnSamePage}

\gdef\chapterheadstartvskip{\vspace*{19pt}}


\makeatletter
\patchcmd{\scr@startchapter}{\if@openright\cleardoublepage\else\clearpage\fi}{%
  \iftoggle{ChapOnSamePage}{\vspace{2em}}{\if@openright\cleardoublepage\else\clearpage\fi}%
}{}{}
\makeatother


\begin{document}

\chapter{Space I want when chap starts new page}
Hi
\blindtext

\chapter{}
Hi

\toggletrue{ChapOnSamePage}

\chapter{Chaps on same page here and below}
Hi

\chapter{}
Hi

\chapter{}
Hi

\chapter{too close here}
\blindtext

\chapter{}
Hi

\chapter{}
Hi

\chapter{too close here too}
Hi

\chapter{}
Hi

\chapter{}
Hi

\chapter{}
Hi

\pagebreak

\chapter{pagebreak before me -- looks good}
Hi

\togglefalse{ChapOnSamePage}
\chapter{Chaps back on new page}
Hi

\chapter{}
Hi

\end{document}

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

答案1

KOMA-Script 的章节样式chapter设计为从新页面开始。因此没有任何机制可以防止在\chapterheadstartvskip章节标题和章节之间出现分页符。因此,在您的情况下,修补样式后,自动分页符有时会在垂直距离之前发生,但有时会在垂直距离之后发生。

例如,你可以使用包来阻止这种情况needspace当您接近页面末尾时,强制分页:

\documentclass[letterpaper,twoside=false]{scrbook}
\usepackage{blindtext}
\usepackage[enable]{pagegrid}

\usepackage[headsepline]{scrlayer-scrpage}

\RedeclareSectionCommand[beforeskip=20pt]{chapter}

\def\chapterpagestyle{scrheadings}

\usepackage{xpatch}
\usepackage{etoolbox}
\newtoggle{ChapOnSamePage}
\usepackage{needspace}
\makeatletter
\patchcmd{\scr@startchapter}{\if@openright\cleardoublepage\else\clearpage\fi}{%
  \iftoggle{ChapOnSamePage}{\needspace{4em}\vspace{2em}}{\if@openright\cleardoublepage\else\clearpage\fi}%
}{}{}
\makeatother


\begin{document}

\chapter{Space I want when chap starts new page}
Hi
\blindtext

\chapter{}
Hi

\toggletrue{ChapOnSamePage}

\chapter{Chaps on same page here and below}
Hi

\chapter{}
Hi

\chapter{}
Hi

\chapter{too close here}
\blindtext

\chapter{}
Hi

\chapter{}
Hi

\chapter{too close here too}
Hi

\chapter{}
Hi

\chapter{}
Hi

\chapter{}
Hi

\pagebreak

\chapter{pagebreak before me -- looks good}
Hi

\togglefalse{ChapOnSamePage}
\chapter{Chaps back on new page}
Hi

\chapter{}
Hi

\end{document}

但是,我不喜欢 行为不一致的想法\chapter。通常,章节应该是章节,所有章节的行为都应该相同。如果某些章节不应该是章节,那么您应该使用并可能为这些章节定义另一个章节命令,恕我直言。

还要注意:因为这些补丁总是邪恶的,KOMA-Script 作者提出了另一种防止章节分页的想法

相关内容