我一直在尝试使用 TikZ 绘制一棵树。所有节点都应该是圆形,所以我使用样式every node
。有些节点上有一些额外的标签,这些标签必须是例外。我试过这个:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[every node/.style={draw,circle}]
\node {A}
child { node (b) {B} }
child { node {C} };
\node[draw=none,below=1mm of b] {hint};
\end{tikzpicture}
\end{document}
但暗示距离太远B
:
当我删除every node
样式时,定位是正确的:
我怎样才能解决这个问题?
答案1
除了我可能不应该将其用于every node
此目的之外,潜在的问题很简单,但在文档中有所隐藏(根据我有限的努力)。
draw=none
关闭形状的绘制,但不会消除形状本身!因此,提示节点保留导致定位的circle
形状:every node
似乎没有null
- 形。标准形状是rectangle
,因此重置为此
\node[draw=none,rectangle,below=1mm of b] {some hint for B};
提供所需的结果:
答案2
拉斐尔自己的答案当然是正确的:提示节点继承了every node
样式。
如果你只想更改树的节点,你可以every node
使用以下方法将样式本地设置为树:
\path[options] node {parent node} child …
反而。
虽然positioning
很棒,但可以借助选项放置这样的简单提示label
。不再需要命名节点(b)
,并且可以轻松更改文本,而无需研究哪个提示属于哪个节点。
请注意,我使用了.append style
处理程序,尤其是对于every label
样式。放置标签(也只是一个节点)时,它也会继承样式every node
,但every label
样式会覆盖任何可能的设置。
every label/.style
如果您使用而不是 ,就会看到这种情况。由于处理程序覆盖了样式中已经存在的.append style
,因此形状的边框突然可见。.style
draw=none
every label
代码
\documentclass[tikz]{standalone}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\path[every node/.append style={draw,circle}] node {A}
child { node (b) {B} }
child { node {C} };
\node[draw=none,below=1mm of b] {some hint for B};
\end{tikzpicture}
\begin{tikzpicture}[
every label/.append style={shape=rectangle},% these three options could have
label distance=1mm, % been assigned to a \path
every node/.append style={draw,circle}, % like in the example above.
]
\node {A}
child { node[label=below:some hint for B] {B} }
child { node {C} };
\end{tikzpicture}
\end{document}