#1# 宏定义中的签名

#1# 宏定义中的签名

我正在阅读源代码xcolor,对以下定义有点困惑:

\documentclass{article}
\usepackage{xcolor}
\makeatletter
\def\testclr#1#{\@testclr{#1}}
\def\@testclr#1#2{{\fboxsep\z@\fbox{\colorbox#1{#2}{\phantom{XX}}}}}
\makeatother
\begin{document}

\testclr{magenta}
\testclr[rgb]{1,0,1}

\end{document}

#中的第二个有什么用\def\testclr#1#{\@testclr{#1}}

答案1

\def\foo#1#{xxx [#1]}

是使第一个参数一切都达到(强制)的基本语法,{ 因此

\foo hello world{}

会产生xxx [hello world]

它在这里用于保存重新解析任何可选参数的更高级别命令,因为所有可选参数(直到{主参数)都被抓取并传递给\color命令。

这并不是真正好的乳胶风格,但遵循了color包设定的先例,它节省了当时需要保存的几个字节。

相关内容