我正在尝试为 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}