매크로 이름 연결 \foo + bar ==> \foobar

매크로 이름 연결 \foo + bar ==> \foobar

명령에 \foo내 인수 중 하나가 있는 경우, 예를 들어 for 를 #1어떻게 수행할 수 있습니까 ? 즉, 에 추가하여 명령을 정의할 수 있습니까?\def\foobarbar#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}

관련 정보