Ich werde die Frage, wie man Nodes positionieren kann, etwas freier interpretieren.
Die kursiven Einträge sind noch nicht gefüllt. Ich werde dies beizeiten noch erledigen.
Übersicht
Wie kann ich Koordinaten spezifizieren?
Es gibt viele verschiedene Arten Koordinaten zu spezifizieren. Am bekanntesten sind dabei die expliziten Koordinaten. Zu jeder expliziten Variante existiert eine implizite, die mit dem dazugehörigen Koordinatensystem (Coordinate System, cs:
) angewendet wird. Die explizite Koordinatenangabe ist (<Name des Koordinatensystem> cs:<Parameter>)
. Dabei sind die <Parameter>
meist in Key-Value-Form, sie müssen es aber nicht.
Bei den klassischen Koordinatensystemen unterscheidet man erstmal zwischen denen im Canvas System und denen im xyz-System.
Der Unterschied zwischen canvas
und xyz
Mit Canvas ist das Papier selbst gemeint. Es gibt zwei Dimensionen: x (nach rechts) und y (nach oben). Das Canvas-Koordinatensystem arbeitet nur mit Längenangaben (pt
, em
, ex
, mm
, cm
, in
usw.). Der Name für die explizite Version ist canvas
. Es existiert ebenfalls eine polare Version (canvas polar
) die schlichterweise eine Radius-Angabe und eine Winkel-Angabe in x- und y-Werte umrechnet. Ein Beispiel aus dem Manual:
\draw (canvas cs: x=0cm, y=2mm) -- (canvas polar cs: radius=2cm, angle=30); % explizit
\draw (0cm, 2mm) -- (30: 2cm); % implizit
Die polare Version unterscheidet übrigens auch noch den x radius
und den y radius
, mit dem man Polarpunkte auf einer Ellipse (und nicht nur einem Kreis) angeben kann. Die implizite Version verwendet dazu and
: (<Winkel>:<x-Radius> and <y-Radius>)
.
Bei dem xyz-Koordinatensystem ist ein Koordinatensystem gemeint, das x-, y- und z-Vektoren auf Basis des Canvas-Systems definiert. Standardmäßig sind das die Vektoren x=(1cm, 0cm), y=(0cm, 1cm), z=(-3.85mm, -3.85mm)
(die auch genauso mit den Optionen x
, y
und z
gesetzt werden können).
Die Benutzung ist ähnlich des Canvas-Systems:
\path[->] (0,0) edge (xyz cs: x=1) edge (xyz cs: y=1) edge (xyz cs: z=1); % explizit
\path[->] (0,0) edge (1, 0) edge (0, 1) edge (0, 0, 1); % implizit
Es existiert ebenfalls eine polare Version (xyz polar
und xy polar
), die genauso wie die Canvas-Version funktioniert (allerdings ohne z-Bezug).
Man kann übrigens Koordinaten wie (1cm, 2)
verwenden. TikZ addiert dann einfach die Vektoren (1cm, 0cm)
und (0, 2)
aus den beiden Systemen zusammen.
Exkurs: Implizite polare Koordinatensystem mit einem Wort als Winkel
Statt eines Winkels kann auch eines der folgenden Wörter als Richtung verwendet werden: up
, down
, left
, right
, north
, south
, east
, west
, north east
, north west
, south east
, south west
. Diese korrespondieren direkt zu den acht Haupt-Kompassrichtungen.
Die Koordinatenangabe (up: 1)
ist also die gleiche wie (90: 1)
, (south west: 1)
die gleihe wie (-135: 1)
.
Absolut oder relativ oder relativ oder sehr relativ3.0.0
Befindet sich kein +
vor einer Koordinate, so ist sie (fast immer, siehe CVS-Version-Option turn
) absolut.
Folgt die Koordinatenangabe allerdings einem oder mehreren Plus-Zeichnen, ist sie relativ:
++
aktualisiert die „letzte Koordinate“.
+
aktualisiert nicht die „letzte Koordinate“.
Mit „letzte Koordinate“ ist hier eben genau die Koordinate gemeint, von der die nächste relative Koordinate berechnet wird. Dies wird an einem Beispiel viel klarer. Die folgenden Pfade zeichnen genau das gleiche Rechteck (das auch anders gezeichnet hätte werden können):
\draw (1.5, 1.5) -- ++(1, 0) -- ++(0, 1) -- ++(-1, 0) -- cycle;
\draw (1.5, 1.5) -- + (1, 0) -- + (1, 1) -- + ( 0, 1) -- cycle;
Im zweiten Fall werden alle Koordinaten von (1.5, 1.5)
aus berechnet, im ersten ist das erst (1.5, 1.5)
, dann (2.5, 1.5)
, dann (2.5, 2.5)
und dann (1.5, 2.5)
. Bei nur einer relativen Koordinate ist es dementsprechend auch irrelevant, welche Variante man verwendet.
Mit der TikZ-Version 3.0.0 wurde eine spezieller Option eingeführt, die es erlaubt, nicht nur Koordinaten relativ zu dem vorherigen Punkt anzugeben, sondern auch zusätzlich einen Winkel zur Tangente an dem vorherigen Punkt auf dem Pfad anzugeben. (Hä?) Diese Option wird wie eine Koordinaten-Transformation angegeben und heißt schlicht turn
3.0.0. Ein Beispiel:
\draw (0,0) -- (1,1) -- ([turn]45:1) -- ([turn] 90:1);
zeichnet im Prinzip das Gleiche wie
\draw (0,0) -- (1,1) -- ++(45+45:1) -- ++(90+90:1);
Es sei angemerkt, das auf ähnlicher Weise dieser Pfad auch mit der turtle
-Library erreicht werden kann:
\draw (0,0) [turtle={right=45,fd=sqrt 2,left=45,fd,left,fd}];
Das Node-Koordinatensystem
Nodes (sowie coordinate
s, die im Kern auch nur Nodes sind) sind etwas Spezielles. Sie werden immer absolut referenziert. Das heißt, wenn jemand
\coordinate (meine Koordinate) at (2, 1);
definiert und diese dann in einem Pfad verwendet, wird immer die gleiche Position auf dem Papier ausgewählt, egal wie die Vektoren x
und y
gesetzt sind oder welche Transformationen aktiviert sind. Die folgenden Pfade referenzieren also immer den gleichen Punkt:
\path (meine Koordinate);
\path[shift=(30:1), rotate=60, scale=2, xslant=3, x=(30:1.5cm)] (meine Koordinate);
Das ändert sich allerdings, wenn die Transformation direkt an der Koordinate vorgenommen werden:
\path ([shift=(30:1), rotate=60, scale=2, xslant=3] meine Koordinate);
Die Einstellungen der x-, y- und z-Vektoren haben aber darauf immer noch keinen Einfluss.
Was das mit den ganzen Transformationen allerdings auf sich hat, verdient seinen eigenen Abschnitt.
Der Name des Nodes-Koordinatensystem ist node
und hat die Optionen name
, angle
und anchor
, wobe angle
und anchor
gleichbedeutend sind. Man kann also sowohl anchor=60
als auch angle=north west
verwenden.
Die explizite Version sieht einfacher nur den Node-Namen vor, eventuell gefolgt von einem Anchor/Angle, der mit einem .
vom Node-Namen getrennt wird.
Wird eine Node ohne Anchor/Angle spezifiert, wird zwar der .center
-Anchor als aktuelle Koordinate vorgemerkt (dies ist zum Beispiel relevant für relative Koordinaten), oftmals wird aber dann automatisch ein Punkt auf dem Border der Node verwendet, wenn das der Path-Operator vorsieht (alle außer arc
?).
\path (node cs: name=node A) -- (node cs: name=node B); % explizit
\path (node A) -- (node B); % implizit
Die anderen Koordinatensysteme
Es gibt noch einige andere Koordinatensysteme. Eine etwas genauere Erklärung verdient das perpendicular
-Koordinatensystem, das die Keys horizontal line through
und vertical line through
kennt. Die implizite Version benutzt die Zeichenfolge |-
und -|
, die man schon bereits von den Path-Operatoren kennt. (<p1>|-<p2>)
(oder (<p1> |- <p2>)
) auch ist das Gleiche wie (perpendicular cs: vertical line through={(<p1>)}, horizontal line through={(<p2>)})
.
Das „horizontal“ und „vertikal“ ist ebenso abhängig von den Transformationen xslant
, yslant
sowie rotate
. (Sprich die horizontale Achse muss nicht orthogonal zur vertikalen sein noch sind beide immer senkrecht zum Papier.)
Es gibt ferner noch die Koordinatensysteme tangent
(das die calc
-Library benötigt) und barycentric
, die keine implizite Version besitzen. Ihre Verwendung ist dem PGF/TikZ-Manual zu entnehmen.
Außerdem gibt es auch noch die undokumentierten (und zumindest teilweise fehlerhaften) Koordinatensysteme xyz cylindrical
und xyz spherical
, siehe für letzteren auch die Frage „spherical coordinates in tikz 3d“ auf TeX.sx.
Die calc
-Library
verdient ihre eigene Frage und Antwort (und kann auch sehr kompakt im Manual studiert werden).
Was hat es mit den Transformationen auf sich?
Wie kann ich Nodes an diesen Koordinaten positionieren?
Mit dem Path-Operator node
(und coordinate
) können Nodes an Koordinaten platziert werden.
Dafür gibt es im Prinzip zwei Möglichkeiten: mit at
und ohne at
.
Wird kein at
verwendet, wird die aktuelle Position des Pfades verwendet. (Das ist auch der Grund, warum \node {Node};
am Ursprung platziert ist. \node
expandiert zu \path node
und hier wird implizit (0,0)
verwendet.)
Wird at
verwendet (das es übrigens auch als Key gibt), wird diese Position verwendet. Es kann hier allerdings die vorherige Position auf dem Pfad verwendet werden wie unter dem Abschnitt über absolute und relative Koordinaten bereits diskutiert. Ein Beispiel:
\tikz[gridded]\draw (0,0) -- (1,1) -- ++(45+45:1) node {x} -- ++ (180:1);
\tikz[gridded]\draw (0,0) -- (1,1) node at ++(45+45:1) {x} -- ++ (180:1);
\tikz[gridded]\draw (0,0) -- (1,1) node at ([turn]45:1) {x} -- ([turn] 90:1); % 3.0.0.
Selbstverständlich ist der eigentliche Pfad in allen drei Varianten unterschiedlich (aber nicht unterbrochen).
Normalerweise werden Nodes über dem Pfad gezeichnet, was mit dem Key behind path
3.0.0 geändert werden. Das Gegenteilige kann mit in front of path
3.0.0 erreicht werden.
Wie kann ich Nodes relativ zu anderen positionieren?
Wie kann ich Nodes entlang von Pfaden positionieren?
Hast du schon mal in die Anleitung zum Paket geschaut? Diese enthält ein umfangreiches Tutorial. Dort wird das alles erklärt. Ich habe leider gerade keine Zeit das zu erklären.
texdoc pgf
Meinst Du das hier: http://paws.wcu.edu/tsfoguel/tikzpgfmanual.pdf ?!
@mrbela Man kann
texdoc pgf
auf der Kommandozeile des eigenen Rechners ausführen, um die Dokumentation zu erhalten. Alternativ als Internet-Adresse: http://texdoc.net/pkg/pgf - das geht allgemein für Pakete, auch mit Synonymen wie http://texdoc.net/pkg/tikz .Ich könnte meine Antwort auf TeX.sx, die etwas mehr umfasst als nur kartesische und polare sowie absolute und relative, übersetzen und ergänzen, falls es gewünscht ist.
So weit hat die Frage hier nämlich weniger mit Nodes an sich zu tun, sondern eher damit, wie man Koordinaten spezifizieren kann.
PS: Für meine Installation (MikTeX 2.0 auf Win7) hat es sich als hilfreich herausgestellt, wenn ich bei
texdoc
--view
verwende sowieHier also:
texdoc --view pgfmanual
.@Qrrbrbirlbel Fände ich gut! Die Frage kann man noch zu Koordinaten umformulieren.