[Tex/LaTex] how to suppress “Underfull \vbox (badness 10000) … while \output is active”

page-breakingprimitiveswarnings

when using an inflexible document class, one is often faced
with the warning

Underfull \vbox (badness 10000) has occurred while \output is active []

on pages that contain no display math.

in underfull \vbox
frank mittelbach quotes from the companion (2ed) regarding page
specs that are "too rigid". the recommended (and obvious) approach is to build in
more flexibility.

the same suggestions, to add flexibility, are given in
What are underfull hboxes and vboxes and how can I get rid of them?.

the document class in question was constructed (intentionally, if
short-sightedly) with no allowance for stretch in the \parskip,
between chapter title and text, and in a few other locations.
furthermore, an option permits the change from [10pt] to [11pt]
body text so even if the \textheight is an integral number of
lines in one size, another size will not meet the criterion.

with \vfuzz one can specify a small allowance which, if not
exceeded, will suppress overfull box messages. but there isn't
any equivalent for a negative allowance.

i've checked the etex manual (the latest, dated 1998/03/04) and that for etextools but
didn't find anything useful. i've looked into the tex.web code,
but it wasn't obvious how one might work around the problem
without a new primitive.

it's not a good idea to ignore these messages in the log, since
the "structural" ones camouflage the ones (usually very few) that
do need to be attended to.
has anyone come up with a method for suppressing only those
underfull vbox messages that are off by only a couple of points?

Best Answer

Adding a finite stretch on the page suppresses warnings so long as the shortfall is within this limit, so at 11pt 1pt suppresses the warning completely .7pt makes it have a "non infinite" badness and anything much less than that has infinite badness.

\documentclass[11pt]{amsart}

\makeatletter
 \def\@textbottom{\vskip \z@ \@plus 1pt}
 \let\@texttop\relax
\makeatother

\begin{document}

aa\\bb\\cc\\dd\\ee\\ff\\gg

aa\\bb\\cc\\dd\\ee\\ff\\gg

aa\\bb\\cc\\dd\\ee\\ff\\gg

aa\\bb\\cc\\dd\\ee\\ff\\gg

aa\\bb\\cc\\dd\\ee\\ff\\gg

aa\\bb\\cc\\dd\\ee\\ff\\gg

aa\\bb\\cc\\dd\\ee\\ff\\gg

aa\\bb\\cc\\dd\\ee\\ff\\gg

aa\\bb\\cc\\dd\\ee\\ff\\gg

aa\\bb\\cc\\dd\\ee\\ff\\gg

\end{document}