Desenhando um diagrama de porta lógica com o pacote circuitikz

Desenhando um diagrama de porta lógica com o pacote circuitikz

Meu objetivo é ter um diagrama parecido com este: resultado

Eu gostaria de fazer isso com o pacote circuitikz. Até agora eu já escrevi este trecho de código:

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

O que leva a este resultado: resultado_até_agora

Eu ficaria mais do que feliz se você pudesse me ajudar a fazer com que a segunda imagem se parecesse mais com a primeira. Muito obrigado!

Editar: acabei de conseguir uma imagem um pouco melhor, alterando a posição na terceira linha de (0,0) para (2,2)

Como este é apenas um hack sujo que não se adapta a diagramas mais complexos, eu ainda apreciaria ajuda para uma solução mais geral!

Responder1

A principal mudança é ter coordenadas x separadas para as linhas verticais, alterando, por exemplo

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

para

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

Para fazer com que o circuito se pareça ainda mais com o circuito de amostra, pode-se querer descer a_0.

insira a descrição da imagem aqui

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

informação relacionada