Styling the page footer and header
Tuesday, June 12th, 2007 | LaTeX
This leads us to the last post in my series of styling documents, namely the one on how to customise page headers and footers. This is one of the most visible style elements as it is (typically) present in some form or the other on almost all pages except chapter pages. As with the section titles it is also relevant for the page headers and footers to mimick the aesthetic feel of the chapter page, thus keeping a uniform expression that can be tied exclusively to your work (this is the really hard part, by the way). Before we delve into the intricacies, let us take a look at the standard page header:
For those of you with bad eye-sight, the chapter name and title is printed in all-caps. Absolutely ghastly. I mean, what is this, a tribute to AOL users?! We are definitely going to have to change something here indeed.
This is probably as good a time as any to bring this up. When we are typesetting a book it contains pages that will be to the left (verso pages) and on the right (recto pages). These two pages have different margins (try to open one of your books on your bookshelf and check for yourself), and furthermore books tend to have different things in the verso and recto headers and footers. Typically this means that the chapter number and title will be displayed on the verso page and the section number and title on the recto page (or part and chapter in other books, or something entirely different in yet other books).
These items (chapter number and title and section number and title) isn’t grabbed out of thin air in LaTeX, but is written into internal commands that can be read using the \leftmark and \rightmark commands (named for their use on left and right pages, obviously). Thus, the all-caps chapter title on the default page header has been written into the left mark here, so we will need to modify how the marks are stored.
The first step to creating a new page header and footer is to create a new page style using the \makepagestyle{name} command. So if we want to create a new page style where the header contains the page number and the chapter/section number (if any) and title, we would start out with the following:
\makepagestyle{mypagestyle}
To create a nice separation between the page number and the title—rather than typesetting them at opposite ends of the header—we will separate them with a vertical rule. Now the commands to modify the headers and footers of a page style are: \makeevenhead{style}{left}{center}{right}, \makeoddhead, \makeevenfoot, and \makeoddfoot. All with the same number of arguments. So, this means we can extend our page style as follows:
\makeevenhead{mypagestyle}{\thepage\hskip.5cm\vrule\hskip.5cm\leftmark}{}{}
\makeoddhead{mypagestyle}{}{}{\rightmark\hskip.5cm\vrule\hskip.5cm\thepage}
If we tack on a \pagestyle{mypagestyle} now, we will get some output like this:
Better than the standard, but it still feels partly like an AOL user tribute, what with all the caps and stuff. Before we fix this, it is time to discuss marks in a bit more detail.
Storing information to be read by \leftmark and \rightmark is accomplished using \markboth and \markright (no, there is no separate \markleft). And these two commands are meant to be invoked inside some specific commands that are in turn invoked from \chapter, \tableofcontents, etc. These commands include: \tocmark, \partmark, \chaptermark, and \sectionmark. There are, of course, more marks and you can generate more by creating new lists, so if you’re overriding marks you need to make sure to catch all of them appropriately.
Getting to the actual code now would be too easy. When we need to print the chapter number we have to remember that a book is divided into several ‘sections,’ namely the front matter (table of contents, lists, foreword, etc.), main matter (the actual book chapters), and back matter (bibliography, indices, etc.). Of these it is only customary to give the chapters in the main matter numbers in the heading.
Before we venture on, we also need to look at one of the ‘reserved’ symbols in LaTeX: @. This section is vague on purpose in order not to spend too much time on this detail. The @ is used for ‘reserved’ commands inside class-files and packages and its default ‘code’ to something that cannot be used. If, however, you’re in the need to using commands with @ in them you can use the command \makeatletter and then once you’re done return it to its original state with \makeatother. I will try to remember to visit this topic in more detail at some later time.
The use of @ becomes relevant when we need to test whether we’re in the main matter, because this is done (with memoir, remember @ means we’re overriding the internals of some package) using the \if@mainmatter where @mainmatter is a boolean value.
Now we’re finally ready to create our own marks! To recoup, we want to write the chapter mark on the verso page and the section mark on the recto page. This is done like this:
\makeatletter
\makepsmarks{mypagestyle}{
\def\chaptermark##1{\markboth{%
\ifnum \value{secnumdepth} < -1
\if@mainmatter
\chaptername\ \thechapter\ --- %
\fi
\fi
##1}{}}
\def\sectionmark##1{\markright{%
\ifnum \value{secnumdepth} < 0
\thesection. \ %
\fi
##1}}
}
\makeatother
The secnumdepth is a counter that contains information about what depth of sections should be numbered. Chapters is equal to secnumdepth 0 and sections to 1, hence the comparisons. Using this in our document we get the following output:
And for those with bad eye-sight, a courtesy close-up of the verso page:
Rather much of an improvement to the earlier AOL user tribute. There are, of course, plenty of other things we could want to do: add a ruler below the header, place the page number in the margin to make it easier to find a page when flipping through a book, or whatever else we might imagine. Even though I’ve carried this post on for quite a while, let us take a brief look at accomplishing this. First we create a page style very much like above:
\makepagestyle{myruledpagestyle}
\makeevenhead{myruledpagestyle}{\thepage}{}{\leftmark}
\makeoddhead{myruledpagestyle}{\rightmark}{}{\thepage}
\makeatletter
\makepsmarks{myruledpagestyle}{
\def\chaptermark##1{\markboth{%
\ifnum \value{secnumdepth} > -1
\if@mainmatter
\chaptername\ \thechapter\ --- %
\fi
\fi
##1}{}}
\def\sectionmark##1{\markright{%
\ifnum \value{secnumdepth} > 0
\thesection. \ %
\fi
##1}}
}
\makeatother
This is almost exactly the same as mypagestyle above, with the only change that we now place the page number and the mark on opposite sides of the header. This leaves us with the task of moving the page number into the margin and adding a ruler below the header. This is fairly easily accomplished:
\makerunningwidth{myruledpagestyle}{1.1\textwidth}
\makeheadposition{myruledpagestyle}{flushright}{flushleft}{flushright}{flushleft}
\makeheadrule{myruledpagestyle}{1.1\textwidth}{\normalrulethickness}
Here \makerunningwidth changes the width of the headers and footers of the specified style. As standard it’s \textwidth long, here we make it 1.1 times longer. \makeheadposition changes the placement of the header and footer. It has the form \makeheadposition{even-head-position}{odd-head-position}{even-foot-position}{odd-foot-position} where the different positions can be chosen between flushleft, center or flushright. This command is only useful, if the width of the page header is different from \textwidth. Finally we apply the actual rule, stating that it should be the width of the header and to use the normal rule thickness. This is, unless you have changed something, typically 0.4pt in LaTeX.
With all this trickery, this is what we get as output:
As an incidental note, the last style presented here is almost equivalent to the Ruled page style that comes with the memoir package (remember casing matters, there is both a ruled and Ruled page style). So if you want exactly this style, use that instead of defining all this yourself.
This fairly much concludes the styling the document series, but I am sure that I will, sooner or later, revisit how to style other parts of the document, or show even more involved styling solutions. But until then, let your imagination run free and bring some personal style to your documents.
6 Comments to Styling the page footer and header
[...] not too tricky, but it’s trickier than part A was… I’m indebted, by the way, to Stuart’s post on setting the [...]
April 22, 2010
thank you, exactly what i was looking for…
Hi! Thanks for this really useful blog! :)
I tried your page style with the memoir class, and it mostly works, but bizarrely, LaTex seems to ignore whatever argument I put in \makeevenhead. Do you have any idea why that could be?
Cheers!
Aline
The usual reason is that you’re in a one-page setup (e.g., article is in your documentclass options).
December 6, 2010
hey, thanks for the post. very useful for my thesis. I was wondering, how would I modify this such that, I have only \thepage | “Chapter 2″ on the the left, and on the right, I want, instead of section, the “title of chapter 2″ | \thepage ?
thanks in advance
gt
Thank you. I enjoy reading your articles about styling LaTeX documents. Nice and easy-to-understand. Good work!
If you don’t mind, would you please make those articles “printer friendly” or as an “PDF E-Book”? That’ll be much nicer.
Leave a comment
Categories
Archives
- February 2012
- July 2011
- June 2011
- November 2010
- October 2010
- April 2010
- November 2009
- October 2009
- June 2009
- May 2009
- February 2009
- January 2009
- December 2008
- November 2008
- October 2008
- September 2008
- August 2008
- May 2008
- April 2008
- March 2008
- February 2008
- January 2008
- December 2007
- November 2007
- October 2007
- September 2007
- August 2007
- June 2007
- May 2007
- April 2007
- March 2007
- February 2007
- December 2006
- November 2006
- October 2006
- September 2006
- June 2006
- April 2006
- March 2006
- February 2006
- January 2006
- December 2005
- November 2005
- October 2005
- September 2005
- May 2005
- April 2005
- March 2005
- February 2005
- January 2005
- December 2004
- June 2004
- April 2004
- February 2004
- November 2003
- January 2003
- November 2002
May 16, 2008