我如何使宏返回一个值?

我如何使宏返回一个值?

我想做这样的事:

\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}{..}

相关内容