当我阅读树中的样式继承规则(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
,这不会产生任何效果。
请注意,您至少有几种方法可以继续:
- 按照
every child node
Qrrbrbirlbel 的建议 - 通过
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}
结果: