fancyhdr 中的头规长度

fancyhdr 中的头规长度

Latex 页面使用该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}

在此处输入图片描述

设置\FHoffset1cm\FHleft\FHright1cm,主规则的宽度将等于\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 英寸的硬编码大小)。

您可以轻松更改此定义来移动主规则。

相关内容