[Tex/LaTex] Geometry for single page, redux

geometrymarginspage-breaking

I'm bummed that this question is closed. I want to know how to do what the OP there wanted. So I'm asking again.

Here is a MWE:

\documentclass{article}
\usepackage{lipsum}
\usepackage[margin=1.5in]{geometry}

\begin{document}
\newgeometry{top=2in}
\lipsum[1-7]
\restoregeometry
\lipsum[1-5]

\end{document}

But lo, great sadness! What I wanted was that only the first page have the weird 2 inch top margin, and that, wherever that ends, we move on to other pages with 1.5 inch top margins.

So of course, we could try to throw a vspace*{0.5in} at the top. And look, there's nothing wrong with that hack, but it (a) doesn't actually do what I'm asking (the margins on the first page aren't actually any different; there's just a bit of extra space that makes it look like they are) and (b) doesn't work will with, e.g. the letter documentclass, since there's nowhere to put the vspace*{0.5in} command to get it to drop the date down. MWE for that:

\documentclass{letter}
\usepackage{lipsum}
\usepackage[margin=1.5in]{geometry}
\begin{document}

\vspace*{0.5in}

\begin{letter}{
Department of Stuff \\
California Institute of Things \\
Pasadena, CA 91125}

\opening{Hiya!}

\lipsum[1-7]
\lipsum[1-5]

\end{letter}

\end{document}

It (weirdly) just throws an extra blank page at the start of things. Nope, I actually want something that gives different margins for the first page and none of the following pages, but which allows paragraphs to break across the change.

Of course, someone might have a hack for the letter class too. And that's great! But shouldn't there be some nice uniform solution? I imagine there will be classes where neither the `\vspace*' nor the as-yet-to-be-determined-letter-class-hack work…

Best Answer

The first part of Werner’s answer won’t work if the sender’s address is also specified (with the \address declaration). In my opinion, it is more robust to patch the \opening command:

\documentclass[a4paper]{letter} % To avoid confusion, let me explicitly declare 
                                % the paper size.
\usepackage[T1]{fontenc}    % Unrelated to the question, but I like it.
\usepackage[
        margin=1.5in,
        showframe   % For this example only.
    ]{geometry}
\usepackage{etoolbox}
\usepackage{lipsum}

\address{Revinu Jitis Drofnats\\
    Department of Farm Ecology\\
    University of St.~Anford\\
    Haga Alto, CA~94321}
\date{\today}

% The patch:
\pretocmd{\opening}{\vspace*{0.5in}}{}{}



\begin{document}

\begin{letter}{
Department of Stuff \\
California Institute of Things \\
Pasadena, CA 91125}

\opening{Hiya!}

\lipsum[1-12]

\end{letter}

\end{document}

Here’s the first page of the output:

First page produced by the code