自定义 fancyhdr

自定义 fancyhdr

我正在尝试设置标题,但遇到了一些问题。我希望以以下方式显示它:

(零件编号):(零件名称) ---- (章节编号)。(章节名称)

页眉应显示在除新部分开始的页面之外的所有页面上。

\documentclass[a4paper]{report}
\usepackage{titlesec}
\usepackage{fancyhdr}
\usepackage{lipsum}
\pagestyle{fancy}

\makeatletter
\@addtoreset{chapter}{part}
\makeatother

\begin{document}
\part{Part one}
\chapter{Chapter one}
\lipsum[1]
\section{Section one}
\lipsum[1-4]
\part{Part two}
\chapter{Chapter one}
\lipsum[1]
\section{Section one}
\lipsum[1-4]
\end{document}

答案1

report不提供零件级别的标记。您可以使用scrreprtandscrlayer-scrpage代替reportand fancyhdr

\documentclass{scrreprt}
\usepackage[autooneside=false]{scrlayer-scrpage}
\pagestyle{headings}
\automark[chapter]{part}
\chead{}
\ihead{\leftmark}
\ohead{\rightmark}

\renewcommand*{\chapterpagestyle}{headings}% use headings page style also for chapter pages

\usepackage{mwe}
\begin{document}
\tableofcontents
\part{First Part}
\blinddocument
\part{Second Part}
\blinddocument
\end{document}

使用 scrreprt 和 scrlayer-scrpage 的示例

如果scrreprt应该更相似,report您可以使用选项emulatestandardclasses

\documentclass[emulatestandardclasses,autooneside=false]{scrreprt}
\renewcommand*{\chaptermarkformat}{\thechapter\autodot\enskip}
\pagestyle{headings}
\automark[chapter]{part}
\chead{}
\ihead{\leftmark}
\ohead{\rightmark}

\renewcommand*{\chapterpagestyle}{headings}% use headings page style also for chapter pages

\usepackage{mwe}
\begin{document}
\tableofcontents
\part{First Part}
\blinddocument
\part{Second Part}
\blinddocument
\end{document}

更像是报告

如果您想要一个头部分隔线,则可以使用选项headsepline。有关 KOMA-Script 类或包的配置的更多信息,请参阅 KOMA-Script 手册scrlayer-scrpage

注意:您不应将titlesec其与 KOMA-Script 类一起使用scrreprt。您应改用 KOMA-Script 功能来配置分段命令。

为了获得相同的效果,report您必须修补该课程:

\documentclass{report}
\usepackage[autooneside=false]{scrlayer-scrpage}
\pagestyle{headings}
\automark[chapter]{part}
\chead{}
\ihead{\leftmark}
\ohead{\rightmark}

\usepackage{xpatch}
\makeatletter
\xpatchcmd{\@part}{\@endpart}{%
  \partmark{#2}%
  \@endpart
}{}{}
\makeatother
\renewcommand*{\partmarkformat}{\thepart.\enskip}
\renewcommand*{\chaptermarkformat}{\thechapter.\enskip}

\xpatchcmd{\chapter}{\thispagestyle{plain}}{}{}{}% dont use pagestyle plain for chapter pages

\usepackage{mwe}
\begin{document}
\tableofcontents
\part{First Part}
\blinddocument
\part{Second Part}
\blinddocument
\end{document}

使用报告和 scrlayer-scrpage 的示例

注意:您不能组合fancyhdrscrlayer-scrpage。因此,如果您使用scrlayer-scrpage配置如上所示的页面标题,则不得加载fancyhdr

但如果你确实想使用,fancyhdr你可以用scrlayer-scrpage一些代码替换最后一个例子的代码fancyhdr,例如,

\documentclass{report}
\usepackage{xpatch}
\makeatletter
\xpatchcmd{\@part}{\@endpart}{%
  \partmark{#2}%
  \@endpart
}{}{}
\makeatother

\usepackage{fancyhdr}
\pagestyle{fancy}
\newcommand*{\partmark}[1]{\markboth{\thepart.\enskip \MakeUppercase{#1}}{}}
\renewcommand*{\chaptermark}[1]{\markright{\thechapter.\enskip \MakeUppercase{#1}}}
\renewcommand*{\sectionmark}[1]{}
\lhead{\leftmark}
\rhead{\rightmark}

\xpatchcmd{\chapter}{\thispagestyle{plain}}{}{}{}% dont use pagestyle plain for chapter pages

\usepackage{mwe}
\begin{document}
\tableofcontents
\part{First Part}
\blinddocument
\part{Second Part}
\blinddocument
\end{document}

注意:如果您正在使用软件包,则titlesec必须使用\renewcommand来(重新)定义。如果您使用来重新定义,\partmark修补可能会失败。如果您使用来重新定义,修补可能会失败。\@parttitlesec\part\chaptertitlesec\chapter

相关内容