Построение логической схемы в пакете circuitikz

Построение логической схемы в пакете circuitikz

Моя цель — получить диаграмму, которая выглядит следующим образом: результат

Я хотел бы сделать это с помощью circuitikz-package. На данный момент я уже написал этот фрагмент кода:

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

Что приводит к такому результату: результат_пока_

Я был бы более чем счастлив, если бы вы помогли мне сделать второе изображение более похожим на первое. Большое спасибо!

Редактировать: Мне только что удалось получить изображение, которое стало немного лучше, изменив позицию в третьей строке с (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}

Связанный контент