电压降标签间距更好的方法

电压降标签间距更好的方法

这是我现在的代码:

\documentclass[12pt]{article}
\usepackage{pgfplots}
\usepackage{float}
\pgfplotsset{compat=1.17}
\usepackage{tikz}
\usetikzlibrary{shapes, arrows.meta, automata, positioning, matrix, calc}
\usepackage[RPvoltages, american,siunitx]{circuitikz}
\usepackage[margin=1in]{geometry} 
\usepackage{caption}
\usepackage{siunitx}
\begin{document}    
    \begin{figure}[H]
        \centering
        \begin{circuitikz}
            \draw (0,0) to[cI, l=2$i_o$] ++(0,5) to [short] ++(2.5, 0) coordinate(nearCtrlCur) to [R = 100 <\ohm>,v=$v_1$]++(0,-5) to[short]++(-2.5,0);
            \draw(nearCtrlCur) to [R = 25 <\ohm>]++(2.5,0) coordinate(near25Ohm) to [R = 200 <\ohm>,v=$v_2$]++(0, -5) coordinate(below200Ohm) to[short]++(-2.5, 0);
            \draw(near25Ohm) to [R = 50 <\ohm>,  i>^= $i_o$]++(2.5,0) coordinate(near50Ohm) to [R = 5 <\ohm>]++(0, -2.5);
            \draw($(near50Ohm) + (-0.5, 0)$) to[open, v = $v_3$] ++(0, -5);
            \draw(below200Ohm) to[short] ++(2.5,0) coordinate (belowCtrlV) to [cV_=$5 i_o$] ++(0, 2.5);
            \draw(near50Ohm) to[R = 20 <\ohm>]++(2.5, 0); 
            \draw(belowCtrlV) to[short] ++(2.5, 0)to [V,v_=38.5 <\volt>] ++(0, 5);
        \end{circuitikz}
    \end{figure}
\end{document}

输出:

在此处输入图片描述

我正在尝试模仿这个:

在此处输入图片描述

有没有办法获取电压标签v_1v_2和,v_3以便

  1. v_1垂直线和之间的间距v_2与垂直线和 之间的间距相同v_3

  2. 和 的正负号的位置v_1v_2中的位置类似v_3。也就是说,加号与各自的右上角有相等的相对位置,减号与各自的右下角也有相等的相对位置。

我想知道是否存在一种适用于所有电压的“通用”方法,因为我的方法是临时的,并且和v_3的电压标签只能应用于一个无源元件。v_1v_2

答案1

该解决方案用节点的手动放置取代了 + 和 - 的自动放置。

\documentclass{standalone}% to avoid cropping
%\usepackage{pgfplots}% not used here
%\usepackage{float}% friends don't left friends use [H]
%\pgfplotsset{compat=1.17}
\usepackage{siunitx}
\usepackage{tikz}
\usetikzlibrary{shapes, arrows.meta, automata, positioning, matrix, calc}
\usepackage[american,siunitx]{circuitikz}
\usepackage[margin=1in]{geometry} 
%\usepackage{caption}% not used here
\begin{document}
    \ctikzset{voltage/american plus={}}% disable +
    \ctikzset{voltage/american minus={}}% disable -
        \begin{circuitikz}
            \draw (0,0) to[cI, l=2$i_o$] ++(0,5) to [short,-*] ++(2.5, 0) coordinate(nearCtrlCur) to [R= 100 <\ohm>,v=$v_1$,-*]++(0,-5)
              coordinate (B1) to[short]++(-2.5,0);
            \draw(nearCtrlCur) to [R = 25 <\ohm>, -*]++(2.5,0) coordinate(near25Ohm) to [R = 200 <\ohm>,v=$v_2$,-*]++(0, -5) 
              coordinate(below200Ohm) to[short]++(-2.5, 0);
            \draw(near25Ohm) to [R = 50 <\ohm>,  i>^= $i_o$,-*]++(2.5,0) coordinate(near50Ohm) to [R = 5 <\ohm>]++(0, -2.5)
              node[left]{$v_3$};
            \draw(below200Ohm) to[short,-*] ++(2.5,0) coordinate (belowCtrlV) to [cV_=$5 i_o$] ++(0, 2.5);
            \draw(near50Ohm) to[R = 20 <\ohm>]++(2.5, 0); 
            \draw(belowCtrlV) to[short] ++(2.5, 0)to [V,v_=38.5 <\volt>] ++(0, 5);
            \path (nearCtrlCur) node[below left]{$+$}
                  (B1) node[above left] {$-$}
                  (near25Ohm) node[below left]{$+$}
                  (below200Ohm) node[above left] {$-$}
                  (near50Ohm) node[below left]{$+$}
                  (belowCtrlV)  node[above left] {$-$};
        \end{circuitikz}
\end{document}

演示

答案2

约翰的回答非常准确。不过,我的解决方案略有不同。(请注意:我有一个电压绘制程序的实验版本,很快就会推出,因此您的结果可能会略有不同)。

电压位置circuitikz设计为仅在一个组件上工作,并且它们的位置取决于组件形状(下一版本中会有更多,以避免与不对称元素重叠)。

因此,在这种情况下,我建议使用宏将电压“拍打”到相对于节点的固定位置,如下所示:

\documentclass[12pt]{article}
\usepackage{pgfplots}
\usepackage{float}
\pgfplotsset{compat=1.15}
\usepackage{tikz}
\usetikzlibrary{shapes, arrows.meta, automata, positioning, matrix, calc}
\usepackage[RPvoltages, american,siunitx]{circuitikz}
\usepackage[margin=1in]{geometry}
\usepackage{caption}
\usepackage{siunitx}
%
% path to move away x (#1) and y (#2) a voltage indication (#3)
% (it will leave the path position unchanged)
%
\newcommand{\slapvxy}[3]{%
    ++({-1*(#1)},#2) to[open, v={#3}] ++(0,{-2*(#2)}) ++(#1,#2)
}
%
% specific one we'll use here
%
\newcommand{\slapv}[1]{\slapvxy{0.7}{2.5}{#1}}

\begin{document}
    \begin{figure}[H]
        \centering
        \begin{circuitikz}
            % name the element
            \draw (0,0) to[cI, l=2$i_o$] ++(0,5) to [short] ++(2.5, 0) coordinate(nearCtrlCur) to [R = 100 <\ohm>,name=R1]++(0,-5) to[short]++(-2.5,0);
            % position the voltage (usage outside the path)
            \path (R1.center) \slapv{$v_1$};
            \draw(nearCtrlCur) to [R = 25 <\ohm>]++(2.5,0) coordinate(near25Ohm) to [R = 200 <\ohm>,name=R2]++(0, -5) coordinate(below200Ohm) to[short]++(-2.5, 0);
            \path (R2.center) \slapv{$v_2$};
            \draw(near25Ohm) to [R = 50 <\ohm>,  i>^= $i_o$]++(2.5,0) coordinate(near50Ohm) to [R = 5 <\ohm>]++(0, -2.5)
            % position the voltage (usage inside the path)
            \slapv{$v_3$};
            % \draw($(near50Ohm) + (-0.5, 0)$) to[open, v = $v_3$] ++(0, -5);
            \draw(below200Ohm) to[short] ++(2.5,0) coordinate (belowCtrlV) to [cV_=$5 i_o$] ++(0, 2.5);
            \draw(near50Ohm) to[R = 20 <\ohm>]++(2.5, 0);
            \draw(belowCtrlV) to[short] ++(2.5, 0)to [V,v_=38.5 <\volt>] ++(0, 5);
        \end{circuitikz}
    \end{figure}
\end{document}

在此处输入图片描述

相关内容