乳胶内核的页眉和页脚在哪里定义或解释?

乳胶内核的页眉和页脚在哪里定义或解释?

我有兴趣了解页眉和页脚框是如何定义的(我猜是在 TeX 中)。它们在哪里定义?我从 开始fancyhdr,它引导我到来源2e,在其中我发现了ltpageno.dtx。这里,\thepage有解释。其中存在的框\thepage这里没有解释。哦,它们在哪里,哦,它们在哪里?

不幸的是,尝试阅读fancyhdr包代码虽然很短,但就像尝试阅读中文一样。

$(kpsewhich -var-value TEXMFDIST)/tex/latex/fancyhdr/fancyhdr.sty

答案1

这里没有解释盒子在\thepage哪里。哦,它们在哪里?

\thepage不能与框绑定,因此这部分问题实际上没有答案。\thepage是全局定义的,并且像所有\the反名 LaTeX 中的宏,它给出计数器的当前打印表示page

事实上,在大多数地方,页码计数器的当前值并没有多大用处,它只告诉您(多一个)最后一页的页码,但这可能是也可能不是当前文本结束的页码。因此,只有在\thepage知道页面构成的地方进行评估才有意义,即在“输出例程”内,该例程负责使用文本主体、任何待处理的浮动内容(如表格和图形)以及页眉和页脚,从主垂直列表的顶部组成页面。

基础乳胶代码中与页眉和页脚相关的代码非常少。

在输出例程本身中(ltoutput.dtx),头部被添加在顶部边距之后

\vskip \topmargin
\moveright\@themargin \vbox {%
  \setbox\@tempboxa \vbox to\headheight{%
    \vfil
    \color@hbox
      \normalcolor
      \hb@xt@\textwidth{\@thehead}%
    \color@endbox
    }%

基本上,经过一些字体和颜色标准化,页面头部不会在分页符处拾取字体,只是\hbox to \textwidth{\@thehead}

因此,重要的问题是:宏中有什么\@thehead?这也是在ltoutput.dtxas中设置的

  \if@twoside
    \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
         \let\@themargin\oddsidemargin
    \else \let\@thehead\@evenhead
       \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
    \fi
  \fi

所以它是\@oddhead\@evenhead取决于。这些宏由页面样式设置。命令\pagestyle{foo}执行\ps@foo。LaTeX 本身没有特定的命令来帮助定义页面样式,这就是它的作用fancyhdr所在。但如果没有fancyhdrlatex 格式定义(在ltpage.dtxemptyplain样式,后者是

\def\ps@plain{\let\@mkboth\@gobbletwo
     \let\@oddhead\@empty\def\@oddfoot{\reset@font\hfil\thepage
     \hfil}\let\@evenhead\@empty\let\@evenfoot\@oddfoot}

因此在plain页面样式中,页头是空的,而页脚具有居中的页码。

相关内容