获取“如果不是 foo”条件的最佳实践

获取“如果不是 foo”条件的最佳实践

因此,您可以通过以下两种方式进行设置,以便在为假\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

答案2

你要求“更好的”方法。我使用包找到了方法如果那么(谢谢大卫·卡莱尔:-)) 非常容易阅读和适应。看一看:

\ifthenelse{\NOT \boolean{foo}}{\dostuff}{}

(但不知道效率如何)

末尾的空括号 {} 是空的别的\ifthenelse{\NOT \boolean{foo}}{\dostuff} 选项。如果在命令后留一个空行,则可以省略它们并简单书写, 以避免出现任何意外结果。

相关内容