关于textcolor的定义

关于textcolor的定义

textcolor我很好奇,发现包中定义的宏有以下定义xcolor

\def\textcolor#1#{\@textcolor{#1}}
\def\@textcolor#1#2#3{\protect\leavevmode{\color#1{#2}#3}}

但是,我使用的宏仅具有两个参数而不是三个参数:

\textcolor{blue}{foo}

我不明白这个定义的含义是:

  1. 这个语法是什么意思\textcolor#1#
  2. \@textcolor在上面的例子中,宏将获得的第三个参数是什么?

答案1

这是原始的 tex 语法,实际上不应该在 latex 包中使用。它在这里使用,因为在 1993 年,我们把这一切都装进一台 640K 的机器里真的由于空间不足,通过快捷定义来节省几十个字节是值得的。

如果你走的话

\def\foo#1#{zzz #1 zzz}

然后#1是从\foo第一个括号开始的所有内容,所以

\foo one two three {zzz}

那么#1就是one two three

使用此功能可以\textcolor获取任何可选参数而无需实际解析它们,然后重新插入它们以便\color看到它们。

所以比较一下

\textcolor{blue}{foo}

\textcolor[rgb]{0,0,1}{foo}

在第一种情况下#1是空的,所以扩展是

  \@textcolor{}{blue}{foo}

  \protect\leavevmode{\color{blue}foo}

但在第二种情况下#1[rgb](包括括号),所以第一个扩展是

\@textcolor{[rgb]}{0,0,1}{foo}

 \protect\leavevmode{\color[rgb]{0,0,1}foo}

因此[rgb]实际上从未被视为\textcolor可选参数,它只是被抓取并传递给\color

相关内容