Ich versuche, ein Diagramm zu erstellen und möchte meine Knoten mit der anchor=west
Option linksbündig ausrichten. Ich würde lieber die relative Positionierung verwenden, um mein Diagramm flexibler für Änderungen zu machen. Hier ist mein Beispiel:
\documentclass[11pt]{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[%
every node/.style = {anchor=west}]
\node[fill=red!40, draw] (n0) at (0,0) {Base node} ;
\node[fill=red!40, draw] (n1) at (0,-2) {Node with longer text} ;
\node[fill=red!40, draw] (n2) [below=of n1] {Node with even longer text} ;
\end{tikzpicture}
\end{document}
Beachten Sie, dass der zweite Knoten den für alle Knoten festgelegten Stil verwendet anchor=west
, der dritte Knoten mit dem längsten Text jedoch zentriert unter dem zweiten Knoten zu stehen scheint, anstatt linksbündig mit diesem ausgerichtet zu sein. Gibt es eine Möglichkeit, das zu erreichen, wonach ich suche?
Im Wesentlichen möchte ich die Ausrichtung des zweiten Knotens, ohne absolute Koordinaten angeben zu müssen.
Antwort1
Versuche dies
\documentclass[11pt]{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[%
every node/.style = {anchor=west}]
\node[fill=red!40, draw] (n0) at (0,0) {Base node} ;
\node[fill=red!40, draw] (n1) at (0,-2) {Node with longer text} ;
\node[fill=red!40, draw] (n2) [below=of n1.west, right] {Node with even longer text} ;
\end{tikzpicture}
\end{document}
aus dem pgf-Handbuch:
16.5.2 Grundlegende Platzierungsoptionen
Obwohl es vollkommen logisch ist, ist es leider oft eher kontraintuitiv, dass Sie den Südanker angeben müssen, um einen Knoten über einem bestimmten Punkt zu platzieren. Aus diesem Grund gibt es einige nützliche Optionen, mit denen Sie die Standardanker intuitiver auswählen können:
/tikz/above
(Standard 0pt)
Macht dasselbe wie anchor=south. Wenn angegeben wird, wird der Knoten zusätzlich um den angegebenen Wert nach oben verschoben.
above \tikz \fill (0,0) circle (2pt) node[above] {above};
above \tikz \fill (0,0) circle (2pt) node[above=2pt] {above};
/tikz/below=<offset>
(Standard 0pt) Ähnlich wie oben.
/tikz/left=<offset>
(Standard 0pt) Ähnlich wie oben.
/tikz/right=<offset>
(Standard 0pt) Ähnlich wie oben.
Antwort2
Implizit below
impliziert anchor=north
(und bei below=of n1
ist die Referenz n1.south
), left
impliziert anchor=east
usw.
Ein Beispiel (blauer Knoten zeigt, dass die Standardreferenz nicht ist n1.center
, hellgrüner Knoten zeigt die gewünschte Positionierung):
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[every node/.style={anchor=west}]
\node[fill=red!40, draw] (n0) at (0,0) {Base node} ;
\node[fill=red!40, draw] (n1) at (0,-2) {Node with longer text} ;
\node[fill=red!40, draw,below=of n1] (n2) {Node with even longer text} ;
\node[fill=blue!40, draw,below=of n1.center] (n2) {Node with even longer text}
\node[fill=lime!40, draw,below=of n1.south west,anchor=north west]
(n2) {Node with even longer text} ;
\end{tikzpicture}
\end{document}