Объединить имя макроса \foo + bar ==> \foobar

Объединить имя макроса \foo + bar ==> \foobar

Если в команде \fooесть один из моих аргументов, например, #1как я могу сделать \deffor \foobar, т. е. определить команду с barдобавленным to #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}

Связанный контент