如何使用范围将样式应用于路径内的节点?

如何使用范围将样式应用于路径内的节点?

我想使用单个路径内的节点,以便我可以使用++(x,y)符号将一个节点相对于另一个节点定位。

但是,我想要用来设置节点样式的范围仅设置路径样式(因此似乎什么也不做,因为路径是“不可见的”)。

在路径内(节点周围)添加范围不起作用。

那么,有没有办法将范围应用于路径内的节点?

非常感谢您的帮助。


例子:

\documentclass{article}
\usepackage{tikz}

\tikzset{
  every node/.style = {
    shape = rectangle,
    minimum height = 20mm,
    minimum width = 20mm,
    line width = .5mm},
  mystyle/.style = {draw = red!50!black!50}
}

\begin{document}

  \begin{tikzpicture}

    % These two nodes have the correct style,
    % but I have to specify the style for every node
    % (I'll have around 100 nodes in total, hence the
    % desire to use a scope for the style).
    \path (0,6)
      node(nodeOne) [mystyle] {Node One}
      ++(5,0) node(nodeTwo) [mystyle] {Node Two};


    % These two nodes are in the ``mystyle'' scope,
    % but the style is not applied to the nodes
    % as they reside inside a path.
    \begin{scope}[mystyle]
      \path (0,0)
        node(nodeThree) {Node Three}
        ++(5,0) node(nodeFour) {Node Four};
    \end{scope}

  \end{tikzpicture}

\end{document}

答案1

路径或范围[mystyle]仅适用于路径(如果它们被画出来),而且由于您只使用了\path而不是某种线条(--to,...),所以没有太多东西可画。

首先,path您可以添加every node/.append style=mystyle它的选项,以便路径的节点获得除序言中mystyle全局设置的样式之外的附加样式。every node/.style\tikzset

\path[every node/.append style=mystyle] (0,6) node(nodeOne) {Node One}
                                      ++(5,0) node(nodeTwo) {Node Two};

这也适用于范围:

\begin{scope}[every node/.append style=mystyle]
  \path (0,0) node(nodeThree) {Node Three} 
      ++(5,0) node(nodeFour) {Node Four};
\end{scope}

如果您只想将节点相对于彼此放置,您可以考虑(使用positioningTikZ 库(例如\usetikzlibary{positioning})。

\begin{scope}[every node/.append style=mystyle, on grid]
    \node (nodeOne) at (0,6) {node One};
    \node[right=5cm of nodeOne] (nodeTwo) {node Two};
\end{scope}

请注意on grid确保相对定位是从中心到中心,而不是在节点的外边界之间。“高级放置选项”在 16.5.3 节中有详细说明PGF/TikZ手动的

对于简单的放置情况,设置一个就足够了node distance

\begin{scope}[every node/.append style=mystyle, node distance=5cm, on grid]
    \node (nodeOne) at (0,6) {node One};
    \node[right=of nodeOne] (nodeTwo) {node Two};
\end{scope}

答案2

我以前遇到过类似的事情......我认为初始每个节点/.style = {options} 都有效,无论后续\begin{scope} .... \end{scope}环境如何。

尝试在相关范围内使用另一个every node/.style = { options },将其本地应用于您想要更改节点生成方式的地方。

相关内容