![scrartcl 和 fancyhdr:奇怪的间距行为](https://linux22.com/image/278135/scrartcl%20%E5%92%8C%20fancyhdr%EF%BC%9A%E5%A5%87%E6%80%AA%E7%9A%84%E9%97%B4%E8%B7%9D%E8%A1%8C%E4%B8%BA.png)
考虑以下一段代码:
\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 元素居中,而是希望居中左对齐的块,则可以使用例如tabular
head 定义内部的。要删除倾斜字体,还需设置字体元素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}