我想创建一系列矩形,每个矩形都有不同的色调。色调从白色到黑色不等。我想通过绘制边框使白色(第一个)矩形可见。
我的第一步是绘制所有矩形,不使用任何条件代码:
\documentclass{standalone}
\usepackage[rgb]{xcolor}
\usepackage{tikz}
\usetikzlibrary{chains}
\begin{document}
\begin{tikzpicture}[start chain=chroma going below,
node distance=2mm,
every node/.style={shape=rectangle,minimum size=1cm},
]
\foreach \n [evaluate=\n as \value using 1-\n*0.125] in {0,...,8}
{
\definecolor{tmpc}{Hsb}{0,0,\value}
\draw node[on chain,fill=tmpc] {};
}
\end{tikzpicture}
\end{document}
我尝试foreach
用以下代码替换该代码:
{
\definecolor{tmpc}{Hsb}{0,0,\value}
\draw node[on chain,fill=tmpc] {}
\ifnum\n=0
(\tikzlastnode) [late options={draw}] % no effect
(\tikzlastnode.east) [draw] -- ++(1cm,0) % drawn correctly
\fi
; % ends the path
}
直接添加draw
到节点选项即可。只是它们的late options
行为不像我期望的那样 - 也许我理解错了?我添加了代码来查看代码是否ifnum
真正执行,结果确实如此。
是否有一类选项不起作用late options
?
答案1
下面的代码描述了一种略有不同的方法。请注意,您实际上并不需xcolor
要这样做。tikz
绘制了两张图片,一张使用xcolor
,另一张使用中的基本命令tikz
。我水平绘制了链条以节省空间。我还添加了一个宏,让您可以更改节点数。
\documentclass{minimal}
\usepackage[rgb]{xcolor}
\usepackage{tikz}
\usetikzlibrary{chains}
\begin{document}
%with xcolor
\begin{tikzpicture}[start chain=chroma going right,
node distance = 2mm,
every node/.style ={shape=rectangle,minimum size =1cm,on chain}]
\pgfmathsetmacro{\nbnodes}{8}
\pgfmathsetmacro{\factor}{1/\nbnodes}
\foreach \n [evaluate=\n as \value using 1-\factor*\n] in {0,...,\nbnodes}{
\pgfmathsetmacro{\bordershade}{ifthenelse(\n==0,100,0)}
\definecolor{tmpc}{Hsb}{0,0,\value}
\node[draw=black!\bordershade,fill=tmpc] {};
}
\end{tikzpicture}
%without xcolor
\begin{tikzpicture}[start chain=chroma going right,
node distance = 2mm,
every node/.style ={shape=rectangle,minimum size =1cm,on chain}]
\pgfmathsetmacro{\nbnodes}{8}
\pgfmathsetmacro{\factor}{100/\nbnodes}
\foreach \n [evaluate=\n as \shade using \factor*\n] in {0,...,\nbnodes}{
\pgfmathsetmacro{\bordershade}{ifthenelse(\n==0,100,0)}
\node[draw=black!\bordershade,fill=black!\shade] {};
}
\end{tikzpicture}
\end{document}
输出为
答案2
我认为该draw
选项不起作用late
:pgfmanual
说:
由于您无法更改节点的外观,因此大多数这些选项将不起作用
这意味着诸如fill
、、draw
等不会产生影响,而诸如、、等red
会产生影响。opacity
label
alias
on chain
为了达到您想要的结果,我只需在节点周围画一个矩形,而不是使用该draw
选项:
\documentclass{article}
\usepackage[rgb]{xcolor}
\usepackage{tikz}
\usetikzlibrary{chains}
\begin{document}
\begin{tikzpicture}[start chain=chroma going below,
node distance=2mm,
every node/.style={shape=rectangle,minimum size=1cm},
]
\foreach \n [evaluate=\n as \value using 1-\n*0.125] in {0,...,8}
{
\definecolor{tmpc}{Hsb}{0,0,\value}
\draw node[on chain,fill=tmpc] {}
\ifnum\n=0
(\tikzlastnode.north east) rectangle (\tikzlastnode.south west)
\fi
; % ends the path
}
\end{tikzpicture}
\end{document}