我试图在青色和蓝色之间创建一个平滑的渐变,连接两个形状,一个用青色绘制,一个用蓝色绘制。为此,我使用循环中两种颜色的简单混合\foreach
。
然而,在混合的第一步中,尽管只有 0.5% 的蓝色与(大概)99.5% 的青色混合,但产生的颜色与纯青色有很大不同。
我遗漏了什么,如何才能正确实现效果?要清楚:应该混合哪些颜色和以何种比例混合才能实现从纯青色到纯蓝色的第一步?
梅威瑟:
\documentclass[tikz]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[cyan,fill=cyan] (0,0) rectangle (1,1);
\draw[blue!0.5!cyan,fill=blue!0.5!cyan] (1,0) rectangle (2,1);
\end{tikzpicture}
\end{document}
输出:
以下是使用过程中出现的问题\shade
:
\documentclass[tikz]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\shade[left color=blue,right color=cyan] (0,0) rectangle (2,1);
\draw[cyan,fill=cyan] (2,0) rectangle (3,1);
\end{tikzpicture}
\end{document}
结果:
该问题已由@PaulGaborit 和@percusse 解决,如下面的评论所示,通过设置:
\colorlet{cyan}[rgb]{cyan}
如果我理解正确的话,xcolor 根据混合中第一种颜色的默认方案决定使用哪种配色方案 (rgb/cym),并使用第一种配色方案下第二种颜色的预定义名称 (在本例中为“青色”)。因此,当使用不同方案的基本颜色时,混合的较高边界 (当第二种颜色占主导地位时) 可能与默认的“纯”色不同。
回想起来,xcolor 手册(V2.11)第 15 页第 2.3.2 节暗示了这种情况发生。
答案1
该xcolor
包将其定义blue
为 RGB 颜色和cyan
CMY 颜色。
为了进行混合,xcolor
使用第一种颜色的颜色模型,并且如果需要,转换第二种颜色。
要将 CMY 转换cyan
为 RGB cyan
,您可以\colorlet{cyan}[rgb]{cyan}
在序言中添加。
\documentclass[tikz]{standalone}
\usepackage{tikz}
\colorlet{cyan}[rgb]{cyan}
\begin{document}
\begin{tikzpicture}
\draw[cyan,fill=cyan] (0,0) rectangle (1,1);
\draw[blue!0.5!cyan,fill=blue!0.5!cyan] (1,0) rectangle (2,1);
\end{tikzpicture}
\end{document}
摘自xcolor
手册(第 2.3.2 节“标准颜色表达的含义”,第 15 页,v2.11):
一般来说,第二种颜色会转换为第一种颜色的模型,然后在该模型内计算混合。因此, 理论上应该是等价的,
name1!<percent>!name2
但name2!<100-percent>!name1
不一定会产生相同的视觉效果。
这是一个包含三行的示例:默认模型、纯 rgb 模型和纯 cmy 模型。
\documentclass[tikz,margin=1mm]{standalone}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{tikz}
\usetikzlibrary{positioning}
\colorlet{cmycyan}{cyan}
\colorlet{rgbcyan}[rgb]{cyan}
\colorlet{cmyblue}[cmy]{blue}
\colorlet{rgbblue}{blue}
\begin{document}
\begin{tikzpicture}
\tikzset{
block/.style 2 args={
draw,right=-.5\pgflinewidth of a,
fill=#1,text=#2,
text height=.8em,text depth=.2em,text width=3.5cm,
font=\ttfamily\bfseries,align=center,
},
}
\node[anchor=base east] (a) {default models};
\foreach \col/\txtcol in {blue/white,blue!1!cyan/black,cyan!99!blue/white,cyan/white}{
\node[block={\col}{\txtcol}](a){\col};
}
\node[anchor=base east] (a) at (0,-1) {rgb model};
\foreach \col/\txtcol in {rgbblue/white,rgbblue!1!rgbcyan/black,rgbcyan!99!rgbblue/black,rgbcyan/black}{
\node[block={\col}{\txtcol}](a){\col};
}
\node[anchor=base east] (a) at (0,-2) {cmy model};
\foreach \col/\txtcol in {cmyblue/white,cmyblue!1!cmycyan/white,cmycyan!99!cmyblue/white,cmycyan/white}{
\node[block={\col}{\txtcol}](a){\col};
}
\end{tikzpicture}
\end{document}