tikz convert color string to hex value
Perhaps this (with \extractcolorspecs
and \convertcolorspec
from the xcolor
package, loaded by the tikz
package)?
\documentclass[border=1mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\tikzset{box/.style={draw,outer sep=0,minimum size=1cm}}
\def\dy{1}
\foreach \col [count=\i] in {red,orange,yellow,green,cyan,blue,purple} {
\def\mycol{\col!40!gray}
\extractcolorspecs{\mycol}{\modelcmd}{\colorcmd}
\convertcolorspec{\modelcmd}{\colorcmd}{HTML}\hex
\node[box,yshift=1cm*\i*\dy,fill=\mycol,label=left:\mycol] (main) {\#\hex};
}
\end{tikzpicture}
\end{document}
Not done in tikz
, but rather using the colorinfo
package to extract color information, and the binhex.tex
package to convert the color info into hex format.
Extending my answer here Draw a palette box in LaTeX to allow the specification in terms of LaTeX color specification.
\documentclass{article}
\usepackage{xcolor,stackengine,colorinfo}
\input binhex.tex
\newcommand\palbox[1]{{\sffamily\fboxsep=5pt\relax\fboxrule=1pt\relax\footnotesize%
\fcolorbox{gray!50}{gray!10}{%
\stackengine{8pt}{%
\colorbox[RGB]{#1}{\rule{60pt}{0pt}\rule{0pt}{60pt}}%
}{%
\color{black!60}\stackengine{12pt}{\intohex{#1}}{\saycolors{#1}}{U}{l}{F}{F}{S}%
}{U}{l}{F}{F}{S}%
}%
}}
\newcommand\saycolors[1]{\saycolorsaux#1\relax}
\def\saycolorsaux#1 #2 #3\relax{R:#1 G:#2 B:#3}
\newcommand\intohex[1]{\#\intohexaux#1\relax}
\def\intohexaux#1 #2 #3\relax{\twodigithex{#1}\twodigithex{#2}\twodigithex{#3}}
\newcommand\twodigithex[1]{\ifnum#1<16\relax0\fi\MakeLowercase{\hex{#1}}}
\newlength\rcomp
\newlength\gcomp
\newlength\bcomp
\newcommand\colcomponents[1]{\expandafter\colcomponentsaux#1\relax}
\def\colcomponentsaux#1,#2,#3\relax{%
\setlength\rcomp{\dimexpr255\dimexpr#1pt\relax+.5pt\relax}%
\setlength\gcomp{\dimexpr255\dimexpr#2pt\relax+.5pt\relax}%
\setlength\bcomp{\dimexpr255\dimexpr#3pt\relax+.5pt\relax}%
}
\newcommand\truncatergb[1]{\expandafter\truncatergbaux#1\relax}
\def\truncatergbaux#1.#2\relax{#1}
\newcommand\xpalbox[1]{%
\colorlet{mycolor}{#1}%
\setbox0=\hbox{\colorInfo{mycolor}}%
\colcomponents{\colorValue}%
\edef\Rcomp{\truncatergb{\the\rcomp}}%
\edef\Gcomp{\truncatergb{\the\gcomp}}%
\edef\Bcomp{\truncatergb{\the\bcomp}}%
\edef\tmp{\expandafter\expandafter\expandafter\Rcomp
\expandafter\expandafter\expandafter\space
\expandafter\Gcomp\expandafter\space\Bcomp}%
\expandafter\palbox\expandafter{\tmp} = \colorbox{mycolor}{#1}%
\par
}
\begin{document}
\xpalbox{blue!40!red!25}
\xpalbox{blue!60!green!45}
\end{document}
One more example base on @quark67's answer:
\documentclass[border=1mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning,chains}
\begin{document}
\begin{tikzpicture}[start chain=M1 going below,node distance=0]
\tikzset{box/.style={draw,outer sep=0,minimum width=2cm,on chain=M1}}
\def\dy{1}
\foreach \col [count=\i] in {red,orange,yellow,green,cyan,blue,purple,
{rgb,255:red,0; green,255; blue,0},
{rgb:red,1;green,1;yellow,1}} {
\extractcolorspecs{\col}{\modelcmd}{\colorcmd}
\convertcolorspec{\modelcmd}{\colorcmd}{HTML}\hex
\node[box,fill=\col,label=right:\col] (main) {\#\hex};
}
\end{tikzpicture}
\end{document}