流程图(或框图)提示?

流程图(或框图)提示?

我一直在使用 Tikz 制作流程图或框图来展示简化的相机传递函数。我已经完成了下面的代码,但还有一些问题。

我开始这个例子,它使用矩阵进行节点布局。如果这是一个不好的起点,请告诉我。

我的问题如下

  1. 你究竟如何制作一个简单的正方形,当你把东西放进去时它不会变形,或者至少会保持正方形。对于第一个块,我只想要一个有一条水平线穿过的正方形。这变得很复杂,如果没有矩阵中的新 tikz 图片,我无法做到这一点,即使这样,在箭头离开它的起点之前,节点后面还有一些额外的空间,所以我不得不使用负空间来删除​​它。有没有更简单的方法来做到这一点?

  2. 我发现我无法直接缩放 Integral 符号,因为它是一个需要自行调整大小的数学符号。我不得不使用 bigints 包来执行此操作。有没有办法通过 Tikz 直接缩放符号或文本?那么我可以使用正常符号$\int$并使用 Tikz 缩放它吗?

  3. 在倒数第二个块(目前为空)中,我想要一条类似于第一个块的线,但它会像楼梯一样一点点地上升(具体来说,就像 ADC 传递函数)。有办法吗?我想也许是一个旋转 90 度的锯齿波之类的。

  4. 为什么连接线看起来似乎略微延伸到箭头末端,以致箭头尖端不够锋利?

谢谢。

\documentclass{article}
\usepackage[a4paper, landscape]{geometry}
\usepackage{tikz}
\usepackage{bigints}
\usetikzlibrary{shapes.geometric,shapes.arrows,decorations.pathmorphing}
\usetikzlibrary{matrix,chains,scopes,positioning,arrows,fit}

\begin{document}

\begin{tikzpicture}[
tip/.style={->,shorten >=0.007pt}
]

  % Place all element in a matrix of nodes, called m
  \matrix (m) [matrix of nodes, 
    column sep=5mm,
    row sep=1cm,
    nodes={draw, % General options for all nodes
      line width=1pt,
      anchor=center, 
      text centered,
      sharp corners,
            minimum width=1.5cm, 
            minimum height=1.5cm,
            inner sep=0em,
    }, 
    % Define styles for some special nodes
    right iso/.style={isosceles triangle,scale=0.5,sharp corners, anchor=center, xshift=-4mm},
    txt/.style={text width=1.5cm,anchor=center},
    empty/.style={draw=none},
        noborder/.style={ draw=none,text width=1.5cm,anchor=center}     
    ]
  {
  % First row of symbols
            |[noborder]| {Input} 

  & 
|[empty]|{\begin{tikzpicture}[inner sep=0em]
                \node[draw, rectangle, minimum size=1.5cm]{};
                \draw (-.75,-.75) -- (.75,.75);
                    %\draw (0,0) -- (1.5,1.5);
            \end{tikzpicture}
        }
        \!\!\!\!
    & |[noborder]| {Output 1} 

    &   
    {$\bigints$}

    & |[noborder]| {Output 2} 

    & |[empty]|{\begin{tikzpicture}[inner sep=0em]
                \node[draw, rectangle, minimum size=1.5cm]{};
                \draw (-.75,-.75) -- (.3,.3) -- (.75,.3);
            \end{tikzpicture}
        }
        \!\!\!\!

    & % m-1-7
    |[noborder]| {Output 3} 

    & % m-1-8
    |[empty]|{\begin{tikzpicture}[inner sep=0em]
                \node[draw, rectangle, minimum size=1.5cm]{};
                \draw (-7.5mm,-7.5mm) -- (-6.5mm,-7.5mm);
                \draw (-6.5mm,-7.5mm) -- (-6.5mm,-6.5mm);
                \end{tikzpicture}
        }
        \!\!\!\!

    & |[noborder]| {Ouput 4} 

    & % m-1-10
    |[empty]|{\begin{tikzpicture}[inner sep=0em]
                \node[draw, rectangle, minimum size=1.5cm]{};
                \draw (-7.5mm,-6.5mm)  .. controls (-1.5mm,-7.5mm) and (1.5mm,7.5mm) ..  (7.5mm,6.5mm);
                \end{tikzpicture}
        }
        \!\!\!\!

    & |[noborder]| {Final \\ Output} 
  \\
  };  % End of matrix

  % Now, connect all nodes in a chain.
{ [start chain,every on chain/.style={join}, every join/.style={line width=1pt}]
        \chainin (m-1-1);
        \chainin (m-1-2) [join=by tip];
        \chainin (m-1-3) [join=by tip];
        \chainin (m-1-4) [join=by tip];
        \chainin (m-1-5) [join=by tip];
        \chainin (m-1-6) [join=by tip];
        \chainin (m-1-7) [join=by tip];
        \chainin (m-1-8) [join=by tip];
        \chainin (m-1-9) [join=by tip];
        \chainin (m-1-10) [join=by tip];
        \chainin (m-1-11) [join=by tip];
        };

\end{tikzpicture}
\end{document}

答案1

以下是一些答案:

  1. 使用库中的regular polygon形状(带有regular polygon sides=4shapes.geometric(我看到您已经在使用它)。使用这个,我可以按照您(大概)想要的方式绘制正方形。之后我使用节点锚点进行定位绘制了额外的部分。

  2. 您可以通过在节点本身上指定扩展来批量扩展节点。在此特定情况下,您需要对内容但不是节点形状。一种实现方法是将节点加倍:首先绘制一个空节点,然后稍后返回并放入内容(适当缩放)。

  3. 你自己找到了答案。太棒了!

  4. by我不知道为什么,但这与在 上指定选项有关joins。我发现通过将样式放入 中,箭头又正确了。这也与样式every join/.style={->}无关,因为它应该正常工作。因此,大概s 的呈现方式阻止了添加箭头时应该发生的自动缩短。如果您可以隔离此行为,则可能值得将其作为错误提交。tip\draw[tip] (0,0) -- (1,0);join

这是您的代码的我的版本。

\documentclass{article}
\usepackage[a4paper, landscape]{geometry}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric,decorations.pathmorphing,matrix,chains,calc}

\begin{document}

\begin{tikzpicture}[
  % Define styles for some special nodes
  square/.style={
    draw,
    regular polygon,
    regular polygon sides=4,
    text width=1cm,
    minimum width=1cm,
    minimum height=1cm,
    inner sep=0em
  },
  line width=1pt,
  every on chain/.style={join},
  every join/.style={line width=1pt,->}
]

  % Place all element in a matrix of nodes, called m
  \matrix (m) [matrix of nodes, 
    column sep=5mm,
    row sep=1cm,
    nodes={ % General options for all nodes
      text centered,
      anchor=center,
      text width=1.5cm,
      sharp corners,
      minimum width=1.5cm, 
      minimum height=1.5cm,
      inner sep=.5ex,
      outer sep=0pt
    }, 
    ]
  {
  % First row of symbols
     {Input} 
  & 
|[square]|
    &  {Output 1} 

    & |[square]|

    &  {Output 2} 

    & |[square]|

    & % m-1-7
     {Output 3} 

    & % m-1-8
    |[square]|
    &  {Output 4} 

    & % m-1-10
    |[square]|
    &  {Final \\ Output} 
  \\
  };  % End of matrix

% Additional decorations

\draw (m-1-2.south west) -- (m-1-2.north east);
\draw (m-1-6.south west) -- ($(m-1-6.south west)!.7!(m-1-6.north east)$) -- ($(m-1-6.north east)!($(m-1-6.south west)!.7!(m-1-6.north east)$)!(m-1-6.south east)$);
\draw[decorate,decoration=zigzag] (m-1-8.south west) -- (m-1-8.north east);
\draw (m-1-10.south west) ++(0,1mm) .. controls +(6mm,-1mm) and +(-6mm,1mm) .. ($(m-1-10.north east)+(0,-1mm)$);

\node[scale=2] at (m-1-4) {$\int$};

  % Now, connect all nodes in a chain.
\begin{scope}[start chain]
\chainin (m-1-1);
\chainin (m-1-2);
\chainin (m-1-3);
\chainin (m-1-4);
\chainin (m-1-5);
\chainin (m-1-6);
\chainin (m-1-7);
\chainin (m-1-8);
\chainin (m-1-9);
\chainin (m-1-10);
\chainin (m-1-11);
\end{scope}
\end{tikzpicture}
\end{document}

有结果

流程图

相关内容