PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : tikz objekte anordnen



strolch
20-05-2011, 15:04
hallo zusammen,

ich habe da ein problem beim anordnen von objekten. gegeben ist eine liste unbestimmter laenge von knoten, und die wuerde ich gerne untereinander an den rand eines uebergeordneten recheck zeichen. nur leider scheitere ich bereits am untereinander anordnen der objekte.
fuer das gleichmaessige verteilen von objekten habe ich eine matrix verwendet, wobei das bestimmt auch einfacher geht, da ich alle objekte nur in einer spalte untereinander haben moechte.

mein derzeitiger stand ist dieses


\documentclass{minimal}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
\node (A) [rectangle] {a};
\node (B) [circle] {b};
\node (C) [rectangle] {c};
\node (D) [circle] {d};

%\matrix[nodes={draw, fill=black!20}, row sep=5mm] {
% \foreach \c in {A,B,C,D} { \node {\c}; \\ };
%};

\def\myList{A,B,C,D};
\matrix[nodes={draw, fill=black!20}, row sep=5mm] {
\foreach \c in {\myList} { \node {\c}; \\ };
};

\end{tikzpicture}

\end{document}

nicht lauffähiges minimalbeispiel, das mit einer "Missing }"-fehlermeldung aussteigt.

nachtrag:
dieses beispiel kommt ohne die matrix aus und laeuft wenigstens ... tut aber nicht was es soll ;-)
alle objekte werden nur uebereinander gezeichnet.


\documentclass{minimal}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
\node (A) [rectangle] {a};
\node (B) [circle] {b};
\node (C) [rectangle] {c};
\node (D) [circle] {d};

%\def\myList{A,B,C,D};

\coordinate (old) at (0,0);
\foreach \i in {A,B,C,D} {
\node [black!20] at (old) {\i};
\coordinate (new) at (old);
\coordinate (old) at (new.south);
};
\end{tikzpicture}

\end{document}


ich habe in diesem beispiel also noch mindestens zwei probleme:
- in meiner liste, wenn ich die myList definition in die foreach einsetze, scheint es nur einen eintrag zu geben. scheinbar die zeichenkette "A,B,C,D" und nicht einzelne knoten
- wenn ich die liste wie im aktuellen beispiel direkt in die foreach einsetze erhalte ich die buchstaben A, B, C und D uebereinander geschrieben als ausgabe. also auch so habe ich offensichtlich nicht die erhoffte liste von knoten und somit werden die objekte ohne ihrer geometrischen parametrisierung (rectangle oder circle) dargestellt

vielen dank im voraus
strolch

esdd
20-05-2011, 21:19
Hallo,

schau dir unbedingt im pgfmanual noch einmal die Definition von Noden und den Unterschied von Koordinaten und Noden an.
Mit

\node (A) [rectangle] {a};
definierst du eine Node mit dem Bezeichner A und dem Inhalt a an der Stelle (0,0). Der Inhalt der Node wird auch sofort ausgegeben. Mit obigem Code steht also in deinem pdf schon der Buchstabe a. Da B, C und D auch an der Stelle (0,0) definiert sind, werden b, c und d einfach über das a geschrieben.

Eine Koordinate hat keine Ausdehnung. Wenn new eine Koordinate ist, dann bezeichnet new.south genau den gleichen Punkt.

Ganz klar ist mir nicht, was du am Ende machen willst und es gibt viele Möglichkeiten Noden untereinander zu schreiben. Hier sind mal ausgehend von deinen Beispielen zwei Vorschläge:

\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}

\begin{tikzpicture}
\matrix[matrix of nodes,nodes={draw, fill=black!20}, row sep=5mm](m){%
a\\
|[circle]|b\\
c\\
|[circle]|d\\
};
\end{tikzpicture}

\vspace{2cm}
\begin{tikzpicture}
\coordinate (old) at (0,0);
\foreach \i/\j in {A/,B/circle,C/,D/circle} {
\node [\j,fill=black!20,anchor=north] (\i)at (old) {\i};
\coordinate (old) at (\i.south);
};
\end{tikzpicture}

\end{document}
Gruß
Elke

strolch
23-05-2011, 14:35
hallo und danke!

ja, irgendwie komme ich mit koordinaten und nodes noch durcheinander ...

zu deinen beispielen:
ueber eine matrix ein paar objekte zeichen lassen habe ich auch geschafft ;-)
nee, das problem hierbei war, das die anzahl der objekte nicht im voraus bekannt ist und ich somit einen schleife innerhalb der matrix benoetige - und das habe ich nicht hin bekommen.
aber wie dein zweites beispiel zeigt, geht es auch oben eine matrix und darauf aufbauend habe ich mir nun auch was passendes basteln koennen. danke nochmals.

strolch