语法解释

语法解释

在此处输入图片描述
如何绘制上图中的 (i) 和 (iii)?

在 (i) 中,我无法将变量 a 和文本恰好写入图像。
在 (ii) 中,我无法在电路中创建 n 个输入。

答案1

在此处输入图片描述

以下是我的做法:

\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\usepackage{circuitikz}
\usetikzlibrary{calc}
\begin{document}
    \begin{circuitikz}
        % Gates
        \node[and port, no input leads] (A) at (0, 0) {};
        \node[and port, no input leads] (B) at (0, -1.5) {};
        \node[and port, number inputs=5] (C) at (0, -3) {};
        \node[or port, number inputs=5] (D) at (0, -4.5) {};
        
        % Single inputs
        \draw ($(A.in 1)!0.5!(A.in 2)$) -- (A.left);
        \draw ($(B.in 1)!0.5!(B.in 2)$) -- (B.left);
        
        % identity labels
        \node[left] at ($(A.in 1)!0.5!(A.in 2)$) {\(a\)};
        \node[right] at (A.out) {\(a\)};
        
        % NOT labels
        \node at (B) [ocirc] {};
        \node[left] at ($(B.in 1)!0.5!(B.in 2)$) {\(a\)};
        \node[right] at (B.out) {\(a'\)};
        
        % AND labels
        \node[left] at (C.in 1) {\(a_1\)};
        \node[left] at (C.in 2) {\(a_2\)};
        \node[left] at ($(C.in 3) + (0, -0.05)$) {\(\vdots\)};
        \node[left] at (C.in 5) {\(a_n\)};
        \node[right] at (C.out) {\(a_1a_2\dotsm a_n\)};
        
        % OR labels
        \node[left] at (D.in 1) {\(a_1\)};
        \node[left] at (D.in 2) {\(a_2\)};
        \node[left] at ($(D.in 3) + (0, -0.05)$) {\(\vdots\)};
        \node[left] at (D.in 5) {\(a_n\)};
        \node[right] at (D.out) {\(a_1 + a_2 + \dotsb a_n\)};
        
        % Gate labels
        \node[right] at ($(A.out) + (3, 0)$) {\textbf{Identity-Gate} (symbolises \(x\));};
        \node[right] at ($(B.out) + (3, 0)$) {\textbf{NOT-Gate} (or \textbf{inverter}) (symbolises \(x'\));};
        \node[right] at ($(C.out) + (3, 0)$) {\textbf{AND-Gate} (symbolises \(x_1x_2\dotsm x_n\));};
        \node[right] at ($(D.out) + (3, 0)$) {\textbf{OR-Gate} (symbolises \(x_1 + x_2 + \dotsb + x_n\));};
    \end{circuitikz}
\end{document}

我找不到一种简单的方法来制作相同风格的单输入门,因此它是一个双输入门,输入隐藏,新输入在两者中间绘制,使用节点(A.left)calc库语法在和(A)!0.5!(B)中间绘制节点。对于命名每个门的文本,它只是一个连接到门输出的节点,然后使用库语法向右移动点 3 到右边。对于输入/输出标签,每个节点都有命名,您可以使用它来连接一个节点。最后,“非”门只是一个没有绘制输入的与门,添加了一个输入,在输出上画了一个圆圈来表示反转。(A)(B)calc($(A) + (3, 0)$)(A)

语法解释

门选项

这里使用的门的选项如下:

  • and port- 这是一个与门(也用于身份和非门)
  • or port- 这是一个或门
  • no input leads - 隐藏输入引线,这用于身份门和非门,因为它们只有我手动绘制的一条引线。
  • number of inputs=n- 绘制带输入的逻辑门n(默认为n=2

节点

在 中,tikz可以使用 创建一个节点\node (A) at (x, y) {};。这将(A)在点 处创建一个名为 的节点(x, y)。在 中放置符号时,也会自动创建节点circuitikz。特别有趣的是逻辑门创建的节点。放置门时,我们给它命名,这里我只使用了(A)、和(B),但对于较大的图像,更具描述性的名称可能会有用。除了这些作为门的节点之外,还有输入和输出节点以及其他指向门上各个点的节点。在这种情况下,我们使用(请注意,这是一个句号/句号,而不是逗号),它给出门的左中间(输入与身份门的门相遇,而不是图像中的门)。类似地,当我们有多个输入时,我们可以使用,其中是一个数字(因此是顶部输入,是从顶部开始的第二个等等)。我们还利用是门的输出。有关逻辑门创建的节点的更多详细信息,请参阅(C)(D)(A.left)(A.in i)i(A.in 1)(A.in 2)(A.out)circuitikz 手册,特别是第 3.24.5.2 节“美国逻辑端口锚点”第 124 页。

Calc 库

calc扩展的库中还有两种语法tikz。第一个语法如下

(A)!x!(B)

其中x是 0 到 1 之间的某个值,并且(A)和是节点。它的作用是定义从到 的(B)直线上的点,使得该点沿着直线,在我们的例子中我们使用 ,所以我们得到连接和的直线的中点。(A)(B)xx = 0.5(A)(B)

第二种语法是

($(A) + (x, y)$)

这是简单的向量加法。这使我们能够取点并定义一个向右单位和向上单位(A)的点。有关库的更多详细信息,请参阅xycalcTikz 手册特别是第 13.5 节“坐标计算”,第 148 页。此外备忘单有很多类似的语法,通常很有用。

相关内容