我正在处理一个应该包含两个不同页眉的文档。页眉是通过指定pagestyle
s 生成的。不幸的是,页眉的高度相差很大,这使得页眉内容周围的间距看起来很糟糕。
如何更改headheight
包含不同标题的特定页面?我制作了一个 MWE 来显示只有一个的错误版本headheight
:
\documentclass[oneside]{memoir}
\usepackage{lipsum}
% Margin measures
\setulmarginsandblock{140pt}{\lowermargin}{*} % {upper margin}{lower margin}{ratio}
\setheadfoot{5\baselineskip}{\footskip} % {headheight}{footskip}
\setheaderspaces{72pt}{*}{*} % {headdrop}{headsep}{ratio}
\checkandfixthelayout[nearest]
% Header #1
\makepagestyle{pagestyle1}
\makeoddhead{pagestyle1}{}{Short header info}{}
\makeevenhead{pagestyle1}{}{Short header info}{}
% Header #2
\makepagestyle{pagestyle2}
\makeoddhead{pagestyle2}{}{Way\\way\\longer\\header\\info}{}
\makeevenhead{pagestyle2}{}{Way\\way\\longer\\header\\info}{}
\pagestyle{pagestyle2}
\begin{document}
\thispagestyle{pagestyle1}
\lipsum
\end{document}
澄清一下:我想要类似的\setheadfoot{\baselineskip}{\footskip}
东西pagestyle1
。
请注意,我正在使用,memoir
这就是为什么我没有遵循这里给出的答案:一个文档中不同的 \headheight
编辑:
根据 daleif 的要求,我试图将“真实世界的例子”形象化。见下图。图像是标题的一部分,而标题下方的表格高度不同。现在我只需要第一页包含“特殊信息”,因为其余页面与第 2 页相同。提出上述问题是为了概括问题/解决方案,从而获得一份不那么“黑客”的文档。
答案1
我会将文档页面样式设置为默认值,并调整第一页以满足您的需要。
下面的简单示例将第一页上的文本向上移动进入标题,使得文本块尺寸看起来不同。您可以调整一些长度以满足您的需要:
\documentclass[oneside]{memoir}
\usepackage{lipsum}
% Margin measures
\setulmarginsandblock{140pt}{\lowermargin}{*} % {upper margin}{lower margin}{ratio}
\setheadfoot{5\baselineskip}{\footskip} % {headheight}{footskip}
\setheaderspaces{72pt}{*}{*} % {headdrop}{headsep}{ratio}
\checkandfixthelayout[nearest]
% Header #1
\newcommand{\shortheadertext}{\begin{tabular}[t]{c} Short header \\ info \end{tabular}}
\makepagestyle{pagestyle1}
\makeoddhead{pagestyle1}{}{\vphantom{\longheadertext}\shortheadertext}{}
\makeevenhead{pagestyle1}{}{\vphantom{\longheadertext}\shortheadertext}{}
% Header #2
\newcommand{\longheadertext}{\begin{tabular}[t]{c} Way \\ way \\ longer \\ header \\ info \end{tabular}}
\makepagestyle{pagestyle2}
\makeoddhead{pagestyle2}{}{\longheadertext}{}
\makeevenhead{pagestyle2}{}{\longheadertext}{}
\pagestyle{pagestyle2}% Default page style
\AtBeginDocument{% First page is different
\thispagestyle{pagestyle1}% Uses a smaller header...
\vspace*{-4\baselineskip}% ...and moves the text up by 4 baselines
}
\begin{document}
\lipsum
\end{document}
如果第一个页眉结构比后续页眉更高/更大,则可以使用类似的技术;设置默认页面样式以匹配文档的主体,并使用正片调整第一页以将\vspace*
文本向下推得足够远。您可能需要删除较大页眉结构占用的垂直空间。
答案2
这不是给定问题的完整解决方案,而是一种替代方案。这是使用递归\afterpage
在页面顶部添加信息,直到我们告诉它停止。如果文本中没有停止,那么在最后会有一个小小的微妙之处,但这只是一个例子。
\documentclass[a4paper,oneside]{memoir}
\usepackage{afterpage,kantlipsum,etoolbox}
\newcommand\LongInfo{
\begin{center}
\rule{5cm}{5cm}
\bigskip
\begin{tabular}{ll}
Text & Text \\
Text & Text \\
Text & Text \\
Text & Text
\end{tabular}
\end{center}
}
\newcommand\ShortInfo{
\begin{center}
\rule{5cm}{5cm}
\begin{tabular}{ll}
Text & Text
\end{tabular}
\end{center}
}
\newtoggle{FIRST}
\toggletrue{FIRST}
\newcommand\RunSmallInfo{
\ifdef\STOP{}{
\iftoggle{FIRST}{
\global\togglefalse{FIRST}
}{
\ShortInfo
}
\afterpage{
\RunSmallInfo
}
}
}
\AtEndDocument{\def\STOP}
\begin{document}
\LongInfo
\RunSmallInfo
\kant[1-15]
STOP
\def\STOP{}
\kant[1-15]
\end{document}