
関連している:「コマンドの後に追加」と「パスの挿入」に関する問題、しかし、私のケースではそこにある解決策をどのように適用すればよいのか分かりませんでした。
以下を使用するシンプルな 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}