Makronamen verketten \foo + bar ==> \foobar

Makronamen verketten \foo + bar ==> \foobar

Wenn in einem Befehl \fooeines meiner Argumente ist, #1wie kann ich beispielsweise ein \deffor ausführen \foobar, d. h. einen Befehl mit barhinzugefü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 \xFwdfür jeden \xvon 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}

verwandte Informationen