页面样式仅适用于 afterpage 下的 \thispagestyle

页面样式仅适用于 afterpage 下的 \thispagestyle

使用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 页将采用空白页面样式。

相关内容