Circuitikz - Flèches de tension droites de longueur fixe

Comment puis-je dessiner toutes les flèches de tension avec la même longueur fixe (définie par l'utilisateur)? Merci d'avance pour ton soutien.
\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}
Réponses
Apparemment, les flèches de tension ne dépendent pas de la taille de la résistance mais de la distance entre les coordonnées entre lesquelles une résistance est tirée. En d'autres termes, vous devez fournir des distances de taille égale:
\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}
qui donne:

Cela peut être considéré comme une mauvaise fonctionnalité du package. J'espère que l'un des auteurs du paquet verra bientôt votre question et suggérera une meilleure solution ou fournira une correction du paquet.
Comme l'a dit @Zarko (BTW, merci!), La longueur et la position de la flèche dépendent de la branche où elles se trouvent, et non de la taille du composant. C'était une décision de conception de la nuit des temps (pour circuitikz
), bien avant que je commence à le co-maintenir, donc c'est fondamentalement gravé dans la pierre.
Je peux penser à un drapeau possible pour changer cela (dès que j'ai un peu de temps), mais remarquez qu'il y a beaucoup de demandes de "perte de vélo" pour ces choses ... beaucoup de gens ont des goûts différents ( et le droit d'en avoir!)
J'ai donc rajouté dernièrement la possibilité de "tensions, courants et flux avancés" (manuel vers la page 155), et vous pouvez facilement obtenir ce que vous voulez bien que la syntaxe ne soit pas très agréable (je pense changer cela aussi, mais ce n'est pas facile faire une chose générale).
Donc par exemple (lire les commentaires)
\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}

Notez que j'ai ajouté le bipole/is voltage=false
drapeau au générateur pour supprimer le traitement spécial pour celui-ci.
Cette technique est assez puissante - vous pouvez vraiment personnaliser les tensions, les courants et les flux comme vous vous sentez mieux (dans ce cas, je les ai colorés en bleu, juste à titre d'exemple; mais les possibilités sont illimitées). Aussi, si vous gardez une dénomination cohérente, vous pouvez beaucoup simplifier la chose ... par exemple, vous pouvez changer les 5 lignes finales (en perdant la U_2
longueur différente ) avec:
\foreach \ii in {0,...,4} {\fixedvlen{u\ii}{$U_\ii$}}
mise à jour: j'ajouterai cet exemple (et un autre pour les flèches de tension avec une longueur basée sur la longueur du composant) sur le manuel: https://github.com/circuitikz/circuitikz/pull/466
Sur la base des conseils de @Rmano, voici une solution avec la longueur et la couleur individuelles des flèches de tension, ainsi que la pointe de flèche CircuiTikZ correcte. Si vous voulez que toutes les flèches se ressemblent, définissez tous les paramètres sur les mêmes valeurs, par exemple en utilisant la boucle \ 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}
