\vbox
我正在尝试计算之前的高度\begin{document}
。目标是使用在 fancyhdr 中设置标题高度\setlength{\headheight}{(insert calculated height here)}
。
这是我目前所拥有的:
\newdimen\height
\setbox0=\vbox{\MakeHeader}
\setlength{\headheight}{\height pt}
\MakeHeader
我编写的构建标题的命令在哪里。
(改编自这个问题)。
! LaTeX Error: Missing \begin{document}
但是,当我尝试在序言中运行它时,我遇到了问题。当我在之后运行它\begin{document}
时,第 2 页的页眉大小设置正确,但第一页的正文边距太小 - 即我的文档正文和页眉重叠。
\vbox
有没有比我正在尝试的更好的方法?如果没有,是否有可能在不期望 LaTeX 位于文档内部的情况下计算出“假”的大小?
答案1
如果您正在使用fancyhdr
,您可以按如下方式操作:
\documentclass{article}
\usepackage{fancyhdr}
\usepackage{mathptmx}
\usepackage{lipsum} % for mock text
\usepackage{showframe} % to show the page blocks
\newcommand{\Makeheader}{\parbox[b]{\textwidth}{\lipsum[1][1-5]}}
\AtBeginDocument{%
\settoheight{\headheight}{\Makeheader}%
\addtolength{\headheight}{4pt}%
}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[L]{\Makeheader}
\begin{document}
\the\headheight
\end{document}
尝试不同的字体和字体选项。
答案2
以下是 @egreg 的答案的更新。它考虑到了这一点\headrule
。
\documentclass{article}
\usepackage{fancyhdr}
\usepackage{mathptmx}
\usepackage{lipsum} % for mock text
\usepackage{showframe} % to show the page blocks
\newcommand{\Makeheader}{\parbox[b]{\textwidth}{\lipsum[1][1-5]}}
\AtBeginDocument{%
\settoheight{\headheight}{\vbox{%
\noindent\Makeheader\strut\vspace{\headruleskip}\headrule}}%
}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[L]{\Makeheader}
\begin{document}
\the\headheight
\end{document}
由于 是\headrule
垂直放置的,因此必须将其放在 中\vbox
。 是\noindent
为了避免出现\overfull hbox
警告。 并且\headruleskip
是 fancyhdr 版本 4 的功能。如果您不使用它,\vspace{\headruleskip}
可以省略 ,但为了完整性,我将其包括在内。
我将在文档的未来版本中引用此解决方案。我即将修订有关更改和fancyhdr
的文档,因此这来得正是时候。\headheight
\footskip
也许我会在未来的版本中用已有的信息创建一个命令来执行此操作fancyhdr
,而不必定义像这样的命令\Makeheader
。