我使用 fancyhdr 来格式化我的页面样式。我使用了向内扩展的标题行。在章节的第一页,此行较短。
我想改变上面新章节开始处的双页外观。标题行不应继续,因为内容也会中断。我如何在章节的最后一页引入较短的标题行?
我还非常愿意接受任何其他设计想法,以便为这本 200 多页的书进行专业而又时尚的页面设计。
MWE:
\documentclass[
ngerman,
DIV=12,
parskip=half,
bibtotocnumbered,
paper=a4,
BCOR=4mm,
toc=chapterentrywithdots]{scrbook}
\usepackage[utf8]{inputenc}
\usepackage{fancyhdr}
\usepackage{blindtext}
\pagestyle{fancy}
\fancyheadoffset[LO,RE]{21mm}
\fancyfootoffset[RO,LE]{10mm}
\renewcommand{\chaptermark}[1]{\markboth{\thechapter\ #1}{}}
\renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}}
\fancyhf{}
\fancyhead[RO]{\textbf{\rightmark}}
\fancyhead[LE]{\textbf{\leftmark}}
\fancyfoot[LE,RO]{\thepage}
%
\fancypagestyle{plain}{
\fancyheadoffset[LO,RE]{21mm}
\fancyheadoffset[LE,RO]{-0.2\textwidth}
\fancyfootoffset[RO,LE]{10mm}
}
\title{mwe}
\begin{document}
\chapter{Chap One}
\section{Section One-One}
\Blindtext
\chapter{Chap Two}
\section{Section Two-One}
\Blindtext
\section{Section Two-Two}
\Blindtext
\end{document}
答案1
如果您仍然想使用fancyhdr
并且希望使用您提出的设计,请按照以下方法操作。
我认为检查是否位于章节最后一页的唯一可靠方法是在每一章的起始页上放置一个标签,然后检查fancyhdr
当前页码是否比下一章的起始页小一。处理页眉时必须执行此操作,否则页码可能不正确。您需要额外运行一次 LaTeX 才能获得正确的标签。
这就是以下代码的作用。它不适用于文档的最后一页,因为那时没有下一章,但您可以使用 在文档末尾添加一个假的起始页标签\AtEndDocument
。
\documentclass[
ngerman,
DIV=12,
parskip=half,
bibtotocnumbered,
paper=a4,
BCOR=4mm,
toc=chapterentrywithdots]{scrbook}
\usepackage[utf8]{inputenc}
\usepackage{fancyhdr}
\usepackage{etoolbox}
\usepackage{refcount}
\usepackage{blindtext}
\pagestyle{fancy}
\fancyheadoffset[LO]{21mm}
\fancyfootoffset[RO,LE]{10mm}
\renewcommand{\chaptermark}[1]{\markboth{\thechapter\ #1}{}}
\renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}}
\fancyhf{}
\fancyhead[RO]{\textbf{\rightmark}}
\fancyhead[LE]{\textbf{\leftmark}}
\fancyfoot[LE,RO]{\thepage}
%
\fancypagestyle{plain}{
\fancyheadoffset[LO,RE]{21mm}
\fancyheadoffset[LE,RO]{-0.2\textwidth}
\fancyfootoffset[RO,LE]{10mm}
}
\fancyheadinit{%
\ifnum\value{page}=\the\numexpr\getpagerefnumber{startpage-\thechapter}-1
\fancyheadoffset[RE]{0mm}%
\else
\fancyheadoffset[RE]{21mm}%
\fi
}
\newcommand{\prechapter}{%
\cleardoublepage
% Set label. Chapter <n> gets label startpage-<n-1>
\label{startpage-\thechapter}
}
% Prepend \prechapter to \chapter
\pretocmd{\chapter}{\prechapter}{}{\error}
\title{mwe}
\begin{document}
\chapter{Chap One}
\section{Section One-One}
\Blindtext
\chapter{Chap Two}
\section{Section Two-One}
\Blindtext
\section{Section Two-Two}
\Blindtext
\end{document}
答案2
这个答案是一个起点,使用scrlayer-scrpage
而不是fancyhdr
使用 KOMA-Script 类scrbook
。如需进一步定制,您可以查看scrguide。
遵循“良好”排版规则,不要改变章节最后一页的样式,而是以不同的样式格式化章节起始页。章节起始页通常没有页眉,页码位于底部中间。scrguide 中也有很多关于样式问题的说明。
\documentclass[headsepline, DIV=12, BCOR=4mm]{scrbook}
\usepackage{scrlayer-scrpage}
% define general style of header and footer
\clearpairofpagestyles
\ihead{\headmark}
\ifoot{\pagemark}
% define custom style for chapter pages
\newpairofpagestyles[scrheadings]{newChapterStyle}{\cfoot*{\pagemark} \ihead{} \ifoot{} \KOMAoptions{headsepline=false}}
% set custom style as chapter style
\renewcommand*{\chapterpagestyle}{newChapterStyle}
\usepackage{blindtext}
\begin{document}
\blinddocument
\end{document}