# How to detect overfull and underfull hbox without triggering the warning?

I need a LaTeX macro which can be used by this:

\IfFull{TEXT}{THEN}{ELSE}


It would typeset TEXT in a \vbox (which it will discard), and if there was an overfull hbox or an underfull hbox, it would run THEN, otherwise it would run ELSE. It wouldn't report the Overfull \hbox or Underfull \hbox warnings on the console or in the log file.

Is there such a macro already? If not, how could it be defined?

If this is too complicated, it would be enough to do it for a single paragraph.

Minimal working example, which gives the wrong result, because it always executes #3, but in the example it should have executed #2:

\documentclass{article}
\def\IfFull#1#2#3{#3}
\begin{document}
\end{document}


This should create document with the word CORRECT in it, because #1 has an overfull hbox.

-
is luatex a possibility? (I'm not sure it's really feasible otherwise) –  David Carlisle Feb 19 '14 at 0:26
With a positive attitude everything is possible :-). Thanks for the \lastbox solution. Feel free to give a luatex solution, but most probably we'll go with \lastbox to reduce dependencies. –  pts Feb 19 '14 at 1:51

Like any code using a \lastbox loop this will fail badly if there is any unexpected material in the vertical list being measured. specials, inserts, writes, rules, will "hide" any material above the unremovable item.

\documentclass{article}

\makeatletter
\def\IfFull#1{%
\global\let\@IfFull\@secondoftwo
\setbox\z@\vbox{%
\hfuzz\maxdimen
#1\par
\loop
\unskip\unpenalty\unskip\unpenalty
\setbox\z@\lastbox
\ifvoid\z@
\else
\setbox0\hbox to \hsize{\unhbox\z@}%