Tikz: diagrama de blocos usando Tikz

Tikz: diagrama de blocos usando Tikz

Sou novo em látex e tikz e queria desenhar um diagrama de blocos usando-os. Mas estou tendo alguns problemas. Alguém pode me ajudar com as poucas dúvidas que tenho?

  1. Como escrever 'este texto' para que fique no meio da caixa preenchida e não tenha caixas para texto0 e texto 6?

  2. Como escrever texto entre as caixas ou em cima da seta?

  3. Existe uma maneira de controlar o tamanho de caixas individuais e ter formatos de seta diferentes?

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}

\usepackage{tikz}

\usetikzlibrary{shapes,arrows,positioning,fit,backgrounds}
\tikzstyle{block} = [draw, rectangle,  align=center, text width=2.4cm, text centered, minimum height=1.2cm, node distance=3.5cm,fill=white]
\tikzstyle{container} = [draw, rectangle, inner sep=0.3cm, fill=gray,minimum height=3cm]

\def\bottom#1#2{\hbox{\vbox to #1{\vfill\hbox{#2}}}}
\tikzset{
  mybackground/.style={execute at end picture={
      \begin{scope}[on background layer]
        \node[] at (current bounding box.north){\bottom{1cm} #1};
        \end{scope}
    }},
}
\begin{document}


\resizebox{14cm}{3cm}{%
\begin{tikzpicture}[>=latex',mybackground={This text}]
    \node [block, name= text0] (text0){text0};
    \node [block, right of=text0](text1) {text1};
    \node [block, right of=text1] (text2) {text2};
    \node [block, right of=text2] (text3) {text3};
    \node [block, right of=text3] (text4) {text4};
    \node [block, right of=text4] (text5) {text5};
     \node [block, right of=text5] (text6) {text6};
    \begin{scope}[on background layer]
    \node [container,fit= (text3) (text4)] (container) {};
     \end{scope}
    \draw [->] (text0) -- (text1);
    \draw [->] (text1) -- (text2);
    \draw [->] (text2) -- node {}(text3);
    \draw [->] (text3) -- node {}(text4);
    \draw [->] (text4) -- node {} (text5);
    \draw [->] (text5) -- node {} (text6);

\end{tikzpicture}

}


\end{document}

insira a descrição da imagem aqui

Responder1

espero que o exemplo abaixo atenda a todas as suas solicitações:

insira a descrição da imagem aqui

\documentclass[tikz, margin=3mm]{standalone}
\usetikzlibrary{arrows.meta,
                backgrounds,
                chains,
                fit,
                quotes}

\begin{document}
    \begin{tikzpicture}[auto,
    node distance = 15mm,
        start chain = A going right,
     block/.style = {draw, fill=white,
                     text width=#1, minimum height=12mm, align=center,
                     outer sep=0pt, on chain},
     block/.default = 18mm,
 container/.style = {draw, fill=gray!50,
                     inner xsep=2mm, inner ysep=7mm},
                        ]
\node   [block] {text 0};    % block name is A-1
\node   [block] {text 1};
\node   [block] {text 2};
\node   [block=22mm] {text 3};    % block name is A-4
\node   [block=11mm] {text 4};    % block name is A-5
\node   [block] {text 5};
\node   [block] {text 6};    % block name is A-7
%
\scoped[on background layer]
    \node [container, label={[anchor=north]This text},
           fit= (A-4) (A-5)] (container) {};
\draw [-Stealth]
    (A-1) edge ["text 1"] (A-2)    % text on arrow is between " and "
    (A-2) edge ["text 2"] (A-3)
    (A-3) edge ["text 3"] (A-4)
    (A-4) edge ["text 4"] (A-5)
    (A-5) edge ["text 5"] (A-6)
    (A-6) edge ["text 5"] (A-7);
    \end{tikzpicture}
\end{document}
  • como seu diagrama de blocos é simples, todos os blocos estão em cadeia, sugiro usar chainsa biblioteca para seu posicionamento (assumindo que as distâncias entre eles são iguais, porém, se alguns deles forem diferentes, isso pode ser alterado com o uso localright=of <name previous block>
  • para texto nas setas entre blocos é simples de escrever com a ajuda da biblioteca quotescomo(<node name i>) edge [" your text"] (<node name i+1>)
  • Não consegui entender sua primeira pergunta, desculpe!!
  • não use \resizebox! isso leva a uma imagem ruim. em vez disso, redimensione o bloco, a fonte e as distâncias entre os blocos
  • com o uso de arrows.metavocê pode simplesmente ajustar o tamanho da ponta da seta (comprimento, largura, ângulo, etc.). para obter detalhes, consulte "manual tikz & pgf, v 3.0.1a", seção "16.5 Referência: pontas de seta", página 201. no mwe abaixo eu uso valores padrão, mas você pode experimentar, por exemplo (consulte a página 209 do manual mencionado) :

\draw[-{Stealth[length=2mm,width=3mm,inset=0.5mm]}] ...

informação relacionada