我有一份文档,其中从某个点开始左边距的宽度会发生变化。为此,我使用了包\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}