在 LaTeX 中定义颜色的代码

在 LaTeX 中定义颜色的代码

我正在寻找\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@}}

为什么 LaTeX 内部命令中带有 @?

相关内容