tikz 树使用 pic 作为树节点

tikz 树使用 pic 作为树节点

这个问题不是为了探究什么有意义的事情,只是为了一些兴趣。

有没有办法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。forestpics 做一些事情,而从外部访问命名的pics 通常有点棘手,所以目前我不知道如何解决这个问题。

相关内容