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}.