在此示例中:
\documentclass{article}
\usepackage{ifthen}
\newcommand{\objtitle}[1]{%
\ifthenelse{\equal{#1}{a}}{avalue}{}%
\ifthenelse{\equal{#1}{b}}{bvalue}{}%
}
\newcommand{\counterpart}[1]{%
\ifthenelse{\equal{#1}{a}}{b}{}%
\ifthenelse{\equal{#1}{b}}{a}{}%
}
\begin{document}
\counterpart{a}
\objtitle{a}
\objtitle{\counterpart{a}}
\end{document}
\counterpart{a}
并\objtitle{a}
单独工作但\objtitle{\counterpart{a}}
产生错误:
! Argument of \equal has an extra }.
<inserted text>
\par
l.17 \objtitle{\counterpart{a}}
使用\objtitle{\protect\counterpart{a}}
消除错误消息但不产生输出。
问题是什么?如何解决?
答案1
\ifthenelse
不能不能嵌套使用。没办法。抱歉,这是不可能的。
如果要进行可嵌套的大小写切换,则需要使用更高级的工具。
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewExpandableDocumentCommand{\caseswitch}{O{}mm}
{
\str_case_e:nnF { #2 } { #3 } { #1 }
}
\ExplSyntaxOff
\newcommand{\objtitle}[1]{%
\caseswitch{#1}{
{a}{avalue}
{b}{bvalue}
}%
}
\newcommand{\counterpart}[1]{%
\caseswitch{#1}{
{a}{b}
{b}{a}
}%
}
\begin{document}
\counterpart{a}
\objtitle{a}
\objtitle{\counterpart{a}}
\end{document}
您还可以\caseswitch
使用可选参数进行调用;因此
\caseswitch[none of the above]{#1}{
{a}{avalue}
{b}{bvalue}
}
#1
如果既不是a
也不是,则返回“以上都不是” b
。如果没有可选参数,则不匹配将不返回任何内容。
案件的数量是任意的。