这个问题不是为了探究什么有意义的事情,只是为了一些兴趣。
有没有办法pic
直接将 a 用作“树节点”?这意味着我可以在绘制树后引用命名节点或图片中的坐标。
仅以下面的图片为例:
\documentclass[tikz, border=1cm]{standalone}
\makeatletter
\tikzset{
test n/.store in=\test@n,
test n=3,
test/.pic={
\foreach \x [evaluate=\x as \ang using (\x-1)*360/\test@n] in {1, ..., \test@n} {
\draw (0, 0) -- (\ang:5mm) coordinate (-\x);
}
}
}
\makeatother
\begin{document}
\begin{tikzpicture}
\pic (a) [test n=6] {test};
\draw[red] (a-1) -- (a-2);
\end{tikzpicture}
\end{document}
我想在树的几个节点中使用此图片并引用诸如(a-1)
后的坐标,有没有可行的方法?
答案1
您可以将 缠绕matrix
在 周围pic
。
\documentclass[tikz, border=1cm]{standalone}
\makeatletter
\tikzset{
test n/.store in=\test@n,
test n=3,
pics/test/.style={code={
\foreach \x [evaluate=\x as \ang using (\x-1)*360/\test@n] in {1, ..., \test@n} {
\draw (0, 0) -- (\ang:5mm) coordinate (-\x);
}
}}
}
\makeatother
\begin{document}
\begin{tikzpicture}
\node {root}
child {node[matrix] {\pic (a1) [test n=6] {test};\\}}
child {node[matrix] {\pic (a2) [test n=6] {test};\\}
child {node[matrix] {\pic (a3) [test n=6] {test};\\}}
child {node[matrix] {\pic (a4) [test n=8] {test};\\}}
};
\draw[red] (a1-1) -- (a1-2);
\draw[red] (a2-2) -- (a2-3);
\draw[red] (a3-4) -- (a3-5);
\end{tikzpicture}
\end{document}
这也适用于forest
。
\documentclass[varwidth, border=1cm]{standalone}
\usepackage{forest}
\makeatletter
\tikzset{
test n/.store in=\test@n,
test n=3,
pics/test/.style={code={
\tikzset{test/.cd,#1}%
\foreach \x [evaluate=\x as \ang using (\x-1)*360/\test@n] in {1, ..., \test@n} {
{\draw (0, 0) -- (\ang:5mm) coordinate (-\x);}
\pgfkeys{/tikz/test/extra}
}
}},test/.cd,extra/.code={}
}
\makeatother
\begin{document}
\begin{forest}
[pft
[{\pic (a1) [test n=6] {test};\\},matrix]
[{\pic (a2) [test n=6] {test};\\},matrix]
]
\end{forest}
\end{document}
问题是pic
从外部访问命名的 s。forest
对pic
s 做一些事情,而从外部访问命名的pic
s 通常有点棘手,所以目前我不知道如何解决这个问题。