Problema ao criar diagrama de blocos usando TikZ em Latex

Problema ao criar diagrama de blocos usando TikZ em Latex

Estou enfrentando um problema estúpido. Não consigo conectar as duas últimas caixas. E também quero ter |.| em uma das caixas, mas não sei como é feito. Alguém pode me ajudar com isso?

\documentclass{standalone}
\usepackage{amsmath,amscd,amssymb,latexsym,upref} %stmaryrd
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\usetikzlibrary{arrows.meta,
                backgrounds,
                chains,
                fit,
                quotes}
\begin{document}

\resizebox{16cm}{2cm}{%
    \begin{tikzpicture}[auto,
    node distance = 12mm,
        start chain = A going right,
     block/.style = {draw, fill=white,
                     text width=#1, minimum height=10mm, align=center,
                     outer sep=0pt, on chain},
     block/.default = 18mm,
 container/.style = {draw, fill=gray!50,
                     inner xsep=2mm, inner ysep=7mm},
                        ]
\node   [block=14mm] {a};    % block name is A-1
\node   [block=12mm] {b};
\node   [block=22mm] {c};
\node   [block=15mm] {d};
\node   [block=22mm] {e};    % block name is A-4
\node   [block=22mm] {f};    % block name is A-6
\node   [block=12mm] {g};
\node   [block=24mm] {h};    % block name is A-8
\node   [block=24mm] {i};    % block name is A-8
%
\scoped[on background layer]
    \node [container, label={[anchor=north]joined},
           fit= (A-5) (A-6)] (container) {};
\draw [-Stealth]
    (A-1) edge  (A-2)    % text on arrow is between " and "
    (A-2) edge  (A-3)
    (A-3) edge  (A-4)
    (A-4) edge  (A-5)
    (A-5) edge  (A-6)
    (A-6) edge  (A-7);
    (A-7) edge (A-8);
    (A-8) edge (A-8);
    \end{tikzpicture}
    }
\end{document}

Responder1

O último bloco rotulado por i tem name A-9e, se você colocar ponto e vírgula, precisará adicionar um novo comando de desenho. Espero ter entendido sua solicitação de barra de módulo corretamente.

\documentclass{standalone}
\usepackage{amsmath,amscd,amssymb,latexsym,upref} %stmaryrd
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\usetikzlibrary{arrows.meta,
                backgrounds,
                chains,
                fit,
                quotes}
\begin{document}

\resizebox{16cm}{2cm}{%
    \begin{tikzpicture}[auto,
    node distance = 12mm,
        start chain = A going right,
     block/.style = {draw, fill=white,
                     text width=#1, minimum height=10mm, align=center,
                     outer sep=0pt, on chain},
     block/.default = 18mm,
 container/.style = {draw, fill=gray!50,
                     inner xsep=2mm, inner ysep=7mm},
                        ]
\node   [block=14mm] {a};    % block name is A-1
\node   [block=12mm] {b};
\node   [block=22mm] {c};
\node   [block=15mm] {d};
\node   [block=22mm] {e~$|.|$};    % block name is A-4
\node   [block=22mm] {f};    % block name is A-6
\node   [block=12mm] {g};
\node   [block=24mm] {h};    % block name is A-8
\node   [block=24mm] {i};    % block name is A-9
%
\scoped[on background layer]
    \node [container, label={[anchor=north]joined},
           fit= (A-5) (A-6)] (container) {};
\draw [-Stealth]
    (A-1) edge  (A-2)    % text on arrow is between " and "
    (A-2) edge  (A-3)
    (A-3) edge  (A-4)
    (A-4) edge  (A-5)
    (A-5) edge  (A-6)
    (A-6) edge  (A-7)
    (A-7) edge (A-8)
    (A-8) edge (A-9);
    \end{tikzpicture}
    }
\end{document}

Responder2

  • o mwe em questão é muito familiar para mim :-)
  • você deve analisar o código que você usa no seu mwe .. . então você observará que o nome do último nó é A-9(e não A-8como você anotou em seu mwe)
  • para o tamanho mais comum você deve selecionar como tamanho padrão, por exemplo block/.default=22mme apenas para o resto escreva as larguras de texto desejadas (você realmente precisa de tamanhos de nó tão diferentes? eu usaria apenas 18mmnad 9mm, veja mwe abaixo)
  • expressão matemática que você pode escrever no nó como em texto, por exemplo $|\cdot|$
  • *não use \resizebox{16cm}{.... redimensiona tudo na imagem e com eles fica feio. em vez disso, recalcule a largura dos nós e as distâncias dos nós para que sua soma seja 16 cm:

    14 mm + 12 mm + 22 mm + 15 mm + 22 mm + 22 mm + 12 mm + 24 mm + 24 mm + 9x2x (separação interna) +8 * (distância do nó) =318 mm

    o que é quase o dobro do tempo. sugiro reduzir pela metade o comprimento de todos os elementos da imagem (veja mwe abaixo) e usar um tamanho de fonte menor, por exemplo footnotesize:

de mwe não segue que você adicionará texto nas setas entre os nós. se for esse o caso, você pode desenhá-los com joina macro da chainsbiblioteca

considere os comentários e sugestões acima, seu mwe se torna:

\documentclass[margin=3mm]{standalone}
\usepackage{amsmath,amscd,amssymb,latexsym,upref} %stmaryrd
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\usetikzlibrary{arrows.meta,
                backgrounds,
                chains,
                fit,
                quotes}
\begin{document}

    \begin{tikzpicture}[
    node distance = 7mm,
        start chain = A going right,
     block/.style = {draw, fill=white,
                     text width=#1, minimum height=10mm, align=center,
                     font=\footnotesize, inner sep=1mm, outer sep=0pt,
                     on chain, join=by -Stealth},
     block/.default = 12mm,
 container/.style = {draw, fill=gray!50,
                     inner xsep=2mm, inner ysep=7mm},
                        ]
\node   [block=6mm] {a};    % block name is A-1
\node   [block=6mm] {b};
\node   [block]     {$|\cdot|$};
\node   [block=6mm] {d};
\node   [block]     {e};    % block name is A-4
\node   [block]     {f};    % block name is A-6
\node   [block=6mm] {g};
\node   [block]     {h};
\node   [block]     {i};    % block name is A-9
%
\scoped[on background layer]
    \node [container, label={[anchor=north]joined},
           fit= (A-5) (A-6)] (container) {};
    \end{tikzpicture}
\end{document}

observação: se você gosta de rotular setas entre nós, você deve remover joina opção da definição de estilo de bloco e adicionar à imagem:

\draw [-Stealth]
    (A-1) edge ["$\alpha$"]    (A-2) 
    (A-2) edge ["$\beta$"]     (A-3)
    (A-3) edge ["$\gamma$"]    (A-4)
    (A-4) edge ["$\epsilon$"]  (A-5)
    (A-5) edge ["$\zeta$"]     (A-6)
    (A-6) edge ["$\theta$"]    (A-7)
    (A-7) edge ["$\iota$"]     (A-8)
    (A-8) edge ["$\kappa$"]    (A-9);

e às opções de imagem adicione:

every edge quote/.append style = {font=\footnotesize}

insira a descrição da imagem aqui

desenhar imagens exige muita paciência, precisão e tempo...

informação relacionada