什么不起作用

什么不起作用

如何在 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}

相关内容