88

Sometimes the margins need to be changed for a particular page, paragraph, or other section of text. For example, if I'm writing a letter and want the left margin to be almost at the right side of the page for the four lines of my address, or if I am combining prose with poetry and want the poems to be indented relative to the rest of the work.

What is the best way to change both left and right margins on the fly?

40

There are several packages available on CTAN to do this. changepage looks promising but you can find other alternatives by searching for "margins" or "changepage" on ctan search.

With the changepage package, you can use the adjustwidth environment as follows:

\begin{adjustwidth}{left amount}{right amount}
\lipsum[2]
\end{adjustwidth}

For example, to remove 100pt from the margin on both sides, you would use

\begin{adjustwidth}{100pt}{100pt}
  • 7
    changepage seems to do just what I'm after, through the \begin{adjustwidth}{left change length}{right change length} environment. Thanks! – Michael Underwood Jul 29 '10 at 17:49
  • 1
    A little more specifically, \begin{adjustwidth}{50pt}{-200pt} XXX \end{adjustwidth} adds 50pt to the left margin and subtracts 200pt from the right margin. – Kenny LJ May 14 '18 at 5:20
74

Here is how you can do it. Put the following in the preamble (before \begin{document})

\def\changemargin#1#2{\list{}{\rightmargin#2\leftmargin#1}\item[]}
\let\endchangemargin=\endlist 

then in the text you can use

\begin{changemargin}{<arg>}{<arg>} 
\end{changemargin} 

where <arg> is the distance you want to include on the margin (the first one defines the right-hand side margin, and the second defines the left-hand side one).

So, for example, to add 0.5 cm to the margins on either side, you would have:

\begin{changemargin}{0.5cm}{0.5cm} 
%your text here  
\end{changemargin}

This is exactly how the command

\begin{quote}
\end{quote}

is defined, but with the set to 1cm. The command quote can be used without having to load any packages, by the way.

  • Thanks Vivi. I take it you mean "where <arg> is the distance...", right? Are there any advantages to this version over using a package such as changepage? – Michael Underwood Jul 30 '10 at 22:32
  • @Michael: Sorry, because of html the <arg> was not showing (though it was written). About the advantages over changepage, I really don't know. I have never used changepage and didn't even know it existed. I guess I need to try it out :) Have you tried the package yet? Is it good and straightforward? – Vivi Jul 30 '10 at 22:39
  • I haven't used it for a specific purpose yet, but was able to figure out how to do what I asked for and test it out within minutes of seeing David's suggestion. Some advantages claimed in the documentation that I haven't tested are: Correctly identifying left- and right-side pages if they are different; working inside floats; being able to change the top and bottom margins as well as left and right. – Michael Underwood Jul 30 '10 at 22:58
  • This is a very elegant solution. Works perfectly, even inside a float (which is where i needed it). – Trevor Oct 22 '12 at 22:17
  • The command dont works if you use it with a long text running across pages in a document definided with not equals inner and outer margins. – Raffaele Santoro Dec 28 '13 at 3:44
31

With either one of the KOMA-Script classes or the package scrextend (which is part of KOMA-Script), you can use the addmargin environment.

\documentclass{article}

\usepackage{scrextend}

\usepackage[english]{babel}
\usepackage{blindtext}

\begin{document}

\blindtext

% Syntax: \begin{addmargin}[<left indentation>]{<indentation>}
\begin{addmargin}[4em]{1em}
\blindtext
\end{addmargin}

\blindtext

\end{document}

enter image description here

  • 1
    thanks for that, that's exactly what i've been looking for for a while now. – David Wright Apr 21 '13 at 12:55
  • N.B. If used within an enumerated environment, this will remove the enumeration, i.e. you can't use it to adjust the margin of enumerated items. – Rax Adaam Apr 10 '18 at 15:47
6

Earlier versions of the geometry package did not allow to change the margins inside the document. The package gmeometric could help then.

Today geometry supports changing the margin inside the document by its commands \newgeometry{...} accepting the same key=value arguments and by \restoregeometry, see the manual of the current package version.

  • 5
    FYI: the \newgeometry and \restoregeometry commands cause a page break. – cjm Apr 26 '16 at 4:24
6

what about the \narrower (TeX?) command? Is it ok to use even though it does not offer a very precise control?

\documentclass[11pt]{book}
\usepackage[latin1]{inputenc}
\usepackage[a4paper,top=3.5cm,bottom=3cm,left=3.6cm,right=3.6cm]{geometry}
\usepackage{lipsum}
\begin{document}
\lipsum[4]
{\narrower\lipsum[4]
\par}
\lipsum[4]
\lipsum[4]
\lipsum[4]
\lipsum[4]
{\narrower\narrower\narrower \lipsum[4]
\par}
\lipsum[4]
\end{document}
  • 1
    \narrower will indent the text by one \parindent. For more precise control one can also use \hskip 10pt etc. Of course is ok if you only want to indent once. \narrower\narrower will indent both left and right. – Yiannis Lazarides Sep 30 '10 at 1:47
5

It might not answer the question directly, but:

There is a letter class:

\documentclass{letter}

for writing letters.

And for verse there is a package called...wait for it...verse:

\usepackage{verse}

As I said, it doesn't answer the specific question, but it might solve the two applications you want the solution for.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.