我正在尝试\StrDel
修改命令中使用的参数。例如,我的.tex
文件包含:
\command{Word Anotherword}
我引用的文件.sty
包含:
\newcommand{\dosomething}[1]{
\some{#1}
\thing{\StrDel{#1}{ }}
}
我想要它,所以当调用命令时,它包含的命令将被调用如下:
\some{Word Anotherword}
\thing{WordAnotherword}
因此,在第二个命令中\StrDel
,删除参数中的空格。但这始终会产生以下错误:
Use of \@item doesn't match its definition. \new@ifnextchar ...served@d = #1\def \reserved@a {#2}\def \reserved@d {#3}\f...
我犯了错误吗?如果没有,有解决方案吗?
答案1
这种方法是否可行取决于应该做什么\thing
。例如,如果是,\textit
那就没有问题;但如果\thing
是\label
,那么这种方法就行不通。
问题在于\StrDel{a b c}{ }
不是字符串abc
,而是生成该字符串所需的一组指令,并且\label
无法处理这些指令。许多其他命令也会发生同样的情况。
有一个出路:
\newcommand{\something}[1]{%
\some{#1}%
\StrDel{#1}{ }[\temp]% remove spaces and store the string in \temp
\expandafter\thing\expandafter{\temp}%
}
根据\thing
,这两个\expandafter
命令可能不是必需的(例如无论如何\label
都会扩展\temp
),但它们不会造成危害。