9

I'd like to automatically repeat section headings after a page break. My naive attempt at doing this is to check the page counter and print the extra text whenever the counter increments:

\newcounter{pagecnt}                                                                                                                                                      
\setcounter{pagecnt}{\value{page}}

...

\ifnum \value{page} > \value{pagecnt}% are we on a new page?
  \normalfont\Large\bfseries\sectionheadinghere% print heading again                                                                                                                                                                                                                                                                  
  \setcounter{pagecnt}{\value{page}}% reset counter                                                                                                                                         
\fi% 

Except I'm not entirely sure what should 'trigger' this code? Is it possible or desirable to check after every line-break (or every word) if the page has flipped?

joeyo
  • 91
  • 1
  • 3

2 Answers2

10

The following patch (via etoolbox) saves the sectional content (number, title and font) in a macro that is re-evaluated at page shipout (as supplied by everyshi) if there is text overflow. Overflow is established using the condition

\ifdim\pagetotal>\pagegoal
  % <do something>
\fi

that checks whether the gathered page content (of height \pagetotal) extends beyond the allowed total (of height \pagegoal).

enter image description here

\documentclass{article}
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\usepackage{everyshi}% http://ctan.org/pkg/everyshi
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\makeatletter
\let\@section@title@\relax% Sectional heading storage
\patchcmd{\@sect}% <cmd>
  {\@xsect}% <search>
  {\gdef\@section@title@{% Store sectional heading
    {\noindent#6\@svsec#8\normalfont\ \smash{(continued)}}\par\bigskip}\@xsect}% <replace>
  {}{}% <success><failure>
\EveryShipout{%
  \ifdim\pagetotal>\pagegoal% There is content overflow on this page
    \aftergroup\@section@title@% Reprint/-insert sectional heading
  \fi%
}
\makeatother
\begin{document}
\section{A section}\lipsum[1-6]
\subsection{A subsection}\lipsum[7-14]
\end{document}

The sectional content is captured in \@section@title@ and includes the latest sectional title used (anything from level 1 = \section to level 5 = \paragraph).

Customizations include using only a specific sectional unit (like \section, say). Also, to duplicate the spacing after the sectional header when traditionally used, rather than issuing \bigskip.

The above works in the context of the standard LaTeX document classes (like book, article and report) and may require additional modifications if used in other document classes, or in conjunction with other sectional heading packages.

Werner
  • 603,163
1

I think you are looking for a definition of headers and footers. This can be done by packages like fancyhdr or scrpage21. However most document classes defining some predefined style which can be used by the command \pagestyle. Allowed arguments are:

  • empty -- no header or footer is printed
  • plain -- only the page number is printed
  • headings -- depends on the class. e.g. scrartcl will print the section.

1 The documentation of scrpage2 is located in the manual of KOMA

Here a small example:

\documentclass{scrartcl}
\usepackage{kantlipsum}
\pagestyle{headings}
\begin{document}
\section{My section}
\kant
\end{document}
Marco Daniel
  • 95,681
  • In case another user stumbles across this answer: scrpage2 is not the up-to-date KOMA-script package for headers and footers, but scrlayer-scrpage. – Skillmon Nov 13 '17 at 20:40