我有一个具有以下配置的文档:
geometry
在序言中定义了使用自定义布局;fancyhdr
自定义页眉/页脚在序言中定义;- 紧接着
\begin{document}
为文档的第一部分定义了另一种布局; - 文档的默认布局稍后会恢复。
由于文本块的边距和宽度各不相同,我需要定义一个合适的偏移量,\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
。