Path: utzoo!utgpu!attcan!uunet!mcvax!hp4nl!ruuinf!piet From: piet@ruuinf (Piet van Oostrum) Newsgroups: comp.text Subject: General headers and footers in Latex documents Message-ID: <1205@ruuinf.UUCP> Date: 17 Mar 89 13:00:11 GMT Sender: piet@ruuinf.UUCP Reply-To: piet@ruuinf (Piet van Oostrum) Organization: Dept of Computer Science, University of Utrecht, Holland Lines: 238 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)