The changepage
package is useful for temporarily change the page parameters, based on the current values, so it's compatible with several other packages; particularly useful is its adjustwidth
environment.
On the other hand, geometry
and vmargin
are useful to set the overall shape of the page without doing complicated computations involving \topmargin
, \evensidemargin
and \oddsidemargin
and several other parameters.
The approach of the two packages is different; vmargin
has two different eight argument commands for setting the main parameters, while geometry
offers a much more flexible key-value interface. Moreover geometry
also handles page imposition (a page layout built on a smaller page than the one the document is printed on, with crop marks) and the \newgeometry
feature that allows to change the page parameters as many times as we need (but requires a page break, due to how TeX handles pages).
Also changepage
provides for changing the page height and width, but with an interface I consider difficult to manage, while \newgeometry
uses the same key-value interface as \geometry
(or the options to \usepackage[...]{geometry}
).
Which one to prefer? The answer is easy: vmargin
makes a bad error when doing its computations for the page parameters, because it usually sets \hoffset
and \voffset
to -1in (see section 3.3 in the documentation), which breaks other packages (notably atbegshi
on which eso-pic
and pdfpages
are based) that, coherently with the recommendations in source2e
(the commented source code of LaTeX), assume \hoffset
and \voffset
are zero.
There is another package that's worth mentioning, that is, typearea
, part of the KOMA-script suite. Its approach in setting the page parameters is completely different from geometry
's because it's based on page divisions: divide the height and width of the page by the same integer, create an imaginary subdivision into rectangles and take some of them as the type block (more details in the guide to KOMA-script). It doesn't support page imposition, but works well with crop
. It doesn't conflict with atbegshi
.
Note also that the memoir
class and the AMS classes have their own methods for setting the page parameters, but using geometry
with them is possible.
Of course one should never forget the \enlargethispage
feature, which is in the LaTeX kernel, that may help in easily solving pagination problems without having to change the overall shape of the type block.