Chemin principal : Accueil > LaTeX > TikZ > Stemma avec TikZ (2) : stemma simple

Succession d'articles :

  1. Stemma avec TikZ (2) : stemma simple

Stemma avec TikZ (2) : stemma simple

samedi 17 mars 2012, mise à jour mercredi 8 août 2012, par Maïeul
Suivre la vie du site RSS 2.0 Forum

Voici maintenant le premier vrai article sur les stemma avec TikZ. J’y expose comme fabriquer un stemma simple, c’est à dire sans croisement des branches.

Exemple

Nous disposons de six manuscrits d’un même texte. A a engendré B, C, D. E et F pour leur part sont issues de D.

Code de base

Il nous faut avoir chargé le package TikZ dans le préambule. Nous insérons ainsi notre stemma.

  1. \begin{tikzpicture}
  2. \node {A}
  3. child { node {B}}
  4. child { node {C}}
  5. child { node {D}
  6. child {
  7. node{E}
  8. }
  9. child {
  10. node{F}
  11. }
  12. }
  13. ;
  14. \end{tikzpicture}

Télécharger

Exemple de stemma simple
  • Ligne 1 l’environnement tikzpicture est l’environnement utilisé pour insérer une figure TikZ. Il peut recevoir de nombreux arguments pour modifier certains aspects, tels que l’épaisseur par défaut des lignes, la taille du texte, l’orientation du schéma. Nous renvoyons à la documentation.
  • Ligne 2 un nœud TikZ, matérialisé par le commande \node, est un bloc de texte. On pourrait passer des options à cette commande, afin de modifier certains aspects comme la taille du texte.
  • Lignes 3 et 4 child désigne ici une opération : associer un fils au nœud précédent. Ce fils est lui même un nœud (node)
  • Lignes 5 à 12 même chose que précédemment, sauf que le nœud D se voit attribuer des fils (E et F). Notez le nombre d’accolades et leurs imbrications : c’est ce qui permet à TikZ de construire correctement le stemma.
  • Ligne 13 le point-virgule est obligatoire après chaque commande TikZ (ici \node).
  • Ligne 14 fin du graphisme TikZ.

Orientation

Nous pouvons choisir d’orienter autrement notre stemma, par exemple de droite à gauche. Pour cela, on passe une option grow à l’environnement tikzpicture. Cette option peut prendre l’une des valeurs suivantes :

  • up pour avoir un stemma de bas en haut.
  • down pour de haut en bas.
  • left de droite à gauche.
  • right pour de gauche à droite.

Ainsi pour avoir un stemma orienté de gauche à droite :

  1. \begin{tikzpicture}[grow=right]
  2. \node {A}
  3. child { node {B}}
  4. child { node {C}}
  5. child { node {D}
  6. child {
  7. node{E}
  8. }
  9. child {
  10. node{F}
  11. }
  12. }
  13. ;
  14. \end{tikzpicture}

Télécharger

Stemma simple orienté de gauche à droite

Problème de superposition

Supposons maintenant que la branche C dispose de deux enfants : G et H. Nous mettons le code suivant :

  1. \begin{tikzpicture}
  2. \node {A}
  3. child { node {B}}
  4. child { node {C}
  5. child {node{G}}
  6. child {node{H}}
  7. }
  8. child { node {D}
  9. child {node{E}}
  10. child {node{F}}
  11. }
  12. ;
  13. \end{tikzpicture}

Télécharger

Cela nous donne après compilation le résultat ci dessous.

Stemma simple avec une erreur d’affichage

Comme on voit, il y a un problème : les branches C et D se superposent. Pour éviter cela, nous allons, grâce à l’option sibling distance, préciser l’écartement entre les fils de A, entre les fils de C et entre les fils D. Nous indiquons cette option après chacun de ces nœuds :

  1. \begin{tikzpicture}
  2. \node {A}[sibling distance=3cm]
  3. child { node {B}}
  4. child { node {C}[sibling distance=1.5cm]
  5. child {node{G}}
  6. child {node{H}}
  7. }
  8. child { node {D}[sibling distance=1.5cm]
  9. child {node{E}}
  10. child {node{F}}
  11. }
  12. ;
  13. \end{tikzpicture}

Télécharger

Ce qui nous produit un résultat correct :

Stemma avec des nombreux enfants mais sans superposition

S’il arrive quelquefois que l’on doive définir la distance entre les fils pour chaque nœud, on peut la plupart du temps se contenter d’indiquer la distance pour chaque génération.

Pour cela, on définira les styles level 1, level 2, level n (ou n correspond à la génération). Cette définition se fait en passant des options à l’environnement tikzpicture.

Ainsi dans le cas présent, nous pouvons mettre simplement :

  1. \begin{tikzpicture}[level 1/.style={sibling distance=3cm},level 2/.style={sibling distance=1.5cm}]
  2. \node {A}
  3. child { node {B}}
  4. child { node {C}
  5. child {node{G}}
  6. child {node{H}}
  7. }
  8. child { node {D}
  9. child {node{E}}
  10. child {node{F}}
  11. }
  12. ;
  13. \end{tikzpicture}

Télécharger

Forme de traits

Nous pouvons définir la forme des traits reliants les nœuds. Par exemple, pour obtenir le résultat suivant :

Stemma avec les manuscrits reliés à angle droit

Ce style de trait n’est pas définie par défaut, mais disponible en chargeant un module supplémentaire de TikZ, via la commande \usetikzlibrary à mettre dans le préambule. En l’occurence ce module s’appelle tree. On le charge donc ainsi :

  1. \usetikzlibrary{trees}

Pour avoir ce style, il nous suffit de passer l’option, edge from parent fork down au nœud A :

  1. \begin{tikzpicture}[level 1/.style={sibling distance=3cm},level 2/.style={sibling distance=1.5cm}]
  2. \node {A}[edge from parent fork down]
  3. child { node {B}}
  4. child { node {C}
  5. child {node{G}}
  6. child {node{H}}
  7. }
  8. child { node {D}
  9. child {node{E}}
  10. child {node{F}}
  11. }
  12. ;
  13. \end{tikzpicture}

Télécharger

Évidemment, si notre arbre est orienté vers la droite, on mettra right à la place de down.

Encore plus loin : définir son propre style de relations

Imaginons cependant que pour les relations C-G et C-H nous souhaitons avoir un trait simple. Il nous faut redéfinir alors l’option edge from parent path au niveau du nœud C.

Dans mon premier article sur TikZ, j’expliquais comment tracer des traits entre deux points. L’option edge from parent path devra contenir un code indiquant le trait à tracer entre un point (\tikzparentnode) et un point (\tikzchildnode), correspondant respectivement à l’élèment père (ici C ou à l’élèment fils (ici G ou H).

Comme nous souhaitons un trait simple, nous mettrons simplement (\tikzparentnode) -- (\tikzchildnode). Ce qui donne donc :

  1. \begin{tikzpicture}[level 1/.style={sibling distance=3cm},level 2/.style={sibling distance=1.5cm}]
  2. \node {A}[edge from parent fork down]
  3. child { node {B}}
  4. child { node {C}[edge from parent path={(\tikzparentnode) -- (\tikzchildnode)}]
  5. child {node{G}}
  6. child {node{H}}
  7. }
  8. child { node {D}
  9. child {node{E}}
  10. child {node{F}}
  11. }
  12. ;
  13. \end{tikzpicture}

Télécharger

Stemma avec les manuscrits reliés à angle droit, ou non

Conclusion

Le système d’arbre de TikZ permet de tracer facilement des stemma simples, sans recoupement des branches. Pour des stemma plus complexes, je renvoie à l’article suivant : Stemma avec TikZ (3) : stemma complexe.

P.-S.

La première partie de cet article est un extrait de mon livre sur LaTeX et les sciences humaines, que j’espère sortir bientôt.

Vos commentaires

  • Le 23 mars 2012 à 09:04, par Jean-Baptiste Camps En réponse à : Stemma avec TikZ (2) : stemma simple

    Bonjour, De très intéressants exemples de stemmata. Je suis assez impressionné par l’exemple de stemma complexe. De mon côté, j’ai pour l’instant utilisé un autre package de Tikz, spécialement dédié aux arbres, qui donne de bons résultats aussi (en évitant par exemple les superpositions), mais ne peut peut-être pas réaliser des exemples complexes comme ceux du (3). Ça peut toutefois être intéressant. Le package s’appelle tikz-qtree. Voici un exemple de son fonctionnement pour un stemma simple, où o donne A et B, qui respectivement donnent CD et EF :

    \begin{tikzpicture}
    \Tree [.o [.A [.C ] [.D ] ] [.B [.E ] [.F ]] ]
    \end{tikzpicture}

    On peut bien sûr faire des choses plus raffinées. Je serais intéressé par ton avis sur ce package. Je vais peut-être faire un petit survey sur mon carnet sur les packages pour la stemmatique.

    JBC

  • Le 23 mars 2012 à 14:06, par Maïeul En réponse à : Stemma avec TikZ (2) : stemma simple

    Salut,

    j’ai rapidement regardé la documentation de tikz-qtree. A part une simplification d’écriture et la possibilité de gérer automatiquement les superposition, je n’ai pas vu ce qu’il apportait par rapport à du TikZ brut. Mais c’est déjà très bien ! Je pense qu’effectivement cela vaut la peine d’en parler.

    J’ignore s’il existe d’autres packages que TikZ pour faire des stemmata. Idéalement, un package capable de produire automatiquement un stemma avec consanguinité (complexe) serait super, mais je ne crois pas que cela existe

    Quant à la possibilité théorique d’un tel package, il faudrait s’interroger sur le mode de syntaxe et de calcul. Les logiciels de généalogie peuvent gèrer des cas d’arbre avec consanguinité, donc on pourrait envisager d’avoir un module où seul les relations sont décrites, et où le calcul du positionnement se fasse automatiquement.

    Dans tout les cas, il me semble plus prudent de ne proposer comme package pour faire des stemma que TikZ et ses dérivés. En effet, TikZ est extrêment puissant et permet bcp de souplesse, ce qui n’est à mon avis pas le cas des autres packages d’arbre, si jamais ils existent. En conséquent, en proposant des packages se basant sur TikZ :

    • on forme à l’usage de TikZ, qui peut servir dans d’autres cas que des arbres.
    • on donne des pistes pour personnaliser facilement son arbre.
Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici
  • Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

À propos

Titulaire d’un doctorat en théologie et d’un doctorat en histoire, sous la direction conjointe de Frédéric Amsler et d’Élisabeth_Malamut, je commence à partir du 1er août 2017 un travail d’édition critique des Actes de Barnabé.

Dans le cadre de la rédaction de mon mémoire de master puis de ma thèse de doctorat, j’ai été emmené à utiliser LaTeX, et j’ai donc décider de partager mes techniques. En effet, au cours de mes premiers apprentissages, j’ai découvert que les ressources indiquant les outils pour l’utilisation de LaTeX en sciences humaines étaient rares. Ceci m’a conduit à maintenir ou créer plusieurs packages LaTeX et à donner plusieurs formations.

Par ailleurs, je suis membre actif de la communauté SPIP, au sein de laquelle j’administre le site Spip-Contrib. Je propose sur ce site quelques notes sur SPIP, en général à destination de webmestre.

Il m’arrive également de faire un petit peu de Python, de temps en temps.

Enfin, je tiens un blog de réflexions politiques et religieuses.

Maïeul