标题内的条件

标题内的条件

我已经使用该包定义了一个条件ifthen

\newcommand{\Switch}[1] { \ifthenelse{\equal{#1}{1}}{Test1}{Test2} }

运行此命令没有问题。但是,如果我尝试将其放在图形标题中,它会产生错误(即,\Switch{1}工作\caption{Example text}正常,但\caption{\Switch{1}}不)。

这是预期行为吗?我该如何解决这个问题以生成条件字幕?

答案1

\ifthenelse命令看上去很脆弱?\caption{\protect\Switch{1}}可以工作。

答案2

作为一种现代的替代方案,您可以使用包中的命令etoolbox

\newcommand*{\Switch}[1]{\ifnumequal{#1}{1}{Test1}{Test2}}

或者xparse包:

\ExplSyntaxOn
\NewDocumentCommand \Switch { m } {
  \int_compare:nNnTF { #1 } = { \c_one } {
    Test1
  } {
    Test2
  }
}
\ExplSyntaxOff

答案3

其他解决方案都有效,只是为了完整性而添加这个。它还具有不需要的优点\protect

使用以下命令声明你的命令是强大的:

\DeclareRobustCommand{\Switch}[1] { \ifthenelse{\equal{#1}{1}}{Test1}{Test2} }

现在您就可以\caption{\Switch{1}}正常使用。

这个问题\newcommand有关和之间的区别的详细信息\DeclareRobustCommand

相关内容