我想使用带有条件的命令生成标签:
\newcommand{\paperPrefix}[1][]{\ifthenelse{\equal{#1}{}}{\ifthenelse{\equal{\activePaper}{}}{}{\activePaper\_}}{#1\_}}
#1_
基本上,如果使用可选参数调用它,则\activePaper_
如果宏 activePaper 是定义(\def\activePaper{...}
),则它应该返回,''
否则什么也没有()。
但是当我使用它时:
\label{\paperPrefix[MyPrefix]{}image}
而不是以以下形式定义标签
\label{MyPrefix_image}
它抱怨说:
! Missing \endcsname inserted.<to be read again>\let ...eco]{}}{{1}{1}{Introduction}{chapter.1}{}}
所以我想知道如何解决这个问题。
答案1
除了不能通过\ifthenelse
扩展工作之外
\label{\paperPrefix[MyPrefix]{}image}
只有一个参数(在[]
),因此{}
之前的图像不受影响并且会成为标签的一部分。
我想你想要
\newcommand{\paperPrefix}[1]{\ifx\activePaper\defaultPaper\else#1_\fi}
和...一起
\newcommand\defaultPaper{}%or anything really
\newcommand\activePaper{}%same as above
然后\paperPrefix{mypaper}
(带有{} not []
)将默认扩展为无,或mypaper_
如果\activepaper
已被重新定义。