将 \headheight 改为 \pagestyle

将 \headheight 改为 \pagestyle

我有一个文档类,可以根据某些用户输入自动生成页眉。问题是第一页的页眉应该与其他页眉不同,并且标题可以是多行。所以\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。(也欢迎更好的想法)类似的东西\thispagegeometrygeometry很棒。;)

答案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}

相关内容