[texhax] minipage conditional
Uwe Lueck
uwe.lueck at web.de
Tue Jun 21 10:53:59 CEST 2011
"Vafa Khalighi" <vafa018 at gmail.com> wrote 21.06.2011 09:49:42:
> The minipage environment accepts b, t, and few others as the position of the minipage.
> I want \test macro return "true" if it is used inside minipage with b position
> and otherwise return "false". I do not know if there is a better way but this is what I did:
>
>
> \documentclass{article}
> \makeatletter
> \newif\if at test
> \long\def\@iiiparbox#1#2[#3]#4#5{%
> \leavevmode
> \@pboxswfalse
> \setlength\@tempdima{#4}%
> \@begin at tempboxa\vbox{\hsize\@tempdima\@parboxrestore#5\@@par}%
> \ifx\relax#2\else
> \setlength\@tempdimb{#2}%
> \edef\@parboxto{to\the\@tempdimb}%
> \fi
> \if#1b\@testtrue\vbox%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% this is where I made \if at test true
> \else\if #1t\vtop
> \else\ifmmode\vcenter
> \else\@pboxswtrue $\vcenter
> \fi\fi\fi
> \@parboxto{\let\hss\vss\let\unhbox\unvbox
> \csname bm@#3\endcsname}%
> \if at pboxsw \m at th$\fi
> \@end at tempboxa}
> \def\test{\if at test true\else false\fi}
> \makeatother
> \begin{document}
> \begin{minipage}[b]{0.5\textwidth}
> \test
> \end{minipage}
> \end{document}
>
> But it returns "false". Why is this?
Probably because you issue \@testtrue *after* the content of the box
-- #5 -- is evaluated.
> how can I fix it? Is it a better way for doing what I want to do?
I would remove your \@testtrue and add \if#1b\@testtrue\fi
right to the left of #5 (in the replacement text).
HTH -- Uwe.
More information about the texhax
mailing list