Ablaufdiagramm mit Tikz: Ausrichten der Nodes und Position der Pfeile Thema ist als GELÖST markiert

Tabellen und Grafiken erstellen und anordnen


Frankthetank
Forum-Anfänger
Forum-Anfänger
Beiträge: 16
Registriert: So 19. Jun 2022, 17:54

Ablaufdiagramm mit Tikz: Ausrichten der Nodes und Position der Pfeile

Beitrag von Frankthetank »

Hallo zusammen,

ich bin ziemlicher Latex-Neuling und versuche gerade ein Ablaufdiagramm nachzubauen (siehe angehängtes Bild). Aktuell komme ich nicht so richtig weiter. Kann mir evtl. jemand zeigen, wie ich die Nodes unterhalb des ersten breiten Nodes (mit Breite textwidth) linksbündig ausrichten kann, bzw. die beiden rechten Nodes rechtsbündig sowie das "Verschieben" der Pfeile? Sodass das ganze Diagramm nachher textbreit ist, analog dem angehängten Bild. Die Syntax für solche Befehle (Ausrichtung, Abstände untereinander) sind mir noch nicht klar.

Nachfolgend mein bisher erstellter Code:
\documentclass{scrreprt}
\usepackage[T1]{fontenc}						
\usepackage[utf8]{inputenc}						
\usepackage[ngerman]{babel}
\usepackage{amsmath}
\usepackage{siunitx}
\usepackage{tikz}
\usetikzlibrary{positioning, arrows}

\begin{document}

\begin{figure}[ht]
	\centering
	\begin{tikzpicture}[font=\footnotesize, inner sep=2mm, node distance=0.75cm, >=stealth]
		% Knoten
		\node[draw,
		minimum width=\textwidth,
		minimum height=1cm,
		align=center
		] (Start) {Schwingungen von Wohnungsdecken \\ Gebrauchstauglichkeitsnachweis nach DIN EN 1995-1-1};
		\node[draw,
		minimum width=0.4\textwidth,
		below =of Start
		] (Eigenfrequenz) {Eigenfrequenz: $ f_{\text{e}} \ge \SI{8}{\hertz} $};
		\node[draw,
		minimum width=0.4\textwidth,
		right=of Eigenfrequenz
		] (Untersuchung) {Genauere Untersuchung};
		\node[draw,
		below =of Eigenfrequenz
		] (Festlegung) {Festlegung, ob geringe oder hohe Anforderungen};
		\node[draw,
		below =of Festlegung
		] (Grenzwerte) {Grenzwerte für $v$ und $w$};
		\node[draw,
		below=of Grenzwerte
		] (Steifigkeit) {Steifigkeit: $w(\SI{5}{\kilo\newton}) \le 0,5 \dots \SI{4}{\mm}$};
		\node[draw,
		below=of Steifigkeit
		] (Schwinggeschwindigkeit) {Schwinggeschwindigkeit $v$};
		\node[draw,
		below=of Schwinggeschwindigkeit
		] (Nachweis erfüllt) {Nachweis erfüllt};
		\node[draw,
		right=of Nachweis erfüllt
		] (Nachweis nicht erfüllt) {Nachweis nicht erfüllt};
		% Pfeile
		\draw[->] (Start) -- (Eigenfrequenz);
		\draw[->] (Eigenfrequenz) -- node[above] {Nein} (Untersuchung);
		\draw[->] (Eigenfrequenz) -- node[left] {Ja}(Festlegung);
		\draw[->] (Festlegung) -- (Grenzwerte);
		\draw[->] (Grenzwerte) -- (Steifigkeit);
		\draw[->] (Steifigkeit) -| node[above] {Nein} (Nachweis nicht erfüllt);
		\draw[->] (Steifigkeit) -- node[left] {Ja} (Schwinggeschwindigkeit);
		\draw[->] (Schwinggeschwindigkeit) -| node[above] {Nein} (Nachweis nicht erfüllt);
		\draw[->] (Schwinggeschwindigkeit) -- node[left] {Ja} (Nachweis erfüllt);
	\end{tikzpicture}
	\caption[Test]{Test}
	\label{fig:Test}
\end{figure}

\end{document}
Über Hilfe würde ich mich sehr freuen, ebenso auch über Verbesserungsvorschläge/Alternativen für so etwas (sicher ist mein bisheriger Code stark ausbaufähig :) )

Bild entnommen aus: Forschungsbericht "Schwingungstechnische Optimierung von Holz- und Holz-Beton-Verbunddecken"
Dateianhänge
Ablaufdiagramm.png

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Re: Ablaufdiagramm mit Tikz: Ausrichten der Nodes und Position der Pfeile

Beitrag von Bartman »

Ein Vorschlag, der ohne größeren Umbau das Gegebene anpasst:
\documentclass{scrreprt}
\usepackage[T1]{fontenc}						
\usepackage{lmodern}
%\usepackage[utf8]{inputenc}% https://texwelt.de/fragen/26496
\usepackage[ngerman]{babel}
\usepackage[locale=DE]{siunitx}
\usepackage{tikz}
\usepackage{showframe}

\usetikzlibrary{positioning, arrows.meta}

\begin{document}
\begin{figure}[ht]
%	\centering
	\begin{tikzpicture}[
		font=\footnotesize, 
		inner sep=2mm, 
		node distance=0.75cm, 
		>=Stealth, 
		left node/.style={
			draw,
			text width=0.4\textwidth,
			below=of #1.south west, 
			anchor=north west
		}
	]
	% Knoten
	\node[
		draw,
		text width=\textwidth-1em
	] (Start) {
		Schwingungen von Wohnungsdecken \\ 
		Gebrauchstauglichkeitsnachweis nach DIN EN 1995-1-1
	};
	\node[
		left node=Start
	] (Eigenfrequenz) {Eigenfrequenz: $ f_{\text{e}} \ge \SI{8}{\hertz} $};
	\node[draw,
		below=of Start.south east, anchor=north east
	] (Untersuchung) {Genauere Untersuchung};
	\node[
		left node=Eigenfrequenz,
		text width=7cm
	] (Festlegung) {Festlegung, ob geringe oder hohe Anforderungen};
	\node[
		left node=Festlegung
	] (Grenzwerte) {Grenzwerte für $v$ und $w$};
	\node[
		left node=Grenzwerte
	] (Steifigkeit) {
		Steifigkeit: $w(\SI{5}{\kilo\newton}) 
		\le \qtyrange[range-phrase=\dots, range-units=single]{0.5}{4}{\mm}$}
	;
	\node[
		left node=Steifigkeit
	] (Schwinggeschwindigkeit) {Schwinggeschwindigkeit $v$};
	\node[
		left node=Schwinggeschwindigkeit
	] (Nachweis erfüllt) {Nachweis erfüllt};
	\node[
		draw,
		left
	] at (Untersuchung.east|-Nachweis erfüllt) (Nachweis nicht erfüllt) 
		{Nachweis nicht erfüllt}
	;
	% Pfeile
	\draw[->] (Start.south-|Eigenfrequenz) -- (Eigenfrequenz);
	\draw[->] (Eigenfrequenz) -- node[above] {Nein} (Untersuchung);
	\draw[->] (Eigenfrequenz) -- node[left] {Ja}(Eigenfrequenz|-Festlegung.north);
	\draw[->] (Festlegung.south-|Grenzwerte) -- (Grenzwerte);
	\draw[->] (Grenzwerte) -- (Steifigkeit);
	\draw[->] (Steifigkeit) -| node[above, pos=.4] {Nein} (Nachweis nicht erfüllt);
	\draw[->] (Steifigkeit) -- node[left] {Ja} (Schwinggeschwindigkeit);
	\draw
		(Schwinggeschwindigkeit) -- node[above, pos=.8] {Nein} 
		(Schwinggeschwindigkeit-|Nachweis nicht erfüllt)
	;
	\draw[->] (Schwinggeschwindigkeit) -- node[left] {Ja} (Nachweis erfüllt);
	\end{tikzpicture}
	\caption{Test}
	\label{fig:Test}
\end{figure}
\end{document}
Bei der Bestimmung der Breite des ersten Knotens wäre mir eine Lösung ohne den Abzug einer festen Längenangabe lieber. Vielleicht fällt einem anderen Leser etwas besseres ein.

Alternativ könnte man mindestens die am linken Rand ausgerichteten Knoten unterhalb des ersten Knotens, der die Seitenbreite belegt, mithilfe einer Matrix setzen.

Frankthetank
Forum-Anfänger
Forum-Anfänger
Beiträge: 16
Registriert: So 19. Jun 2022, 17:54

Re: Ablaufdiagramm mit Tikz: Ausrichten der Nodes und Position der Pfeile

Beitrag von Frankthetank »

Vielen Dank für Deinen Vorschlag, sieht sehr gut aus :).
Ja das mit der Obergrenze für die Breite eines Nodes (in meinem Fall \textwidth) ist wohl so eine Sache.

Frankthetank
Forum-Anfänger
Forum-Anfänger
Beiträge: 16
Registriert: So 19. Jun 2022, 17:54

Re: Ablaufdiagramm mit Tikz: Ausrichten der Nodes und Position der Pfeile

Beitrag von Frankthetank »

Kurzer Nachtrag: Wenn der vorletzte Knoten mittig platziert wäre und ich will den letzten (Nachweis erfüllt) wieder unterhalb und "linksbündig" haben, wie würde man das bewerkstelligen?

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Re: Ablaufdiagramm mit Tikz: Ausrichten der Nodes und Position der Pfeile

Beitrag von Bartman »

Falls sich mittig auf die Seitenbreite bezieht:

Bestimme den neuen Punkt, mit dessen Hilfe die Position des Knotens ermittelt wird und ändere die Optionenliste des Knotens.
\path
	(Steifigkeit.south west) -- coordinate (Mittelpunkt Steifigkeit Untersuchung) 
	(Steifigkeit.south west-|Untersuchung.east)
;
\node[
	draw,
	below=of Mittelpunkt Steifigkeit Untersuchung,
	anchor=north
] (Schwinggeschwindigkeit) {Schwinggeschwindigkeit $v$};

Frankthetank
Forum-Anfänger
Forum-Anfänger
Beiträge: 16
Registriert: So 19. Jun 2022, 17:54

Re: Ablaufdiagramm mit Tikz: Ausrichten der Nodes und Position der Pfeile

Beitrag von Frankthetank »

Merci für den Hinweis mit dem Pfad,

evtl. hätte ich erwähnen sollen, dass es sich zwar um ein ähnliches jedoch etwas anderes Diagramm wie jenes im Eingangsbeitrag handelt (vgl. Anhang). So ganz möchte die Bestimmung des Knotens über den Pfad noch nicht gelingen.
\documentclass{scrreprt}
\usepackage[T1]{fontenc}						
\usepackage{lmodern}
\usepackage[ngerman]{babel}
\usepackage[locale=DE]{siunitx}
\usepackage{tikz}

\usetikzlibrary{positioning, arrows.meta}

\begin{document}
\begin{figure}[ht]
\begin{tikzpicture}[
			font=\footnotesize,
			inner sep=2mm,
			node distance=0.5cm,
			>=stealth,
			middle node/.style={
				draw,
				minimum width=0.4\textwidth,
				below=of #1,
			},
			left node/.style={
				draw,
				minimum width=0.2\textwidth,
				below=of #1.south west,
				anchor=north west
			}
			]
		% Knoten
		\node[
			draw,
			text width=\textwidth-1em
		] (Start) {
			Schwingungen von Wohnungsdecken \\ 
			Gebrauchstauglichkeitsnachweis nach DIN 1052:2008-12};
		\node[
			left node=Start,
			text width=0.2\textwidth
		] (Durchbiegung) {
			Durchbiegung:
			$ w_{\text{perm}} \le \SI{6}{\mm} $};
		\node[
			middle node=Start
		] (Untersuchung) {
			Besondere Untersuchungen};
		\node[
			middle node=Durchbiegung,
			below=of Untersuchung
		] (Eigenfrequenz) {Eigenfrequenz: $ f_{\text{e,perm}} \ge \SI{6}{\hertz} $};
		\node[
			middle node=Eigenfrequenz
		] (Steifigkeit) {Steifigkeit: $w(\SI{1}{\kilo\newton}) \le \qtyrange[range-phrase=\dots, range-units=single]{0.25}{1}{\mm}$};
		\node[
			middle node=Steifigkeit
		] (Schwinggeschwindigkeit) {Schwinggeschwindigkeit $v$};
		\node[
			middle node=Schwinggeschwindigkeit
		] (Schwingbeschleunigung) {Schwingbeschleunigung $a \le \SI{0,1}{\m\per\s^2}$};
		\node[
			left node=Durchbiegung,
			below=of Schwingbeschleunigung
		] (Nachweis erfüllt) {Nachweis erfüllt};
		\node[
			draw,
			minimum width=0.2\textwidth,
			left
		] at (Start.east|-Nachweis erfüllt) (Nachweis nicht erfüllt) {Nachweis nicht erfüllt};
	\end{tikzpicture}
	\caption{Test}
	\label{fig:Test}
\end{figure}
\end{document}
Dateianhänge
Quelle identisch wie oben
Quelle identisch wie oben

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Re: Ablaufdiagramm mit Tikz: Ausrichten der Nodes und Position der Pfeile

Beitrag von esdd »

Vorschlag:
\documentclass{scrreprt}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[ngerman]{babel}
\usepackage[locale=DE]{siunitx}
\usepackage{tikz}

\usetikzlibrary{positioning, arrows.meta}

\begin{document}
\begin{figure}[ht]
\begin{tikzpicture}[
  font=\footnotesize,
  inner sep=2mm,
  node distance=0.5cm,
  >=Stealth,% <-geändert
  middle node/.style={
    draw,
    text width=0.4\textwidth,% <- geändert
    below=of #1,
  },
  left node/.style={
    draw,
    text width=0.2\textwidth,% <- geändert
    below=of #1,%<- geändert
    anchor=north west
  }
  ]
  % Knoten
  \node[
    draw,
    text width=\textwidth-2*\pgfkeysvalueof{/pgf/inner xsep}% <- geändert
  ] (Start) {
    Schwingungen von Wohnungsdecken \\ 
    Gebrauchstauglichkeitsnachweis nach DIN 1052:2008-12};
  \node[
    left node=Start.south west,% <- geändert
    text width=0.2\textwidth
  ] (Durchbiegung) {
    Durchbiegung:
    $ w_{\text{perm}} \le \SI{6}{\mm} $};
  \node[
    middle node=Start
  ] (Untersuchung) {
    Besondere Untersuchungen};
  \node[
    middle node=Durchbiegung,
    below=of Untersuchung
  ] (Eigenfrequenz) {Eigenfrequenz: $ f_{\text{e,perm}} \ge \SI{6}{\hertz} $};
  \node[
    middle node=Eigenfrequenz
  ] (Steifigkeit) {Steifigkeit: $w(\SI{1}{\kilo\newton}) \le \qtyrange[range-phrase=\dots, range-units=single]{0.25}{1}{\mm}$};
  \node[
    middle node=Steifigkeit
  ] (Schwinggeschwindigkeit) {Schwinggeschwindigkeit $v$};
  \node[
    middle node=Schwinggeschwindigkeit
  ] (Schwingbeschleunigung) {Schwingbeschleunigung $a \le \SI{0,1}{\m\per\s^2}$};
  \node[
    left node=Durchbiegung.west|-Schwingbeschleunigung.south,% <- geändert
  ] (Nachweis erfüllt) {Nachweis erfüllt};
  \node[
    draw,
    minimum width=0.2\textwidth,
    left
  ] at (Start.east|-Nachweis erfüllt) (Nachweis nicht erfüllt) {Nachweis nicht erfüllt};
  % Pfeile
  \begin{scope}[
      ->,thick,auto,
      ja/.style={swap,green!80!black,node contents={JA}},
      nein/.style={red!80!black,node contents={NEIN}}
    ]
    \draw(Start.south-|Durchbiegung)--(Durchbiegung);
    \draw(Untersuchung)--(Eigenfrequenz);
    %
    \foreach \start/\end in
      {
        Durchbiegung/Nachweis erfüllt,
        Eigenfrequenz/Steifigkeit,
        Steifigkeit/Schwinggeschwindigkeit,
        Schwinggeschwindigkeit/Schwingbeschleunigung%
      }{
        \draw(\start)--node[ja]{}(\end);
      }
    \draw(Schwingbeschleunigung)--node[ja]{}(Schwingbeschleunigung|-Nachweis erfüllt)--(Nachweis erfüllt);
    %
    \draw(Durchbiegung.base east)--node[nein]{}(Untersuchung.base west);
    \draw(Untersuchung)--node[nein]{}(Untersuchung-|Nachweis nicht erfüllt)--(Nachweis nicht erfüllt);
    \foreach \start in
      {Steifigkeit,Schwinggeschwindigkeit,Schwingbeschleunigung}
      {\draw(\start)--node[nein]{}(\start-|Nachweis nicht erfüllt);}
  \end{scope}
\end{tikzpicture}
\caption{Test}
\label{fig:Test}
\end{figure}
\end{document}

Frankthetank
Forum-Anfänger
Forum-Anfänger
Beiträge: 16
Registriert: So 19. Jun 2022, 17:54

Re: Ablaufdiagramm mit Tikz: Ausrichten der Nodes und Position der Pfeile

Beitrag von Frankthetank »

Vielen Dank für den Input, viel gefehlt hat eigentlich nicht, danke :)

Antworten