連接巨集名稱 \foo + bar ==> \foobar

連接巨集名稱 \foo + bar ==> \foobar

如果 in a command\foo是我的參數之一,例如,#1我該如何執行\deffor \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}

相關內容