circuitikz パッケージを使用して論理ゲート図を描く

circuitikz パッケージを使用して論理ゲート図を描く

私の目標は、次のような図を作成することです。 結果

私はこれを circuitikz パッケージで実現したいと思います。これまでに、次のコードをすでに記述しました。

\begin{circuitikz} \draw
    (0,2) node[and port] (and) {}
    (0,0) node[xor port] (xor) {}
    (and.in 1) node[above left=.5cm](a) {$a_0$}
    (and.in 2) node[below left = .5cm](b) {$b_0$}
    (and.out) node[below](s) {$s_1$}
    (xor.out) node[below](s) {$s_0$}    
    (a) -| (and.in 1)
    (b) -| (and.in 2)
    (a) -| (xor.in 1)
    (b) -| (xor.in 2);  
\end{circuitikz}

その結果、次のようになります。 これまでの結果

2 番目の画像を 1 番目の画像に近づけるお手伝いをしていただければ、大変助かります。どうぞよろしくお願いいたします。

編集: 3行目の位置を (0,0) から (2,2) に変更することで、少しだけ良い画像を取得できました。

これは、より複雑な図には対応できない単なる汚いハックなので、より一般的な解決策についてご助力いただければ幸いです。

答え1

主な変更点は、垂直線に別のx座標を持たせることです。例えば、

(a) -| (and.in 1)
(a) -| (xor.in 1)

(a) -- +(0.5,0) |- (and.in 1)
(a) -- +(0.5,0) |- (xor.in 1)

回路をサンプル回路にさらに似せるには、a_0下に移動するとよいかもしれません。

ここに画像の説明を入力してください

\documentclass{article}
\usepackage{circuitikz}
\begin{document}
\begin{circuitikz} \draw
    (0,2) node[and port] (and) {}
    (0,0) node[xor port] (xor) {}
    (and.in 1) node[below left=.5cm](a) {$a_0$}
    (and.in 2) node[below left = .5cm](b) {$b_0$}
    (and.out) node[below](s) {$s_1$}
    (xor.out) node[below](s) {$s_0$}    
    (a) -- +(0.5,0) |- (and.in 1)
    (b) -| (and.in 2)
    (a) -- +(0.5,0) |- (xor.in 1)
    (b) -| (xor.in 2);  
\end{circuitikz}
\end{document}

関連情報