我想使用另一个 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
欢迎!这就是pic
s 的用途。不是节点,而是定义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
像节点这样的节点,基本上是因为 Ti钾Z 不知道pic
s 的边界路径。