[comp.text] General headers and footers in Latex documents

piet@ruuinf (Piet van Oostrum) (03/17/89)

Here is a documentstylestyle option that allows you to customize your
page headers and footers in an easy way. It combines features that were
separately available in other pagestyles, without introducing much
complexity. You can define:
    - three-part headers and footers
    - rules in header and footer
    - headers and footers wider than \textwidth
    - multiline headers and footers
    - separate headers and footers for even and odd pages
    - separate headers and footers for chapter pages

To use this pagestyle, you must include the ``fancyheadings'' style
option in your \documentstyle, and issue the \pagestyle{fancy} command.
The \pagestyle{fancy} command should be issued after any changes made to
\textwidth.

The page layout will be as follows:

		LHEAD          CHEAD          RHEAD
		----------------------------------- (rule)

			     page body


		----------------------------------- (rule)
		LFOOT	       CFOOT	      RFOOT

The L-fields will be leftadjusted, the C-fields centered and the
R-fields rightadjusted.
Each of the six fields and the two rules can be defined separately.

Simple use:

The header and footer fields can be defined by commands \lhead{LHEAD}
and so on for the other fields. If the field depends on something in the
document (e.g. section titles) you must in general use the \markboth and
\markright commands, otherwise a title may end on the wrong page. You
can do this e.g. by redefining the commands \chaptermark, \sectionmark
and so on (see example below). The defaults for these marks are as in
the standard pagestyles. The marks can be put into a header or footer
field by referencing \leftmark and \rightmark.

Rules in header and footer

The thickness of the rules below the header and above the footer can be
changed by redefining the length parameters \headrulewidth (default
0.4pt) and \footrulewidth (default 0). These may be redefined by the
\setlength command. A thickness of 0pt makes the rule invisible.
If you want to make more complicated changes, you have to redefine the
commands \headrule and/or \footrule.

Headers and footers wider than \textwidth

The headers and footers are set in a box of width \headwidth. The
default for this is the value of \textwidth. You can make it wider (or
smaller) by redefining \headwidth with the \setlength or \addtolength
command. The headers and footers will stick out the page on the same
side as the marginal notes. For example to include the marginal notes,
add both \marginparsep and \marginparwidth to \headwidth (see also the
example below).

Multiline headers and footers

Each of the six fields is set in an appropriate parbox, so you can put a
multiline part in it with the \\ command. It is also possible to put
extra space in it with the \vspace command. Note that if you do this you
will probably have to increase the \headheight or \footskip lengths.

Separate headers and footers for even and odd pages

If you want the headers and footers to be different on even- and
odd-numbered pages in the ``twoside'' style, the field-defining macros
can be given an optional argument, to be used on the even-numbered
pages, like \lhead[EVEN-LHEAD]{ODD-RHEAD}.

Separate headers and footers for chapter pages

LaTeX gives a \thispagestyle{plain} command for the first page of the
document, the first page of each chapter and a couple of other pages. It
might be incompatible with your pagestyle. In this case you can use a
slightly different version of the pagestyle, called \pagestyle{fancyplain}. 
This pagestyle redefines the pagestyle ``plain'' to also use pagestyle
``fancy'' with the following modifications:
    - the thicknesses of the rules is defined by \plainheadrulewidth and
      \plainfootrulewidth (both default 0).
    - the 6 fields may be defined separately for the plain pages by
      giving them the value \fancyplain{PLAIN-VALUE}{NORMAL-VALUE}. This
      construct may be used in both the optional argument and the normal
      argument. Thus \lhead[\fancyplain{F1}{F2}]{\fancyplain{F3}{F4}}
      specifies the LHEAD value in a two-sided document:
	F1 on an even-numbered ``plain'' page
	F2 on an even-numbered normal page
	F3 on an odd-numbered ``plain'' page
	F4 on an odd-numbered normal page.

Defaults:

\headrulewidth 	      0.4pt
\footrulewidth		0pt
\plainheadrulewidth	0pt
\plainfootrulewidth	0pt

\lhead[\fancyplain{}{\sl\rightmark}]{\fancyplain{}{\sl\leftmark}}
%  i.e. empty on ``plain'' pages \rightmark on even, \leftmark on odd pages
\chead{}
\rhead[\fancyplain{}{\sl\leftmark}]{\fancyplain{}{\sl\rightmark}}
%  i.e. empty on ``plain'' pages \leftmark on even, \rightmark on odd pages
\lfoot{}
\cfoot{\rm\thepage} % page number
\rfoot{}

Examples:

To put two lines containing the section title and the subsection title
in the righthandside corner, use:

\documentstyle[fancyheadings]{article}
\pagestyle{fancy}
\renewcommand{\sectionmark}[1]{\markboth{#1}{}}
\renewcommand{\subsectionmark}[1]{\markright{#1}}
\rfoot{\leftmark\\\rightmark}

The following definitions give an approximation of the style used in the
LaTeX book:

\documentstyle[fancyheadings]{book}
\pagestyle{fancyplain}
\addtolength{\headwidth}{\marginparsep}
\addtolength{\headwidth}{\marginparwidth}
\renewcommand{\chaptermark}[1]{\markboth{#1}{#1}} % remember chapter title
\renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}}
                                                % section number and title
\lhead[\fancyplain{}{\bf\thepage}]{\fancyplain{}{\bf\rightmark}}
\rhead[\fancyplain{}{\bf\leftmark}]{\fancyplain{}{\bf\thepage}}
\cfoot{}

%______________________________CUT_HERE______________________________
% fancyheadings.sty version 1.0
% Fancy headers and footers.
% Piet van Oostrum, Dept of Computer Science, University of Utrecht
% Padualaan 14, P.O. Box 80.089, 3508 TB Utrecht, The Netherlands
% Telephone: +31-30-531806. piet@cs.ruu.nl (mcvax!hp4nl!ruuinf!piet)
% March, 1989.

\def\lhead{\@ifnextchar[{\@xlhead}{\@ylhead}}
\def\@xlhead[#1]#2{\gdef\@elhead{#1}\gdef\@olhead{#2}}
\def\@ylhead#1{\gdef\@elhead{#1}\gdef\@olhead{#1}}

\def\chead{\@ifnextchar[{\@xchead}{\@ychead}}
\def\@xchead[#1]#2{\gdef\@echead{#1}\gdef\@ochead{#2}}
\def\@ychead#1{\gdef\@echead{#1}\gdef\@ochead{#1}}

\def\rhead{\@ifnextchar[{\@xrhead}{\@yrhead}}
\def\@xrhead[#1]#2{\gdef\@erhead{#1}\gdef\@orhead{#2}}
\def\@yrhead#1{\gdef\@erhead{#1}\gdef\@orhead{#1}}

\def\lfoot{\@ifnextchar[{\@xlfoot}{\@ylfoot}}
\def\@xlfoot[#1]#2{\gdef\@elfoot{#1}\gdef\@olfoot{#2}}
\def\@ylfoot#1{\gdef\@elfoot{#1}\gdef\@olfoot{#1}}

\def\cfoot{\@ifnextchar[{\@xcfoot}{\@ycfoot}}
\def\@xcfoot[#1]#2{\gdef\@ecfoot{#1}\gdef\@ocfoot{#2}}
\def\@ycfoot#1{\gdef\@ecfoot{#1}\gdef\@ocfoot{#1}}

\def\rfoot{\@ifnextchar[{\@xrfoot}{\@yrfoot}}
\def\@xrfoot[#1]#2{\gdef\@erfoot{#1}\gdef\@orfoot{#2}}
\def\@yrfoot#1{\gdef\@erfoot{#1}\gdef\@orfoot{#1}}

\newdimen\headrulewidth
\newdimen\footrulewidth
\newdimen\plainheadrulewidth
\newdimen\plainfootrulewidth
\newdimen\headwidth
\newif\if@fancyplain \@fancyplainfalse
\def\fancyplain#1#2{\if@fancyplain#1\else#2\fi}

% Initialization of the head and foot text.

\headrulewidth 0.4pt
\footrulewidth\z@
\plainheadrulewidth\z@
\plainfootrulewidth\z@

\lhead[\fancyplain{}{\sl\rightmark}]{\fancyplain{}{\sl\leftmark}}
%  i.e. empty on ``plain'' pages \rightmark on even, \leftmark on odd pages
\chead{}
\rhead[\fancyplain{}{\sl\leftmark}]{\fancyplain{}{\sl\rightmark}}
%  i.e. empty on ``plain'' pages \leftmark on even, \rightmark on odd pages
\lfoot{}
\cfoot{\rm\thepage} % page number
\rfoot{}

% Put together a header or footer given the left, center and
% right text, fillers at left and right and a rule.
% The \lap commands put the text into an hbox of zero size,
% so overlapping text does not generate an errormessage.

\def\@fancyhead#1#2#3#4#5{#1\hbox to\headwidth{\vbox{\hbox
{\rlap{\parbox[b]{\headwidth}{\raggedright#2\strut}}\hfill
\parbox[b]{\headwidth}{\centering#3\strut}\hfill
\llap{\parbox[b]{\headwidth}{\raggedleft#4\strut}}}\headrule}}#5}


\def\@fancyfoot#1#2#3#4#5{#1\hbox to\headwidth{\vbox{\footrule
\hbox{\rlap{\parbox[t]{\headwidth}{\raggedright#2\strut}}\hfill
\parbox[t]{\headwidth}{\centering#3\strut}\hfill
\llap{\parbox[t]{\headwidth}{\raggedleft#4\strut}}}}}#5}

\def\headrule{{\if@fancyplain\headrulewidth\plainheadrulewidth\fi
\hrule\@height\headrulewidth\@width\headwidth \vskip-\headrulewidth}}

\def\footrule{{\if@fancyplain\footrulewidth\plainfootrulewidth\fi
\vskip-0.3\normalbaselineskip\vskip-\footrulewidth
\hrule\@width\headwidth\@height\footrulewidth\vskip0.3\normalbaselineskip}}

\def\ps@fancy{
\let\@mkboth\markboth
\@ifundefined{chapter}{\def\sectionmark##1{\markboth
{\uppercase{\ifnum \c@secnumdepth>\z@
 \thesection\hskip 1em\relax \fi ##1}}{}}
\def\subsectionmark##1{\markright {\ifnum \c@secnumdepth >\@ne
 \thesubsection\hskip 1em\relax \fi ##1}}}
{\def\chaptermark##1{\markboth {\uppercase{\ifnum \c@secnumdepth>\m@ne
 \@chapapp\ \thechapter. \ \fi ##1}}{}}
\def\sectionmark##1{\markright{\uppercase{\ifnum \c@secnumdepth >\z@
 \thesection. \ \fi ##1}}}}
\def\@oddhead{\@fancyhead\relax\@olhead\@ochead\@orhead\hss}
\def\@oddfoot{\@fancyfoot\relax\@olfoot\@ocfoot\@orfoot\hss}
\def\@evenhead{\@fancyhead\hss\@elhead\@echead\@erhead\relax}
\def\@evenfoot{\@fancyfoot\hss\@elfoot\@ecfoot\@erfoot\relax}
\headwidth\textwidth}
\def\ps@fancyplain{\ps@fancy \let\ps@plain\ps@plain@fancy}
\def\ps@plain@fancy{\@fancyplaintrue\ps@fancy}
%______________________________CUT_HERE______________________________
-- 
Piet van Oostrum, Dept of Computer Science, University of Utrecht
Padualaan 14, P.O. Box 80.089, 3508 TB Utrecht, The Netherlands
Telephone: +31-30-531806. piet@cs.ruu.nl (mcvax!hp4nl!ruuinf!piet)

piet@ruuinf (Piet van Oostrum) (03/17/89)

In article <1205@ruuinf.UUCP>, piet@ruuinf (Piet van Oostrum) writes:

 `If you want the headers and footers to be different on even- and
 `odd-numbered pages in the ``twoside'' style, the field-defining macros
 `can be given an optional argument, to be used on the even-numbered
 `pages, like \lhead[EVEN-LHEAD]{ODD-RHEAD}.
                                     ^^^^^ should be LHEAD.
-- 
Piet van Oostrum, Dept of Computer Science, University of Utrecht
Padualaan 14, P.O. Box 80.089, 3508 TB Utrecht, The Netherlands
Telephone: +31-30-531806. piet@cs.ruu.nl (mcvax!hp4nl!ruuinf!piet)

williamssi@.ucalgary.ca (Simon Williams) (03/24/89)

Recently fancyheadings.sty was posted to this news group

In article <1205@ruuinf.UUCP> piet@ruuinf (Piet van Oostrum) writes:
>Here is a documentstylestyle option that allows you to customize your
>page headers and footers in an easy way. It combines features that were
>separately available in other pagestyles, without introducing much
>complexity. You can define:
>    - three-part headers and footers
>    - rules in header and footer
>    - headers and footers wider than \textwidth
>    - multiline headers and footers
>    - separate headers and footers for even and odd pages
>    - separate headers and footers for chapter pages
>
>[More documentation, and the style file deleted]


I found this documentstyle very useful and easy to use.  However for
every page of output it generates an "Overfull \vbox (12.64993pt too
high) has occurred while \output is active"

I can trace the vbox to the \@fancyhead definition.  But not being a
TeX/LaTeX hacker I haven't a clue how to solve it.  Any suggestions or
fixes?

Cheers, Simon

hartzell@tigger (George Hartzell) (03/26/89)

In article <952@cs-spool.calgary.UUCP>, williamssi@.ucalgary (Simon Williams) writes:
>...
>I found this documentstyle very useful and easy to use.  However for
>every page of output it generates an "Overfull \vbox (12.64993pt too
>high) has occurred while \output is active"
>
>I can trace the vbox to the \@fancyhead definition.  But not being a
>TeX/LaTeX hacker I haven't a clue how to solve it.  Any suggestions or
>fixes?
>

The document style that you are using probably sets the value of
\headheight to something smaller than the vertical size of the box you
are using for your fancy headings.  Look through the source for your
style and see what the setting is for \headheight.  Try increasing it
in the preamble of your document and see if things work better.
g.
-- 
George Hartzell			                 (303) 492-4535
MCD Biology, University of Colorado-Boulder, Boulder, CO 80309
hartzell@Boulder.Colorado.EDU  ..!{ncar,nbires}!boulder!hartzell

piet@cs.ruu.nl (Piet van Oostrum) (03/28/89)

In article <952@cs-spool.calgary.UUCP>, williamssi@.ucalgary (Simon Williams) writes:
 `Recently fancyheadings.sty was posted to this news group
							   However for
 `every page of output it generates an "Overfull \vbox (12.64993pt too
 `high) has occurred while \output is active"
 `
From the doc:
					 Note that if you do this you
will probably have to increase the \headheight or \footskip lengths.

Good luck!
-- 
Piet van Oostrum, Dept of Computer Science, University of Utrecht
Padualaan 14, P.O. Box 80.089, 3508 TB Utrecht, The Netherlands
Telephone: +31-30-531806. piet@cs.ruu.nl (mcvax!hp4nl!ruuinf!piet)