TikZ 树中的样式继承

TikZ 树中的样式继承

当我阅读树中的样式继承规则(pgfmanual 18.4,第 215 页)时,下面的裸露 [rect] 应该意味着标记为“空”的节点是矩形。但事实并非如此。我做错了什么?

谢谢。

\begin{tikzpicture}[->,sibling distance=7mm, level distance=5mm,
rect/.style={inner sep=0pt,minimum size=2mm,draw,rectangle},
alive/.style={fill=orange,draw},
emph/.style={thick,yellow}]
\node[rect] (MRCA) at (2.5,4) {}
    [rect]
    child {node[alive](high){}
        child {node {empty}
        }
    }
;
\end{tikzpicture}

答案1

我觉得手册上的解释也不是很清晰。但重点是,这child是一个路径操作,并且选项xx位于以下位置

\node {root}
   [xx]
   child ...

适用于所有child路径。现在,路径上的某些选项会被这些路径上的节点继承,而其他选项则不会。例如,颜色blue\draw[blue] (0,0) -- (1,0) node {x}; 同时应用于路径和节点;而\draw[rectangle] (0,2) -- (1,2) node {x};不会产生任何效果。节点样式可以通过以下方式传递every node/.style

演示输出

\documentclass{article}

\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
  \draw[blue] (0,2) -- (1,2) node {x};
  \draw[rectangle,draw] (0,1) -- (1,1) node {x};
  \draw[every node/.style={rectangle,draw}] (0,0) -- (1,0) node {x};
\end{tikzpicture}

\end{document}

同样,在您的示例中,有一个every child node/.style可以使用。

示例输出

\documentclass{article}

\usepackage{tikz}

\begin{document}

\begin{tikzpicture}[->,
rect/.style={inner sep=2pt,minimum size=2mm,draw,rectangle},
brect/.style={inner sep=2pt,minimum size=2mm,draw,rectangle,blue},
alive/.style={fill=orange,draw}]
\node[rect] at (2.5,4) {}
    [blue]
    child {node[alive] {}
        child {node {empty}
        }
    }
;
\node[rect] at (5.5,4) {}
  [every child node/.style=rect]
    child {node[alive] {}
        child {node {empty}
        }
    }
;
\node[rect] at (8.5,4) {}
  [brect]
    child {node[alive] {}
        child {node {empty}
        }
    }
;
\end{tikzpicture}

\end{document}

brect请注意,包含形状和颜色的样式在blue应用于路径时仅传递颜色。

答案2

正如 Qrrbrbirlbel 在其评论中所说,问题在于您想要传递给路径构造中的节点的选项类型。

例如,如果您尝试传递给一个\path选项inner sep,这不会产生任何效果。

请注意,您至少有几种方法可以继续:

  1. 按照every child nodeQrrbrbirlbel 的建议
  2. 通过every node

这些是非常不同的方法,因为后者也会影响树的初始节点,而前者则不会(这是应该牢记的事情)。

演示示例:

\documentclass[tikz,border=2pt,png]{standalone}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}[->,sibling distance=7mm, level distance=5mm,
rect/.style={inner sep=0pt,minimum size=2mm,draw},
alive/.style={fill=orange,draw},
emph/.style={thick,yellow}
]

\path[every child node/.style={rect,inner sep=3pt}]% global setting applied to the whole path
  [inner sep=30pt]% this option does not have effect
    node[rect](MRCA) at (0,4) {}% without rect definition here, this not won't inherit the style
      child { node[alive](high){}
        child { node {empty}
        }
    }
;

\path[every node/.style={rect,inner sep=3pt}]% global setting applied to the whole path
  [inner sep=30pt]% this option does not have effect
    node[circle](MRCA) at (2.5,4) {} %the circle option has effect
      child { node[alive](high){}
        child { node {empty}
        }
    }
;

% initial OP's code
\node[rect] (MRCA) at (5,4) {}
    [rect]
    child {node[alive](high){}
        child {node {empty}
        }
    }
;
\end{tikzpicture}
\end{document}

结果:

在此处输入图片描述

相关内容