有一个book
文档类,我试图实现不同的每章第一页的页脚/页眉。
基于这个答案说明,我定义了以下自定义样式,使用titlesec
:
\newpagestyle{pageHeaderStyle}{%
\setfoot
{}
{\vcenteredhbox{\confidentialClause}}
{\thepage}
}
然后使用以下命令更改章节首页样式:
\renewcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi
\thispagestyle{pageHeaderStyle}
\global\@topnum\z@
\@afterindentfalse
\secdef\@chapter\@schapter}
每一章都运行良好,除了目录,在页眉和页脚处输出CONTENTS
,如下所示:
而预期的行为(在其余章节中运行良好)是:
答案1
\thispagestyle
这是一种在命令中“动态”调整的方法,\chapter
方法是将其替换为\@currentthispagestyle
,其设置为\SetCurrentPageStyle
我使用过fancyhdr
(因为我更熟悉该包)并且tcolorbox
(因为我不知道它\vcenteredhbox
来自哪里)
由于\@currentthispagestyle
默认为plain
,因此 ToC 将使用普通样式。
\documentclass{book}
\usepackage{xpatch}
\usepackage{xparse}
\usepackage[most]{tcolorbox}
\tcbset{confbox/.style={nobeforeafter,
enhanced jigsaw,
sharp corners,
boxrule=2pt,
colframe=red,
leftrule=0pt,
rightrule=0pt,
colback=white,
colupper=red,
fontupper=\large\bfseries}
}
\usepackage[headheight=35pt]{geometry}
\usepackage{blindtext}
\usepackage{fancyhdr}
\newcommand{\confidentialClause}{CONFIDENTIAL}
%Define a page style
\fancypagestyle{confidentialheader}{%
\renewcommand{\headrulewidth}{0pt}
\fancyhf{}
\fancyhead[R]{\tcbox[confbox]{\confidentialClause}}
\fancyfoot[C]{\thepage}
}
\makeatletter
\newcommand{\@currentthispagestyle}{plain}
\NewDocumentCommand{\SetCurrentPageStyle}{om}{%
\cleardoublepage%
\IfValueTF{#1}{%
\renewcommand{\@currentthispagestyle}{#1}%
}{%
\renewcommand{\@currentthispagestyle}{#2}%
}%
\pagestyle{#2}%
}
% Perform a patch to change 'plain' to `\@currentthispagestyle`
\AtBeginDocument{%
\xpatchcmd{\chapter}{\thispagestyle{plain}}{\thispagestyle{\@currentthispagestyle}}{}{}
}
\makeatother
\begin{document}
\tableofcontents
\SetCurrentPageStyle{confidentialheader}
\chapter{Foo}
\blindtext[20]
\end{document}