scrartcl 和 fancyhdr:奇怪的间距行为

scrartcl 和 fancyhdr:奇怪的间距行为

考虑以下一段代码:

\documentclass{scrartcl}
\usepackage{ifthen}
\usepackage{fancyhdr}
\pagestyle{fancy}
\lhead{}
\chead{
    \ifthenelse{\equal{\thepage}{1}}{}{
                    \textbf{foo}\\
                    \textbf{bar}\\
                    \textbf{baz}
        }
}
\rhead{}
\lfoot{}
\cfoot{}
\rfoot{}
\renewcommand{\headrulewidth}{0pt}

\begin{document}
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\newpage
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\newpage
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\end{document}

示例的第 2 页和第 3 页如下所示:

在此处输入图片描述

正如你所看到的X不在同一高度。另外巴兹不知道从哪里开始酒吧做 - 它稍微靠左边一点。

您知道可能存在什么问题吗?

答案1

这是众所周知且有据可查的行为fancyhdr。如果在第一次使用定义的页眉时,包发现页眉在垂直方向上大于\headheight,它将发出一条消息并更改\headheight后续页面。

您将在文件中找到以下消息.log

Package Fancyhdr Warning: \headheight is too small (17.0pt):
 Make it at least 38.8842pt.
 We now make it that large for the rest of the document.
 This may cause the page layout to be inconsistent, however.

因此您知道需要设置:

\setlength{\headheight}{39pt}

在你的序言中(四舍五入更好):

\documentclass{scrartcl}
\usepackage{ifthen}

\setlength{\headheight}{39pt}

\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[C]{%
  \ifthenelse{\equal{\value{page}}{1}}%
    {}%
    {\bfseries
     \makebox[0pt][r]{\smash{\vrule height 1cm depth 2cm}}boo\\
     boo\\
     boo%
    }%
}
\renewcommand{\headrulewidth}{0pt}

\begin{document}
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\newpage
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\newpage
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\end{document}

答案2

不建议将 和 KOMA-Script 类一起使用fancyhdr。不过,如果切换到 ,scrlayer-scrpage您将收到类似的警告消息,因为头部的默认高度只有一行。但 KOMA-Script 提供了选项headheight和 ,headlines以便设置具有较大头部的页面。在示例中,您使用了三行,因此headlines=3应该是一个不错的选择:

\documentclass[headlines=3]{scrartcl}
\usepackage{ifthen}
\usepackage{scrlayer-scrpage}
\manualmark
\setkomafont{pagehead}{\bfseries}
\chead{\ifnum\value{page}=1\else foo\\bar\\baz\fi}

\begin{document}
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\newpage
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\newpage
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\end{document}

在此处输入图片描述

如果您不希望 head 元素居中,而是希望居中左对齐的块,则可以使用例如tabularhead 定义内部的。要删除倾斜字体,还需设置字体元素pageheadfoot

\documentclass[headlines=3]{scrartcl}
\usepackage{ifthen}
\usepackage{scrlayer-scrpage}
\manualmark
\setkomafont{pageheadfoot}{}
\setkomafont{pagehead}{\bfseries}
\chead{\ifnum\value{page}=1\else \begin{tabular}{@{}lll@{}}foo\\bar\\bazooka\end{tabular}\fi}

\begin{document}
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\newpage
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\newpage
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\end{document}

我还建议不要在头部引用页码,而是使用两种不同的页面样式:

\documentclass[headlines=3]{scrartcl}
\usepackage{ifthen}
\usepackage{scrlayer-scrpage}
\manualmark
\setkomafont{pageheadfoot}{}
\setkomafont{pagehead}{\bfseries}
\chead{\begin{tabular}{@{}lll@{}}foo\\bar\\bazooka\end{tabular}}

\begin{document}
\thispagestyle{plain}
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\newpage
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\newpage
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\end{document}

在此处输入图片描述

相关内容