有关的:“命令后附加”和“插入路径”的问题,但我不明白如何在我的情况下应用那里的解决方案。
我正在定义一个简单的 tikz 样式,它使用append after command
:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning,fit}
\begin{document}
\begin{tikzpicture}[
fit after/.style={
append after command={%
node[draw, inner sep=0pt, fit=(\tikzlastnode)] {}
}
}
]
\node[fit after] {A};%%%% WORKS
\node {B} child { node[fit after] {C} }; %%%% FAILS
\end{tikzpicture}
\end{document}
在第一个节点(A
)上,它运行正常并在其周围绘制一个矩形。
但是,在C
节点上,我收到以下错误消息:
Package pgf Error: No shape named is known.
这\tikzlastnode
并不是什么问题,因为即使对节点名称进行硬编码,在这种child
情况下仍然会失败。
路径操作是否child
混乱append after command
?有解决方法吗?
上下文:我正在尝试制作一个triangle fit whole subtree
命令,绘制一个适合子树中所有节点的三角形。
答案1
如果forest
是选项,定义fit whole subtree
样式就相当简单了。我不推荐三角形。虽然我做了一些实验,但这不可避免地看起来很丑。但是,fit whole subtree
可以传递任何你想要的选项来设置节点的样式。默认情况下,它会用红色绘制一个矩形。
请注意,的多次使用fit whole subtree
(包括嵌套使用)都可以正常工作。
\documentclass[tikz,border=10pt,multi]{standalone}
\usepackage{forest}
\usetikzlibrary{fit}
\begin{document}
\newcommand*\makenodename[1]{(#1)}
\forestset{
declare toks={fit these}{},
fit whole subtree/.style={
delay={
temptoksa=,
for tree={%
temptoksa+/.wrap pgfmath arg={ (##1)}{name()},
},
fit these/.register=temptoksa,
delay={
tikz+={
\node [draw=red, fit=\foresteoption{fit these}, inner sep=0pt, #1] {};
},
},
},
},
}
\begin{forest}
for tree={
fit=band,
child anchor=parent,
parent anchor=children,
}
[A
[B
[C, fit whole subtree
[D]
[E
[X]
[Y
[Z]
]
]
[F]
[G]
]
[H
[I
[J]
[K]
[L]
]
]
]
[M, fit whole subtree={thick, draw=blue, rounded corners}
[N
[O
[R]
]
[P]
[Q]
]
[S, fit whole subtree={green, densely dashed, rounded corners}
[T]
[U]
[V]
[W]
]
]
]
\end{forest}
\end{document}