TikZ 逻辑对齐

TikZ 逻辑对齐

我正在尝试使用 TikZ 的电路库(它允许多输入门)创建各种逻辑电路图。

我使用的是矩阵,但这会导致输入线与输入节点(A 和 B)不对齐的问题。此外,这些线通常排列得并不像它们应该的那样整齐。

肯定有更好的方法可以在不使用矩阵的情况下做到这一点,但我不知道它会是什么。

代码:

\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{circuits.logic.US}

\begin{document}
\begin{tikzpicture}[circuit logic US, huge circuit symbols]
  \matrix[column sep=10mm]
    {
      \node (a) {A}; & \node [nand gate] (nand) {};        &                                        & \\
      \node (b) {B}; &                                     &                                        & \\
      \node (c) {C}; &                                     & \node [nor gate, inputs=nnn] (nor) {}; & \node [or gate, inputs=nnn] (out) {}; \\
                     & \node[not gate,rotate=90] (not) {}; &                                        & \\
      \node (d) {D}; &                                     &                                        & \\
    };
    \draw (a.east) -- ++(right:5mm)       |- (nand.input 1);
    \draw (b.east) -- ++(right:5mm)       |- (nand.input 2);
    \draw (c.east) -- ++(right:5mm)       |- (nor.input 2);
    \draw (d.east) -- ++(right:52mm)      |- (out.input 3);
    \draw (d.east)                        -| (not.input);
    \draw (not.output)                    |- (nor.input 3);
    \draw (nand.output) -- ++(right:30mm) |- (out.input 1);
    \draw (nand.output) -- ++(right:5mm)  |- (nor.input 1);
    \draw (nor.output) -- ++(right:5mm)   |- (out.input 2);
    \draw (out.output) -- ++(right:10mm);
\end{tikzpicture}
\end{document}

答案1

如果将输入节点放置在里面,matrix它们将像其他任何一样放置cell,因此您的B节点定义了一个新行(第二行),而nand门仍然在第一行。

避免此问题的一种可能性是\matrix仅放置门,然后将输入节点放置在您想要的位置。要放置节点,您可以使用已定义电路的每个输入和输出。

得到下图

在此处输入图片描述

我已经开始放置C节点

\node (c) at ([xshift=-10mm]nand.west|-nor.input 2) {C};

并使用它来放置节点 A、B 和 D。在这种情况下,我在从电路输入“回拉”到节点位置后放置它们

 \draw (nand.input 2) -- (nand.input 2-|c.east) node[left] (b) {B};

output输入 1 和 3 与nand输出或输入之间的连接也发生同样的情况not

完整代码如下:

\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{circuits.logic.US}

\begin{document}
\begin{tikzpicture}[circuit logic US, huge circuit symbols]
  \matrix[column sep=10mm]
    {
    \node [nand gate] (nand) {}; &  & \\
        & \node [nor gate, inputs=nnn] (nor) {}; & 
          \node [or gate, inputs=nnn] (out) {}; \\
    \node[not gate,rotate=90] (not) {}; &  & \\
    };

 \node (c) at ([xshift=-10mm]nand.west|-nor.input 2) {C};
 \draw (nor.input 2) -- (c);
 \draw (nand.input 2) -- (nand.input 2-|c.east) node[left] (b) {B};
 \draw (nand.input 1) -- (nand.input 1-|c.east) node[left] (a) {A};
 \draw (not.input) --++(270:3mm) coordinate (Daux) --(Daux-|c.east) node[left] (d) {D};

 \draw (not.output) |- (nor.input 3);
 \draw (out.input 3) --++(180:5mm) |- (Daux);
 \draw (out.input 1) --++(180:5mm) |- (nand.output);
 \draw (nor.input 1) --++(180:5mm) |- (nand.output);
 \draw (nor.output) -- ++(right:5mm)   |- (out.input 2);
 \draw (out.output) -- ++(right:10mm);
\end{tikzpicture}
\end{document}

相关内容