Fancyhdr 几何形状对于 pagestyle 来说是正确的,但对于 thispagestyle 来说不正确

Fancyhdr 几何形状对于 pagestyle 来说是正确的,但对于 thispagestyle 来说不正确

我正在尝试生成一个包含两个不同页眉的文档,一个用于文档的第一页和章节的第一页,另一个用于所有其他页面。所有页面都应有页脚,并给出页码。

我正在使用fancyhdr并定义了与每个页眉相关的页面样式,我遇到的问题是如何纠正第一页的页眉大于其他页的页眉这一事实。当我从一个页面切换到另一个页面时,我必须强制重新计算几何图形,最明显的是,当我增加页眉高度时,页脚不会被推离页面。我已将几何图形的重新计算放在页面样式定义中,以便将它们一起调用,如果我调用\pagestyle{either style},我会得到预期的结果。

我迷失的部分是我希望能够使用它\thispagestyle作为每个部分的第一页,当我尝试这样做时,我得到了适当的标题,但没有得到适当的几何形状。

下面是显示该问题的 MWE:

\documentclass[a5paper,12pt]{article}
\usepackage[showframe]{geometry}
\usepackage{fancyhdr}
\renewcommand{\headrulewidth}{2pt}
\setlength{\parindent}{0cm}

\fancypagestyle{firstpages}{%
  \newgeometry{includeheadfoot, left=1cm, right=1cm, top=.5cm, bottom = 1cm, headheight=57pt}
  \rhead{Long header\\line2\\line3\\line4}
  \cfoot{\thepage} 
  }

\fancypagestyle{others}{%
  \newgeometry{includeheadfoot, left=1cm, right=1cm, top=.5cm, bottom=1cm, headheight=15pt}
  \lhead{}
  \chead{}
  \rhead{Normal header}
  \cfoot{\thepage}
  }

\begin{document}

\pagestyle{firstpages}
Text under big header

\pagebreak
\pagestyle{others}
Text under little header

\pagebreak
\thispagestyle{firstpages}
Text under big header

\pagebreak
Text under little header

\pagebreak
\pagestyle{firstpages}
Text under big header

\end{document} 

样式由\pagestyle(1, 2, 4, 5) 定义的页面很好,但在\thispagestyle使用的第 3 页上,与几何相关的框不会移动,并且(我认为结果是)页脚被推离了页面。

\pagestyle我还没有找到关于和之间的差异的描述\thispagestyle,我预计这会导致这种行为,但显然有些事情是这样的。有没有办法让它工作?(或者,我很高兴听到另一种方法,使原本未划定的章节的第一页与没有已知分页符位置的章节的其余部分不同。)我不是一位经验丰富的 Latex 用户,所以如果我忽略了任何明显的东西,请告诉我。

答案1

部分答案:对 的调用\pagestyle会立即执行。对 的调用\thispagestyle仅作为页面输出例程的一部分执行 - 确保它将取代\pagestyle可能生效的任何内容(或在同一页面上调用\thispagestyle)。因此,\pagestyle显示所需的结果,而\thispagestyle没有 - 页面及其尺寸已经组装完毕。

来自LaTeX 内核

\def\pagestyle#1{%
  \@ifundefined{ps@#1}%
    \undefinedpagestyle
    {\@nameuse{ps@#1}}}
\def\thispagestyle#1{%
  \@ifundefined{ps@#1}%
    \undefinedpagestyle
    {\global\@specialpagetrue\gdef\@specialstyle{#1}}}

请注意如何\pagestyle{<style>}调用\@nameuse{ps@<style>},而\thispagestyle{<style>}仅设置标志 -\@specialpagetrue并将样式存储在中\@specialstyle。只有稍后(作为的一部分\@outputpage)才会应用样式。

相关内容