Home Coding » Writing » Photography »

Getting to Grips with LaTeX

Page layout

by Andrew Roberts

LaTeX and the document class will normally take care of page layout issues for you. For submission to an academic publication, this entire topic will be out of your hands, as the publishers want to control the presentation. However, for your own documents, there are some obvious settings that you may wish to change: margins, page orientation and columns, to name but three. The purpose of this tutorial is to show you how to configure your pages.

Page Dimensions

A page in LaTeX is defined by a myriad of internal parameters. Each parameter corresponds to the length of an element of the page, for example, \paperheight is the physical height of the page. The layout package can dynamically draw the page layout within a document (albeit, scaled down slightly!), also providing the values of many of the dimensions, which can be very insightful. View the page layout (pdf) before moving on.

It will not have been immediately obvious - because it doesn't really cause any serious problems - is that the default page size, for all of the standard document classes is US letter. This is shorter by 3/4 inch, and slightly wider by 1/4 inch, compared to A4 (which is the standard in the UK). As I said, it's not a great problem, and most printers will print the page without a hiccup. However, it is possible to specify alternative sizes.

\documentclass[a4paper]{article}

The above example illustrates how to pass the optional argument to the \documentclass, which will then modify the page dimensions accordingly. The standard document classes that are a part of LaTeX are built to be fairly generic, which is why you have the flexibility of specifying the page size. Other classes may have different options (or none at all). Normally, 3rd party classes come with some documentation to let you know.

Additionally, there are several packages designed to solve the problem of varying pages sizes, which override any defaults setup by the document class. Examples such as a4 are rather specialised in preparing only one type of page. One of the most versatile packages for page layout needs is geometry. It will feature a number of times throughout this tutorial a it has many tricks up its sleeve! Anyway, to set the page size, add the following to your preamble:

\usepackage[a4paper]{geometry}

a4paper is just one of the many pre-defined page sizes built-in, other include: a0paper, a1paper, ..., a6paper, b0paper, b1paper, ..., b6paper, letterpaper, legalpaper, executivepaper.

Page Orientation

When you talk about changing page orientation, it usually means changing to landscape mode, since portrait is the default. I shall introduce, two slightly different styles of changing orientation.

The first is for when you want all of your document to be in landscape from the very beginning. There are various packages available to achieve this, but the one I prefer is the geometry package. All you need to do is call the package, with landscape as an option:

\usepackage[landscape]{geometry}

Although, if you intend to use geometry to set your paper size, don't add the \usepackage commands twice, simply string all the options together, separating with a comma:

\usepackage[a4paper,landscape]{geometry}

The second method is for when you are writing a document in portrait, but you have some contents, like a large diagram or table that would be displayed better on a landscape page. However, you still want the consistency of your headers and footers appearing the same place as the other pages.

The lscape package is for this very purpose. It supplies a landscape environment, and anything inside is basically rotated. No actual page dimensions are changed. This approach is applicable to books or reports than to typical academic publications.

These margins are a bit narrow!

Readers from a word processing background are probably all thinking why there is so much white space surrounding the text. There is a good reason, and it's all down to readability. Have a look in a few books, and pick a few lines at random. Count the number of characters per line. I bet the average is about 66. Studies have shown that it's easier to read text when there are 60-70 characters per line - and it would seem that 66 is the optimal number. Therefore, the page margins are set to ensure that readability remains as good as possible. White space is often left in the inner margin for the assumption that the document will be bound, and so space must be allowed for this.

Regardless of all this, should you wish to manipulate the margin parameters, then once again, geometry is the way to go. (However, before I go on, you may like to simply try the a4wide package first, which outputs wider lines, with no need to configure margin lengths). You could directly change the relevant parameters with the \setlength command, however, the following method is much easier to remember.

Unsurprisingly, there are four possible parameters for page margins that can be set with geometry: top, bottom, left, right.

\usepackage[top=length, bottom=length, left=length, right=length]{geometry}

Simply substitute your desired length (e.g,. 3cm) for each parameter you want to change.

Page Styles

Page styles in LaTeX terms refers not to page dimensions, but to the running headers and footers of a document. You may have noticed that in every example document produced for these tutorials, each page has its respective number printed at the bottom, even though not a single command has been issued to tell LaTeX to do it! That is because the document class in use has already defined the page style for you. Of course, you don't need to stick with the defaults if you don't want to.

There are two commands at your disposal for changing the page style. \pagestyle{style} will apply the specified style to the current and all subsequent pages. \thispagestyle{style} will only affect the current page. The possible styles are:

empty Both header and footer are clear
plain Header is clear, but he footer contains the page number.
headings Header displays page number and other information which the document class deems important, e.g., section headers.
myheadings Similar to above, however, is possible to control the information in the header.

An issue to look out for is that the major sectioning commands (\part, \chapter or \maketitle) specify a \thispagestyle{plain}. So, if you wish to suppress all styles by inserting a \pagestyle{empty} at the beginning of your document, then the style command at each section will override your initial rule, for those pages only. To achieve your intended result, you will have to follow the offending commands with \thispagestyle{empty}.

Customising with fancyhdr

The fancyhdr package is by far the most convenient way of controlling the appearance of your headers and footers. It is very versatile, and I am only going to give you a taste of what you can do. For a more complete guide, the author of the package produced this documentation.

To begin, add the following lines to your preamble:

\usepackage{fancyhdr}
\pagestyle{fancy}

Both the header and footer comprise of three elements each according to its horizontal position (left, centre or right). To set their values, the following commands are available:

\lhead[lh-even]{lh-odd} \lfoot[lf-even]{lf-odd}
\chead[ch-even]{ch-odd} \cfoot[cf-even]{cf-odd}
\rhead[rh-even]{rh-odd} \rfoot[rf-even]{rf-odd}

Hopefully, the behaviour of the above commands is fairly intuitive: if it has head in it, it affects the head etc, and obviously, l, c and r means left, centre and right respectively. Documents can be either one- or two-sided. Articles are by default one-sided, books are two-sided. Two-sided documents differentiate the left (even) and right (odd) pages, whereas one-sided do not. An example:

\fancyhead{}
\fancyfoot{}
			
\lhead{Andrew Roberts}
\rhead{\today}
\rfoot{\thepage}

It is often necessary to clear any defaults or a previous style definition, and the first two lines of the above example will do this. The commands are an alternative interface to customising the headers/footers that fancyhdr offers, and so by not passing anything to them, it assumes that you want it all blank.

The result of these commands will put my name at the top left, todays date at the top right, and the current page number at the bottom right of the page. Even if the document class was two-sided, because no optional text has been supplied for the even pages, the style will be use for all pages. For two-sided, it's common to mirror the style of opposite pages, you tend to think in terms of inner and outer. So, the above same again for two-sided:

\lhead[Andrew Roberts]{}
\rhead[]{Andrew Roberts}
\lhead[]{\today}
\rhead[\today]{}
\lfoot[\thepage]{}
\rfoot[]{\thepage}

This is effectively saying my name is top outer, todays date is top inner, and current page number is bottom outer.

NB. If you want to make the article class two-sided, use \documentclass[twoside]{article}.

Page n of m

Some people like to put the current page number in context with the whole document. LaTeX only provides access to the current page number, however, you can the lastpage environment to find the total number of pages, and use it like this:

			\usepackage{lastpage}
			...
			\cfoot{\thepage\ of \pageref{LastPage}}

Note the capital letters. Also, add a backslash after \thepage to ensure adequate space between the page number and 'of'. And do recall, when using references, you have to run latex an extra time to resolve the cross-references.

Multi-column Pages

It is common to see articles and conference proceedings formatted with two columns of text. However, such publishers will usually provide you with their own document class, which automatically implements this format, without you having to do anything. It is very easy to format your page in this way. If you are using a standard LaTeX document class, then you can simply pass the optional argument twocolumnto the document class: \documentclass[twocolumn]{article} which will give the desired effect.

While this simple addition will do the job 9 out of 10 times, it is widely acknowledged that there are many limitations of this approach, and that the multicol package is much more useful for handling multiple columns. It has several advantages:

Floats are not fully supported by this environment. It can only cope if you use the starred forms of the float commands (eg \begin{figure*} which makes the float span all columns. This is not hugely problematic, since floats of the same width as a column may be too small, and you would probably want to span them anyway.

To create a typical two-column layout:

\begin{multicols}{2}
  lots of text
  \ldots
\end{multicols}

The parameter \columnseprule holds the width of the vertical rules. By default, the lines are omitted as this parameter is set to a length of 0pt. Do the following before the beginning of the environment:

\setlength{\columnseprule}{1pt}

This will draw a thin line of 1pt in width. A thick line would not look very pleasing, however, you are free to put in any length of your choosing. Also, to change the horizontal space in between columns (the default is set at 10pt, which is quite narrow) then you need to change the \columnsep parameter:

\setlength{\columnsep}{20pt}

Manual Page Formatting

There may be instances, especially in very documents, such as books, that LaTeX will not get all page breaks looking as good as it could. It may, therefore, be necessary to manually tweak the page formatting. Of course, you should only do this at the very final stage of producing your document, once all the content is complete. LaTeX offers the following:

\newline Breaks the line at the point of the command.
\linebreak[number] Breaks the line at the point of the command, but also stretches the line to the margin. If the optional number argument is supplied, you convert the command from a demand to a request. The number must be between 0-4, with 4 being the most insistent.
\newpage Ends the current page
\pagebreak[number] Breaks the current page at the point of the command. If the optional number argument is supplied, you convert the command from a demand to a request. The number must be between 0-4, with 4 being the most insistent.
\nopagebreak[number] Stops the page being broken at the point of the command. If the optional number argument is supplied, you convert the command from a demand to a request. The number must be between 0-4, with 4 being the most insistent.
\clearpage Ends the current page and causes any floats encountered in the input, but yet to appear, to be printed.

Summary

This tutorial is relatively short, largely due to the fact that the whole LaTeX ethos is concentrate on the content, and let LaTeX (and/or other typographers who have developed suitable document classes) decide on the best presentation. The next step to achieve greater control of page layout is to set about designing your own class. Unfortunately, that is not a straightforward task, and is often best left to the professionals!

Files: playout.tex | playout.pdf | orient.tex | orient.pdf | wide.tex | wide.pdf | multicol.tex | multicol.pdf | fancy.tex | fancy.pdf
Useful resources: Geometry manual | Fancyhdr documentation

Last updated: November 5, 2011

« Back to LaTeX tutorials.