使用该fancyhdr
包,是否可以在不改变标题长度的情况下改变(增加或减少)标题规则的长度?
在相关图片中,可以看到 headerrule 矩形(红色)的长度与 header 的长度不相同。这正是我想要的。实际上,我希望 headrule 和 textwidth 的长度相同,但 header 应该比两者都大。
例如,使用:
\fancyheadoffset{1 cm}
我可以让 header 比 textwidth 大。但是 headrule 也会变大,并且 header 和 headrule 的长度相同。
在我添加的另一个示例中,可以看到展开的标题,带有徽标,以及与标题大小相同的标题规则。如果我想让标题规则的大小与脚规则相同(或具有我想要的任何大小/对齐方式),同时保持标题不变,该怎么办?
答案1
您可以简单地重新定义\headrule
;在下面的例子中,我使用了两个新的长度\HFleft
和\HFright
分别控制头部规则的左右修剪;只需更改这些长度的值,您就可以按照所需的方式缩短头部规则。辅助 \FHoffset 长度用作 的参数\fancyheadoffset
。一些例子:
最初,\FHoffset
设置为0cm
以及两个装饰:
\documentclass{article}
\usepackage{lipsum}% just to generate filler text for the example
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhead[L]{Left}
\fancyhead[R]{Right}
\fancyhead[C]{Center}
% Length to control the \fancyheadoffset and the calculation of \headline
% simultaneously
\newlength\FHoffset
\setlength\FHoffset{1cm}
\addtolength\headwidth{2\FHoffset}
\fancyheadoffset{\FHoffset}
% these lengths will control the headrule trimming to the left and right
\newlength\FHleft
\newlength\FHright
% here the trimmings are controlled by the user
\setlength\FHleft{1cm}
\setlength\FHright{0cm}
% The new definition of headrule that will take into acount the trimming(s)
\newbox\FHline
\setbox\FHline=\hbox{\hsize=\paperwidth%
\hspace*{\FHleft}%
\rule{\dimexpr\headwidth-\FHleft-\FHright\relax}{\headrulewidth}\hspace*{\FHright}%
}
\renewcommand\headrule{\vskip-.7\baselineskip\copy\FHline}
\begin{document}
\section{Test Section}
\subsection{Test Subsection}
\lipsum[1-20]
\end{document}
设置\FHoffset
为1cm
和\FHleft
和\FHright
到1cm
,主规则的宽度将等于\textwidth
,主规则将跨越文本宽度:
将设置更改为
\setlength\FHoffset{1cm}
\setlength\FHleft{1cm}
\setlength\FHright{0cm}
结果是
与
\setlength\FHoffset{1cm}
\setlength\FHleft{2cm}
\setlength\FHright{4cm}
我们得到
答案2
假设您想将页码放在页边距中,而不是加宽规则,则可以这样做:
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[LO]{\rightmark}
\fancyhead[RO]{\makebox[0pt][l]{\makebox[2cm][r]{\thepage}}}
\fancyhead[LE]{\makebox[0pt][r]{\makebox[2cm][l]{\thepage}}}
\fancyhead[RE]{\leftmark}
在右侧页面中,页眉的右侧字段由零宽度框组成,其中排版了一个 2cm 宽的框,页码在右侧对齐。在左侧页面中,我们执行相反的操作。
这是左侧页面:
这是右侧页面:
答案3
在fancyhdr.sty
主规则中定义为
\def\headrule{{\if@fancyplain\let\headrulewidth\plainheadrulewidth\fi
\hrule\@height\headrulewidth\@width\headwidth \vskip-\headrulewidth}}
这有点像
\makeatletter
\def\headrule{{\if@fancyplain\let\headrulewidth\plainheadrulewidth\fi
\hrule\@height\headrulewidth\@width 2in \vskip-\headrulewidth}}
\makeatother
\headwidth
应该可以解决问题(我们在定义中将标题的宽度更改为 2 英寸的硬编码大小)。
您可以轻松更改此定义来移动主规则。