# A Question Regarding TikZ [every label/.style={red}]

In the TikZ manual page 55/1318 there is an example to create a red label as below:

Below is my code to repeat the example:

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary {positioning}
\begin{document}

\begin{tikzpicture}[every label/.style={red}]
[place/.style={circle,draw=blue!50,fill=blue!20,thick,
inner sep=0pt,minimum size=10 pt},
transition/.style={rectangle,draw=black!50,fill=black!20,thick,
inner sep=0pt,minimum size=10 pt}]

\node[place] (waiting) {};
\node[place] (critical) [below=of waiting] {};
\node[place] (semaphore) [below=of critical,
label=above:$s\le3$] {};
\node[transition] (leave critical) [right=of critical] {};
\node[transition] (enter critical) [left=of critical] {};

\end{tikzpicture}

\end{document}


But I got an error: ! Package pgfkeys Error: I do not know the key '/tikz/place' and I am going to ignore it. Perhaps you misspelled it. Any idea how to fix it?

The styles defined as part of the tikzpicture command must be enclosed in a single set of square brackets. You have two sets, which is why the second style doesn't get implemented. So instead of

\begin{tikzpicture}[every label/.style={red}]
[place/.style={circle,draw=blue!50,fill=blue!20,thick,
inner sep=0pt,minimum size=10 pt},
transition/.style={rectangle,draw=black!50,fill=black!20,thick,
inner sep=0pt,minimum size=10 pt}]


you need to have:

\begin{tikzpicture}[every label/.style={red}, % ] removed and comma added
place/.style={circle,draw=blue!50,fill=blue!20,thick, % [ removed
inner sep=0pt,minimum size=10 pt},
transition/.style={rectangle,draw=black!50,fill=black!20,thick,
inner sep=0pt,minimum size=10 pt}]


Typically, however you would usually define styles outside of the tikzpicture command using \tikzset{...}, so that you don't need to repeat the style for every picture. (I understand that this is just the code from the TikZ tutorial, but it might be helpful to know how to do it more generally.) So a different version of your code would be the following:

Since the place and transition styles are the kind of thing you might want to be global, it makes sense to define them outside of the tikzpicture. But a setting like every label is not really one which is good as a global style, since you may want to label other things without making them red. Because of this, I've created a red labels style which makes every label red, but then is added to the tikzpicture as an option.

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary {positioning}
\begin{document}
\tikzset{red labels/.style={every label/.style={red}},
place/.style={circle,draw=blue!50,fill=blue!20,thick,
inner sep=0pt,minimum size=10 pt},
transition/.style={rectangle,draw=black!50,fill=black!20,thick,
inner sep=0pt,minimum size=10 pt}}

\begin{tikzpicture}[red labels]

\node[place] (waiting) {};
\node[place] (critical) [below=of waiting] {};
\node[place] (semaphore) [below=of critical,
label=above:$s\le3$] {};
\node[transition] (leave critical) [right=of critical] {};
\node[transition] (enter critical) [left=of critical] {};

\end{tikzpicture}

\end{document}

• Thank you so much for the detailed answer. – Aria Jul 25 '20 at 22:43