我只是处于此复制的开始阶段,因此我得到以下结果:
\documentclass[margin=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows,decorations,pathmorphing,backgrounds,positioning,fit,petri}
\begin{document}
%% Set up the style
\tikzstyle{rom} = [square, draw, text width=5em, text centered,
minimum height=4em]
\begin{tikzpicture}
%% Start drawing the nodes
\node[rom] (rom1) {ROM};
\node[rom] (rom2) [below=of rom1] {ROM};
\draw[->] (rom1.west)
\end{tikzpicture}
\end{document}
其结果为:
我该如何绘制通往顶部节点的 A2、A1 和 A0 线?我的猜测是,我们将在左侧创建一个不可见节点,然后我们可以从不可见节点绘制到绘制节点的线?
答案1
首先,这是绘制第一个的简单方法。请注意,我不得不在几个地方更改您的代码,因为它无法编译而没有错误。
\documentclass[tikz,border=10pt]{standalone}
\usetikzlibrary{arrows,decorations.pathmorphing,backgrounds,positioning,fit,petri}
\begin{document}
%% Set up the style
\tikzset{%
rom/.style = {draw, text width=5em, text centered, minimum height=4em}
}
\begin{tikzpicture}
%% Start drawing the nodes
\node[rom] (rom1) {ROM};
\node[rom] (rom2) [below=of rom1] {ROM};
\draw[<-] (rom1.west) -- +(-20mm,0) node [left] (a1) {$A_1$};
\end{tikzpicture}
\end{document}
从整体上看,我倾向于使用 来pic
绘制 ROM 盒,因为它们是相同的,并且连接模式始终相同。然后,您可以使用几个循环来添加几条线,并完成更复杂的情况,逐一处理它们。
\documentclass[tikz,border=10pt]{standalone}
加载我们想要的库:
\usetikzlibrary{arrows.meta,positioning,calc}
\begin{document}
%% Set up the style
我们使用计数器来命名 ROM 盒。第一个是rom1
,第二个是 ,rom2
依此类推。
\newcounter{rom}
\setcounter{rom}{0}
\tikzset{%
rom/.style = {draw, text width=5em, text centered, minimum height=4em, font=\sffamily},
a node/.style = {inner sep=1pt, font=\scriptsize},
pic
以下是,的代码rom node
:
rom node/.pic = {%
增加计数器:
\stepcounter{rom}%
绘制并命名基本框:
\node [rom] (rom\therom) {ROM};
现在我们创建连接rom<counter>-a0
,rom<counter>-a1
并rom<counter>-a2
在左侧标记它们。
\foreach \i [count=\j from 0] in {1/4,1/2,3/4} \node (rom\therom-a\j) [a node, right] at ($(rom\therom.south west)!\i!(rom\therom.north west)$) {$A_\j$};
现在进行连接rom<counter>-d0
并rom<counter>-d1
在右侧。
\node (rom\therom-d1) [a node, left] at (rom\therom-a2 -| rom\therom.east) {$D_1$};
\node (rom\therom-d0) [a node, left] at (rom\therom-a0 -| rom\therom.east) {$D_0$};
这是顶部的标签:
\node [a node, below] at (rom\therom.north) {$8 \times 2$};
现在我们想要连接rom<counter>-oe
和rom<counter>-ce
底部。
\node (rom\therom-ce) [a node, above, xshift=-10pt] at (rom\therom.south) {$CE$};
\node (rom\therom-oe) [a node, above, xshift=10pt] at (rom\therom.south) {$OE$};
},
绘制一端位于另一条线上的线条的样式将会很有用。
bullet arrow/.style={{Circle[width=2pt,length=2pt]}->, shorten <=-1pt}
}
更改图片的默认箭头提示。
\begin{tikzpicture}[>={Latex[]}]
%% Start drawing the nodes
现在来看看这两个rom node
pic
:
\pic {rom node};
\pic [below=of rom1] {rom node};
使用来自 s 的连接,pic
我们可以循环d
右侧的连接并添加指向d0
、d1
和d2
的箭头d3
。
\foreach \i/\j in {rom1-d1/3,rom1-d0/2,rom2-d1/1,rom2-d0/0}
\draw [->] (\i) -- +(20mm,0) node (d\j) [a node, right] {$D_\j$};
现在,画出左侧进入较高 ROM 盒的箭头,以及从这些箭头到较低 ROM 盒中相应连接器的连接。我们在将箭头画入较高盒时标记应从哪里开始连接到较低盒,然后使用第二个添加从这些点开始的连接\draw
。
\foreach \i in {0,1,2}
{
\draw [<-] (rom1-a\i) -- +(-20mm,0) coordinate [pos=(3-\i)/6] (a\i x) node (a\i) [a node, left] {$A_\i$};
\draw [bullet arrow] (a\i x) |- (rom2-a\i);
}
接下来,将箭头放入rom2-ce
和中rom2-oe
,标记我们稍后想要添加更多箭头的位置。
\draw [<-] (rom2-oe) |- +(20mm,-5mm) coordinate [pos=.85] (oex) coordinate (oe);
\draw [<-] (rom2-ce) |- ([yshift=-2.5mm]oe) coordinate [pos=.8] (cex);
rom1-oe
这是连接标记点和 的后续箭头rom1-ce
。
\draw [bullet arrow] (oex) |- ([yshift=-5mm]rom1-oe.south) -- (rom1-oe.south);
\draw [bullet arrow] (cex) |- ([yshift=-7.5mm]rom1-ce.south) -- (rom1-ce.south);
\end{tikzpicture}
\end{document}
完整代码:
\documentclass[tikz,border=10pt]{standalone}
\usetikzlibrary{arrows.meta,positioning,calc}
\begin{document}
%% Set up the style
\newcounter{rom}
\setcounter{rom}{0}
\tikzset{%
rom/.style = {draw, text width=5em, text centered, minimum height=4em, font=\sffamily},
a node/.style = {inner sep=1pt, font=\scriptsize},
rom node/.pic = {%
\stepcounter{rom}%
\node [rom] (rom\therom) {ROM};
\foreach \i [count=\j from 0] in {1/4,1/2,3/4} \node (rom\therom-a\j) [a node, right] at ($(rom\therom.south west)!\i!(rom\therom.north west)$) {$A_\j$};
\node (rom\therom-d1) [a node, left] at (rom\therom-a2 -| rom\therom.east) {$D_1$};
\node (rom\therom-d0) [a node, left] at (rom\therom-a0 -| rom\therom.east) {$D_0$};
\node [a node, below] at (rom\therom.north) {$8 \times 2$};
\node (rom\therom-ce) [a node, above, xshift=-10pt] at (rom\therom.south) {$CE$};
\node (rom\therom-oe) [a node, above, xshift=10pt] at (rom\therom.south) {$OE$};
},
bullet arrow/.style={{Circle[width=2pt,length=2pt]}->, shorten <=-1pt}
}
\begin{tikzpicture}[>={Latex[]}]
%% Start drawing the nodes
\pic {rom node};
\pic [below=of rom1] {rom node};
\foreach \i/\j in {rom1-d1/3,rom1-d0/2,rom2-d1/1,rom2-d0/0}
\draw [->] (\i) -- +(20mm,0) node (d\j) [a node, right] {$D_\j$};
\foreach \i in {0,1,2}
{
\draw [<-] (rom1-a\i) -- +(-20mm,0) coordinate [pos=(3-\i)/6] (a\i x) node (a\i) [a node, left] {$A_\i$};
\draw [bullet arrow] (a\i x) |- (rom2-a\i);
}
\draw [<-] (rom2-oe) |- +(20mm,-5mm) coordinate [pos=.85] (oex) coordinate (oe);
\draw [<-] (rom2-ce) |- ([yshift=-2.5mm]oe) coordinate [pos=.8] (cex);
\draw [bullet arrow] (oex) |- ([yshift=-5mm]rom1-oe.south) -- (rom1-oe.south);
\draw [bullet arrow] (cex) |- ([yshift=-7.5mm]rom1-ce.south) -- (rom1-ce.south);
\end{tikzpicture}
\end{document}