Macros 宏来定义单参数宏

Macros 宏来定义单参数宏,macros,latex,Macros,Latex,我试图定义一个宏,它将简化以后宏的定义 我希望模拟的行为如下: \def\mydef#1{MAGIC} \mydef{foo} \mydef{bar} \foo{sometext}% outputs a decorated "foo:sometext" \bar{sometext}% outputs a similarly decorated "bar:sometext" 我一直在尝试以下方面: \def\mydef#1{% \expandafter\def% % defin

我试图定义一个宏,它将简化以后宏的定义

我希望模拟的行为如下:

\def\mydef#1{MAGIC}

\mydef{foo}
\mydef{bar}

\foo{sometext}% outputs a decorated "foo:sometext"
\bar{sometext}% outputs a similarly decorated "bar:sometext"
我一直在尝试以下方面:

\def\mydef#1{%
  \expandafter\def%      % define when argument is ready
  \csname #1\endcsname%  % set the new macro's handle
  ???%                   % handle arguments to new macro
  {\decorate{#1}{???}}%  % decorate appropriately
}

如何实现这种行为?

在您的实例中,技术上不需要处理
\mydef
中的参数。例如,您可以执行以下操作:

\def\mydef#1{%
  \expandafter\def%      % define when argument is ready
  \csname #1\endcsname%  % set the new macro's handle
  ???%                   % handle arguments to new macro
  {\decorate{#1}{???}}%  % decorate appropriately
}
foo:sometext
酒吧:一些文本

\decoration
接受两个参数,即使在
\mydef
创建中只传递一个参数。但是,由于(La)TeX是一种宏扩展语言,因此扩展只会将
\decoration{.}
插入输入流,留下
\decoration
来拾取其后的任何内容(两个标记)

您将看到
\show\foo
将以下内容打印到
.log

> \foo=macro:
->\decorate {foo}.
暗示
\foo
不接受参数

如果确实希望在
\mydef
中捕获参数作为宏创建的一部分,则应:

\show\foo
现在显示

> \foo=macro:
#1->\decorate {foo}{#1}.
意思是
\foo
接受一个(强制)参数

> \foo=macro:
#1->\decorate {foo}{#1}.