如何使用后期选项绘制节点的边框

如何使用后期选项绘制节点的边框

我想创建一系列矩形,每个矩形都有不同的色调。色调从白色到黑色不等。我想通过绘制边框使白色(第一个)矩形可见。

我的第一步是绘制所有矩形,不使用任何条件代码:

\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选项不起作用latepgfmanual说:

由于您无法更改节点的外观,因此大多数这些选项将不起作用

这意味着诸如fill、、draw等不会产生影响,而诸如、、等red会产生影响。opacitylabelaliason 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}

彩色矩形

相关内容