TikZ: Nodes relativ mit anchor bzw. Winkel positionieren

Tabellen und Grafiken erstellen und anordnen


Benutzeravatar
cgnieder
Forum-Meister
Forum-Meister
Beiträge: 730
Registriert: Fr 22. Okt 2010, 18:37
Wohnort: Herrenberg
Kontaktdaten:

TikZ: Nodes relativ mit anchor bzw. Winkel positionieren

Beitrag von cgnieder »

Hallo,
folgendes Beispiel demonstriert mein Problem:
\documentclass{scrartcl}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
 \node[draw](A){AAAAA};
 \node[draw,anchor=south west] at (A.north east) {BBBBB};
\end{tikzpicture}

\begin{tikzpicture}
 \node[draw](A){AAAAA};
 \node[draw,anchor=225] at (A.45) (B) {BBBBB};
 % center wird verwendet:
 %\fill[red] (A.center) circle (1pt);
 %\fill[red] (B.center) circle (1pt);
 %\draw[red] (A.center) -- (B.center);
\end{tikzpicture}
\end{document}
Im ersten tikzpicture bestimmt TikZ mithilfe der anchor eine Stelle an der border der nodes zur Positionierung.
Im zweiten tikzpicture kann TikZ offenbar nicht die entsprechende Stelle an der border der nodes bestimmen und verwendet daher den "center"-anchor als Basis zur Berechnung.
Meine Frage nun: ist es möglich mit Angabe der Winkel (dieser Punkt ist wichtig) das gleiche Verhalten zu bekommen wie mit Angabe der Anchor-Namen?

Vielen Dank im Voraus für alle Ideen.
Clemens
Paketauthor

Benutzeravatar
bloodworks
Moderator
Moderator
Beiträge: 1425
Registriert: Mo 19. Jan 2009, 10:52
Wohnort: /dev/null

Beitrag von bloodworks »

Hallo ich verstehe nicht so ganz. Der Mechanismus mit dem TikZ die South West usw. Stellen berechnet eigentlich das ja schon macht. Der Winkel, der das abbildet, ist abhängig vom der Größe des Rechtecks. Den müsstest du ja immer neu berechnen.

Bei Kreisen geht das natürlich verlässlich:
 \node[draw, circle](A){AAAAA}; 
 \node[draw,anchor=45, circle] at (A.225) (B) {BBBBB}; 
Ich denke mal es hilft, die Sektion "59.5 Declaring New Shapes" S.479 im pgf manual zu lesen, dann weißt du etwa wie die anchors definiert sind.

Eine Idee dich ich hätte, wäre eine Linie zwischen center und dem gewünschten anchor zu legen und den Winkel dann zu berechnen. Das wär aber irgendwie das Pferd von hinten aufgezäumt. Für was brauchst du das denn?
[1] Nützliche Webdokumente für Anfänger und Fortgeschrittene
[2]Minimalbeispiel | [3]FAQ
[4]Regelwerk | [5] Knigge
Wenn nicht anderst angegeben ist mein System: texlive 2012, pdflatex, x86-64, Snow Leopard utd.
Angehöriger der Liga zur Verwendung von texdoc
texdoc mathmode koma l2picfaq l2tabu lshort-en
Achtung: Aufforderungen ein Minimalbeispiel oder mehr Erklärungen zu einer Frage zu liefern sind keine persönlichen Angriffe. Sie dienen viel mehr dazu die Kommunikation zwischen Fragendem und potentiellen Helfern zu erleichtern und zu präzisieren.


Benutzeravatar
cgnieder
Forum-Meister
Forum-Meister
Beiträge: 730
Registriert: Fr 22. Okt 2010, 18:37
Wohnort: Herrenberg
Kontaktdaten:

Beitrag von cgnieder »

Es kam mir auch schon, dass das natürlich ohne Probleme funktioniert, wenn man Kreise oder Quadrate nimmt.

Danke für den Hinweis mit den "new shapes". Den Abschnitt werde ich mir mal genauer durchlesen.

Die Winkel-Berechnung mit Deiner Idee leider nicht funktionieren, da zum Zeitpunkt des Setzens der anchor nicht bekannt ist. Das ist gerade der Knackpunkt: der Winkel ist bekannt und damit soll eine Positionierung an der Border erfolgen, so dass 45°=north east und entsprechend.

Vielleicht müsste man abhängig von den Maßen der Node eine Art Verzerrung berechnen...

Ich versuche bei der Programmierung von "myChemistry" gerade einen neuen Ansatz der relativen Positionierung.
Clemens
Paketauthor

Benutzeravatar
cgnieder
Forum-Meister
Forum-Meister
Beiträge: 730
Registriert: Fr 22. Okt 2010, 18:37
Wohnort: Herrenberg
Kontaktdaten:

Beitrag von cgnieder »

Ich werde wohl tatsächlich einmal ausprobieren, wie es aussieht, wenn man den Winkel umrechnet.
Wenn das optisch nix taugt, werde ich das Verhalten wohl einfach hinnehmen.

Ich setze den Status auf beantwortet. Falls es jemanden interessiert, werde ich meine Umrechnung noch nachliefern.

Danke und Gruß,
Clemens
Clemens
Paketauthor

Antworten