我正在尝试使用 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}