Mögliches Duplikat:
Relative Positionierung von Knoten in TikZ
Ich erstelle ein Baumdiagramm in Tikz und weiß, dass es sinnlos wäre, jeden einzelnen Punkt zu berechnen. Aus diesem Grund möchte ich die Dinge in relativer Position zueinander platzieren.
Hier sind zwei Fragen:
Wie kann ich in diesem einfachen Beispiel den zweiten Knoten definieren?
\begin{tikzpicture} \node (a) at (0,0) {}; \node (b) at (2,1) {}; \end{tikzpicture}
Wie kann ich diesen Zeilenbefehl durch einen ersetzen, der eine relative Positionierung hat (
a
undb
werden die oben erstellten)?\draw (a) -- (0,1); \draw (0,1) -- (b);
Bitte lassen Sie es mich wissen, wenn etwas unklar ist.
Antwort1
Wie in den Kommentaren bereits erwähnt, können Sie die positioning
Bibliothek verwenden. Hier ist ein einfaches Beispiel, das die verfügbaren Optionen veranschaulicht, wenn Sie beispielsweise Folgendes verwenden above left
(dasselbe Diagramm wird zweimal wiederholt; beim zweiten Mal on grid
wird die Option aktiviert):
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\draw[help lines,step=5mm,gray!20] (0,0) grid (4,3);
\node (a) at (0,0) {a};
\node[above right] (b) {b};
\node[above right = of a] (c) {c};
\node[above right = 2cm of a] (d) {d};
\node[above right = 2cm and 3cm of a] (e) {e};
\begin{scope}[xshift=5cm,on grid]
\draw[help lines,step=5mm,gray!20] (0,0) grid (4,3);
\node (a) at (0,0) {a};
\node[above right] (b) {b};
\node[above right = of a] (c) {c};
\node[above right = 2cm of a] (d) {d};
\node[above right = 2cm and 3cm of a] (e) {e};
\end{scope}
\end{tikzpicture}
\end{document}
Die Parameterwerte 2cm
und 3cm
können relativ zum gewünschten Standort geändert werden, beispielsweise -2cm
um -3cm
den Standort im lokalen Koordinatensystem zu spiegeln, wo a
sich der Mittelpunkt von befindet.
\node[above right = 2cm and 3cm of a]
\node[above right = -2cm and -3cm of a]
Nun ein kleines Beispiel, das den node distance
Schlüssel und einige weitere Optionen zeigt above left
:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\draw[help lines,step=5mm,gray!20] (-4,-4) grid (4,3);
\node[draw] (a) at (0,0) {a};
\foreach \pos in {above,above right,right,below right,below,below left,left,above left}
\node[draw,\pos = of a] () {\pos};
\begin{scope}[yshift=8cm,node distance=2cm and 1cm]
\draw[help lines,step=5mm,gray!20] (-4,-4) grid (4,3);
\node[draw] (a) at (0,0) {a};
\foreach \pos in {above,above right,right,below right,below,below left,left,above left}
\node[draw,\pos = of a] () {\pos};
\end{scope}
\end{tikzpicture}
\end{document}
Im pgfmanual
Folgenden werden einige weitere Optionen erläutert, die über diese Bibliothek verfügbar sind.
Beziehen wir uns nun auf das konkrete Beispiel zur ursprünglichen Frage. Das folgende Beispiel zeigt den Originalcode, in dem alles manuell erledigt wurde. Anschließend wurde dasselbe Diagramm erstellt, bei dem die positioning
Bibliothek und einige der oben genannten Ideen verwendet wurden:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\node (a) at (0,0) {a};
\node (b) at (2,1) {b};
\draw (a) -- (0,1);
\draw (0,1) -- (b);
\begin{scope}[xshift=3cm,on grid]
\node (a) at (0,0) {a};
\node[above right= 1cm and 2cm of a] (b) {b};
\draw (a) |- (b);
\end{scope}
\end{tikzpicture}
\end{document}