动态生成的标签

动态生成的标签

我想使用带有条件的命令生成标签:

\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已被重新定义。

相关内容