Wie könnte ich dies besser exportierbar schreiben?

Wie könnte ich dies besser exportierbar schreiben?

Diese Figur, die ich mit Circuitikz gezeichnet habe, ist die allererste „komplexe“, mit der ich mich seit dem ersten Stein beschäftigt habe, aber für zukünftige Projekte würde ich gern wissen, ob es möglich ist, sie „exportierbarer“ zu machen, d. h., wenn man den Abstand zwischen den FlipFlops ändert, werden im Gegensatz zu jetzt nicht viele Dinge ihre Position ändern.

Das habe ich geschrieben:

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

Antwort1

Ich interpretiere die Frage als den Wunsch, es einfacher zu machen, einige Merkmale der Schaltung global zu ändern. Dies kann durch die Verwendung von und, wie von Rmano angemerkt, calc erreicht werden chains. \foreachMan kann die Flipflops in eine Kette setzen und den Rest in einer Schleife erledigen. Dann erscheinen diese Parameter nur einmal und können global geändert werden. Beispielsweise ist der Abstand zwischen den Flipflops gegeben durch 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}

Bildbeschreibung hier eingeben

Vielen Dank an Rmano, der mir erklärt hat, wie ich Ihren Code ausführen kann. Ich verwende die neueste Version von circuitikzCTAN. Und es tut mir leid, ich kann Ihnen nicht sagen, wie Sie dies auf Overleaf bekommen, noch weiß ich, wie man Probleme auf Overleaf behebt.

verwandte Informationen