使用afterpage
设置页面样式后有些页面只对 有效\thispagestyle
,对 无效\pagestyle
。这是为什么?我该如何让它正常工作?
\lipsum[1-20]
生成 4 页文本,乱数风格。因此,以下文档由 8 页组成。
\documentclass{article}
\usepackage{fancyhdr,afterpage,lipsum}% http://ctan.org/pkg/{fancyhdr,afterpage,lipsum}
\fancypagestyle{pagestyleA}{
\fancyhf{}% Clear header/footer
\fancyhead[C]{pagestyleA}% Header
\fancyfoot[C]{A--\thepage}% Footer
}
\fancypagestyle{pagestyleB}{
\fancyhf{}% Clear header/footer
\fancyhead[C]{pagestyleB}% Header
\fancyfoot[C]{B--\thepage}% Footer
}
\pagestyle{empty}
\begin{document}
\afterpage{\thispagestyle{pagestyleA}}\lipsum[1-20]
\clearpage
\afterpage{\pagestyle{pagestyleB}}\lipsum[1-20]
\end{document}
\afterpage{\thispagestyle{pagestyleA}}
开始使用打印第 2 页,页面样式为pagestyleA
。
预计第二个\afterpage{\pagestyle{pagestyleB}}
应提供具有页面样式的 6-8 页pagestyleB
。但是,它什么也没做...
答案1
包文档afterpage
没有明确说明这个主题,但事实证明,作为参数给出的标记列表\afterpage
是在组内处理的,因此除非明确说明,否则其中的声明将在组末尾撤消\global
。
的影响\thispagestyle
确实是全球性的:它的定义是
\def\thispagestyle#1{%
\@ifundefined{ps@#1}%
\undefinedpagestyle
{\global\@specialpagetrue\gdef\@specialstyle{#1}}}
另一方面,的定义\pagestyle
是
\def\pagestyle#1{%
\@ifundefined{ps@#1}%
\undefinedpagestyle
{\@nameuse{ps@#1}}}
因此不能说\global\pagestyle{pagestyleB}
:实际的分配是在执行中包含的指令时执行的\ps@pagestyleB
。
正如 Andrew Swann 在他的评论中所说,该问题在fancyhdr
的文档第 17 页中进行了讨论。
根据预期应用,可以使用“条件定义”页面样式并使用\afterpage
全局更改条件的真值来解决该问题。例如
\documentclass{article}
\usepackage{fancyhdr,afterpage,lipsum}
\newif\ifpsB
\fancypagestyle{pagestyleAB}{
\fancyhf{}% Clear header/footer
\fancyhead[C]{pagestyleA}% Header
\fancyfoot[C]{\ifpsB B\else A\fi--\thepage}% Footer
}
\pagestyle{pagestyleAB}
\begin{document}
\afterpage{\thispagestyle{empty}}\lipsum[1-20]
\clearpage
\afterpage{\global\psBtrue}\lipsum[1-20]
\end{document}
这里第 1 页和第 3-5 页的页脚将显示“A—#”,第 6-8 页将显示“B—#”,第 2 页将采用空白页面样式。