Tikz/PGF 锚点位于 \backgroundpath 中计算的位置

Tikz/PGF 锚点位于 \backgroundpath 中计算的位置

我正在尝试创建一个 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}

相关内容