% 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. % 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{} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \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}