\leaders 重新定义 \headrule 导致“A应该在这里”

\leaders 重新定义 \headrule 导致“A应该在这里”

在剥离了数百行代码以达到这个 MWE 之后,我发现我的“A «box» 应该在这里”似乎是由与\renewcommand{\headrule}结合引起的fancyhdr

\leaders此外,如果我从规范中删除,错误就会消失\box

这个重新定义是我在某个时候拼凑起来的,无疑是受到一些我不完全理解的例子的启发。

我希望能够了解为什么会出现这个错误,以及如何重写它以消除该错误。

\documentclass[12pt,final]{article}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\headrule}{%
        \hbox to\headwidth{\leaders\rule[5pt]{\headwidth}{0.4pt}\hfill}%
%       \hbox to\headwidth{\rule[5pt]{\headwidth}{0.4pt}\hfill}%
    }%
\begin{document}
Hello, world.
\end{document}

PS,错误信息实际上不是“«box»”,​​而是应该用小于号和大于号替换“和”。当我在这里输入它们时,它们被拒绝了。

答案1

\hbox to \headwidth请注意,该规则是在垂直模式下设置的,这就是您在使用(类似于\makebox[\headwidth])方法时遇到问题的地方。

这是什么fancyhdr看起来\headrule像(使用\show\headrule):

\def\headrule{{\if@fancyplain\let\headrulewidth\plainheadrulewidth\fi
    \hrule\@height\headrulewidth\@width\headwidth
    \vskip-\headrulewidth}}

除了插入条件\hrule和规则厚度不足(垂直)之外。我只需使用类似的东西来复制行为

\makeatletter
\renewcommand{\headrule}{%
  \vskip -5pt % Move head rule up by 5pt
  \hrule \@height 0.4pt \@width \headwidth % Place head rule
  \vskip \dimexpr-0.4pt + 5pt\relax % Remove space inserted by raise and rule
}
\makeatother

相关内容