我已经使用该包定义了一个条件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
。