我有兴趣了解页眉和页脚框是如何定义的(我猜是在 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.dtx
as中设置的
\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
所在。但如果没有fancyhdr
latex 格式定义(在ltpage.dtx
)empty
和plain
样式,后者是
\def\ps@plain{\let\@mkboth\@gobbletwo
\let\@oddhead\@empty\def\@oddfoot{\reset@font\hfil\thepage
\hfil}\let\@evenhead\@empty\let\@evenfoot\@oddfoot}
因此在plain
页面样式中,页头是空的,而页脚具有居中的页码。