Ich habe eine Frage bzgl der Positionierung von nodes:

Die Positionierung der Punkte kann man, ähnlich wie ein Koordinatensystem (also mit x und y Werten) handhaben:

\draw (1 * \x, 0 * \y) node (leer) [draw=green, label=90:5] {$\emptyset$};
\draw (0 * \x,-1 * \y) node (a) [draw=green, label=90:4] {a};

In diesem Beispiel auf TeXample.net wird die Positionierung allerdings mit Hilfe einer (<...>:<...>) Positionierung gemacht:

\draw (0,0) node (1234) [label=left:$\LD 1\ 2\ 3\ 4\RD$] {}
    -- ++(240:1.5cm) node (3214) [label=right:$\LD 3\ 2\ 1\ 4\RD$] {}
    -- ++(300:1.5cm) node (2314) [label=left:$\LD 2\ 3\ 1\ 4\RD$] {}
    -- ++(0:1.5cm) node (1324) [label=right:$\LD 1\ 3\ 2\ 4\RD$] {}
    -- ++(60:1.5cm) node (3124) [label=left:$\LD 3\ 1\ 2\ 4\RD$] {}
    -- ++(120:1.5cm) node (2134) [label=right:$\LD 2\ 1\ 3\ 4\RD$] {}
    -- (1234);

Letztere verstehe ich leider Gottes nicht.. :/ Und leider finde ich auch nichts entsprechendes in Google; wahrscheinlich weil ich nicht weiß, wie man das genau nennt...

P.S.: Hat das "++" vor der Klammer etwas mit dem "(<...>:<...>)" zu tun oder hat das eine davon losgelöste Bedeutung?

gefragt 24 Okt '13, 18:51

mrbela's gravatar image

mrbela
41223
Akzeptiert-Rate: 0%

bearbeitet 24 Okt '13, 20:02

cgnieder's gravatar image

cgnieder
22.1k253463

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

(24 Okt '13, 19:16) Johannes
(24 Okt '13, 19:27) mrbela

@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 .

(24 Okt '13, 19:36) stefan ♦♦

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.

(24 Okt '13, 22:32) Qrrbrbirlbel

PS: Für meine Installation (MikTeX 2.0 auf Win7) hat es sich als hilfreich herausgestellt, wenn ich bei texdoc

  1. die Option --view verwende sowie
  2. den Namen der PDF-Datei angebe, der eben nichts zwangsläufig mit dem Paketnamen übereinstimmen muss.

Hier also: texdoc --view pgfmanual.

(24 Okt '13, 22:32) Qrrbrbirlbel

@Qrrbrbirlbel Fände ich gut! Die Frage kann man noch zu Koordinaten umformulieren.

(24 Okt '13, 22:45) stefan ♦♦
Ergebnis 5 von 6 show 1 more comments

  • Durch Komma getrennt gibt man normale kartesische Koordinaten an, also in der Form (x,y) mit x und y als TeX-Längen.

  • Mit Doppelpunkt getrennt kann Polarkoordinaten angeben, also beispielsweise (60:2cm), das bedeutet 2cm mit einem Winkel von 60 Grad.

Mit + und ++ kann man relative Angaben zur Zeichenposition machen:

  • Die Syntax mit ++ ist für relative Angaben mit Bezug auf den letzten Punkt: (60:2cm) heißt dann, vom letzten Punkt aus gesehen mit Abstand 2 cm und Winkel 60 Grad weiterzeichnen.

  • Nimmt man nur ein +, wird der aktuelle Bezugspunkt nicht verändert, während bei ++ der Bezugspunkt mit wandert.

Permanenter link

beantwortet 24 Okt '13, 19:34

stefan's gravatar image

stefan ♦♦
18.3k163148
Akzeptiert-Rate: 50%

bearbeitet 24 Okt '13, 19:35

@mrbela Ja, beispielsweise kann man die Knoten als Matrix setzen. Oder man zeichnet sie kurzgefasst in \foreach-Schleife(n). Ich kann gern, wenn ich nachher Zeit habe, den Kommentar in eine Frage umwandeln und einen Vorschlag posten. Wenn mir nicht einer zuvorkommt. ;-)

(24 Okt '13, 21:11) stefan ♦♦

@mrbela Ich habe die Folgefrage aus dem Kommentar in eine separate Frage umgewandelt: Wie kann ich mit TikZ einen Graphen zeichnen?

(24 Okt '13, 21:40) stefan ♦♦

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 turn3.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 coordinates, 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).

alt textalt textalt text

Normalerweise werden Nodes über dem Pfad gezeichnet, was mit dem Key behind path3.0.0 geändert werden. Das Gegenteilige kann mit in front of path3.0.0 erreicht werden.

Wie kann ich Nodes relativ zu anderen positionieren?

Wie kann ich Nodes entlang von Pfaden positionieren?

Permanenter link

beantwortet 26 Okt '13, 03:10

Qrrbrbirlbel's gravatar image

Qrrbrbirlbel
2.9k3815
Akzeptiert-Rate: 53%

bearbeitet 14 Dez '13, 02:12

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×730
×76
×41

gestellte Frage: 24 Okt '13, 18:51

Frage wurde gesehen: 34,296 Mal

zuletzt geändert: 14 Dez '13, 02:12