Circuitikz - Gerade Spannungspfeile mit fester Länge

Wie kann ich alle Spannungspfeile mit derselben und einer festen (benutzerdefinierten) Länge zeichnen? Danke im Voraus für deine Unterstützung.
\documentclass[a4paper,10pt]{scrartcl}
\usepackage[european,straightvoltages]{circuitikz}
\ctikzset{bipoles/thickness=1}
\begin{document}
\begin{circuitikz}[line width = 0.35mm,voltage shift = 0.5]
\draw (0,0)
to[vsource, v_<=$U_0$] (0,4)
to[R,v>=$U_1$] ++(5,0);
\draw (5,4)
to[R,v>=$U_2$] ++(0,-4);
\draw (5,4)
to[short] ++({2.5},0)
to[R,v>=$U_3$] ++(0,-2)
to[R,v>=$U_4$] ++(0,-2)
to[short] (0,0);
\end{circuitikz}
\end{document}
Antworten
Anscheinend hängen Spannungspfeile nicht von der Widerstandsgröße ab, sondern vom Abstand zwischen den Koordinaten, zwischen denen ein Widerstand gezogen wird. Mit anderen Worten, Sie müssen diese Abstände gleich groß bereitstellen:
\documentclass[margin=3mm]{standalone}
\usepackage[european, straightvoltages]{circuitikz}
\ctikzset{bipoles/thickness=1}
\begin{document}
\begin{circuitikz}[
line width = 0.8pt,
voltage shift = 0.5]
\draw (0,0) to[vsource, v_<=$U_0$] (0, 4) -- ++ (0.5,0)
to[R,v>=$U_1$] ++ (2, 0) -- ++ (0.5,0) coordinate (aux)
-- ++ (0,-1)
to[R,v>=$U_2$] ++ (0,-2) -- ++ (0 ,-1)
(aux) to[short] ++ (2, 0)
to[R,v>=$U_3$] ++ (0,-2)
to[R,v>=$U_4$] ++ (0,-2)
to[short] (0,0);
\end{circuitikz}
\end{document}
was gibt:

Dies kann als Fehlfunktion des Pakets angesehen werden. Ich hoffe, dass einer der Autoren des Pakets Ihre Frage bald sieht und eine bessere Lösung vorschlägt oder eine Lösung für das Paket vorlegt.
Wie von @Zarko gesagt ( übrigens , danke!), Hängt die Länge und Position des Pfeils von dem Zweig ab, in dem sie sich befinden, und nicht von der Größe der Komponente. Dies war eine Designentscheidung von circuitikz
Anfang an (für ), lange bevor ich anfing, sie gemeinsam zu pflegen, also ist sie im Grunde genommen in Stein gemeißelt.
Ich kann über eine mögliche Flagge nachdenken, um dies zu ändern (sobald ich etwas Zeit habe), aber ich stelle fest, dass es viele "Bike-Shedding" -Anfragen für diese Dinge gibt ... viele Leute haben unterschiedliche Geschmäcker ( und das Recht, sie zu haben!)
Deshalb habe ich kürzlich die Möglichkeit von "erweiterten Spannungen, Strömen und Flüssen" hinzugefügt (Handbuch um Seite 155), und Sie können leicht das erhalten, was Sie wollen, obwohl die Syntax nicht so gut ist (ich denke darüber nach, dies auch zu ändern, aber es ist nicht einfach eine allgemeine Sache machen).
Also zum Beispiel (lesen Sie die Kommentare)
\documentclass[a4paper,10pt]{scrartcl}
\usepackage[european,straightvoltages,EFvoltages]{circuitikz}
\ctikzset{bipoles/thickness=1}
\newcommand{\fixedvlen}[3][0.75cm]{% [semilength]{node}{label}
% get the center of the standard arrow
\coordinate (#2-Vcenter) at ($(#2-Vfrom)!0.5!(#2-Vto)$);
% draw an arrow of a fixed size around that center and on the same line
\draw[blue, -Triangle] ($(#2-Vcenter)!#1!(#2-Vfrom)$) -- ($(#2-Vcenter)!#1!(#2-Vto)$);
% position the label as it where if standard voltages were used
\node[blue, anchor=\ctikzgetanchor{#2}{Vlab}] at (#2-Vlab) {#3};
}
\begin{document}
\begin{circuitikz}[line width = 0.35mm,voltage shift = 0.5]
\draw (0,0)
% using name=... and v_< without arguments enables the labels and nodes
% for personalized voltages.
to[vsource, bipole/is voltage=false, v_<, name=u0] (0,4)
to[R,v>, name=u1] ++(5,0);
\draw (5,4)
to[R,v>, name=u2] ++(0,-4);
\draw (5,4)
to[short] ++({2.5},0)
to[R,v>,name=u3] ++(0,-2)
to[R,v>,name=u4] ++(0,-2)
to[short] (0,0);
% add the personalized voltages
\fixedvlen{u0}{$U_0$}
\fixedvlen{u1}{$U_1$}
\fixedvlen[1cm]{u2}{$U_2$} % longer, to show off
\fixedvlen{u3}{$U_3$}
\fixedvlen{u4}{$U_4$}
\end{circuitikz}
\end{document}

Beachten Sie, dass ich bipole/is voltage=false
dem Generator das Flag hinzugefügt habe , um die spezielle Behandlung dafür zu unterdrücken.
Diese Technik ist ziemlich leistungsfähig - Sie können Spannungen, Ströme und Flüsse wirklich so personalisieren, wie Sie sich besser fühlen (in diesem Fall habe ich sie nur als Beispiel blau gefärbt; aber die Möglichkeiten sind grenzenlos). Wenn Sie eine kohärente Benennung beibehalten, können Sie die Sache auch stark vereinfachen. Sie können beispielsweise die 5 letzten Zeilen (die unterschiedliche U_2
Länge verlieren ) ändern mit:
\foreach \ii in {0,...,4} {\fixedvlen{u\ii}{$U_\ii$}}
Update: Ich werde dieses Beispiel (und ein weiteres für Spannungspfeile mit einer Länge basierend auf der Komponentenlänge) im Handbuch hinzufügen: https://github.com/circuitikz/circuitikz/pull/466
Basierend auf den Hinweisen von @Rmano finden Sie hier eine Lösung mit individueller Länge und Farbe der Spannungspfeile und der richtigen CircuiTikZ-Pfeilspitze. Wenn alle Pfeile gleich aussehen sollen, setzen Sie alle Parameter auf die gleichen Werte, z. B. mithilfe der \ foreach-Schleife.
\documentclass[border=1mm]{standalone}
\usepackage[european,straightvoltages,EFvoltages]{circuitikz}
% Set CircuiTikZ arrow dimensions
\makeatletter
\newdimen\ctikzAL\newdimen\ctikzAW
\pgfmathsetlength{\ctikzAL}{ 1.7 * \pgf@circ@Rlen / \ctikzvalof{current arrow scale} + 2*\pgflinewidth}
\pgfmathsetlength{\ctikzAW}{ 1.6 * \pgf@circ@Rlen / \ctikzvalof{current arrow scale} + 2*\pgflinewidth}
\makeatother
% #1 – Color, #2 – Length, #3 – Short name, #4 – Long name
\newcommand{\fxdvlen}[4][black]{
\coordinate (#3-Vcenter) at ($(#3-Vfrom)!0.5!(#3-Vto)$);
\draw[#1, -{Triangle[length=\the\ctikzAL, width=\the\ctikzAW]}] ($(#3-Vcenter)!#2!(#3-Vfrom)$) -- ($(#3-Vcenter)!#2!(#3-Vto)$);
\node[#1, anchor=\ctikzgetanchor{#3}{Vlab}] at (#3-Vlab) {#4};
}
\begin{document}
\begin{circuitikz}[line width = 0.35mm,voltage shift = 0.5]
\ctikzset{bipoles/thickness=1}
\draw (0,0)
% using name=... and v_< without arguments enables the labels and nodes for personalized voltages
to[vsource, bipole/is voltage=false, v_<, name=u0, i>=$I$] (0,3)
to[R,v>, name=u1] ++(3,0);
\draw (3,3)
to[R,v>, name=u2] ++(0,-3);
\draw (3,3)
to[short] ++(1.5,0)
to[R,v>,name=u3] ++(0,-1.5)
to[R,v>,name=u4] ++(0,-1.5)
to[short] (0,0);
%\foreach \ii in {0,...,4} {\fxdvlen[blue]{5mm}{u\ii}{$U_\ii$}}
Individual voltage arrows
\fxdvlen[red]{7mm}{u0}{$U_0$}
\fxdvlen[green]{6mm}{u1}{$U_1$}
\fxdvlen[blue]{5mm}{u2}{$U_2$}
\fxdvlen[brown]{4mm}{u3}{$U_3$}
\fxdvlen{3mm}{u4}{$U_4$}
\end{circuitikz}
\end{document}
