因此,您可以通过以下两种方式进行设置,以便在为假\dostuff
时完成foo
。
“新条件”方法
如果您知道何时foo
设置,那么请执行以下操作:
\newif\ifnotfoo
\iffoo\notfoofalse\else\notfootrue\fi
然后使用\ifnotfoo
测试。
\ifnotfoo\dostuff\fi
“else” 方法
无论何时你需要\dostuff
,只需这样做:
\iffoo\else\dostuff\fi
这两种方法是否都比另一种更值得推荐?如果是,为什么?(或者还有其他更好的方法吗?
答案1
很难在不了解更多背景信息的情况下对效率(您的标签之一)发表评论。\footrue
并且\foofalse
实际上每个都只是一个\let
。因此,如果仅有的将此标记赋予一个或另一个定义的原因是,这样您就可以决定是否“做事”,那么您根本不需要 if 标记,那么您就不需要测试。
只需定义
\def\foofalse{\let\dostuff\realstuff}
\def\footrue{\let\dostuff\relax}
然后你可以\iffoo
用简单的方法替换构造
\dostuff
并且它将什么都不做或执行实际定义,具体取决于是否最近执行了\foofalse
或。由于这节省了扩展和跳过条件文本的时间,因此原则上它更有效率,但我尚未检查在现代机器上是否可以测量差异。除非您进行(字面上的)数百万次测试,否则这些中的任何一个都不太可能产生任何实际差异。\footrue
\iffoo