Como eu poderia escrever isso de uma forma mais exportável?

Como eu poderia escrever isso de uma forma mais exportável?

Esta figura que desenhei com o Circuitikz é a primeira "complexa" que tratei desde a primeira pedra, mas gostaria de saber para projetos futuros se é possível torná-la mais "exportável", ou seja, se mudar com a separação entre FlipFlops, poucas coisas mudarão de posição, ao contrário de agora.

Isto é o que escrevi:

\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}

Responder1

Interpreto a questão como o desejo de facilitar a alteração global de algumas características do circuito. Isso pode ser feito usando chainse \foreach, como apontado por Rmano, calc. Pode-se colocar os chinelos em uma corrente e fazer o resto em loop. Então esses parâmetros aparecem apenas uma vez e podem ser alterados globalmente. Por exemplo, a distância entre os flip-flops é 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}

insira a descrição da imagem aqui

Muito obrigado a Rmano por me instruir como executar seu código. Estou usando a versão mais recente do circuitikzCTAN. E desculpe, não posso lhe dizer como colocar isso no verso, nem sei nada sobre como resolver problemas no verso.

informação relacionada