使用 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}

由此得出的结果是: 到目前为止的结果

如果你能帮我把第二张图片弄得更像第一张图片,我会非常高兴。非常感谢!

编辑:我刚刚设法得到了一个更好的图像,通过将第三行的位置从(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}

相关内容