Thanks to the answers to this question, I believe I have a fix for \vspace* that will make it work sanely at the top of a page.
\def\@vspacer#1{%
\ifvmode
\dimen@\prevdepth
\begingroup
\topskip\z@skip
\hrule\@height\z@
\nobreak
\endgroup
\vskip#1%
\vskip\z@skip
\prevdepth\dimen@
\else
\@bsphack
\vadjust{%
\@restorepar
\begingroup
\topskip\z@skip
\hrule\@height\z@
\nobreak
\endgroup
\vskip#1%
\vskip\z@skip
}%
\@esphack
\fi
}
The only change from the standard definition is the addition of \begingroup, \topskip\z@, and \endgroup.
As near as I can tell, this should only affect \vspace*s that appear at the beginning of a page. The idea is that \vspace*{5in} should really be 5in, not 5in + 10pt. And one shouldn't have to use \kern-\topskip after \vspace*s that appear at the top of the page.
Is there some reason this or something similar was not in the LaTeX 2e kernel? There are no comments in the source noting any sort of problems with \vspace and \topskip. In fact, \topskip is barely mentioned in the source.
\vspaceand\vspace*to produce identical behavior at the top of a page? – yannisl Dec 24 '10 at 06:50\vspace*{5in}at the top of the page to really be a skip of 5 inches. With the default definition,\vspace*{5in}at the top of a page gives you 5 inches plus\topskip(which defaults to 10 pt). Basically, I want\vspace*to always have the same behavior. – TH. Dec 24 '10 at 09:23vspaceor define a macro@gobble@topskip. – yannisl Dec 24 '10 at 09:56\vspace{x}expands to\vskip x\vskip 0pt. At the top of the page, TeX would discard them. Something like\@gobble@topsepwould be easy enough, but you'd have to know that you're at the top of the page. I can't think of a good reason for\vspace*to have a different behavior at the top of the page versus part way down. In particular,\vspace*{0pt}should really not add any vertical space. At the very least, I've seen no documentation saying that the value you give it might not be the amount it skips. It seems like a bug in LaTeX to me. – TH. Dec 24 '10 at 10:07\vpace*. I'm also curious what Herbert had in mind. – Hendrik Vogt Dec 30 '10 at 15:18