如何生成与此类似的框图?

如何生成与此类似的框图?

我快速地勾勒出了我想要的东西:

在此处输入图片描述

生成这样的框图的好方法是什么?

答案1

使用 TikZ 和库可以非常轻松地完成此操作matrix

尽管 PGF/TikZ 手册以及如何在 TikZ 矩阵节点中插入换行符?说可以\\在里面使用换行符,matrix of nodes只要它被括在{ }里面,这对我来说不起作用,而是我使用了一个简单的\node(使用\twoRows宏)。任何选项和设置也由此手动节点继承。

\foreach循环有助于连接矩阵的节点,而无需在许多行和/或列中重复相同的代码。

代码

\documentclass[tikz,convert=false]{standalone}
\usetikzlibrary{matrix}
\newcommand*{\twoRows}[2]{\node {$#1$\\$\scriptstyle #2$};}
\tikzset{
  -|/.style={to path={-| (\tikztotarget) \tikztonodes}},
  |-/.style={to path={|- (\tikztotarget) \tikztonodes}},
  % auxiliary styles
  set row cells to/.style n args={3}{% #1 = row, #2 = columns, #3 = style
    @set row cells to/.style={row #1 column ##1/.append style={nodes={#3}}},
    @set row cells to/.list={#2}
  },
  set rows to/.style 2 args={% #1 = rows, #2 = style
    @set rows to/.style={row ##1/.append style={#2}},
    @set rows to/.list={#1}
  }
}
\begin{document}
\begin{tikzpicture}[
  >=latex,
  shorten >=2\pgflinewidth,
  thick,
  rect/.style={
    shape=rectangle,
    draw,
    minimum width=5em,
    align=center,
  },
  sqplus/.style={
    shape=circle,
    draw,
    minimum size=1.5em,
    inner sep=+0pt,
    path picture={% the plus
      \draw[shorten >=+0pt]
            (path picture bounding box.west) -- (path picture bounding box.east)
            (path picture bounding box.north) -- (path picture bounding box.south);
    }
  }
]
\matrix[
  column sep=.5cm,
  row sep=.5cm,
  every node/.append style={anchor=center,text depth=+2pt},
  column 1/.style={nodes=rect},
  set row cells to={1}{2,...,5}{sqplus},
  set row cells to={4}{2,...,5,7}{sqplus},
  set rows to={2,3,5,6,7}{nodes=rect},
  row 4 column 6/.style={nodes=rect},
  row 6 column 5/.style={nodes=sqplus},
  matrix of nodes,
  ] (m) {
    0000\ldots 0 & {}    & {}    &[1cm] {} & {}                                \\
                 & \twoRows{E_{k,N}}{1000\ldots0} 
                         & \twoRows{E_{k,N}}{1000\ldots1}
                                 & \twoRows{E_{k,N}}{1000\ldots a-1} 
                                             & \twoRows{E_{k,N}}{1000\ldots a}   \\
                 & $A_1$ & $A_2$ & $A_{a-1}$ & $A_a$                             \\
    0000\ldots 0 & {}    & {}    & {}        & {}    & \twoRows{E_{k,N}}{m} & {} \\
                 & $M_1$ & $M_2$ & $M_{m-1}$ & $M_m$                             \\
                 & \twoRows{E_{k,N}}{0} 
                         & \twoRows{E_{k,N}}{1}
                                 & \twoRows{E_{k,N}}{m-2}
                                             & {}    & \twoRows{E_{k,N}}{m}      \\
                 & $C_1$ & $C_2$ & $C_{m-1}$ & $C_m$ &                      & $T$\\
  };

  \foreach \Row in {2,6}
    \path (m-\Row-3) -- node {$\cdots$} (m-\Row-4);

  \foreach \Row in {1,4}
    \foreach \cellStart[evaluate={\cellEnd={int(\cellStart+1)}}] in {1,...,4}
      \path[->] (m-\Row-\cellStart) edge (m-\Row-\cellEnd);

  \foreach \Column in {2,...,5} 
    \path[->] (m-3-\Column) edge (m-2-\Column)
              (m-2-\Column) edge (m-1-\Column)
              (m-5-\Column) edge (m-4-\Column) edge (m-6-\Column)
              (m-6-\Column) edge (m-7-\Column)
              ;
  \path[->] (m-4-5) edge     (m-4-6)
            (m-4-6) edge     (m-4-7)
            (m-4-7) edge[|-] (m-6-6) edge (m-7-7)
            (m-6-6) edge     (m-6-5)
            (m-1-5) edge[-|] (m-4-7)
            ;
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

答案2

您是否尝试过使用 Libreoffice draw 等工具绘制此图表,然后将其导出为 eps 或 pdf?您可以轻松地插入 PDF 或 EPS 图形LaTeX。这更像是一个实际答案,而不是技术答案。

我告诉你这个是因为制作这样的图表需要花费大量时间,尤其是当你不了解Tikz或者Pstricks不太清楚的时候。

相关内容