如何在 Tikz 中重新设置给定类型节点的所有标签的样式?
假设有不同风格的节点,并且只有风格 X 的节点应该有红色标签。这是否可行,而不必逐一更改风格 X 节点的所有标签?
答案1
将其更改为全部节点:
\tikzset{every node/.style={<style_specs>}}
如果您有自定义样式,则可以仅为该特定节点样式设置此项:
\tikzset{My Style/.style={red, draw=blue, fill=yellow!20, minimum size=0.5cm}}
如果要更改现有的节点样式,可以使用.append style
添加到节点样式规范:
\tikzset{rectangle/.append style={draw=brown, ultra thick, fill=red!30}}
代码:
\documentclass{article}
\usepackage{tikz}
\tikzset{My Style/.style={red, draw=blue, fill=yellow!20, minimum size=0.5cm}}
\tikzset{rectangle/.append style={draw=brown, ultra thick, fill=red!30}}
\begin{document}
\begin{tikzpicture}
\node [My Style] at (0,0) {$x$};
\node [My Style] at (1,0) {$y$};
\node [rectangle] at (2,0) {$z$};
\end{tikzpicture}
\end{document}
这里的实际意图比我想象的要复杂得多,因为标签实际上是一个节点。一种解决方案是为每个特定形状定义一种样式。因此,例如,对于您rectangle
可以定义My Rectangle
为:
\tikzset{My Rectangle/.style={
rectangle, draw=brown, fill=yellow, thick,
prefix after command= {\pgfextra{\tikzset{every label/.style={blue}}}}
}
}
这会改变标签样式(再次感谢 percusse):
您也可以rectangle
按如下方式更改样式:
\tikzset{rectangle/.append style={
prefix after command= {\pgfextra{\tikzset{every label/.style={blue}}}}
}
}
代码:
\documentclass{article}
\usepackage{tikz}
\tikzset{My Rectangle/.style={
rectangle, draw=brown, fill=yellow, thick,
prefix after command= {\pgfextra{\tikzset{every label/.style={blue}}}}
}
}
\begin{document}
\begin{tikzpicture}
\node [rectangle, label=black text] at (1,0) {$z$};
\node [My Rectangle, label={blue text} ] at (3,0) {$z$};
\node [rectangle, label={blue text} ] at (5,0) {$z$};
\end{tikzpicture}
\end{document}
答案2
序言:
彼得·格里尔之后取消删除他的答案我的回答是 null
。
但也许其他人可以从中以某种方式获利……
什么不起作用
令人惊讶的是(至少对我来说),下面的操作会将节点的文本本身变成绿色。
\tikzset{X/.style={label/.style={green}}}
\node[X,label=hello] {X};
现有的every label/.style
定义显然仅适用于范围类用法。
\begin{scope}[every label/.style={green}]
\node[X,label=hello] {X};
% and a lot of other X nodes
\end{scope}
将添加every label/.style
到失败的定义X
(输出没有变化):
\tikzset{X/.style={every label/.style={green}}}
\node[label=hello] {X};
什么有效
可以/.style
有一个参数:
\tikzset{X/.style={
% your styles here, e.g.
draw,
circle,
% and …
label={[green]#1}
}
}
\node[X=hello] {X};
\node[X={[draw]hello}] {Y}; % this fails, you can't add an extra optional argument
我的建议
我将使用.style args
密钥处理程序,其中可以将参数模式设置为[#1]#2
。请注意,这[]
不是强制性的!
密钥处理程序.style 2 args
还有两个参数,第二个是可选的,但要求您写入X={hello}
或X={hello}{draw}
。
代码
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\tikzset{X/.style args={[#1]#2}{
% your styles here, e.g.
draw,
circle,
% and …
label={[green,#1]#2}
}
}
\node[X={[]hello}] {X};
\node[X={[draw]hello}] at (1,0) {Y};
\node[X={[red]hello}] at (2,0) {Z};
\end{tikzpicture}
\end{document}
输出
此外
我相信答案中隐藏着一个解决方案pgfkeys 中的可选参数?。但它们似乎都需要写[draw]{hello}
。