Tikz:将节点定义为其他 tikzpictures

Tikz:将节点定义为其他 tikzpictures

我想使用另一个 tikzpicture 定义 tikz 中节点的形状。例如,我想将以下内容变成名为 monoid 的节点形状

\begin{tikzpicture}
  \node (m) [circle,scale=.5,draw] at (0, 0) {};
  \node (i1) at (-1,.5){};
  \node (i2) at (-1,-.5){};
  \node (o) at (1,|-m){};
    \draw [-] (m) to (o);
    \draw [-] (i1) to [out=0, in=135] (m);
    \draw [-] (i2) to [out=0, in=-135] (m);
\end{tikzpicture}

并能够在另一个 tikzpicture 中使用它。例如,执行类似

\begin{tikzpicture}
  \node(M)[monoid]at(0,0){};
  \draw (-1,0)[out=0,in=180]to(M.i1);
\end{tikzpicture}

如果有人能告诉我需要阅读手册的哪一部分才能做到这一点,那就太好了。提前谢谢了!

埃琳娜

答案1

欢迎!这就是pics 的用途。不是节点,而是定义pic。因此,基本上,问题中第一个代码tikzpicture进入

pics/monoid/.style={code={<your code>}}

您可以移动和/或转换结果pic(或多或少),就像一个节点。1不起作用的是使用句点将锚点与名称分开pic,但 pgfmanual 建议使用连字符(参见 pgfmanual v3.1.5 第 267 页顶部的示例),我在这里就是这么做的。然后像

\pic (M) at (1.2,0.5) {monoid};
 (5.2,-0.5) pic[rotate=30,red](M'){monoid}; 
\draw (-1,0)[out=0,in=180] to (M-i1);

有效(但我更喜欢\path ... pic ...;语法)。如您所见,现在可以i1从外部访问 pic 坐标(或“锚点”)。(我将它们更改为坐标而不是扩展节点。)

\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}[pics/monoid/.style={code={
    \node (-m) [circle,scale=.5,draw] at (0, 0) {};
    \coordinate (-i1) at (-1,.5){};
    \coordinate (-i2) at (-1,-.5){};
    \coordinate (-o) at (1,0|--m){};
    \draw [-] (-m) to (-o);
    \draw [-] (-i1) to [out=0, in=135] (-m);
    \draw [-] (-i2) to [out=0, in=-135] (-m);}}]
 \path (1.2,0.5) pic(M){monoid}
 (5.2,-0.5) pic[rotate=30,red](M'){monoid}; 
 \draw (-1,0)[out=0,in=180] to (M-i1);
\end{tikzpicture}
\end{document}

在此处输入图片描述

1例如,positioning不适用于pic像节点这样的节点,基本上是因为 TiZ 不知道pics 的边界路径。

相关内容