计算序言中 Vbox 的高度

计算序言中 Vbox 的高度

\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

相关内容