当使用几何图形改变布局时,如何计算 fancyhdr 的正确偏移量?

当使用几何图形改变布局时,如何计算 fancyhdr 的正确偏移量?

我有一个具有以下配置的文档:

  1. geometry在序言中定义了使用自定义布局;
  2. fancyhdr自定义页眉/页脚在序言中定义;
  3. 紧接着\begin{document}为文档的第一部分定义了另一种布局;
  4. 文档的默认布局稍后会恢复。

由于文本块的边距和宽度各不相同,我需要定义一个合适的偏移量,\fancyhdr以便它绘制的规则从正确的位置开始。最初,我以为我可以轻松做到这一点:

width of 'total body' in alternative layout - width of 'total body' in initial layout

减去一英寸以考虑 LaTeX 的默认偏移量。

也就是说,我认为

\fancyheadoffset[lh]{.1\paperwidth-1in}%

应该可以解决问题。

然而,这是行不通的:

偏移不正确

请注意,添加showframe往往会掩盖问题。事实上,我可以通过添加来绘制正确的标题规则

\makeatletter
\usepackage{atbegshi}%
\renewcommand*{\Gm@pageframes}{%
  \moveright\@themargin%
  \vb@xt@\z@{%
    \vb@xt@\z@{%
     \vskip\topmargin\vb@xt@\z@{\vss}%
     \vskip\headheight\vb@xt@\z@{\vss\Gm@hruled}%
     \vskip\headsep\vb@xt@\z@{\vss}%
     \@tempdima\textwidth
     \advance\@tempdima by \marginparsep
     \advance\@tempdima by \marginparwidth
     \vb@xt@\z@{\vss}%
     \vskip\footskip\vb@xt@\z@{\vss}%
     \vss}%
  }%
}
\AtBeginShipout{\setbox\AtBeginShipoutBox=\vbox{%
    \baselineskip\z@skip\lineskip\z@skip\lineskiplimit\z@
    \Gm@pageframes\box\AtBeginShipoutBox}}
\makeatother

到序言部分。(当然,在应该使用empty或 的页面上,这很糟糕。)plain

显然,如果不使用这个破解版本,我怎样才能获得正确的偏移量和正确的结果showframe

梅威瑟:

\documentclass[a4paper]{ltxdoc}
\usepackage{geometry,fancyhdr}
\usepackage{kantlipsum}
\usepackage{calc}
\geometry{headheight=12pt,marginparwidth=45mm,hmarginratio=4:1,vscale=.8,hscale=.7,verbose}
\pagestyle{fancy}
\begin{document}
\newgeometry{headheight=12pt,scale=.8,marginparwidth=0pt,marginparsep=0pt}%
\fancyheadoffset[lh]{.1\paperwidth-1in}%
\section{Kant}
\kant[1-6]
\restoregeometry
\fancyheadoffset[lh]{0pt}%
\section{More Kant}
\kant[7-10]
\end{document}

答案1

好吧,回想起来,我想这是显而易见的。正确的偏移量是零。

\documentclass[a4paper]{ltxdoc}
\usepackage{geometry,fancyhdr}
\usepackage{kantlipsum}
\usepackage{calc}
\geometry{headheight=12pt,marginparwidth=45mm,hmarginratio=4:1,vscale=.8,hscale=.7,verbose}
\pagestyle{fancy}
\begin{document}
\newgeometry{headheight=12pt,scale=.8,marginparwidth=0pt,marginparsep=0pt}%
\fancyheadoffset[lh]{0pt}%
\title{title}\author{author}\maketitle
\section{Kant}
\kant[1-6]
\restoregeometry
\fancyheadoffset[lh]{0pt}%
\section{More Kant}
\kant[7-10]
\end{document}

正确的偏移

将偏移量保留为默认值零与将其设置为零之间的区别在于,后者(而不是前者)会导致fancyhdr重新计算尺寸与当前定义的一致也就是说,它会根据使用 安装新的布局后这些尺寸的变化值强制重新计算\newgeometry

相关内容