A visual guide to LaTeX’s page layout parameters
Contents
Update: September 2021
Some 4 years after it was first published, this article has been edited, renamed and republished to reduce its size and re-focus the scope of topics covered. The article originally included a LuaTeX-based LaTeX template which relied on old Overleaf V1 features. That template is now obsolete and no longer available.
Note: If you don’t need, or want, to understand finer details of LaTeX page layout, the Overleaf article Page size and margins explains the geometry
package and is likely to be of more interest.
Introduction
Have you ever struggled to configure a book layout with LaTeX—setting the paper size, book page size (trim size) and margins? It can be tricky, even though there are many packages to assist with this task—including the excellent geometry
package. (La)TeX uses nearly a dozen values to fully specify the page layout for publications that have different margins for left- and right-hand pages:
\hoffset
,\voffset
,\oddsidemargin
,\topmargin
,\headheight
,\headsep
,\textheight
,\textwidth
,\marginparsep
,\marginparwidth
,\footskip
Typically, these parameters are set through commands provided by packages or templates—such as those distributed by book publishers. However, at times you might want to understand what is going on “behind the scenes”—perhaps you need a greater degree of control for a particular type of document you want to create.
In this post we explore the relationship between LaTeX’s model of the page and the conventional model used within the world of print and design. Using a set of Google Slides, which contain detailed page-layout illustrations, we show, step-by-step, how to formulate some very simple equations which provide a link between LaTeX’s layout model and a typical specification that might be produced by a book designer or print-on-demand company. Using those equations you can, if you wish, directly calculate values for LaTeX’s parameters to implement your preferred book layout.
Short notes on pdfTeX and LuaTeX/LuaHBTeX
Note that in addition to the \hoffset
and \voffset
parameters listed above, pdfTeX also uses the parameters \pdfhorigin
and \pdfvorigin
. Traditionally, TeX engines output .dvi
files which were converted to PostScript or PDF by software which assumed the page origin was at located at 1 inch (25.4mm) from the left of the page and 1 inch (25.4mm) from the top of the page. The values of the \hoffset
and \voffset
parameters are relative to that (1 inch, 1 inch) position. The pdfTeX parameters are slightly different insofar that they are relative to the top-left corner, i.e., at (0mm, 0mm). So, for example, if you set \pdfhorigin=30mm
it is equivalent to setting \hoffset
to 30–25.4
=4.6mm
because \hoffset
is relative to a position that is already 25.4mm
from the left of the page. Equally, an \hoffset
value of 0mm
is equivalent to \pdfhorigin=25.4mm
. In the following discussions/diagrams we will use the parameters \hoffset
and \voffset
.
LuaTeX/LuaHBTeX
LuaTeX/LuaHBTeX also indirectly support \pdfhorigin
and \pdfvorigin
but, for compatibility with pdfTeX, those commands must be defined as follows (see Section 3 of The LuaTeX Referemce Manual):
\edef\pdfhorigin{\pdfvariable horigin}
\edef\pdfvorigin{\pdfvariable vorigin}
What is our objective?
The theme of this article, and the purpose of the resources we have provided, is based on the following objectives:
- We want to implement a layout specification provided by, for example, a book designer or publisher who does not use or support LaTeX—or perhaps we need to follow a specification provided by a print-on-demand company.
- We want to use the traditional book measurements (paper size, trim size and page margins) contained within the designer’s specification and convert them into parameters and values that LaTeX understands and can use to replicate the designer’s layout.
- We want our book page to be horizontally and vertically centred on the paper size we have chosen— i.e., centred within the area of the PDF pages created by LaTeX. We also want to choose an arbitrary paper size and not be restricted to a few standard options (A4, US Letter and so forth).
Quick reminder: How do you set the paper size?
LuaTeX, XeTeX and pdfTeX provide two commands that let you control the “paper size” of the PDF document they produce:
\pdfpagewidth
\pdfpageheight
Knowing that these commands represent the size of our paper we can now draw a diagram to show what we are trying to achieve:
Note that ΔX and ΔY are the values needed to centre the book page on the paper area—they are discussed in the Google Slides. From the diagram above you can see:
- ΔX=½(\pdfpagewidth − book-page-width)
- ΔY=½(\pdfpageheight − book-page-height)
The above diagram is also included in the Google Slides and is used as the starting point for arriving at the page-layout equations.
An aside: LuaTeX
LuaTeX no longer directly supports \pdfpagewidth
or \pdfpageheight
but now uses two new primitives called \pagewidth
and \pageheight
. Backwards compatibility can be achieved through \let\pdfpagewidth\pagewidth
and \let\pdfpageheight\pageheight
. Interested readers can find more details in LaTeX News (Issue 24, February 2016) and, of course, the official LuaTeX documentation.
Resources in this post
Here at Overleaf we like to try out new ideas so, in this post, we have included a range of resources which we hope will be useful:
- Two sets of Google Slides: These slide sets contain identical content but one has animations and the other does not (some people prefer to view slides that don’t contain any animation). You can also download them in PDF format. The slides provide a very brief introduction to the basics of book page layout and explore the relationship between LaTeX’s page model and the one used in conventional print and design. The last few slides show how to arrive at simple equations which can be used to use convert a set of traditional measurements (page width/height and margins) into equivalent LaTeX parameter values to reproduce your book’s layout in LaTeX.
- Page-layout diagrams: The Google Slides contain detailed page-layout diagrams which are used to formulate some simple equations to calculate various LaTeX parameters. If you would like to study those illustrations in more detail we’ve provided PDF versions for you to download.
How to use this article’s resources
The readership of this article is likely to have a spectrum of experience in using LaTeX so we felt it was preferable to provide a range of resources for readers to choose from—based on your personal experience, interests or preferences. We hope these resources are useful and meet the needs and interests of Overleaf’s LaTeX community.
There’s no defined order in which to use these resources but our suggestion would be as follows:
- view the Google Slides;
- (optional): download and study the page layout diagrams;
Step 1: View or download (in PDF) the Google Slides
The final slide (shown below) summarizes the equations formulated during the presentation.
For the convenience of readers we provide three options for viewing the slides:
- slides with animations;
- slides without animations;
- slides in PDF format for offline viewing or printing.
Step 2 (optional): Download and study the page-layout diagrams
If you would like to explore the page-layout diagrams in more detail, there is a link at the end of this article to download a PDF file which contains a double-page spread (facing pages) version of the diagrams contained in the Google Slides.
Notes on the page-layout parameters and equations
If you look at the equations presented in the Google Slides you might observe they contain many variables; consequently, there are multiple ways to use the equations depending on which LaTeX parameter values you want to calculate and which ones you’d like to set yourself. Let’s take a look at one of the graphics (and relevant equations) contained in the Google Slides:
Clearly, you need to decide which LaTeX parameter values you want to calculate and which ones you will provide as the starting point. One way to proceed is as follows:
- Set
\hoffset
and\voffset
to0mm
(with\pdfhorigin=1in
and\pdfvorigin=1in
, if necessary) - Use values for the following LaTeX parameters which affect the book page width:
\marginparsep
\marginparwidth
- Set preferred values for the following LaTeX parameters which affect the book page height:
\headheight
\headsep
\footskip
- Set values for your preferred paper size together with the desired width and height of the book page, plus the four book margin values you would like to use.
- Calculate the following LaTeX values to implement your book layout (centred on the paper size you selected):
\evensidemargin
,\oddsidemargin
,\textwidth
,\textheight
and\topmargin
Article resources
Here we list a number of resources that we have prepared to help you better understand the LaTeX page-layout parameters. The Google Slides provide details of the simple equations that you can, if you wish, use directly to calculate parameter values to suit the needs of any document.
Google Slides: With animations
Google Slides: Without animations
Google Slides: Converted to PDF
If you prefer to view the slides as a PDF document, or wish to print them out, you can download the slides in PDF format.
Download page-layout diagrams
If you want to study the page-layout diagrams in more detail, here is a double-page spread (i.e., facing pages) in PDF format.
In conclusion
We hope this article is useful and has provided some useful background information for exploring page layout using LaTeX. As always, we are delighted to hear from readers so do please contact us with your comments and feedback.
Happy (La)TeXing!
Overleaf guides
- Creating a document in Overleaf
- Uploading a project
- Copying a project
- Creating a project from a template
- Using the Overleaf project menu
- Including images in Overleaf
- Exporting your work from Overleaf
- Working offline in Overleaf
- Using Track Changes in Overleaf
- Using bibliographies in Overleaf
- Sharing your work with others
- Using the History feature
- Debugging Compilation timeout errors
- How-to guides
- Guide to Overleaf’s premium features
LaTeX Basics
- Creating your first LaTeX document
- Choosing a LaTeX Compiler
- Paragraphs and new lines
- Bold, italics and underlining
- Lists
- Errors
Mathematics
- Mathematical expressions
- Subscripts and superscripts
- Brackets and Parentheses
- Matrices
- Fractions and Binomials
- Aligning equations
- Operators
- Spacing in math mode
- Integrals, sums and limits
- Display style in math mode
- List of Greek letters and math symbols
- Mathematical fonts
Figures and tables
- Inserting Images
- Tables
- Positioning Images and Tables
- Lists of Tables and Figures
- Drawing Diagrams Directly in LaTeX
- TikZ package
References and Citations
- Bibliography management with bibtex
- Bibliography management with natbib
- Bibliography management with biblatex
- Bibtex bibliography styles
- Natbib bibliography styles
- Natbib citation styles
- Biblatex bibliography styles
- Biblatex citation styles
Languages
- Multilingual typesetting on Overleaf using polyglossia and fontspec
- Multilingual typesetting on Overleaf using babel and fontspec
- International language support
- Quotations and quotation marks
- Arabic
- Chinese
- French
- German
- Greek
- Italian
- Japanese
- Korean
- Portuguese
- Russian
- Spanish
Document structure
- Sections and chapters
- Table of contents
- Cross referencing sections, equations and floats
- Indices
- Glossaries
- Nomenclatures
- Management in a large project
- Multi-file LaTeX projects
- Hyperlinks
Formatting
- Lengths in LaTeX
- Headers and footers
- Page numbering
- Paragraph formatting
- Line breaks and blank spaces
- Text alignment
- Page size and margins
- Single sided and double sided documents
- Multiple columns
- Counters
- Code listing
- Code Highlighting with minted
- Using colours in LaTeX
- Footnotes
- Margin notes
Fonts
Presentations
Commands
Field specific
- Theorems and proofs
- Chemistry formulae
- Feynman diagrams
- Molecular orbital diagrams
- Chess notation
- Knitting patterns
- CircuiTikz package
- Pgfplots package
- Typesetting exams in LaTeX
- Knitr
- Attribute Value Matrices
Class files
- Understanding packages and class files
- List of packages and class files
- Writing your own package
- Writing your own class