如果标题是页面第一个标题,则更改页眉

如果标题是页面第一个标题,则更改页眉

(不是某个内容是页面上的第一项吗?以及另一个类似的问题,因为这些问题涉及通过将规则放在领导者中来防止规则出现在页面顶部;但领导者需要方框,而我不想要方框,而只是发出标题命令。)

因此,我经常使用自己的分段命令,而且我目前正在排版一本章节较多、篇幅较短的书。因此,我不想为每一章都开始新的一页,所以当我编写分段命令时,它只是跳过,打印标题,将标题发送到目录,然后再次跳过以准备文本。通常,这些章节确实不是从页面的开头开始;所以在这种情况下,拥有完整、正常的页眉是正确的行为。

然而,有时章节从页面顶部开始,在这种情况下,我希望发生等效的情况\thispagestyle{plain}。我不能简单地将其放在章节定义中,因为大多数情况下章节不会从页面顶部开始。我只想要plain当章节位于页面顶部时使用的页面样式。MWE:

\documentclass{article}
\usepackage{fancyhdr}
    \fancyhead{Header}
    \pagestyle{fancy}
\def\newchap#1{%
    \vskip 3em plus1em minus0.5em%
    \hbox to\linewidth{\LARGE\hfil#1\hfil}%
    \vskip 3em plus1em minus0.5em%
}%
\begin{document}
\newchap{New Chapter Here}
\end{document}

请注意,尽管章节是页面上的第一项,但我们最终还是得到了完整的页眉。(正如代码所指示的那样。)我想知道我可以放入什么内容\newchap,当它位于页面顶部时,会发出\thispagestyle{plain},或者具有同等功能的内容。

答案1

以下内容尚未经过彻底测试,但经过一些调整就足够了。

这个想法是更新\newchap以包含一些代码needspace。这允许您根据页面上的可用空间量强制使用新页面,并在发出\thispagestyle{plain}和之间进行相应的条件设置\thispagestyle{fancy}

在此处输入图片描述

\documentclass{article}
\usepackage{lipsum}% Just for this example
\usepackage{fancyhdr,afterpage}

\newif\iftopchap
\topchaptrue% You'll start with a chapter at the top

% http://tex.stackexchange.com/a/32622/5764
\makeatletter
% \needspace{<len>}{<NOT enough space>}{<enough space>}
\newcommand{\needspace}[3]{\par \penalty-100\begingroup
  \setlength{\dimen@}{#1}%
  \dimen@ii\pagegoal \advance\dimen@ii-\pagetotal
  \ifdim \dimen@>\dimen@ii% execute the following if there IS NOT enough space on page
    \ifdim \dimen@ii>\z@
      \vfil
    \fi
    \break
    #2% <NOT enough space>
  \else% execute the following if there IS enough space on page
    #3% <enough space>
  \fi\endgroup}
\makeatother

\fancyhead{Header}
\pagestyle{fancy}

\newcommand{\newchap}[1]{%
  \par
  \needspace{6em}{% <not enough space>
    \global\topchaptrue
    \thispagestyle{plain}%
    \afterpage{\global\topchapfalse}%
  }{% <enough space>
    \iftopchap\else\thispagestyle{fancy}\fi
  }%
  \vspace{3em plus 1em minus 0.5em}
  \noindent\makebox[\linewidth]{\LARGE #1}%
  \par\nobreak\vspace{3em plus 1em minus 0.5em}
}%

\begin{document}
\sloppy% Just for this example

\thispagestyle{plain}
\newchap{New chapter}
\lipsum[1]

\newchap{Another chapter}
\lipsum[2-3]

\newchap{Yet another chapter}
\lipsum[3-7]

\newchap{Penultimate chapter}
\lipsum[4-5]

\newchap{Final chapter}
\lipsum[5-7]

\end{document}

标题所需空间的选择6em基于对标题大小(包括垂直空间)的估计。这可能需要您进行一些调整以确保正确分页。

相关内容