我有以下布局:
\documentclass{scrbook}
\usepackage{blindtext}
\usepackage[left=1.9cm, right=1.9cm, bottom=2.23cm, top=2.23cm]{geometry}% specific requirements
\usepackage[markcase=noupper]{scrlayer-scrpage}
\pagestyle{scrheadings}
\clearscrheadfoot
\lohead{\headmark}
\rohead{\pagemark}
\lehead{\pagemark}
\rehead{\headmark}
\rofoot[\pagemark]{}
\setkomafont{pageheadfoot}{\normalfont}
\begin{document}
\chapter{Chapter heading}
\blindtext[18]
\end{document}
在以新章节开始的页面上(例如上面 MWE 中的第 1 页),我希望页面底部和页码之间的间距与除新章节开始的页面(例如 MWE 中的第 2 页)以外的页面上页面底部和文本之间的间距相同(2.23 厘米)。如果我使用设置includefoot
,geometry
那么所有页面的空间都会调整,而不仅仅是底部有页码的页面...
因此,本质上,我需要的是类似includefoot
but 的东西,它只在plain.scrheadings
页面(新章节开始)上有效,而不在
scrheadings
页面(其他页面)上有效。如果有比使用几何图形更好的方法,那很好,但我必须使用这些精确的边距和标题(页码在章节开始的页面底部,否则在页眉中)。
答案1
要缩短\textheight
章节页面,您可以\enlargethispage
按照@Ulrike Fischer 在评论中的建议使用。因此您可以修补\chapterlinesformat
。
\usepackage{xpatch}
\xapptocmd\chapterlinesformat
{\enlargethispage{-\footskip}}{}{\PatchFailed}
\xapptocmd\chapterlineswithprefixformat
{\enlargethispage{-\footskip}}{}{\PatchFailed}
如果您添加类选项等,它的补丁\chapterlineswithprefixformat
也会起作用。chapterprefix
appendixprefix
要在普通页面上移动页码,您可以移动页面样式的所有页脚层plain
:
\ForEachLayerOfPageStyle*{plain.scrheadings}{%
\ifstrstart{#1}{plain.scrheadings.foot}
{\ModifyLayer[addvoffset=-\footskip]{#1}}
{}%
}
例子:
\documentclass{scrbook}
\usepackage{blindtext}
\usepackage[hmargin=1.9cm, vmargin=2.23cm% specific requirements
, showframe% to show the page layout
]{geometry}
\usepackage{scrlayer-scrpage}% <- sets style `scrheadings` automatically
\clearpairofpagestyles% <- scrlayer-scrpage macro
\ihead{\headmark}
\ohead{\pagemark}
\ofoot[\pagemark]{}
\ForEachLayerOfPageStyle*{plain.scrheadings}{%
\ifstrstart{#1}{plain.scrheadings.foot}
{\ModifyLayer[addvoffset=-\footskip]{#1}}
{}%
}
\setkomafont{pageheadfoot}{\normalfont}
\usepackage{xpatch}
\xapptocmd\chapterlinesformat
{\enlargethispage{-\footskip}}{}{\PatchFailed}
\xapptocmd\chapterlineswithprefixformat
{\enlargethispage{-\footskip}}{}{\PatchFailed}
\begin{document}
\chapter{Chapter heading}
\blindtext[18]
\end{document}
结果:
但是,页脚会使用plain
样式在所有页面上移动,而文本高度只会在章节页面上自动更改。
因此我建议仅为章节页面声明一种新的页面样式:
\documentclass{scrbook}
\usepackage{blindtext}
\usepackage[hmargin=1.9cm, vmargin=2.23cm% specific requirements
, showframe% to show the page layout
]{geometry}
\usepackage{scrlayer-scrpage}
\clearpairofpagestyles
\ihead{\headmark}
\ohead{\pagemark}
\ofoot[\pagemark]{}
\setkomafont{pageheadfoot}{\normalfont}
\DeclareNewLayer[
clone=plain.scrheadings.foot.odd,
addvoffset=-\footskip,
]{chapterpage.foot.odd}
\DeclarePageStyleByLayers{chapterpage}{chapterpage.foot.odd}
\renewcommand\chapterpagestyle{chapterpage}
\usepackage{xpatch}
\xapptocmd\chapterlinesformat
{\enlargethispage{-\footskip}}{}{\PatchFailed}
\xapptocmd\chapterlineswithprefixformat
{\enlargethispage{-\footskip}}{}{\PatchFailed}
\begin{document}
\chapter{Chapter heading}
\blindtext[18]
\end{document}
如果其他具有样式的页面plain
不应该获取页码:
\documentclass{scrbook}
\usepackage{blindtext}
\usepackage[hmargin=1.9cm, vmargin=2.23cm% specific requirements
, showframe% to show the page layout
]{geometry}
\usepackage{scrlayer-scrpage}
\clearpairofpagestyles
\ihead{\headmark}
\ohead{\pagemark}
\setkomafont{pageheadfoot}{\normalfont}
\DeclareNewLayer[
clone=plain.scrheadings.foot.odd,
addvoffset=-\footskip,
contents=\hfill\pagemark
]{chapterpage.foot.odd}
\DeclarePageStyleByLayers{chapterpage}{chapterpage.foot.odd}
\renewcommand\chapterpagestyle{chapterpage}
\usepackage{xpatch}
\xapptocmd\chapterlinesformat
{\enlargethispage{-\footskip}}{}{\PatchFailed}
\xapptocmd\chapterlineswithprefixformat
{\enlargethispage{-\footskip}}{}{\PatchFailed}
\begin{document}
\chapter{Chapter heading}
\blindtext[18]
\end{document}
结果和上面一样。