关于此代码示例,请问两个问题:
1) 为什么\rlap
阻止我设置变量?
2) 如何从 内部设置一个\rlap
在 外部可见的变量\rlap
?
我正在使用 MikTex 2.8。谢谢您的任何提示!
\documentclass{article}
\newif\ifmycheck
\begin{document}
\rlap{\mychecktrue}
% \mychecktrue
\ifmycheck
Check True!
\else
Check False! % always takes this path!
\fi
\end{document}
答案1
组内的更改保留在该组内,并将
\rlap
其参数放在 内\hbox
,因此位于其自己的组内。因此,如果您这样做:\rlap{\mychecktrue % group is still open! % \mychecktrue \ifmycheck Check True! \else Check False! \fi}
你会得到
檢查真實!
因此您会看到您确实在里面设置了变量
\rlap
。您希望更改在组外持续存在。因此请使用前缀
\global
:\rlap{\global\mychecktrue} % \mychecktrue \ifmycheck Check True! \else Check False! \fi
这将再次导致“检查正确!”
答案2
为了补充马修的回答,除了全局设置变量之外,还有一个解决方案,那就是使用 aftergroup 来延迟分配,直到组(由 生成\hbox
)完成后。您的示例变为
\documentclass{article}
\newif\ifmycheck
\begin{document}
\rlap{\aftergroup\mychecktrue}
\ifmycheck
Check True!
\else
Check False!
\fi
\end{document}
现在排版Check True!
。