
Wenn in einem Befehl \foo
eines meiner Argumente ist, #1
wie kann ich beispielsweise ein \def
for ausführen \foobar
, d. h. einen Befehl mit bar
hinzugefügtem to definieren #1
?
Konkret versuche ich folgendes
\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}
Dies verwendetListe der Symbole/Abkürzungen und Makrosum ein Symbol (hier \Rn) bei seiner ersten Verwendung automatisch in die Nomenklatur (Liste der Symbole) einzufügen. Das funktioniert für mehr gut, aber jetzt habe ich die seltene Gelegenheit, ein Symbol zum ersten Mal zu verwenden, das noch nicht in der Nomenklatur aufgezeichnet sein sollte. Zu diesem Zweck möchte ich \xFwd
für jeden \x
von deklarierten Befehl einen Befehl einführen \defsym
.
Ich habe dies oben versucht, aber wenn ich die Zeile auskommentiere, erhalte ich den Fehler
Use of \Rn doesn't match its definition.
, der meiner Meinung nach auf die Frage zurückzuführen ist, die ich zuerst gestellt habe.
Antwort1
\makeatletter
\def\addbar#1{%
\expandafter\def\csname\expandafter\@gobble\string#1bar\endcsname}
\addbar\sin#1{hello #1}
\show\sinbar
\stop
definiert \sinbar
:
> \sinbar=macro:
#1->hello #1.
Antwort2
\documentclass{article}
\makeatletter
\def\foo#1#2{\@namedef{foo#1}{#2}}
\makeatother
\begin{document}
\foo{bar}{foobarbaz}
\foobar
\end{document}