关于 tikz/xcolor 中混合颜色的困惑

关于 tikz/xcolor 中混合颜色的困惑

我首先注意到yellow!50!green没有产生与 相同的颜色green!50!yellow。然后我更系统地尝试了:

\begin{tikzpicture}
\foreach\y in {0,10,...,100} {
\fill[green!\y!yellow] (.1*\y,0) rectangle ++(1,1);
\fill[yellow!\y!green] (.1*\y,2) rectangle ++(1,1);
}
\end{tikzpicture}

这是我得到的: 混合绿色和黄色

那里到底发生了什么事?

答案1

  1. xcolornatural默认使用颜色模型。
    (参见xcolor软件包文档,表 1:“软件包选项”。)
  2. natural颜色模型中,greenrgb模型中,yellorcmyk模型中。
    (只能从源代码中清楚地检查(12),但是包文档中的图 4:“目标颜色模型”稍微说明了一点区别。)
  3. <name1>!<pct>!<name2>在像(<pct>百分比的缩写)这样的颜色混合表达式中,如果<name1><name2>属于不同的颜色模型,则在正常情况下,当 0 < <pct>< 100 时,生成的颜色与具有相同的模型<name1>
    (请参阅xcolor包文档,第 2.3.2 节“标准颜色表达式的含义”,编号列表后的注释段落。)
  4. 具体来说,如果<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}

在此处输入图片描述

相关内容