PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mit Tikz Blockhierarchie basteln



Poseidonius
12-10-2009, 09:14
Hallo zusammen,

ich möchte gern eine Struktur wie diese



------------------------------------------
| Bla1 | bla2 |
------------------------------------------
| tralla |
------------------------------------------


mit tikz aus Rechtecken zusammenbauen. Bisher war das bei mir eine blödsinnige Anpassung der Verschiebungsparameter, z.B. +(1cm,-0.5cm) - "na, noch ein Stückchen nach links" - gemacht.

Wie muss ich also meinen Code ändern, um zum Beispiel Bla1 passend an die nordwestliche Ecke von tralla zu kleben und bla2 entsprechend symetrisch zu positionieren. Das ganze sollte sich dann möglichst dynamisch an veränderte Rechteckgrößen anpassen ...




\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{shapes,arrows,shadows}

\begin{document}

\tikzstyle{sensor}=[draw, minimum width= 6em,text centered]
\tikzstyle{fusion} = [draw, minimum width= 12em, text centered]

\begin{tikzpicture}
\node (fusion) [fusion] {tralla};
\path (fusion.north)+(-3em,0.7em) node (sensorNode1) [sensor]{bla1};
\path (fusion.north)+(+3em,0.7em) node (sensorNode1) [sensor]{bla2};
\end{tikzpicture}

\end{document}



Tausend Dank

Poseidonius

alexraasch
12-10-2009, 14:38
Zum Beispiel so:


\node (fusion) [fusion,anchor=north west] at (blah1.south west);

Die anderen Punkte heißen entsprechend north/south east, west, north, east, south etc.

Poseidonius
13-10-2009, 12:53
Hallo alexraasch,

vielen Dank für Deine Hilfe!
Wenn ich allerdings den Code so wie er unten folgt ausführe, ergibt sich ein unschöner Versatz um die Breite der Linienstärke. Gut sichtbar ist es an der senkrechten Kante von bla2 und tralla, ein bisschen sehr pingelig ... ich weiß. Kann ich die noch irgendwie korregieren?

Grüße aus Magdeburg

Poseidonius



\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{shapes,arrows,shadows}

\begin{document}

\tikzstyle{sensor}=[draw, minimum width= 6em,text centered]
\tikzstyle{fusion} = [draw, minimum width= 12em, text centered]

\begin{tikzpicture}
\node (sensor) [sensor] {bla1};
\node (fusion) [fusion,anchor=north west] at (sensor.south west) {tralla};
\node (fusion) [sensor,anchor=north west] at (sensor.north east) {bla2};
\end{tikzpicture}

\end{document}

borose
13-10-2009, 13:35
Wie wärs damit?

(Linienbreite per \linienbreite ändern)



\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{shapes,arrows,shadows, positioning}

\begin{document}

\def\linienbreite{1 pt}

\tikzstyle{sensor}=[draw, minimum width= 6em,text centered, line width=\linienbreite]
\tikzstyle{fusion} = [draw, minimum width= 12em, text centered,line width=\linienbreite]

\begin{tikzpicture}
\node (sensor) [sensor] {bla1};

\node (fusion)
[fusion,
below= - \linienbreite of sensor.south west, anchor=north west] {tralla};

\node (fusion) [sensor,right = -\linienbreite of sensor.north east, anchor=north west] {bla2};
\end{tikzpicture}



Grüße!

esdd
13-10-2009, 15:40
Hallo,

es genügt outer sep=0pt zu setzen.


\documentclass{article}

\usepackage{tikz}

\begin{document}

\tikzstyle{block}=[draw, minimum width= #1,text centered,outer sep=0pt]

\begin{tikzpicture}
\node (fusion)[block=12em]{tralla};
\node [block=6em,anchor=south west] at (fusion.north west) {bla1};
\node [block=6em,anchor=south east] at (fusion.north east) {bla2};
\end{tikzpicture}

\end{document}

Poseidonius
28-10-2009, 14:45
Hallo zusammen,

entschuldigt bitte, ich hatte noch keine Gelegenheit für Eure Hilfe zu danke !!! Die Grafiken sehen super aus und der Tag, an dem ich dank esdd gelernt habe, dass man in tikzstyles Variablen setzen kann, hat sich gelohnt.

Grüße

Poseidonius