Positionierung von \node und dem zugehörigen Text

Tabellen und Grafiken erstellen und anordnen


PeterPan87
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Mi 18. Jan 2017, 21:11

Positionierung von \node und dem zugehörigen Text

Beitrag von PeterPan87 »

Liebe LaTexler,

ich brauche bei folgendem Problem eure Hilfe. Ich habe eine Grafik mit dem zu sehenden Code programmiert. und es sind folgende Fragestellungen aufgetreten die ich mir selbst nicht mehr beantworten kann.

1.: Wie kann ich den Text "Schritt 3" über das Kreisdiagramm schreiben?

2.: Wie kann ich Ebene B über der Trennlinie positionieren? (funktionierte bis ich das Kreisdiagramm integrierte)

danke für eure Hilfe.

\documentclass{article}
\usepackage{tikz}
\usepackage{graphicx}
\usetikzlibrary{matrix,fadings,arrows,trees,calc,positioning,decorations,automata}
\begin{document}
\begin{figure}[htbp]
	\centering
	\begin{tikzpicture}
	\node [draw, rectangle, rounded corners] (a) {Schritt 1};
	\node [draw, rectangle, rounded corners, right =of a] (b) {Schritt 2};
	\node [draw, rectangle, rounded corners, below =of b] (c) {Schritt 3	
	
	\begin{tikzpicture}

node distance=12mm,
>=stealth, auto,
every state/.style={draw=none, inner sep=0pt}
]
\node[state] (q14) {$14$} ;
\node[state] (q12) [above right=of q14] {$12$};
\node[state] (q23) [below right=of q12] {$23$};
\node[state] (q34) [below right=of q14] {$34$};

\begin{scope}[bend left]
\path[->]	(q14) edge node {c} (q12)
(q12) edge node {c} (q23)
(q23) edge node {c} (q34)
(q34) edge node {c} (q14);
\end{scope}
	\end{tikzpicture}
	};
	\node [draw, rectangle, rounded corners, right =of c] (d) {Schritt 1};
	\node [draw, rectangle, rounded corners, right =of d] (e) {Ebene A};
	\node [draw, rectangle, rounded corners, above =of e] (f) {Ebene B};
	\draw[-, densely dashed] (-1.5,-.75) -- (14.7,-.75);
	\draw[->, >=stealth'] (a) -- (b);
	\draw[->, >=stealth'] (b) -- (c);
	\draw[->, >=stealth'] (c) -- (d);
	\end{tikzpicture}
\end{figure}
\end{document}

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

Re: Positionierung von \node und dem zugehörigen Text

Beitrag von esdd »

PeterPan87 hat geschrieben: 1.: Wie kann ich den Text "Schritt 3" über das Kreisdiagramm schreiben?
Etwas wie
\node [draw, rectangle, rounded corners, below =of b,align=center] (c) {Schritt 3 \\ ...};
Beachte aber, dass man tikzpicture Umgebungen nicht schachteln sollte. Siehe dazu Wie kann ich TikZ nodes verschachteln?.
PeterPan87 hat geschrieben: 2.: Wie kann ich Ebene B über der Trennlinie positionieren? (funktionierte bis ich das Kreisdiagramm integrierte)
\node [draw, rectangle, rounded corners] (f) at (e|-b) {Ebene B};

PeterPan87
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Mi 18. Jan 2017, 21:11

Beitrag von PeterPan87 »

Danke dir zunächst mal recht herzlich!

Ich habe mir durchgelesen was du mir verlinkt hast und es soweit in der Theorie auch verstanden. Leider hapert es noch an der Umsetzung.
Zudem würde ich gerne den Kreis Links unten um 90 Grad drehen, so dass die Nodes in den Ecken der Umrandung sind.
Habe es bisher mit dem anchor versucht und auch folgenden Post nachgebaut:
http://tex.stackexchange.com/questions/ ... m-inkscape
Leider hat beides nicht funktionier.

Hier die Weiterentwicklung meines Codes:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{fit}
\usepackage{graphicx}
\usetikzlibrary{matrix,fadings,arrows,trees,calc,positioning,decorations,automata,fit}
\begin{document}
\begin{figure}[htbp]
	\centering
	\begin{tikzpicture}
	\node [draw, rectangle, rounded corners] (a) {Volumenmodell};
	\node[fit=(a), minimum width=2cm]{};
	\node [draw, rectangle, rounded corners, right =of a] (b) {Schnittmodell};
	\node[fit=(b), minimum width=2cm] {};
	\node [draw, rectangle, rounded corners, below =of b] (c) {	
		\begin{tikzpicture}
		%		node [
		%		distance=12mm,>=stealth, auto,
		%		every state/.style={draw=none, inner sep=0pt}
		%		]
		\node[anchor=north west, draw, rectangle, rounded corners] (q14) {$Beschichten$} ;
		\node[anchor=north east, draw, rectangle, rounded corners] (q12) [above right=of q14] {$Belichten$};
		\node[anchor=south west, draw, rectangle, rounded corners] (q23) [below right=of q12] {$Aushärten$};
		\node[anchor=south east, draw, rectangle, rounded corners] (q34) [below right=of q14] {$Absenken$};
		
		\begin{scope}[bend left]
		\path[->]	(q14) edge node {} (q12)
		(q12) edge node {} (q23)
		(q23) edge node {} (q34)
		(q34) edge node {} (q14);
		\end{scope}
		\end{tikzpicture}
	};
	\node[fit=(c), minimum width=2cm]{SLM-Prozess};
	\node [draw, rectangle, rounded corners, right =of c] (d) {Physisches Bauteil};
	\node [draw, rectangle, rounded corners, right =of d] (e) {Physische Ebene};
	\node [draw, rectangle, rounded corners] (f) at (e|-b) {Virtuelle Ebene};
	\draw[-, densely dashed] (-1.5,-.75) -- (14.7,-.75);
	\draw[->, >=stealth'] (a) -- (b);
	\draw[->, >=stealth'] (b) -- (c);
	\draw[->, >=stealth'] (c) -- (d);
\end{tikzpicture}
\caption{Prinzip der Generativen ~\cite[S.25]{Gebhardt.2013}}
\label{fig:PrinzipGen}
\end{figure}
\end{document}

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

Beitrag von Bartman »

Ich habe mir erlaubt, Dein Beispiel etwas umzugestalten:
\documentclass[tikz, border=10pt]{standalone}

\usepackage{selinput}% Begründung: http://texwelt.de/wissen/fragen/5546
\SelectInputMappings{
	adieresis={ä},
	germandbls={ß}
}

\usetikzlibrary{
	arrows,
	positioning,
	fit
}

\begin{document}
\begin{tikzpicture}[
	->,
	>=stealth',
	box/.style={
		draw, 
		rectangle, 
		font=#1, 
		rounded corners
	},
	box/.default=\normalfont
]
   \node [box] (a) {Volumenmodell};
   \node [box, right=of a] (b) {Schnittmodell};

   \begin{scope}[nodes={box=\itshape}]
   \node (q12) [below=of b] {Belichten};
   \node (q14) [below left=of q12] {Beschichten};
   \node (q23) [below right=of q12] {Aushärten};
   \node (q34) [below right=of q14] {Absenken};
   \end{scope}
   \node [box, fit=(q14) (q12) (q23) (q34)] (c) {SLM-Prozess};
   \path [bend left] (q14) edge (q12)
                     (q12) edge (q23)
                     (q23) edge (q34)
                     (q34) edge (q14);
   \node [box, right=of c] (d) {Physisches Bauteil};
   \node [box, right=of d] (e) {Physische Ebene};
   \node [box] (f) at (e|-b) {Virtuelle Ebene};
   \draw[-, densely dashed] (-1.5,-.75) -- (14.7,-.75);
   \draw (a) -- (b);
   \draw (b) -- (c);
   \draw (c) -- (d);
\end{tikzpicture}
\end{document}
PeterPan87 hat geschrieben:Zudem würde ich gerne den Kreis Links unten um 90 Grad drehen, so dass die Nodes in den Ecken der Umrandung sind.
Für diesen Zweck müsste eine Drehung um 45 Grad erfolgen.

Wenn ich Deine Beschreibung richtig verstanden habe, dürfte eine andere Anordnung der Knoten auch zum Ziel führen.
\documentclass[tikz, border=10pt]{standalone}

\usepackage{selinput}
\SelectInputMappings{
	adieresis={ä},
	germandbls={ß}
}

\usetikzlibrary{
	arrows,
	positioning,
	fit
}

\begin{document}
\begin{tikzpicture}[
	->,
	>=stealth',
	box/.style={
		draw, 
		rectangle, 
		font=#1, 
		rounded corners
	},
	box/.default=\normalfont
]
   \node [box] (b) {Schnittmodell};

   \begin{scope}[
      nodes={box=\itshape},
	   node distance=2cm and .5cm
   ]
   \node (q12) [below left=of b] {Belichten};
   \node (q14) [below=of q12] {Beschichten};
   \node (q23) [below right=of b] {Aushärten};
   \node (q34) [below=of q23] {Absenken};
   \end{scope}
   \node [box, inner ysep=1cm, fit=(q14) (q12) (q23) (q34)] (c) {SLM-Prozess};
   \path [bend left] (q14) edge (q12)
                     (q12) edge (q23)
                     (q23) edge (q34)
                     (q34) edge (q14);
    \draw (b) -- (c);
\end{tikzpicture}
\end{document}
Alternativ könntest Du Dein Ziel wahrscheinlich auch mit einer Matrix erreichen.

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

Beitrag von esdd »

Hier ist mal noch ein Alternative, die auf dem Vorschlag von Bartmann basiert
\documentclass[margin=5pt]{standalone} 
\usepackage{selinput}% Begründung: http://texwelt.de/wissen/fragen/5546 
\SelectInputMappings{ 
    adieresis={ä}, 
    germandbls={ß} 
}

\usepackage{tikz}
\usetikzlibrary{ 
    arrows, 
    positioning, 
    fit 
}

\begin{document} 
\noindent
\begin{tikzpicture}[ 
    ->, 
    >=stealth', 
    box/.style={ 
       draw, 
       rectangle, 
       font=#1, 
       rounded corners 
    }, 
    box/.default=\normalfont
] 

    \path (0,0) node(q0){SLM process};
    \path [nodes={box=\itshape},node distance=.5cm and 0cm]
        node [above right = of q0,anchor = center] (q12) {Belichten}
        node [above left  = of q0,anchor = center] (q14) {Beschichten}
        node [below right = of q0,anchor = center] (q23) {Aushärten}
        node [below left  = of q0,anchor = center] (q34) {Absenken}
        ;
    \path [bend left] (q14) edge coordinate (ct) (q12)
                      (q12) edge (q23)
                      (q23) edge coordinate (cb) (q34)
                      (q34) edge (q14)
    ;

    \node [box, fit= (q14) (q12) (q23) (q34) (ct) (cb)] (c) {};

    \path [nodes = box]
        node [above = of c] (b) {Schnittmodell}
        node [left = of b]  (a) {Volumenmodell}
        node [right=of c]   (d) {Physisches Bauteil}
        node [right=of d]   (e) {Physische Ebene}
        (e|-b) node         (f) {Virtuelle Ebene}
    ;

    \path (b) -- coordinate (temp) (c);
    \draw[-, densely dashed]
        (current bounding box.west|-temp) -- (current bounding box.east|-temp)
    ; 
    \draw (a) -- (b); 
    \draw (b) -- (c); 
    \draw (c) -- (d); 
\end{tikzpicture} 
\end{document}

PeterPan87
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Mi 18. Jan 2017, 21:11

Beitrag von PeterPan87 »

SUPER! Vielen herzlichen Dank. Sieht fast genauso aus wie ich es mir vorgestellt habe. :D

Vielleicht könnt ihr mir ja noch ein paar Anmerkungen zu folgenden Codezeilen machen, damit ich es das nächste mal selbst anwenden kann.
Ich habe hinter die jeweiligen Programmzeilen Kommentare gesetzt
Nehme auch das pgfmanual zur Hilfe.
    \path (0,0) node(q0){SLM process};  % "SLM prozess wird auf den Koordinatenmittelpunkt platziert!?
    \path [nodes={box=\itshape},node distance=.5cm and 0cm] 
        node [above right = of q0,anchor = center] (q12) {Belichten}  %was bewirkt hier der anchor?
        node [above left  = of q0,anchor = center] (q14) {Beschichten} 
        node [below right = of q0,anchor = center] (q23) {Aushärten} 
        node [below left  = of q0,anchor = center] (q34) {Absenken} 
        ; 
    \path [bend left] (q14) edge coordinate (ct) (q12) % Was bewirkt dieser Teil des Codes?
                      (q12) edge (q23) 
                      (q23) edge coordinate (cb) (q34) 
                      (q34) edge (q14) 
    ; 

    \node [box, fit= (q14) (q12) (q23) (q34) (ct) (cb)] (c) {}; % Boxen um (q14) usw?

    \path [nodes = box]                                      % Diesen Block habe ich verstanden
        node [above = of c] (b) {Schnittmodell} 
        node [left = of b]  (a) {Volumenmodell} 
        node [right=of c]   (d) {Physisches Bauteil} 
        node [right=of d]   (e) {Physische Ebene} 
        (e|-b) node         (f) {Virtuelle Ebene} 
    ; 

    \path (b) -- coordinate (temp) (c); % Linie von b zu c!? was bewirkt coordinate (temp)
    \draw[-, densely dashed] 
        (current bounding box.west|-temp) -- (current bounding box.east|-temp) % Hab ich nicht verstanden

Vielen Dank

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

Beitrag von esdd »

PeterPan87 hat geschrieben: Vielleicht könnt ihr mir ja noch ein paar Anmerkungen zu folgenden Codezeilen machen, damit ich es das nächste mal selbst anwenden kann.
Ich habe hinter die jeweiligen Programmzeilen Kommentare gesetzt
Nehme auch das pgfmanual zur Hilfe.
Nur als Hinweis: Es gibt in der Regel viele verschiedene Wege ein Bild mit TikZ zu erstellen. Welchen man wählt, hängt immer von der konkreten Aufgabe ab.
PeterPan87 hat geschrieben:
    \path (0,0) node(q0){SLM process};  % "SLM prozess wird auf den Koordinatenmittelpunkt platziert!?
Ja mir erschien es hier sinnvoll den Node mit SLM process in den Ursprung zu setzen und die restliche Zeichnung relativ zu diesem zu machen.
PeterPan87 hat geschrieben:
    \path [nodes={box=\itshape},node distance=.5cm and 0cm] 
        node [above right = of q0,anchor = center] (q12) {Belichten}  %was bewirkt hier der anchor?
        node [above left  = of q0,anchor = center] (q14) {Beschichten} 
        node [below right = of q0,anchor = center] (q23) {Aushärten} 
        node [below left  = of q0,anchor = center] (q34) {Absenken} 
        ; 

Hier werden die Knoten, die auf dem "Kreis" liegen, relativ zu q0 also SLM process platziert. Mit den Angaben bei node distance sorgt above left = of q0 dafür, dass die rechte untere Ecke des einzufügenden Nodes vertikal 0,5cm und horizontal 0cm von der linken oberen Ecke des Ausgangsnodes entfernt eingefügt wird. Ergänzt man anchor=center, dann wird an der Stelle nicht die rechte untere Ecke sondern das Zentrum des neuen Nodes eingefügt. Probiere den Unterschied einfach aus.
PeterPan87 hat geschrieben:
    \path [bend left] (q14) edge coordinate (ct) (q12) % Was bewirkt dieser Teil des Codes?
                      (q12) edge (q23) 
                      (q23) edge coordinate (cb) (q34) 
                      (q34) edge (q14) 
    ; 
Hier werden die gebogenen Pfeile zwischen den Nodes auf dem "Kreis" gezeichnet. Da der obere und untere Pfeil auch ober- bzw. unterhalb der bisherigen Nodes verlaufen, werden am höchsten bzw. tiefsten Punkt die Koordinaten ct bzw. cb gesetzt. Diese Punkte liegen jeweils in der Mitte des oberen bzw. unteren Pfeils. Es gibt dafür verschiedene Möglichkeiten: (q14) edge coordinate (ct) (q12) ist eine Abkürzung für (q14) edge coordinate [pos=.5] (ct) (q12) oder (q14) edge (q12)coordinate[pos=.5] (ct) . Im letzten Fall würde bei Weglassen des optionalen Arguments die Koordinate am Ende des Pfades eingefügt.
PeterPan87 hat geschrieben:
    \node [box, fit= (q14) (q12) (q23) (q34) (ct) (cb)] (c) {}; % Boxen um (q14) usw?
Hier wird ein neuer Node mit dem Stil box eingefügt, dessen Größe und Position so angepasst wird, dass er die als Argument von fit angegebenen Nodes enthält. Dafür wird die fit Bibliothek benötigt.
PeterPan87 hat geschrieben:
    \path (b) -- coordinate (temp) (c); % Linie von b zu c!? was bewirkt coordinate (temp)
Hier wird in der Mitte des Pfades, der nicht gezeichnet wird, eine Hilfskoordinate temp gesetzt. Auf dieser Höhe soll zum Schluss die gestrichelte Linie gezeichnet werden.
PeterPan87 hat geschrieben:
    \draw[-, densely dashed] 
        (current bounding box.west|-temp) -- (current bounding box.east|-temp) % Hab ich nicht verstanden
Hier wird die horizontale gestrichelte Linie gezeichnet. Um deren Position und Länge festzulegen werden der Node current bounding box (Infos in der Doku suchen) und der vorhin ermittelten Hilfskoordinate temp verwendet. Die Angabe (current bounding box.west|-temp) bezeichnet den Schnittpunkt der senkrechten Linie durch current bounding box.west und der horizontalen Linie durch temp. Siehe dazu 13.3.1 Intersections of Perpendicular Line in der Doku.

Antworten