设置 \newgeometry 后 rfoot 放置错误

设置 \newgeometry 后 rfoot 放置错误

我有一份文档,其中从某个点开始左边距的宽度会发生变化。为此,我使用了包\newgeometry的命令geometry

然而,在文档中具有新边距值的部分,右侧页脚显示在错误的位置。(尽管如此,左侧页脚在更改边距之前和之后都正确放置。)

以下是重现该问题的示例:

\documentclass[a4paper,12pt]{article}

\usepackage[margin=1.125in,top=1in,right=1in,left=2in]{geometry}
\usepackage{lipsum,fancyhdr}

\fancyhead{}
\renewcommand{\headrulewidth}{0pt}
\fancyfoot{}
\rfoot{Rfoot: Page number \thepage{}}
\lfoot{Lfoot: some text}
\pagestyle{fancy}

\begin{document}
Some text
\vfill
\lipsum[1]

\clearpage
\newgeometry{margin=1.125in,top=1in,right=1in,left=1in}
Some other text
\vfill
\lipsum[1]
\end{document}

以下是正确行为的示例(边距改变之前):

在此处输入图片描述

而这里是错误的行为(边距改变之后):

在此处输入图片描述

我怎么解决这个问题?

答案1

fancyhdr使用“命令”\headwidth设置脚和头的宽度。这不会被更新\newgeometry

\headwidth实际上是\let\headwidth\fancy@headwidth,即实际长度寄存器为\fancy@headwidth

\documentclass[a4paper,12pt]{article}

\usepackage[margin=1.125in,top=1in,right=1in,left=2in]{geometry}
\usepackage{lipsum,fancyhdr}

\fancyhead{}
\renewcommand{\headrulewidth}{0pt}
\fancyfoot{}
\rfoot{Rfoot: Page number \thepage{}}
\lfoot{Lfoot: some text}
\pagestyle{fancy}

\begin{document}
Old geometry: \verb!\headwith! is \the\headwidth

Some text
\vfill
\lipsum[1]

\clearpage
\newgeometry{margin=1.125in,top=1in,right=1in,left=1in}
new geometry: \verb!\headwith! is still \the\headwidth
\setlength{\headwidth}{\textwidth}


Redefined: \verb!\headwith! is now \the\headwidth



Some other text
\vfill
\lipsum[1]
\end{document}

更新

我附加了一些\newgeometry可自动更新的代码\fancy@headwidth。这解决了问题。

\documentclass[a4paper,12pt]{article}


\usepackage[margin=1.125in,top=1in,right=1in,left=2in]{geometry}
\usepackage{lipsum,fancyhdr}

\makeatletter
\let\@geometry@newgeometry\newgeometry

\renewcommand{\newgeometry}[1]{%
  \@geometry@newgeometry{#1}% Call regular \newgeometry first
  \setlength{\fancy@headwidth}{\textwidth}%
}
\makeatother

\fancyhead{}
\renewcommand{\headrulewidth}{0pt}
\fancyfoot{}
\rfoot{Rfoot: Page number \thepage{}}
\lfoot{Lfoot: some text}
\pagestyle{fancy}

\begin{document}
Old geometry: \verb!\headwith! is \the\headwidth

Some text
\vfill
\lipsum[1]

\clearpage
\newgeometry{margin=1.125in,top=1in,right=1in,left=1in}
new geometry: \verb!\headwith! is still \the\headwidth

Redefined: \verb!\headwith! is now \the\headwidth

Some other text
\vfill
\lipsum[1]
\end{document}

在此处输入图片描述

相关内容