我想做这样的事:
\DeclareDocumentCommand{\myCondition}{m}
{
\ifx <stuff>
return true
\else
return false
\fi
}
像这样使用它:
\ifx \myCondition{something}
% do stuff
\fi
还有其他选择吗?
答案1
如果这就是您想要做的全部,那么您只需要定义一个新的 if 语句:
\newif\ifCondition
然后只需设置\Conditiontrue
和\Conditionfalse
。更详细地说:
\newif\ifCondition
\DeclareDocumentCommand{\myCondition}{m}
{
\ifx <stuff>
\Conditiontrue % return true
\else
\Conditionfalse % return false
\fi
}
然后您可以使用:
\myCondition{something}% set the \Conditiontrue or \Conditionfalse
\ifCondition% use the condition
% do stuff
\fi
如果\myCondition
可能隐藏在组内,您可能需要使用\global\Conditiontrue
等等 - 虽然,这实际上取决于您的用例,因为就我个人而言,我经常发现能够对组进行本地“条件更改”非常有用。
答案2
如果你使用
\if\condition{1}
do stuff
\else
do other stuff
\fi
你可以生存下去
\def\condition#1{\relax\relax\fi % this ends the \if test
\ifx<your tests> % here you put your code to test: \ifnum, \ifmmode, or whatever
\csname iftrue\expandafter\endcsname % and this would reopen a new \if test which is true
\else
\csname iffalse\expandafter\endcsname % and this would reopen a new \if test which is false
\fi}
现在无法测试它是否适用于 xparse 不可扩展定义,或者它们是否插入了其他内容。您可以使用\DeclareExpandableDocumentCommand
来定义\something
。
\DeclareExpandableDocumentCommand\condition{m}{..}