¿Cómo podría escribir esto de una manera más exportable?

¿Cómo podría escribir esto de una manera más exportable?

Esta figura que he dibujado con Circuitikz es la primera "compleja" que he tratado desde la primera piedra, pero me gustaría saber para futuros proyectos si es posible hacerla más "exportable", es decir, si se cambia. Con la separación entre FlipFlops, no muchas cosas cambiarán de posición, a diferencia de ahora.

Esto es lo que he escrito:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[siunitx, RPvoltages]{circuitikzgit}

\tikzset{flipflop JK/.style={flipflop,
flipflop def={t1=Q, t3={\ctikztextnot{Q}}, t6=J, t4=K,c5=1, td=PRST, 
tu=CLR},
}}

\begin{document}
    \begin{center}
      \begin{circuitikz}[scale=0.8, transform shape]
        \node[vsourcesquareshape, rotate=90](clk){};
         \draw (-3,0) node[flipflop JK,external pins width=0](FF0){};
         \draw (-6,0) node[flipflop JK,external pins width=0](FF1){};
         \draw (-9,0) node[flipflop JK,external pins width=0](FF2){};
         \draw (-12,0) node[flipflop JK,external pins width=0](FF3){};
         \draw (-15,0) node[flipflop JK,external pins width=0](FF4){};

         \draw (clk.north) -- (FF0.east)node[inputarrow,rotate=180]{};
         \draw (FF0.pin 1) -| (-4.5,0);
         \draw (-4.5,0) -- (FF1.pin 5)node[inputarrow,rotate=180]{};

         \draw (FF1.pin 1) -| (-7.5,0);
         \draw (-7.5,0) -- (FF2.pin 5)node[inputarrow,rotate=180]{};

         \draw (FF2.pin 1) -| (-10.5,0);
         \draw (-10.5,0) -- (FF3.pin 5)node[inputarrow,rotate=180]{};

         \draw (FF3.pin 1) -| (-13.5,0);
         \draw (-13.5,0) -- (FF4.pin 5)node[inputarrow,rotate=180]{};

         \draw (FF0.pin 1) -| (-4.5,2)node[inputarrow,rotate=90] 
          {\rotatebox{-90}{$Q_0$}};
         \draw (FF1.pin 1) -| (-7.5,2)node[inputarrow,rotate=90] 
          {\rotatebox{-90}{$Q_1$}};
         \draw (FF2.pin 1) -| (-10.5,2)node[inputarrow,rotate=90] 
          {\rotatebox{-90}{$Q_2$}};
           \draw (FF3.pin 1) -| (-13.5,2)node[inputarrow,rotate=90] 
           {\rotatebox{-90}{$Q_3$}};
           \draw (FF4.pin 1) -| (-16.5,2)node[inputarrow,rotate=90] 
           {\rotatebox{-90}{$Q_4$}};

     \end{circuitikz}
   \end{center}
\end{document}

Respuesta1

Interpreto la pregunta como el deseo de facilitar el cambio global de algunas características del circuito. Esto se puede hacer usando chainsy \foreach, como señaló Rmano, calc. Se pueden poner las chanclas en una cadena y hacer el resto en un bucle. Entonces estos parámetros aparecen solo una vez y se pueden cambiar globalmente. Por ejemplo, la distancia entre las chanclas está dada por node distance.

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[siunitx, RPvoltages]{circuitikz}
\usetikzlibrary{calc,chains}
\tikzset{flipflop JK/.style={flipflop,
flipflop def={t1=Q, t3={\ctikztextnot{Q}}, t6=J, t4=K,c5=1, td=PRST, 
tu=CLR},
}}

\begin{document}
    \begin{center}
      \begin{circuitikz}[scale=0.8, transform shape]
         \node[vsourcesquareshape, rotate=90](clk){};
         % do the flip flops     
         \begin{scope}[start chain=going left,node distance=1.5cm,
            nodes={on chain,flipflop JK,external pins width=0}]
            \path foreach \X in {0,...,4}
            {node(FF\X){}};
         \end{scope}
         % determine the midpoints between the flip flops and name them
         \path foreach \X in {1,...,4}
          {(FF\the\numexpr\X-1|-0,0) -- coordinate (c\X) (FF\X|-0,0)};
         % add one more of the points to the left
         \path let \p1=($(FF0.center)-(c1)$) in (FF4.center|-0,0)
          ++ (-\x1,0) coordinate (c5);
         % from original code
         \draw (clk.north) -- (FF0.east)node[inputarrow,rotate=180]{};
         % draw the stuff between those nodes
         \foreach \X in {1,...,4}
         {\draw (FF\the\numexpr\X-1\relax.pin 1) -| (c\X);
          \draw (c\X) -- (FF\X.pin 5)node[inputarrow,rotate=180]{};
          \draw (FF\the\numexpr\X-1\relax.pin 1) -| (c\X|-0,2)node[inputarrow,rotate=90] 
          {\rotatebox{-90}{$Q_{\the\numexpr\X-1\relax}$}};}
         % use c5 
         \draw (FF4.pin 1) -| (c5|-0,2) node[inputarrow,rotate=90] 
            {\rotatebox{-90}{$Q_4$}};
     \end{circuitikz}
   \end{center}
\end{document}

ingrese la descripción de la imagen aquí

Muchas gracias a Rmano por indicarme cómo ejecutar su código. Estoy usando la última versión de circuitikzCTAN. Y lo siento, no puedo decirle cómo conseguir esto al dorso, ni sé nada sobre cómo solucionar problemas al dorso.

información relacionada