Hallo,

ich habe ein Problem bei der Erstellung eines Baumdiagramms mit tikz. Der Baum ist soweit in Ordnung, aber wenn ich die Pfeile darin beschriften will zB mit: edge from parent node[left,draw=none] {$p_n$}, dann verschiebt es mir alles. Wie kann ich das vermeiden?

Hier mal der Baum (er soll später insgesamt zehn Level bekommen):

Open in writeLaTeX
\documentclass{report}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{pgf}
\usepackage{tikz}
\usetikzlibrary{arrows,automata,snakes}
\begin{document}
\begin{figure}
\begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=2.8cm,
               semithick]
\tikzstyle{every node}=[fill=white,draw=black,rectangle,text=black]
\node {0:0}
    child{ node{1:0}
        child{node{2:0}}
        child{node{1:1}}}
    child{ node{0:1} 
       child{node {1:1}}
       child {node{0:2}}}
        ;
\end{tikzpicture}
\end{figure}
\end{document}

Viele Grüße

gefragt 16 Aug '14, 13:58

lhop's gravatar image

lhop
3112
Akzeptiert: 0%

bearbeitet 16 Aug '14, 15:39

Clemens's gravatar image

Clemens
19.0k113060


Ich würde die nodes benennen und dann zur Beschriftung Pfade setzen:

alt text

Open in writeLaTeX
\documentclass{report}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{pgf}
\usepackage{tikz}
\usetikzlibrary{arrows,automata,snakes}

\usepackage{lipsum}
\pagecolor{lightgray!50!orange}
\begin{document}
\lipsum[66]
\begin{figure}[h]
\begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=2.8cm,
               semithick]
\tikzstyle{every node}=[fill=white,draw=black,rectangle,text=black]
\node (S) {0:0}
    child{ node (A) {1:0}
        child{node (B) {2:0}}
        child{node (C) {1:1}}}
    child{ node (D) {0:1} 
       child{node (E) {1:1}}
       child {node (F) {0:2}}}
        ;

\path  (A) -- (B) node[draw=none, midway, left=4pt]{PFAD};
\path  (D) -- (S) node[draw=none, midway, right=4pt]{Pfad};
\end{tikzpicture}
\end{figure}
\lipsum[66]
\end{document}
Permanenter link

beantwortet 16 Aug '14, 14:54

cis's gravatar image

cis
5.4k860169

Wie kommt's eigentlich, dass Du bei allen Deinen Beispielen \pagecolor einsetzt?

(16 Aug '14, 16:02) Clemens

Ja weißer Adler (Bilder) auf weißem Grund ist immer so eine Sache. Ich könnte jetzt ein dezentes Hellgrau nehmen, aber wenn ich schon diese Option bemühen muß, kann ich auch gleich irgendwas Protziges nehmen. Natürlich steht es dem Nutzer frei, diese pagecolor-Option nach Belieben zu ändern oder auch zu löschen ;)

(16 Aug '14, 16:14) cis

Cool danke, so funktionierts gut!

(16 Aug '14, 16:17) lhop

@lhop ich habe Deine »Antwort« (=Lösung der Frage) mal in einen Kommentar zu @cis Antwort umgewandelt. Die TeXwelt is kein Forum im eigentlichen Sinn und das Antwortfeld sollte Lösungen der Fragen vorbehalten bleiben :)

(16 Aug '14, 16:19) Clemens

Ah ok, wird nicht wieder vorkommen ;)

(16 Aug '14, 17:14) lhop
1

@cis Wenn Du dem root Node den Namen S gibst, dann braucht Du die child Nodes eigentlich nicht mehr extra zu benennen. Wenn Du bei diesen keine eigenen Namen angibst, werden sie automatisch benannt: S-1 statt Deinem A, S-1-1 statt Deinem B und S-2 statt Deinem D.

(16 Aug '14, 18:53) esdd
Ergebnis 5 von 6 Alle anzeigen

Vorschlag mit edge from parent node

Zu beachten ist dabei eigentlich nur, dass diese Pfadoperation immer am Ende des child Pfades stehen muss, also direkt vor dessen schließender Klammer und damit nach dessen untergeordneten childs

Open in writeLaTeX
child{ 
  node{<text>}
  child{...}
  ...
  edge from parent node{<edge node text>}
}

alt text

Code:

Open in writeLaTeX
\documentclass{report}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{tikz}
\usetikzlibrary{arrows}
\begin{document}
\begin{figure}
\begin{tikzpicture}[
    ->,>=stealth',shorten >=1pt,
    node distance=2.8cm,
    every node/.style={fill=white,draw},% alle zeichnen und weiß füllen
    edge from parent/.append style={ % außer edge nodes
      every node/.append style={draw=none,fill=none}
    }
  ]
  \node[draw] {0:0}
    child{ 
      node{1:0}
      child{
        node{2:0}
        edge from parent node[left]{PFAD}
      }
      child{node{1:1}}
      edge from parent node[left] {$p_n$}
    }
    child{
       node{0:1} 
       child{node {1:1}}
       child {node{0:2}}
       edge from parent node[right]{Pfad}
    }
  ;
  \end{tikzpicture}
\end{figure}
\end{document}
Permanenter link

beantwortet 16 Aug '14, 16:32

esdd's gravatar image

esdd
14.2k53251

bearbeitet 16 Aug '14, 19:44

graph als Alternative

Ab pgf/TikZ Version 3.0 kann man Bäume auch als Graphen zeichnen. Der folgende Code muss dann aber mit LuaLaTeX kompiliert werden:

Open in writeLaTeX
\documentclass[tikz]{standalone}
\usetikzlibrary{graphdrawing, graphs,arrows,quotes,babel}
\usegdlibrary{trees}

\begin{document}

\tikz[>=stealth',shorten >=1pt,nodes={fill=white,draw}]
  \graph[
    tree layout,
    minimum number of children=2,
    level distance=2cm,
    sibling distance=2cm,
    edge quotes={draw=none,auto}
    ]{
    0:0->{
      1:0[>"$p_n$" ']->2:0[>"PFAD" ']->3:0->4:0,
      0:1[>"Pfad"]->{
        1:1->2:1->3:1,
        0:2->{
          1:2->2:2,
          0:3->{1:3,0:4}
        }
      }
    },
    1:0->1:1->1:2->1:3,
    2:0->2:1->2:2,
    3:0->3:1
  };
\end{document}

Ergebnis:

alt text

Das lässt sich dann einigermaßen überschaubar auf mehr Ebenen erweitern:

Open in writeLaTeX
\documentclass[tikz,margin=10pt]{standalone}
\usetikzlibrary{graphdrawing, graphs,arrows,quotes,babel}
\usegdlibrary{trees}

\begin{document}

\tikz[>=stealth',shorten >=1pt,nodes={fill=white,draw}]
  \graph[
    tree layout,
    minimum number of children=2,
    level distance=2cm,
    sibling distance=2cm,
    edge quotes={draw=none,auto}
    ]{
    0:0->{
      1:0[>"$p_n$" ']->2:0[>"PFAD" ']->3:0->4:0->5:0->6:0->7:0->8:0->9:0->10:0,
      0:1[>"Pfad"]->{
        1:1->2:1->3:1->4:1->5:1->6:1->7:1->8:1->9:1,
        0:2->{
          1:2->2:2->3:2->4:2->5:2->6:2->7:2->8:2,
          0:3->{
            1:3->2:3->3:3->4:3->5:3->6:3->7:3,
            0:4->{
              1:4->2:4->3:4->4:4->5:4->6:4,
              0:5->{
                1:5->2:5->3:5->4:5->5:5,
                0:6->{
                  1:6->2:6->3:6->4:6,
                  0:7->{
                    1:7->2:7->3:7,
                    0:8->{
                      1:8->2:8,
                      0:9->{
                        1:9,
                        0:10
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    1:0->1:1->1:2->1:3->1:4->1:5->1:6->1:7->1:8->1:9,
    2:0->2:1->2:2->2:3->2:4->2:5->2:6->2:7->2:8,
    3:0->3:1->3:2->3:3->3:4->3:5->3:6->3:7,
    4:0->4:1->4:2->4:3->4:4->4:5->4:6,
    5:0->5:1->5:2->5:3->5:4->5:5,
    6:0->6:1->6:2->6:3->6:4,
    7:0->7:1->7:2->7:3,
    8:0->8:1->8:2,
    9:0->9:1
  };
\end{document}

Ergebnis:

alt text

Permanenter link

beantwortet 16 Aug '14, 19:42

esdd's gravatar image

esdd
14.2k53251

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

Frage gestellt: 16 Aug '14, 13:58

Frage wurde angeschaut: 5,962 Mal

Zuletzt aktualisiert: 16 Aug '14, 19:44