基于形状尺寸的tikz电路库注释

基于形状尺寸的tikz电路库注释

我正在尝试为 tikz 电路库定义一个新的注释,该注释用最大(最小宽度、最小高度)的圆围绕形状。

根据 Qrrbrbirlbel 的评论更新了新信息,这是一个半工作示例:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{circuits.ee.IEC}

\begin{document}
\tikzset
{
    circuit declare annotation={encapsulated}{\n1}
    {
        [shift=(\tikzlastnode.center)]
        let
            \n1={max(\pgfkeysvalueof{/pgf/minimum width},\pgfkeysvalueof{/pgf/minimum height})*\tikzcircuitssizeunit}
        in
            (0, 0) edge[to path={circle[radius={\n1}]}] ()
    }
}

\begin{tikzpicture}[circuit ee IEC]
    \draw (0, 0) to [resistor={encapsulated={info={$R_1$}}}] ++(right:3) to [diode={encapsulated={info={$D_1$}}}] ++(right:3);
\end{tikzpicture}
\end{document}

这几乎就是我想要的,因为二极管周围的圆圈是正确的。但是,它没有正确地围绕电阻器。

在此处输入图片描述

相反,我想要的是这样的:

在此处输入图片描述

我可以通过修改下面的绘制命令来实现这一点,但我希望进行这种调整而不必minimum width每次都手动指定。

\draw (0, 0) to [resistor={encapsulated={info={$R_1$}}}, minimum width=2] ++(right:2) to [diode={encapsulated={info={$D_1$}}}] ++(right:2);

答案1

简而言之:您不能依赖/pgf/minimum width和的值,/pgf/minimum height因为它们可能与节点没有任何关系\tikzlastnode

我的第一个解决方案更符合您的想法,它还使用calc构造let … in来查找实际半径(如果您不能依赖东北锚点,则可以使用其他锚点,然后max对所有值执行)。但不知何故,label distance并没有像人们预期的那样使用。(第二个参数circuit declare annotation不能使用\n{@aux@ne},我们可以通过再次使用选项来解决这个问题[label distance=\n{@aux@ne}]。)

第二个注释encapsulated*使用带有库的圆形节点through来放置节点。#1参考使用的选项encapsulated*(即info标签),在我看来,放置的位置与预期一致。

代码

\documentclass[tikz,convert=false]{standalone}
\usetikzlibrary{circuits.ee.IEC,through}
\tikzset{
  circuit declare annotation={encapsulated}{0pt}{
    let
      \p{@aux@ne}=($(\tikzlastnode.north east)-(\tikzlastnode.center)$),
      \n{@aux@ne}={veclen(\x{@aux@ne},\y{@aux@ne})}
    in [label distance=\n{@aux@ne}]
      (\tikzlastnode.center) edge[to path={circle[radius={\n{@aux@ne}}]}] ()
  }
}
\tikzset{
  circuit declare annotation={encapsulated*}{0pt}{
     node[draw,circle through=(\tikzlastnode.north east),#1] at (\tikzlastnode.center) {}
  }
}
\begin{document}
\tikz[circuit ee IEC]
  \draw (0, 0) to [resistor={encapsulated={info={$R_1$}}}] ++(right:3) to [diode={encapsulated={info={$D_1$}}}] ++(right:3);

\tikz[circuit ee IEC]
  \draw (0, 0) to [resistor={encapsulated*={info={$R_1$}}}] ++(right:3) to [diode={encapsulated*={info={$D_1$}}}] ++(right:3);
\end{document}

输出

在此处输入图片描述

在此处输入图片描述

相关内容