如果命令中的某个\foo
参数是我的参数之一,例如#1
我该如何执行\def
for \foobar
,即定义一个bar
带有添加到的命令#1
?
具体来说,我尝试以下
\documentclass{scrbook}
\usepackage[refpage,noprefix]{nomencl}
\makeatletter
\newcommand*{\defsym}[3][]{\def#2{%
\ifx\protect\@unexpandable@protect
#3%
\else
\nomenclature{$#3$}{#1}\gdef#2{#3}#3%
\fi} %
%\def#2FwD{#3} % <-- this does not work
}
\makeatother
\usepackage{amsmath,amsfonts,amssymb}
\defsym{\Rn}{\mathbb{R}^n}
\makenomenclature
\begin{document}
$\Rn$ will be introduced later ...
%$\RnFwD$ will be introduced later ...
\clearpage
$\Rn$ is defined as ...
\printnomenclature
\end{document}
这使用符号/缩写和宏列表在第一次使用时自动将符号(此处为 \Rn)放入命名法(符号列表)中。这在其他情况下效果很好,但现在我遇到了一个罕见的情况,我想第一次使用尚未记录在命名法中的符号。为此,我想为声明的\xFwd
每个命令引入一个命令。\x
\defsym
我尝试了上述方法,但是当我取消注释该行时,我收到错误
Use of \Rn doesn't match its definition.
,我认为这是由于我首先提出的问题造成的。
答案1
\makeatletter
\def\addbar#1{%
\expandafter\def\csname\expandafter\@gobble\string#1bar\endcsname}
\addbar\sin#1{hello #1}
\show\sinbar
\stop
定义\sinbar
:
> \sinbar=macro:
#1->hello #1.
答案2
\documentclass{article}
\makeatletter
\def\foo#1#2{\@namedef{foo#1}{#2}}
\makeatother
\begin{document}
\foo{bar}{foobarbaz}
\foobar
\end{document}