我有一个文档类,可以根据某些用户输入自动生成页眉。问题是第一页的页眉应该与其他页眉不同,并且标题可以是多行。所以\headheight
太小了。以下是该问题的演示:
\documentclass[twoside]{scrartcl}
\newcommand{\longfirstpagehead}{%
\begin{minipage}{10cm}
some\\long\\text\\text\\text\\text\\text\\text
\end{minipage}}
\newcommand{\normalhead}{normal}
\usepackage{scrpage2}
\newpagestyle{firstpage}{%
{\longfirstpagehead\hfill} %twoside links
{\longfirstpagehead\hfill} %twoside rechts
{\longfirstpagehead\hfill} %oneside
(\textwidth,1pt)
}{%
{\pagemark\hfill} %twoside links
{\hfill\pagemark} %twoside rechts
{\hfill\pagemark} %oneside
} %
\newpagestyle{normal}{%
{\normalhead\hfill} %twoside links
{\normalhead\hfill} %twoside rechts
{\normalhead\hfill} %oneside
(\textwidth,1pt)
}{%
{\pagemark\hfill} %twoside links
{\hfill\pagemark} %twoside rechts
{\hfill\pagemark} %oneside
} %
\pagestyle{normal}
\AtBeginDocument{
\thispagestyle{firstpage}}
\usepackage{blindtext}
\begin{document}
%\vspace*{1cm}
\blindtext
\blindtext
\pagebreak
\end{document}
我尝试用和来读取高度\settototalheight
:
\vspace
在文档开头 添加一个(不好的 hack):- 仍然是坏盒警告(当然)
- 第一部分有不同的对齐方式
- 手动更改
\headheight
页面样式- 文本高度和页脚错误(由于某些范围而无法更改?)
Komascript
在页面样式中 使用\recalctypearea
警告
geometry
在页面样式中- 和手动尝试的问题几乎一样
因此,我想更改\headheight
页面样式firstpage
,但页面仍应具有相同的页边距等。问题是这必须与一起使用\thispagestyle
。(也欢迎更好的想法)类似的东西\thispagegeometry
会geometry
很棒。;)
答案1
您可以使用 afterpage 包来更改页眉高度。我硬编码了 3 厘米的页眉高度,但如果您将页眉文本保存在框中,则可以获取其实际高度。
\documentclass[twoside]{scrartcl}
\newcommand{\longfirstpagehead}{%
\begin{minipage}{10cm}
some\\long\\text\\text\\text\\text\\text\\text
\end{minipage}}
\newcommand{\normalhead}{normal}
\usepackage{scrpage2}
\newpagestyle{firstpage}{%
{\longfirstpagehead\hfill} %twoside links
{\longfirstpagehead\hfill} %twoside rechts
{\longfirstpagehead\hfill} %oneside
(\textwidth,1pt)
}{%
{\pagemark\hfill} %twoside links
{\hfill\pagemark} %twoside rechts
{\hfill\pagemark} %oneside
} %
\newpagestyle{normal}{%
{\normalhead\hfill} %twoside links
{\normalhead\hfill} %twoside rechts
{\normalhead\hfill} %oneside
(\textwidth,1pt)
}{%
{\pagemark\hfill} %twoside links
{\hfill\pagemark} %twoside rechts
{\hfill\pagemark} %oneside
} %
\usepackage{afterpage}
\pagestyle{normal}
\addtolength{\textheight}{-3cm}%
\addtolength{\headheight}{3cm}%
\AtBeginDocument{%
\thispagestyle{firstpage}%
\addtolength{\textheight}{3cm}%
\afterpage{%
\global\advance\headheight by -3cm%
}%
}
\usepackage{lipsum}
\begin{document}
\lipsum[1-30]
\end{document}
我必须\global\advance\headheight by -3cm
在 afterpage 中使用。似乎应该可以使用\addtolength
,但我无法让它工作。
答案2
在文档中间更改页面几何形状总是有点棘手。更简单且可能适用于此的是将头部放入一个固定的、一行、高度/深度的框中,悬垂在其规定的大小上。然后只需以足够大的 vspace* 开始您的第一页即可。
答案3
按照 David Carlisle 的建议,这里有一个方法。调整参数为 以\vspace*
适应。第一行的位置问题是由在\parskip
段落前添加的 引起的,可以通过插入 来纠正\vspace{-\parskip}
。
请注意,规则必须放在\parbox
形成第一个标题的地方。
\documentclass[]{scrartcl}
\newcommand{\longfirstpagehead}{%
\parbox[t][0pt]{\textwidth}{
some\\long\\text\\text\\text\\text\\text\\text
\par\kern1ex\hrule height1pt}%
}
\newcommand{\normalhead}{normal}
\usepackage{scrpage2}
\newpagestyle{firstpage}{%
{\longfirstpagehead} %twoside links
{\longfirstpagehead} %twoside rechts
{\longfirstpagehead} %oneside
(\textwidth,0pt)
}{%
{\pagemark\hfill} %twoside links
{\hfill\pagemark} %twoside rechts
{\hfill\pagemark} %oneside
} %
\newpagestyle{normal}{%
{\normalhead\hfill} %twoside links
{\normalhead\hfill} %twoside rechts
{\normalhead\hfill} %oneside
(\textwidth,1pt)
}{%
{\pagemark\hfill} %twoside links
{\hfill\pagemark} %twoside rechts
{\hfill\pagemark} %oneside
} %
\pagestyle{normal}
\AtBeginDocument{%
\thispagestyle{firstpage}%
\vspace*{7\baselineskip}%
\vspace{-\parskip}%
}
\usepackage{blindtext}
\begin{document}
\blindtext[8]
\end{document}