如何在 tikzpicture 中的节点中指定 RGB 格式的填充颜色?

如何在 tikzpicture 中的节点中指定 RGB 格式的填充颜色?

我只是想得到一个圆角框,里面有一些文字。文字颜色将为白色,框将填充特定颜色。

序言部分包括:

\usepackage{tikz}
\usetikzlibrary{calc,trees,positioning,arrows,chains,shapes.geometric,%
decorations.pathreplacing,decorations.pathmorphing,shapes,%
matrix,shapes.symbols,plotmarks,decorations.markings,shadows}

我使用的代码是:

\begin{tikzpicture}
\node[drop shadow,fill=black,draw,rounded corners]
{\textcolor{white}{TEST}};
\end{tikzpicture}

如何在填充选项中指定任意颜色(0-255 范围内的 RGB 值)?

另外,我是否使用过于先进的工具(tikz)来做一些简单的事情(绘制一个用某种颜色填充的圆角矩形和其他颜色的文本)?

答案1

在回答你的第一个问题 - 混合(例如)RGB 格式的颜色 - 你可以使用类似于xcolor包裹 文档,因为 TikZ 可以识别这一点。例如,使用以下方法可以得到黑色和绿色的混合/共享比例:

\node[...,fill=black,...]
\node[...,fill=black!60!green,...]
\node[...,fill=black!30!green,...]
\node[...,fill=green,...]

和展示

具有不同颜色填充的节点(黑色和绿色共享)

或者,如果你有兴趣混合某些数量RGB 颜色,您可以使用部分混合,如下所示:

\node[...,fill={rgb:red,4;green,2;yellow,1},...]
\node[...,fill={rgb:red,1;green,2;blue,5},...]
\node[...,fill={rgb:orange,1;yellow,2;pink,5},...]
\node[...,fill={rgb:black,1;white,2},...]

输出

部分颜色混合

为了回答你的第二个问题 - 处理盒子 - 你可以使用fancybox包裹甚至PStricks。下面是使用后者的示例:

\documentclass{article}
\usepackage{pstricks}
\begin{document}
\begin{pspicture}(5,5)
  \psset{fillstyle=solid,framearc=.3}
  \psframebox[fillcolor=red]{\textcolor{white}{TEST}}
  \psframebox[fillcolor=green!50!red]{\textcolor{white}{TEST}}
  \psframebox[fillcolor=black!50]{\textcolor{white}{TEST}}
  \psframebox[fillcolor={rgb:red,1;green,2;blue,3}]{\textcolor{white}{TEST}}
\end{pspicture}
\end{document}​

PStricks 圆形/彩色盒子

答案2

一种方法是在序言中预先定义想要使用的所有颜色,例如

\definecolor{mycolor}{rgb}{1,0.2,0.3}

值在区间 (0,1) 内,或

\definecolor{mycolor}{RGB}{255,51,76}

使用 0-255 范围内的整数值(使用比 更合理的名称mycolor),然后mycolor可以在所有颜色规范中使用,例如

\node[drop shadow,fill=mycolor,draw,rounded corners]

通过这种方式,您可以控制颜色,也可以通过修改颜色的定义来改变颜色。

答案3

Werner 展示了混合颜色的 rgb 语法,egreg 展示了如何在 RGB 中定义颜色然后使用它。如果您想指定 RGB 值 [0-255] 的颜色而不事先定义它,您可以使用 Werner 展示的 rgb 语法,通过将可选的 div 参数设置为 255(参见xcolor 包文档,第 13 和 16 页)。

\documentclass{article}
\usepackage{tikz}
\begin{document}
\tikz\node[rounded corners, fill={rgb,255:red,21; green,66; blue,128}, text=white, draw=black] {hello world};
\end{document}

答案4

另一种基于egregs答案的方法是,在使用之前预先定义想要使用的颜色。这样,在为所有颜色想出名称时就不必那么有创意,如果必须定义许多不同的颜色,这尤其麻烦。然后可以在所有颜色规范中使用颜色(就像序言中定义的颜色一样),例如

...
\definecolor{tempcolor}{rgb}{1,0.2,0.3}
\node[drop shadow,fill=tempcolor,draw,rounded corners]
...

值在区间 (0,1) 内,或

...
\definecolor{tempcolor}{RGB}{255,51,76}
\node[drop shadow,fill=tempcolor,draw,rounded corners]
...

整数值在 0-255 范围内(名称“tempcolor”仅为建议)。

如果您想确保不会覆盖任何先前定义的颜色tempcolor,您可以随时在单独的范围内定义颜色:

...
{
    \definecolor{tempcolor}{rgb}{1,0.2,0.3}
    \node[drop shadow,fill=tempcolor,draw,rounded corners]
}
...

相关内容