箭头定位和标记的一些问题

箭头定位和标记的一些问题

我想画一些这样的东西。 在此处输入图片描述

但我能够画出这些东西:

在此处输入图片描述

因此存在三个问题:

  1. 输入和输出箭头位置不正确。
  2. 我想要一个 5 X 1 MUX 文本上方的矩形。
  3. 我无法在块内正确定位文本。例如,我希望在每个箭头前面都放置 x。

我附上了我的 tex 代码

\begin{tikzpicture}[thick]

\node [input, name=input] {};
\node [block, right of=input,minimum width=3cm, minimum height=2.5cm,node distance=0.5cm] (a) {Frame Encoder};
\node [block, right of=a,minimum width=3cm, minimum height=5cm,node distance=5cm] (b) {};
\node [block, right of=b, pin={[pinstyle]above:Ack},minimum width=3cm, minimum height=5cm,node distance=5cm] (c) {$5$ $\times$ $1$ MUX};
\node [output,right of=c] (output) {};

\begin{scope}[->,>=latex]

\draw[->] (input) -- (a);
\draw[->] (c) -- (output);
\foreach \i in {-2,...,2}{% 
  \draw[->] ([yshift=\i * 0.4 cm]a.east) -- ([yshift=\i * 0.8 cm]b.west) ;}

\foreach \i in {-2,...,2}{% 
  \draw[->] ([yshift=\i * 0.8 cm]b.east) -- ([yshift=\i * 0.8 cm]c.west) ;}

\end{scope}
\end{tikzpicture}

非常感谢您的帮助。我的大部分问题都解决了。现在只有一个问题。我希望这些 x 被编号。为此,我按照一些人的建议使用了 count。但现在它无法编译。我犯了什么错误?

\begin{tikzpicture}[thick]
\tikzset{input/.style={}}     
\tikzset{block/.style={rectangle,draw}}
\tikzstyle{pinstyle} = [pin edge={to-,thick,black}]

\node [input, name=input] {};
\node [block, right=1cm of input,minimum width=3cm, minimum height=2.5cm] (a) {Frame Encoder};
\node [block, right of=a,minimum width=3cm, minimum height=5cm,node distance=5cm] (b) {};
\node [block, right of=b, pin={[pinstyle]above:Ack},minimum width=3cm, minimum height=5cm,node distance=5cm] (c) {$5$ $\times$ $1$ MUX};
\node [right =1cm of c] (output) {};

\begin{scope}[->,>=latex]

\draw[->] (input) -- (a);

\node at (b.center) {\footnotesize{z}};

\draw[above] ($(c.text)+(0,1)$)rectangle ($(c.text)+(1.85,2)$);

\draw[->] (c) -- (output);

\foreach \i [count=\xi]in {2,...,-2}{% 
\draw[->] ([yshift=\i * 0.4 cm]a.east) -- ([yshift=\i * 0.8 cm]b.west) node[right]{\footnotesize{$x_{\xi}$}} ;}

\foreach \i in {-2,...,2}{% 
\draw[->] ([yshift=\i * 0.8 cm]b.east) -- ([yshift=\i * 0.8 cm]c.west) ;}

\end{scope}
\end{tikzpicture}

答案1

1)输入和输出箭头位置不正确:

这很正常,因为默认情况下right of=input将节点放置在 (输入) 右侧 1 厘米处,但给出的新节点的宽度 minimum width=3cm为 3 厘米。 (输入) 位于新节点内。 对于 (输出),你犯了同样的错误。 您可以使用库定位,将输入的右侧设置为 3 厘米,也可以使用“anchor=west”。

2)使用(c.center)yshift

3)对于文本,问题不清楚

如果图片需要缩放操作,这里有一个解决方案

\documentclass{article}
\usepackage{tikz}
 %\usetikzlibrary{calc,positioning} no it's not useful
\begin{document} 


\begin{tikzpicture}[thick,scale=.8]
\tikzset{input/.style={}} % <= this can be avoided but then use simply \node[name=input]{};
\tikzset{block/.style={rectangle,fill=blue!15,draw,anchor=west,minimum width=3cm,minimum height=5cm}} % to avoid some repetitions
\node [input, name=input] {};
\node [block, minimum height=2.5cm] (a) at ([xshift=1cm]input) {Frame Encoder};
\node [block ] (b) at ([xshift=4cm]a) {};
\node [block, right of=b, pin={above:Ack}] (c) at ([xshift=4cm]b) {$5$ $\times$ $1$ MUX};
\node  (output) at ([xshift=3cm]c)  {};  
\node [draw,minimum height =1cm,minimum width=1.85cm,below=.5cm] at (c.north)  {};
\node at (b.center) {\footnotesize{z}};

\begin{scope}[->,>=latex]
\draw (input) -- (a); % I remove  -> because it's an option of the scope !
\draw (c) -- (output); % idem

\foreach \i [count=\xi] in {-2,...,2}{% remove  ->
  \draw ([yshift=\i * 0.4 cm]a.east) -- ([yshift=\i * 0.8 cm]b.west)  
             node[right]{\footnotesize{$x_\xi$}} ;}

\foreach \i in {-2,...,2}{% remove  ->
  \draw ([yshift=\i * 0.8 cm]b.east) -- ([yshift=\i * 0.8 cm]c.west) ;}

\end{scope}
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案2

我的解决方案是:

在此处输入图片描述

由于pinstyle您的问题中没有给出所有其他样式,因此我只声明了重要的样式。

代码如下:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning,calc}

\begin{document}
\begin{tikzpicture}[thick]
\tikzset{input/.style={}} % <= this can be avoided but then use simply \node[name=input]{};
\tikzset{block/.style={rectangle,fill=blue!15,draw}}
\node [input, name=input] {};
\node [block, right=1cm of input,minimum width=3cm, minimum height=2.5cm] (a) {Frame Encoder};
\node [block, right of=a,minimum width=3cm, minimum height=5cm,node distance=5cm] (b) {};
\node [block, right of=b, pin={[]above:Ack},minimum width=3cm, minimum height=5cm,node distance=5cm] (c) {$5$ $\times$ $1$ MUX};
\node [right =1cm of c] (output) {};

\begin{scope}[->,>=latex]

\draw[->] (input) -- (a);

% text in the center of the block b
\node at (b.center) {\footnotesize{z}};

% a rectangle in the c block
\draw[above] ($(c.text)+(0,1)$)rectangle ($(c.text)+(1.85,2)$);

\draw[->] (c) -- (output);
\foreach \i in {-2,...,2}{% 
  \draw[->] ([yshift=\i * 0.4 cm]a.east) -- ([yshift=\i * 0.8 cm]b.west) node[right]{\footnotesize{x}} ;} %<= this to place x in front of each arrow

\foreach \i in {-2,...,2}{% 
  \draw[->] ([yshift=\i * 0.8 cm]b.east) -- ([yshift=\i * 0.8 cm]c.west) ;}

\end{scope}
\end{tikzpicture}

\end{document}

解释

  • 对于input和,output您可以避免声明实际上为空的样式(在代码中您会找到对此的注释)。

  • 要将z精确地放置在块的中心,您可以简单地使用:

    \node at (b.center) {\footnotesize{z}};

    对于所有可用的键,请参阅 pgfmanual 48.2 预定义形状 - 矩形。

  • 要在每个箭头前面插入x,可以在后面放置一个带有文本的\draw节点foreach

  • 最后,为了将矩形放置在文本上方,我更喜欢使用calc库,而不是yshiftAltermundus 建议的。此外,我从 开始,c.text而不是c.center

编辑

要插入编号的x,请将更改\foreach为:

\draw[->] (c) -- (output);
\foreach \i [count=\xi]in {2,...,-2}{% 
  \draw[->] ([yshift=\i * 0.4 cm]a.east) -- ([yshift=\i * 0.8 cm]b.west) node[right]{\footnotesize{$x_{\xi}$}} ;}

有从顶部开始的数字或:

\draw[->] (c) -- (output);
\foreach \i [count=\xi]in {-2,...,2}{% 
  \draw[->] ([yshift=\i * 0.4 cm]a.east) -- ([yshift=\i * 0.8 cm]b.west) node[right]{\footnotesize{$x_{\xi}$}} ;}

从底部开始。第一个解决方案给出:

在此处输入图片描述

相关内容