Circuitikz - Panah tegangan lurus dengan panjang tetap

Bagaimana cara menggambar semua panah tegangan dengan panjang yang sama dan tetap (ditentukan pengguna)? Terima kasih sebelumnya atas dukungan Anda.
\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}
Jawaban
Ternyata panah tegangan tidak tergantung pada ukuran resistor tetapi pada jarak antara koordinat di mana resistor ditarik. Dengan kata lain, Anda perlu memberikan jarak yang berukuran sama:
\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}
yang memberikan:

Ini dapat dianggap sebagai fitur yang salah dari paket. Saya berharap salah satu penulis paket akan segera melihat pertanyaan Anda dan menyarankan solusi yang lebih baik atau memberikan beberapa perbaikan paket.
Seperti yang dikatakan oleh @Zarko (BTW, thanks!) Panjang dan posisi panah bergantung pada cabang di mana mereka berada, dan bukan pada ukuran komponennya. Ini adalah keputusan desain sejak awal zaman (untuk circuitikz
), jauh sebelum saya mulai memeliharanya bersama, jadi pada dasarnya itu ditetapkan di atas batu.
Saya dapat memikirkan kemungkinan bendera untuk mengubahnya (segera setelah saya punya sedikit waktu), tetapi perhatikan bahwa ada banyak permintaan "sepeda-shedding" untuk hal ini ... banyak orang memiliki selera yang berbeda ( dan hak untuk memilikinya!)
Jadi saya menambahkan akhir-akhir ini kemungkinan "tegangan, arus, dan aliran lanjutan" (manual sekitar halaman 155), dan Anda dapat dengan mudah mendapatkan apa yang Anda inginkan meskipun sintaksnya tidak begitu bagus (Saya sedang berpikir untuk mengubahnya juga, tetapi tidak mudah untuk membuat hal yang umum).
Jadi misalnya (baca komentar)
\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}

Perhatikan bahwa saya menambahkan bipole/is voltage=false
bendera ke generator untuk menyembunyikan perlakuan khusus untuknya.
Teknik ini cukup kuat - Anda benar-benar dapat mempersonalisasi voltase, arus, dan aliran sesuai keinginan Anda (dalam hal ini saya mewarnainya dengan biru, sebagai contoh; tetapi kemungkinannya tidak terbatas). Selain itu, jika Anda mempertahankan penamaan yang koheren, Anda dapat menyederhanakan banyak hal ... misalnya, Anda dapat mengubah 5 baris terakhir (kehilangan U_2
panjang yang berbeda ) dengan:
\foreach \ii in {0,...,4} {\fixedvlen{u\ii}{$U_\ii$}}
update: Saya akan menambahkan contoh ini (dan satu lagi untuk panah tegangan dengan panjang berdasarkan panjang komponen) di manual: https://github.com/circuitikz/circuitikz/pull/466
Berdasarkan petunjuk oleh @Rmano, berikut adalah solusi dengan panjang dan warna masing-masing panah tegangan, dan ujung panah CircuiTikZ yang benar. Jika Anda ingin semua panah terlihat sama, setel semua parameter ke nilai yang sama, misalnya dengan menggunakan loop \ foreach.
\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}
