[Résolu] Arbre avec label sur les arcs

Tout ce qui concerne l'utilisation ou l'installation de LaTeX.

Modérateur: gdm_tex

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

[Résolu] Arbre avec label sur les arcs

Messagepar CurTeX » Samedi 10 Avril 2010, 04:32

Bonjour,

Je débute en $\LaTeX$ , et je voudrais dessiner des figures d'arbres avec des chaine de caractères comme labels sur les arcs, de tel façon a ce qu'ils soient étendu le long des arcs, comme ci-dessous:

1270915645.PNG
1270915645.PNG (6.85 Kio) Vu 1234 fois


je voudrais savoir quel package permet d'obtenir ce résultat ?

j'ai essayé avec pstricks, des sauts de ligne entre les lettres mais ça ne marche pas! de plus j'arrive pas a géré les paramètre taille et type de $n\oe ud$

Code: Tout sélectionner
\documentclass[a4paper,12pt]{article}
\usepackage[T1]{fontenc}
\usepackage[francais]{babel}
\usepackage{amsmath,amsfonts,amssymb}
\usepackage{pstricks,pstricks-add,pst-node,pst-tree}
\begin{document}
\pstree[radius=2pt]{\TC*}{%
\psset{tpos=.6}
\TC* \tlput{a\\a\\b\\a}
\pstree{\Tc{3pt} \tlput[labelsep=3pt]{a}}{%
\TC* \tlput{a}
\TC* \trput{b}}
\TC* \trput{b}}
\end{document}


s'il y a un document complet sur ce type d'arbre ca m'aiderait, ou bien juste le code qui produis l'arbre de l'image ca serais mieux, j en ai plusieurs à dessiner pour mon mémoire, merci d'avance.
Cordialement.
Dernière édition par CurTeX le Lundi 12 Avril 2010, 02:58, édité 1 fois.
Curtis
CurTeX
Utilisateur
 
Messages: 6
Inscription: Lundi 15 Février 2010, 14:41
Statut actuel: Post-bac | Ecole d'ingénieur

Publicité

Re: arbre avec label sur les arcs

Messagepar pg » Samedi 10 Avril 2010, 10:44

Voici une façon de faire avec TikZ. Vu la nature particulière de l'arbre, il y a de nombreux ajustements manuels à faire (longueur et largeur des branches et placement des labels a b b a b b), mais si les arbres se ressemblent tous, ça ne devrait pas être trop difficile à ajuster à chaque fois :

arbre_label_sur_arc.png
arbre_label_sur_arc.png (9.72 Kio) Vu 1410 fois


Code: Tout sélectionner
\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{decorations}
\usetikzlibrary{decorations.text}

\tikzstyle{noeud-std}=[draw,fill=black,circle,inner sep=0pt,minimum size=7pt]% 7pt est la taille des cercles noirs

\begin{document}

\begin{tikzpicture}
% dessin de l'arbre
%  - level distance est la longueur (verticale) entre deux noeuds
%  - sibling distance est la largeur (horizontale) dans une branche
\node[noeud-std] (noeud0) {}
  [sibling distance=2.5cm]
  child {node[noeud-std] (noeud1) {}
    [sibling distance=2cm]
    child[level distance=3cm] {node[noeud-std] (noeud11) {}}
    child[level distance=2.75cm] {node[noeud-std] (noeud12) {}}
  }
  child {node[noeud-std] (noeud2) {}
    [sibling distance=1cm]
    child[level distance=2cm] {node[noeud-std] (noeud21) {}}
    child[level distance=1.75cm] {node[noeud-std] (noeud22) {}}
  };
% legende du noeud 0
\node[above=3pt] at (noeud0) {$ST_4$};
% legende du noeud 1
\node[above left=3pt] at (noeud1) {$1$};
% legende du noeud 2
\node[above right=3pt] at (noeud2) {$2$};
% fleche pointillee reliant le noeud 1 et le noeud 0
\draw[dashed,->] ($(noeud1) + (6pt,0pt)$)--($(noeud0) + (0pt,-6pt)$);
% legende du trait reliant noeud0 et noeud1
\node[above left] at ($(noeud0)!{0.5}!(noeud1)$) {\texttt{a}};
% legende du trait reliant noeud0 et noeud1
\node[above right] at ($(noeud0)!{0.5}!(noeud2)$) {\texttt{b}};
% boucle pour la legende du trait reliant noeud1 et noeud11
\foreach \x/\xtext in {1/a,2/b,3/b,4/a,5/b,6/b,7/\$} {
  \node[above left] at ($(noeud1)!{\x/7}!(noeud11)$) {\texttt{\xtext}};
}
% boucle pour la legende du trait reliant noeud1 et noeud12
\foreach \x/\xtext in {1/b,2/b,3/a,4/b,5/b,6/\$} {
  \node[above right] at ($(noeud1)!{\x/6}!(noeud12)$) {\texttt{\xtext}};
}
% boucle pour la legende du trait reliant noeud2 et noeud21
\foreach \x/\xtext in {1/b,2/a,3/b,4/b,5/\$} {
  \node[above left] at ($(noeud2)!{\x/5}!(noeud21)$) {\texttt{\xtext}};
}
% boucle pour la legende du trait reliant noeud2 et noeud22
\foreach \x/\xtext in {1/a,2/b,3/b,4/\$} {
  \node[above right] at ($(noeud2)!{\x/4}!(noeud22)$) {\texttt{\xtext}};
}
\end{tikzpicture}

\end{document}
pg
Modérateur
 
Messages: 2599
Inscription: Jeudi 14 Juin 2007, 23:31

Re: Arbre avec label sur les arcs

Messagepar CurTeX » Lundi 12 Avril 2010, 02:55

Merci beaucoup, c'est tres pratique d'ajuster manuellement, c'est ce que je chercher d'ailleurs ^^

j ai commencé avec un arbre qui contiens des labels simples, que voici:

1271082597.PNG
1271082597.PNG (11.23 Kio) Vu 1232 fois


Code: Tout sélectionner
\documentclass[a4paper,12pt]{report}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{decorations}
\usetikzlibrary{decorations.text}

\tikzstyle{noeud-std}=[draw,fill=black,circle,inner sep=0pt,minimum size=7pt]% 7pt est la taille des cercles noirs

\begin{document}

\begin{tikzpicture}
% dessin de l'arbre
%  - level distance est la longueur (verticale) entre deux noeuds
%  - sibling distance est la largeur (horizontale) dans une branche
\node[noeud-std] (noeud0) {}
   [sibling distance=3cm]
   child {node[noeud-std] (noeud1) {}
      [sibling distance=1cm]
      child[level distance=1cm]{node[noeud-std] (noeud2) {}
         [sibling distance=1cm]
         child[level distance=1cm]{node[noeud-std,fill=white] (noeud3){} }
         child[level distance=1cm]{node[noeud-std] (noeud4){} 
            child[level distance=1cm]{node[noeud-std] (noeud5){}
               child[level distance=1cm]{node[noeud-std,fill=white] (noeud6){} }
            }                     
         }
      }
   }
   child {node[noeud-std] (noeud7) {}
      [sibling distance=1.5cm]
      child[level distance=1cm]{node[noeud-std] (noeud8) {}
         [sibling distance=1cm]
         child[level distance=1cm]{node[noeud-std] (noeud9) {}
            child[level distance=1cm]{node[noeud-std,fill=white] (noeud10){} }         
         }
          child[level distance=1cm]{node[noeud-std] (noeud11) {}
            child[level distance=1cm]{node[noeud-std,fill=white] (noeud12) {} }
         }       
      }
      child[level distance=1cm]{node[noeud-std,fill=white] (noeud13){} }
   };
   
\node[above=-20pt] at (noeud3) {$1$};   
\node[above=-20pt] at (noeud6) {$2$};   
\node[above=-20pt] at (noeud10) {$3$};   
\node[above=-20pt] at (noeud12) {$4$};   
\node[above=-20pt] at (noeud13) {$5$};   

\node[above=3pt] at (noeud0) {$Racine$};   
\node[above left] at ($(noeud0)!{0.5}!(noeud1)$) {\texttt{a}};
\node[above left] at ($(noeud1)!{0.75}!(noeud2)$) {\texttt{b}};
\node[above left] at ($(noeud2)!{0.7}!(noeud3)$) {\texttt{\$}};
\node[above right] at ($(noeud2)!{0.7}!(noeud4)$) {\texttt{b}};
\node[above right] at ($(noeud4)!{0.75}!(noeud5)$) {\texttt{a}};
\node[above right] at ($(noeud5)!{0.75}!(noeud6)$) {\texttt{\$}};
\node[above right] at ($(noeud0)!{0.5}!(noeud7)$) {\texttt{b}};
\node[above right] at ($(noeud7)!{0.5}!(noeud13)$) {\texttt{\$}};
\node[above left] at ($(noeud7)!{0.5}!(noeud8)$) {\texttt{b}};
\node[above left] at ($(noeud8)!{0.7}!(noeud9)$) {\texttt{a}};
\node[above right] at ($(noeud8)!{0.7}!(noeud11)$) {\texttt{b}};
\node[above left] at ($(noeud9)!{0.75}!(noeud10)$) {\texttt{\$}};
\node[above right] at ($(noeud11)!{0.75}!(noeud12)$) {\texttt{\$}};
\end{tikzpicture}
\end{document}


merci encore pour ton aide,
Curtis
CurTeX
Utilisateur
 
Messages: 6
Inscription: Lundi 15 Février 2010, 14:41
Statut actuel: Post-bac | Ecole d'ingénieur


Retourner vers LaTeX

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Bing [Bot], Grapeshot [Crawler] et 44 invités