Problem beim Erstellen eines Blockdiagramms mit TikZ in Latex

Problem beim Erstellen eines Blockdiagramms mit TikZ in Latex

Ich stehe vor einem dummen Problem. Ich kann die letzten beiden Felder nicht verbinden. Außerdem möchte ich in einem der Felder |.| haben, weiß aber nicht, wie das geht. Kann mir jemand dabei helfen?

\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}

Antwort1

Der letzte mit i gekennzeichnete Block hat den Namen A-9, und wenn Sie Semikolons einfügen, müssen Sie einen neuen Zeichenbefehl hinzufügen. Ich hoffe, ich habe Ihre Modulo-Bar-Anfrage richtig verstanden.

\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}

Antwort2

  • das betreffende MWE kommt mir sehr bekannt vor :-)
  • Sie sollten den Code analysieren, den Sie in Ihrem MWE verwenden. Dann werden Sie feststellen, dass der Name des letzten Knotens A-9(und nicht A-8wie in Ihrem MWE angegeben) lautet:
  • für die gängigsten Größen sollten Sie beispielsweise „ als Standardgröße“ auswählen block/.default=22mmund nur für den Rest die gewünschten Textbreiten schreiben (brauchen Sie wirklich so unterschiedliche Knotengrößen? Ich würde nur „ 18mmnad“ verwenden 9mm, siehe mwe unten)
  • mathematischer Ausdruck, den Sie in Knoten wie in Text schreiben können, zum Beispiel $|\cdot|$
  • *nicht verwenden \resizebox{16cm}{.... Dadurch wird die Größe des gesamten Bilds geändert und das Bild dadurch hässlich. Berechnen Sie stattdessen die Breite der Knoten und die Knotenabstände so neu, dass ihre Summe 16 cm ergibt:

    14 mm + 12 mm + 22 mm + 15 mm + 22 mm + 22 mm +12 mm +24 mm +24 mm + 9 x 2 x (Innenabstand) + 8 x (Knotenabstand) =318 mm

    was fast doppelt so lang ist. Ich schlage vor, die Länge aller Bildelemente zu halbieren (siehe mwe unten) und eine kleinere Schriftgröße zu verwenden, zum Beispiel footnotesize:

aus mwe folgt nicht, dass Sie Text auf Pfeile zwischen Knoten hinzufügen. Wenn dies der Fall ist, können Sie sie mit joineinem Makro aus chainsder Bibliothek zeichnen

Wenn Sie die obigen Kommentare und Vorschläge berücksichtigen, werden Sie:

\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}

Notiz: Wenn Sie Pfeile zwischen Knoten beschriften möchten, sollten Sie joindie Option aus der Blockstildefinition entfernen und zum Bild hinzufügen:

\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);

und zu den Bildoptionen hinzufügen:

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

Bildbeschreibung hier eingeben

das Zeichnen von Bildern erfordert viel Geduld, Genauigkeit und Zeit …

verwandte Informationen