我正在寻找\color
函数调用的 TeX 源代码xcolor
我正在导入的库
\documentclass[12pt]{article}
\usepackage{xcolor}
\begin{document}
{ \color{blue!60!white} abc }
\end{document}
我在这里问而不是tex.stackexchange因为我要求的是编程,而不仅仅是 tex 命令。理论上,这是有效的 TeX 代码,我应该继续。
答案1
从技术上讲,如果你只是对它感兴趣\color
,那么你可以发出
{\let\protect\show\color}
在您的文档中并检查您的.log
:
> \color =\long macro:
->\@ifnextchar [\@undeclaredcolor \@declaredcolor .
这\color
是有效的,因为被声明为强壮的, 否则发行\show\color
就会起作用。
代码显示了\color
输入流是否包含的条件[
。也就是说,
\color[<options>]{<colour>}
将导致执行\@undeclaredcolor
,同时调用
\color{<colour>}
将导致执行\@declaredcolor
。在这两种情况下,{<colour>}
参数都会被\@undeclaredcolor
或吞噬\@declaredcolor
。
如果您希望遵循更详细的宏执行和扩展路径,请发出跟踪命令
{\tracingmacros1
\color{blue!60!white} abc }
可以让你进行相当多的调试,揭示大约 800 行的冗长的宏扩展模式当人们深入兔子洞时,当然是从\@ifnextchar
上面提到的条件开始的。
答案2
有可能
\long\def\color@b@x#1#2#3%
{\leavevmode
\setbox\z@\hbox{\kern\fboxsep{\set@color#3}\kern\fboxsep}%
\dimen@\ht\z@\advance\dimen@\fboxsep\ht\z@\dimen@
\dimen@\dp\z@\advance\dimen@\fboxsep\dp\z@\dimen@
{#1{#2\color@block{\wd\z@}{\ht\z@}{\dp\z@}\box\z@}}}
没什么可看的。争论#3
似乎是颜色。最后一行看起来最重要。
{#1{#2\color@block{\wd\z@}{\ht\z@}{\dp\z@}\box\z@}}