答案1
xcolor
natural
默认使用颜色模型。
(参见xcolor
软件包文档,表 1:“软件包选项”。)- 在
natural
颜色模型中,green
在rgb
模型中,yellor
在cmyk
模型中。
(只能从源代码中清楚地检查(1和2),但是包文档中的图 4:“目标颜色模型”稍微说明了一点区别。) <name1>!<pct>!<name2>
在像(<pct>
百分比的缩写)这样的颜色混合表达式中,如果<name1>
和<name2>
属于不同的颜色模型,则在正常情况下,当 0 <<pct>
< 100 时,生成的颜色与具有相同的模型<name1>
。
(请参阅xcolor
包文档,第 2.3.2 节“标准颜色表达式的含义”,编号列表后的注释段落。)- 具体来说,如果
<pct>
为 0,则<name2>
返回 ,不进行模型转换。在这种情况下,生成的颜色与 具有相同的模型<name2>
,而不是<name1>
。
(同上)
要设置或改变当前颜色模型,可以使用以下方法之一:
- 加载
\PassOptionsToPackage{<model>}{xcolor}
前使用。xcolor
- 使用模型名称作为封装选项,例如
\usepackage[rgb]{xcolor}
。 - 加载
\selectcolormodel{<model>}
后使用。xcolor
\documentclass{article}
\usepackage{tikz}
\newcommand{\printColorSpec}[1]{%
\textcolor{#1}{\rule{1em}{1em}}
\extractcolorspec{#1}{\temp}%
\makebox[4cm][l]{\detokenize{"#1"}} ->
\detokenize\expandafter{\temp}\par
}
\newcommand\testColorMixing[1]{%
\noindent Color Model: \texttt{#1}\\
\selectcolormodel{#1}%
\begin{tikzpicture}
\foreach \y in {0,10,...,100} {
\fill[green!\y!yellow] (.1*\y,0) rectangle ++(1,1);
\fill[yellow!\y!green] (.1*\y,1.1) rectangle ++(1,1);
}
\end{tikzpicture}
\par
}
\parindent=0pt
\begin{document}
Color Model: \texttt{natural}
\selectcolormodel{natural}
\ttfamily
\printColorSpec{green}
\printColorSpec{yellow}
\medskip\hrule\par\medskip
\printColorSpec{green!0!yellow}
\printColorSpec{green!10!yellow}
\printColorSpec{green!20!yellow}
\hspace*{.3em}\vdots\par
\printColorSpec{green!90!yellow}
\printColorSpec{green!100!yellow}
\medskip\hrule\par\medskip
\printColorSpec{yellow!0!green}
\printColorSpec{yellow!10!green}
\printColorSpec{yellow!20!green}
\hspace*{.3em}\vdots\par
\printColorSpec{yellow!90!green}
\printColorSpec{yellow!100!green}
\medskip\hrule\par\medskip
\testColorMixing{natural} % default
\testColorMixing{rgb}
\testColorMixing{cmyk}
\end{document}