\pgfdeclareshape:如何在循环中定义锚点?

\pgfdeclareshape:如何在循环中定义锚点?

我觉得我的问题与但是我无法修改提供的解决方案以适应我的问题。

在以下 MWE 中,我尝试在\foreach循环中定义 8 针锚点。我的做法显然是错误的,因为我得到了“未定义控制序列”当我尝试引用其中一个引脚时出现错误。

有人可以提供一个在循环中定义锚点的最小例子吗?

\documentclass[tikz,border=1cm]{standalone}

\usepackage{circuitikz}

% BEGIN myic definition
\def\w{3cm}
\def\h{4.5cm}

\pgfdeclareshape{myic}{
    \anchor{center}{\pgfpointorigin}
    \anchor{text}
    {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}

    % PIN ANCHORS
    % The following code does not work as expected.
    % I am looking for a way to define \n anchors in a loop.
    \foreach \n in {0,...,7}
        {\anchor{in\n}{\pgfpoint{.5*\w}{7*.25cm-\n*.5cm}}}

    \foregroundpath{
        % RECTANGLE
        \pgfsetlinewidth{0.025cm}
        \pgfpathrectanglecorners{\pgfpoint{.5*\w}{.5*\h}}{\pgfpoint{-.5*\w}{-.5*\h}}
        \pgfusepath{draw}

        % PIN NAMES
        \foreach \n in {0,...,7}
            {\pgftext[right,at={\pgfpoint{.5*\w-.1cm}{7*.25cm-\n*.5cm}}]{\scriptsize IN\n}}
    }
}
% END myic definition

\begin{document}

\begin{circuitikz}
    \draw (0,0) node[myic] (u0) {U0};
    \draw (u0.in0) to[short,-o] ++(1,0); % <- ERROR: Undefined control sequence.
\end{circuitikz}

\end{document}

这是我目前所拥有的,带有圆圈的红线是我无法创建的:

tikzcircuit 集成电路

答案1

我终于申请成功了percusee 的回答(此处)解决了我的问题。它使用以下循环:

\makeatletter
\foreach \n in {0,...,7}{
    \xdef\doanchor{
        \noexpand\anchor{in\n}{
            \noexpand\pgfpoint{.5*\w}{7*.25cm-\n*.5cm}
        }
    }
    \doanchor
}
\makeatother

相关内容