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 28 Apr '14, 18:19

BorrNar's gravatar image

BorrNar
676
Akzeptiert: 100%

bearbeitet 01 Mai '14, 05:46

In beamer mit den Overlays <+->.

(28 Apr '14, 18: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, 05: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, 12:11

esdd's gravatar image

esdd
14.2k53251

bearbeitet 02 Mai '14, 06:27

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

(01 Mai '14, 18:30) cis

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

(01 Mai '14, 18: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, 06: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, 06: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 28 Apr '14, 22:18

cis's gravatar image

cis
5.4k860167

bearbeitet 28 Apr '14, 22:20

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×492
×4

Frage gestellt: 28 Apr '14, 18:19

Frage wurde angeschaut: 2,287 Mal

Zuletzt aktualisiert: 02 Mai '14, 06:29