我正在使用 sty 写一篇论文,它将章节标题放在每页的顶部,页码放在角落(使用 fancyhdr)。问题是,如果章节标题太长,必须分成两行,页码就会与章节标题的第二行对齐,而不是第一行。请参阅下面的 MWE。我该如何修复它,以便页码始终与右上角齐平?谢谢。
\setlength{\headheight}{27.16pt}
附加问题:为了抑制 fancyhdr 警告(当章节标题太长时),这样做正确吗?非常感谢!
\documentclass[11pt]{article}
\usepackage{fancyhdr}
\setlength{\headheight}{27.16pt} % sometimes section title takes 2 lines
\pagestyle{fancyplain}
\lhead[\fancyplain{\thepage}{\thepage}]{\fancyplain{}{\scshape\rightmark}}
\rhead[\fancyplain{}{\scshape\leftmark}]{\fancyplain{\thepage}{\thepage}}
\chead{}
\cfoot{}
\lfoot{}
\rfoot{}
\def\chaptermark#1{%
\markboth{\@chapapp\ \thechapter.~~ #1}{}}
\def\sectionmark#1{%
\markright{Section \thesection.~~ #1}}
\begin{document}
\section{An unnecessarily long and wordy title for some stuff}
Words here
\end{document}
答案1
一种解决方案是为该部分使用较短的标题。如果这不可能,则可以将较短的(替代)标题与常规的长标题结合使用:
\section[Short title for section]{An unnecessarily long and wordy title for some stuff}
这样,您就不必担心章节标题会超过 2 行(或更多),只需提供一个足够描述性的单行替代标题即可。额外的好处是您不必摆弄\headheight
。
答案2
我同意 Werner 的解决方案。但是,如果出于某种原因,你需要要在标题中使用长标题,那么您可以\parbox
在定义中使用\sectionmark
(您可以减少.97\linewidth
以防止页码和章节标题产生歧义):
\documentclass[11pt]{article}
\usepackage{fancyhdr}
\setlength{\headheight}{27.16pt} % sometimes section title takes 2 lines
\pagestyle{fancyplain}
\lhead[\fancyplain{\thepage}{\thepage}]{\fancyplain{}{\scshape\rightmark}}
\rhead[\fancyplain{}{\scshape\leftmark}]{\fancyplain{\thepage}{\thepage}}
\chead{}
\cfoot{}
\lfoot{}
\rfoot{}
\def\chaptermark#1{%
\markboth{\@chapapp\ \thechapter.~~ #1}{}}
\def\sectionmark#1{%
\markright{\protect\parbox[t]{.97\linewidth}{\protect\raggedright Section \thesection.~~ #1\vskip0.2em}}}
\begin{document}
\section{An unnecessarily long and wordy title for some stuff}
Words here
\end{document}