circuitikz 中水平对齐可爱 spdt 开关

circuitikz 中水平对齐可爱 spdt 开关

我很难理解如何将 sw2 移向某个y方向,使其sw2.in完美地水平对齐,而sw1.out 1无需猜测。手册中没有提到任何常量。请问您能帮我找出如何以动态方式通过编程对齐它吗?

在此处输入图片描述

梅威瑟:

\documentclass[border = 0.5cm]{standalone}
\usepackage{circuitikz}
\usetikzlibrary{calc}

\newcommand{\customSwitch}[6]{
    \begin{scope}[shift={(#6)}]
        \draw [thick] (0 - 0.5,0 - 0.6) rectangle (0 + 0.5,0 + 0.6);
        \draw (0,0) node[cute spdt #2, xscale=#3] (#1) {}
        (#1.in) node[right] {} 
        (#1.out 1) node[left] {} 
        (#1.out 2) node[left] {};
        \draw (0, 0.6) node[above] {#5};
    \end{scope}
}

\begin{document}
    \begin{circuitikz}[scale = 0.6, transform shape]
    \def \xShift{2}    \ctikzset{bipoles/cuteswitch/thickness=0.3}
    \customSwitch{sw1}{up}{1}{1.75}{sw1}{0,0}
    \customSwitch{sw2}{up}{1}{1.75}{sw2}{2*\xShift,0.5}   
    \draw (sw1.out 1) to (sw2.in);
\end{circuitikz}
\end{document}

答案1

circuitikz对象不是在网格上设置的;大小和尺寸变化很大,可以通过“类”参数进行调整。

因此,要建立电路,你基本上必须使用物体的锚点和相对移动。如果你看教程,你会发现所有的定位都是这样完成的。

因此我建议:

  1. 使用锚点和相对运动构建电路;
  2. 使用宏添加“增强功能”,再次使用锚点。

我在代码中进行了注释;我希望它能清楚地表明行为......

\documentclass[border=10pt]{standalone}
\usepackage[T1]{fontenc}
\usepackage[siunitx, RPvoltages]{circuitikz}
% Add a box around a switch, and position a name above it
\newcommand{\BoxAndNameSwitch}[2]{% switch, name
    \draw [thick]([shift={(-.2,-.2)}]#1.south west)
        rectangle ([shift={(.2,.2)}]#1.north east);
    \node[above=0.2cm] at (#1.north) {#2};
}
\begin{document}
\begin{tikzpicture}[]
    % draw the first switch
    \node[cute spdt up](sw1){};
    % draw the connection exiting from the first switch,
    % and position the second switch using the anchors
    \draw (sw1.out 1) -- ++(2,0)
        node[cute spdt up, anchor=in](sw2){};
    % build the boxes and put the name
    \BoxAndNameSwitch{sw1}{sw1}
    \BoxAndNameSwitch{sw2}{sw2}
\end{tikzpicture}
\end{document}

在此处输入图片描述

注意使用锚点的优势,并使用相对坐标构建电路。假设您需要添加一个线圈,并且有更多空间:您只需这样做,然后休息电路将不变. 仅需改变一个坐标。

[...]
\draw (sw1.out 1) to[cute inductor=$L$] ++(3,0)
        node[cute spdt up, anchor=in](sw2){};
[...]

在此处输入图片描述

...如果你觉得开关相对于线圈来说太小,你可以添加

\ctikzset{switches/scale=1.5}

在序言的某处,所有内容都会顺利到位。

在此处输入图片描述

相关内容