我正在尝试创建一个 AO 逻辑门,它由三个预定义形状组成,如通过\declarepgfshape
。到目前为止,我能够在 中定义形状\backgroundpath
。但是,我想为我的新图形设置一些锚点。这些应是从三个预定义形状继承的锚点。但是,我无法将锚点的位置从我在 中定义的图形转移\backgroundpath
到本节之外的某个地方。有没有办法在 backgroundpath 内保存坐标,或者有办法在它外面定义三个子形状?更详细地说,我想继承下部子形状的输出作为我的新形状的输出,并继承上部子形状的输入。由于它们的定义并不简单,我不想手动定义所有锚点。到目前为止,我只实现了创建一个\edef\@temp{}
环境,使得可以从形状定义之外访问 backgroundpath 中定义的子图。但是,我仍然无法在 中正确使用它们\savedanchor
。在下面的代码中,应该位于底部门底部的锚点直接位于原点。
我读到过重新定义 中的子图以便\edef\@temp{}
从背景路径外部访问它们,但重新定义它们并使用它们代替 也\tikz@fig@name-bottom
无济于事。您对如何解决这个问题有什么建议吗?我知道我可以通过 访问我需要的锚点,a-bottom.output
但我想要一个类似的结构来访问输出,就像通常的 AND 门或 OR 门一样,即通过a.output
。
在这里您可以看到我编写的代码的结果。
这是应该在图的底部附加水平线的代码。非常感谢您的帮助!
\documentclass[]{article}
\usepackage{tikz}
\usetikzlibrary{shapes.gates.logic.US,shapes.gates.logic.IEC}
\makeatletter
\pgfdeclareshape{dumbbell}{
\savedanchor{\center}{%
\pgfpointorigin}
\anchor{center}{\center}
\backgroundpath{
\edef\@temp{%
\noexpand\node[outer sep=0pt, or gate US, draw, rotate=270] at (0,0) (\tikz@fig@name-bottom){};
\noexpand\node[outer sep=0pt, and gate US, draw, logic gate inputs=nn, rotate=270, scale=0.8, anchor=east] at (\tikz@[email protected] west) (\tikz@fig@name-right){};
\noexpand\node[outer sep=0pt, and gate US, draw, logic gate inputs=nn, rotate=270, scale= 0.8, anchor=east] at (\tikz@[email protected] west) (\tikz@fig@name-left){};
}
\@temp
}
\savedanchor{\output}{\tikz@[email protected]}
\anchor{output}{\output}
}
\begin{document}
\begin{tikzpicture}
\node[dumbbell] (a) at (0,0) {};
\draw (a.output) -- (1,0);
\end{tikzpicture}
\end{document}