Welcome to the UK List of
TeX Frequently Asked Questions
on the Web

Searching

The index of Frequently Asked Questions about TeX is searchable.

Please enter your keyword here:   then press here: ,    or:
Google

Changing margins “on the fly”

One of the surprises characteristic of TeX use is that you cannot change the width or height of the text within the document, simply by modifying the text size parameters; TeX can’t change the text width on the fly, and LaTeX only ever looks at text height when starting a new page.

So the simple rule is that the parameters should only be changed in the preamble of the document, i.e., before the \begin{document} statement (so before any typesetting has happened.

To adjust text width within a document we define an environment:

\newenvironment{changemargin}[2]{%
  \begin{list}{}{%
    \setlength{\topsep}{0pt}%
    \setlength{\leftmargin}{#1}%
    \setlength{\rightmargin}{#2}%
    \setlength{\listparindent}{\parindent}%
    \setlength{\itemindent}{\parindent}%
    \setlength{\parsep}{\parskip}%
  }%
  \item[]}{\end{list}}

The environment takes two arguments, and will indent the left and right margins, respectively, by the parameters’ values. Negative values will cause the margins to be narrowed, so \begin{changemargin}{-1cm}{-1cm} narrows the left and right margins by 1 centimetre.

Given that TeX can’t do this, how does it work? — well, the environment (which is a close relation of the LaTeX quote environment) doesn’t change the text width as far as TeX is concerned: it merely moves text around inside the width that TeX believes in.

The changepage package provides ready-built commands to do the above; it includes provision for changing the shifts applied to your text according to whether you’re on an odd (recto) or an even (verso) page of a two-sided document. Changepage’s structure matches that of the memoir class.

The (earlier) package chngpage provides the same facilities, but it uses rather different syntax. Changepage’s structure matches that of the memoir class, and it should be used for any new work.

Changing the vertical dimensions of a page is more clumsy still: the LaTeX command \enlargethispage adjusts the size of the current page by the size of its argument. Common uses are

\enlargethispage{\baselineskip}

to make the page one line longer, or

\enlargethispage{-\baselineskip}

to make the page one line shorter. The process is (to an extent) simplified by the addlines package: its \addlines command takes as argument the number of lines to add to the page (rather than a length): the package documentation also provides a useful analysis of when the command may (or may not) be expected to work.

addlines.sty
macros/latex/contrib/addlines (or browse the directory); catalogue entry
changepage.sty
macros/latex/contrib/changepage (or browse the directory); catalogue entry

This answer last edited: 2011-06-01


Go to previous question, or next question

Go to FAQ home.

URL for this question: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=chngmargonfly

Comments, suggestions, or error reports? - see “how to improve the FAQ”.

This is FAQ version 3.28, released on 2014-06-10.