![#1# 宏定义中的签名](https://linux22.com/image/471036/%231%23%20%E5%AE%8F%E5%AE%9A%E4%B9%89%E4%B8%AD%E7%9A%84%E7%AD%BE%E5%90%8D.png)
我正在阅读源代码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
包设定的先例,它节省了当时需要保存的几个字节。