# Selecting specific nodes and changing style (for those nodes)

Is it possible to select specific nodes and color them green?

I was thinking of using another for loop, but it doesn't seem like I can define more than 1 style.

\documentclass{article}
\usepackage[dvipsnames]{xcolor}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}[darkstyle/.style={circle,draw,fill=MidnightBlue!25,minimum size=2.0em}][lightstyle/.style={circle,draw,fill=Green!25,minimum size=2.0em}
\foreach \x in {0,...,4}
\foreach \y in {0,...,4}
{\pgfmathtruncatemacro{\label}{5 + 5*\x - \y}
\node [darkstyle]  (\x\y) at (1.5*\x,-1.5*\y) {\label};}

\foreach \x in {0,...,4}
\foreach \y [count=\yi] in {0,...,3}
\draw (\x\y)--(\x\yi) (\y\x)--(\yi\x) ;

\foreach \x in {0,...,4}
\for each \y in {0, 4}
\node [lightstyle]

\end{tikzpicture}
\end{document}

-
Once a node is drawn, it is drawn. You can't change that later. – Qrrbrbirlbel Apr 5 '13 at 7:46
@Qrrbrbirlbel But can I define lightstyle like that? Or just 2 different styles? – AlanH Apr 5 '13 at 7:50
@AlanH: Qrrbrbirlbel is right, but rather than try to draw again things you can select some nodes in a list then test if the name is contained in the list: if yes draw the node with another style. More or less something like: \foreach \list in {22,33,44}{ \ifnum\x\y=\list \node [thick, darkstyle, fill=green!70!blue,minimum size=2.5em] (\x\y) at (1.5*\x,1.5*\y) {\label};\fi} – Claudio Fiandrino Apr 5 '13 at 7:57

You can .try a style that has a name combined from the x and the y value of the current node. (Without the .try handler you’d need define every possible style combination.)

Sadly, \tikzset cannot used inside a \foreach loop as this executes its body only locally. I thought about defining global PGF keys but I think the etoolbox solution is easier to adapt.

The \foreach loops “collect” all \tikzset which we later execute with \myTikZsets.

## Code 1

\RequirePackage[dvipsnames]{xcolor}
\documentclass[tikz]{standalone}
\usepackage{etoolbox}
\begin{document}
\begin{tikzpicture}[
every node/.style={circle,draw,minimum size=2.0em},
darkstyle/.style={fill=MidnightBlue!25},
lightstyle/.style={fill=Green!25},
redstyle/.style={fill=red!25},
style for 1-3/.style={redstyle},
style for 3-3/.style={redstyle},
]
\foreach \x in {0,...,4} {
\foreach \y in {0,4} {
\xappto\myTikZsets{\noexpand\tikzset{style for \x-\y/.style=lightstyle}}
}
}
\myTikZsets % use the stored \tikzset calls
\renewcommand*{\myTikZsets}{}% and empty it again (for later use)
\foreach \x in {0,...,4}
\foreach \y in {0,...,4}
{\pgfmathtruncatemacro{\label}{5 + 5*\x - \y}
\node [darkstyle, style for \x-\y/.try]  (n-\x-\y) at (1.5*\x,-1.5*\y) {\label};}
\foreach \x in {0,...,4}
\foreach \y [count=\yi] in {0,...,3}
\draw (n-\x-\y)--(n-\x-\yi) (n-\y-\x)--(n-\yi-\x) ;
\end{tikzpicture}
\end{document}


## Code 2

With the example you have given this can also be made with plain TeX \ifnums.

\RequirePackage[dvipsnames]{xcolor}
\documentclass[tikz,convert=false]{standalone}
\begin{document}
\begin{tikzpicture}[
every node/.style={circle,draw,minimum size=2.0em},
darkstyle/.style={fill=MidnightBlue!25},
lightstyle/.style={fill=Green!25},
]
\foreach \x in {0,...,4}
\foreach \y in {0,...,4}
{\pgfmathtruncatemacro{\label}{5 + 5*\x - \y}
\ifnum\y=0
\tikzset{darkstyle/.style={lightstyle}}
\fi
\ifnum\y=4
\tikzset{darkstyle/.style={lightstyle}}
\fi
\node [darkstyle]  (n-\x-\y) at (1.5*\x,-1.5*\y) {\label};}
\foreach \x in {0,...,4}
\foreach \y [count=\yi] in {0,...,3}
\draw (n-\x-\y)--(n-\x-\yi) (n-\y-\x)--(n-\yi-\x) ;
\end{tikzpicture}
\end{document}


## Output

-
THANK YOU!!!!!!!! – AlanH Apr 5 '13 at 8:04
@AlanH But wait, there's more. (See updated answer.) – Qrrbrbirlbel Apr 5 '13 at 8:24