Date:
Tue, 4 Jan 2011 09:43:43 +0100
Content-Disposition:
inline
MIME-Version:
1.0
Content-Type:
text/plain; charset=us-ascii
|
On Tue, Jan 04, 2011 at 05:11:34PM +1030, Will Robertson wrote:
> On 04/01/2011, at 8:36 AM, Joseph Wright wrote:
>
> > Working on the galley (see the latest SVN checkin), I find that \box_if_empty:NTF is misleading. The test is for a void box, not an empty one:
> >
> > \box_new:N \l_my_box
> > \hbox_set:Nn \l_my_box {}
> > \box_if_empty:NTF \l_my_box { NOPE } { OOPS }
> >
> > I think it should be \box_if_void:NTF - any objections?
>
> Not at all.
> Is there a need to have an actual empty test?
> Oh wait, this isn't possible, right?
A non-expandable test is possible:
\NeedsTeXFormat{LaTeX2e}
\makeatletter
\newbox\test@box
\def\ifboxempty#1{%
\global\let\g@next\@secondoftwo
\ifhbox#1%
\setbox\test@box=\hbox{%
\unhcopy#1\relax
\ifnum\lastnodetype<\z@
\global\let\g@next\@firstoftwo
\fi
}%
\else
\ifvbox#1%
\setbox\test@box=\vbox{%
\unvcopy#1\relax
\ifnum\lastnodetype<\z@
\global\let\g@next\@firstoftwo
\fi
}%
\fi
\fi
\g@next
}
\makeatother
\def\wrong#1{\typeout{WRONG: #1}}
\def\ok#1{\typeout{OK: #1}}
\begingroup
\setbox0=\box0
\endgroup
\ifboxempty0{\wrong{void is empty}}{\ok{void is not empty}}
\setbox0=\null
\ifboxempty0{\ok{null is empty}}{\wrong{null is not empty}}
\setbox0=\vbox{}
\ifboxempty0{\ok{vbox{} is empty}}{\wrong{vbox{} is not empty}}
\setbox0=\hbox{\write16{}}
\ifboxempty0{\wrong{hbox with write is empty}}%
{\ok{hbox with write is not empty}}
\csname @@end\endcsname\end
Yours sincerely
Heiko <[log in to unmask]>
|
|
|