Ich würde gerne einen gewurzelten Baum von unten her in mehreren Schritten aufbauen. Also im ersten Bild nur mit den Knoten anfangen und dann schrittweise jeweils zwei Knoten verbinden, bis zu einem Baum. Wie mache ich das am besten mit Tikz?

Nicht für beamer sondern für ein ganz normales Dokument (Bachelorarbeit).

Hier mal ein Beispiel wie ich mir das vorgestellt hab:

http://texwelt.de/wissen/upfiles/1_3.png

http://texwelt.de/wissen/upfiles/2_4.png

alt text

\begin{tikzpicture}[scale=0.9,level/.style={sibling distance=60mm/#1}] \node[circle,draw] (b){$b$} child {node[circle,draw] (a) {$a$} child {node[circle,draw] (i) {$i$}} child {node[circle,draw] (j) {$j$}}} child { child {node[circle,draw] (k) {$k$}}}; \end{tikzpicture}

gefragt 29 Apr '14, 00:19

BorrNar's gravatar image

BorrNar
77236
Akzeptiert-Rate: 0%

bearbeitet 01 Mai '14, 11:46

In beamer mit den Overlays <+->.

(29 Apr '14, 00:55) Henri

Ja ok, mit dem Minibsp. wird das schonmal klarer. Und was ist jetzt genau das Problem? Ich hatte mich gewundert, was das mit dem "von unten her in mehreren Schritten aufbauen" bedeutet (daher meine kuriose AW). Möglicherweise geht das irgendwie schlau, aber falls das zwingend sein muß, wurde ich zur Not den ganzen Kram in eine TikZ-matrix stecken und nur noch Verbindungslinien zeichnen.

(01 Mai '14, 11:53) cis

Das lässt sich über styles verwirklichen. Der Stil schrittweise definiert dabei für jede Ebene des Baumes einen eigenen Stil, wobei diese jeweils den Wert der höheren Ebene übernehmen. Der für die oberste Ebene sorgt mit opacity=0 dafür, dass zunächst gar nichts zu sehen ist. Wird nun der Stil für eine Ebene über append style mit der Option opacity=1 ergänzt, dann ist diese Ebene und alle darunter liegenden zu sehen. Beachten muss man lediglich noch die fehlende Node zwischen b und k, d.h. die Verbindung zwischen diesen beiden darf erst sichtbar sein, wenn die Ebene mit der Node b gezeichnet wird.

Open in writeLaTeX
\documentclass[parskip=half]{scrartcl}
\usepackage{tikz}

\tikzset{
  schrittweise/.style={
    l1/.style={opacity=0},l2/.style={l1},l3/.style={l2},
    level 1/.style={every child/.style={edge from parent/.append style={l1}}},
    level 2/.style={every child/.style={edge from parent/.append style={l2}}},
    level 3/.style={every child/.style={edge from parent/.append style={l3}}},
    fehlt/.style={edge from parent/.style={draw,opacity=0,##1}}
  }
}

\newcommand\baum[1]{%
  \begin{tikzpicture}[
    scale=0.9,
    level/.style={sibling distance=60mm/##1},
    every node/.style={circle,draw},
    schrittweise,
    l#1/.append style={opacity=1}
  ]
  \node[l1] (b){$b$}
    child {node[l2] (a) {$a$}
      child {node[l3] (i) {$i$}}
      child {node[l3] (j) {$j$}}}
    child {
      child[fehlt=l1] {node[l3] (k) {$k$}}};
  \end{tikzpicture}%
}
\begin{document}

\fbox{\baum{3}}

\fbox{\baum{2}}

\fbox{\baum{1}}
\end{document}

alt text

Permanenter link

beantwortet 01 Mai '14, 18:11

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

bearbeitet 02 Mai '14, 12:27

Aha, das könnte man so in einer Beamerpräsentation folienweise verwenden; jetzt verstehe ich auch den 1. Kommentar ;)

(02 Mai '14, 00:30) cis

@cis beamer hat für so etwas eine eigene Syntax. Da wäre die Umsetzung einfacher.

(02 Mai '14, 00:34) esdd

Sieht schonmal gut aus. Ich hab jetzt leider das Problem, dass alle Bäume diesen Style verwenden und nicht nur die paar, bei denen ich es brauche.

(02 Mai '14, 12:02) BorrNar

@BorrNar Ich habe den Code jetzt so geändert, dass er sich nicht mehr auf andere Bäume auswirken sollte.

(02 Mai '14, 12:29) esdd
Open in writeLaTeX
\documentclass[margin=5mm]{standalone}
\usepackage[ngerman]{babel}
\usepackage{tikz}
%\usetikzlibrary{trees}
\usepackage{amsmath, amssymb}

%===========
\begin{document}
%===========
\begin{tikzpicture}
[every node/.style={draw, circle},
%Optional
nodes={execute at begin node=$, execute at end node=$},%all nodes=''math''
font=\footnotesize, 
grow=up,  %Zeichenrichtung
%level 1/.style={sibling distance=9cm},
level 2/.style={sibling distance=2cm}, 
level distance=1cm]

\node[fill=red!40](START) {*} %nodes benennen, so spätere Beschriftung einfacher
child{ node (A) {A}
        child {node (B) {B}}
        child {node (C) {C}}
        child {node (D)[fill=orange] {D}
          child {node (E1) {E_1}}
          child {node[dashed] (E2) {E_2}}
}
};

%Beschriftung
\path (START) -- (A) node [draw=none, midway, right] {\text{Hier geht's los!}};
\path (B) -- (C) node [draw=none, midway] {\text{Text}};
\path (START) -- (E2) node [draw=none, near end, left=2em] {\tiny \text{obwohl kein Ast}};

\draw[->, >=latex, very thick] (D) -- (A) node [draw=none, left=2em] {\text{Hier mal  anders}};
\end{tikzpicture}
%===========
\end{document}
%===========
Permanenter link

beantwortet 29 Apr '14, 04:18

cis's gravatar image

cis
9.5k93459491
Akzeptiert-Rate: 29%

bearbeitet 29 Apr '14, 04:20

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
×4

gestellte Frage: 29 Apr '14, 00:19

Frage wurde gesehen: 14,161 Mal

zuletzt geändert: 02 Mai '14, 12:29