En section 35 du manuel de TikZ (aussi disponible en version web, pratique pour copier du code du manuel : https://tikz.dev/gd-edge-routing#pgf.necklace:routing) se trouve un code, que naïvement je traduis ainsi (puisqu'il manque le préambule) :

\documentclass{article}
\usepackage{tikz}
\usegdlibrary{routing}

\begin{document}
\begin{tikzpicture}
  \tikz \graph [simple necklace layout, node distance=1.5cm,
              necklace routing,
              nodes={draw,circle}, edges={>={Stealth[round,sep,bend]}}]
  { 1 -> 2 [minimum size=30pt] <- 3 <-> 4 --
    5 -- 6 -- [bend left] 7 -- 1 -- 4 };

\end{tikzpicture}
\end{document}

Je compile avec pdflatex (j'ai bien noté en introduction de la section en question la ligne : usegdlibrary{routing} % LATEX and plain TEX).

Résultats:

Ligne 3 :

Undefined control sequence.
<recently read> \usegdlibrary

l.3 \usegdlibrary
                 {routing}

Ligne 3 :

LaTeX Error: Missing \begin{document}.

Ligne 12 :

Package tikz Error: You need to say \usetikzlibrary{graphs} in order to use the graph syntax.

Pas mal, non ? C'est le manuel de TikZ (pour reprendre un meme connu).

La compilation, erronée, va à son terme et produit un PDF qui contient uniquement le mot "routing".

D'ailleurs, si le préambule est remplacé par :

\documentclass{article}
\usepackage{tikz}
\usegdlibrary{routing}
hello world
\begin{document}

on obtient dans le PDF :

routing hello world

ce qui est fort étrange, puisque normalement le contenu du préambule n'est pas composé...

Que se passe-t-il ?

Posée hier

quark67's gravatar image

quark67
2946
Taux d'acceptation : 55%


Il se passe que le manuel de TikZ contient caché en son sein un jeu de piste.

La première erreur (Undefined control sequence pour \usegdlibrary) est fort intrigante, et nécessite d'en savoir plus sur cette commande \usegdlibrary qui n'est donc pas connue de TikZ. On fait donc une recherche dans le PDF du manuel sur le terme « usegdlibrary ».

Les résultats étant affichés dans leur ordre d'apparition à l'écran, notre star débute sa prestation à la page 271 du manuel, discrétement.

Elle réapparait aux pages 285, 416, 417, et 418, de façon timide, effacée, grisée.

Puis enfin, dans sa splendeur resplendissante, en page 421.

Et là, on y découvre deux choses :

  • juste au-dessus de la présentation de la commande et de sa syntaxe (\usegdlibrary{⟨list of libraries⟩}), on y lit : For this, you need to use the following command, which is defined by the graphdrawing library:
  • et justement, en introduction de cette page titrée Using Graph Drawing in TikZ, on y découvre que It requires that the document is typeset using LuaTeX.

Premiers résultats : il faut donc en plus dans le préambule charger \usetikzlibrary{graphdrawing} ET compiler avec LuaLaTeX.

Je passe sur la seconde erreur (LaTeX Error: Missing \begin{document}.) probablement liée à l'absence de \usetikzlibrary{graphdrawing} dans le préambule et à la compilation avec autre chose que LuaLaTeX.

Reste donc la 3e erreur, à savoir Package tikz Error: You need to say \usetikzlibrary{graphs}.

Bon prince, je rajoute la ligne demandée dans le préambule également.

Nous en sommes donc à :

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{graphs}
\usetikzlibrary{graphdrawing}
\usegdlibrary{routing}

\begin{document}
\begin{tikzpicture}
  \tikz \graph [simple necklace layout, node distance=1.5cm,
              necklace routing,
              nodes={draw,circle}, edges={>={Stealth[round,sep,bend]}}]
  { 1 -> 2 [minimum size=30pt] <- 3 <-> 4 --
    5 -- 6 -- [bend left] 7 -- 1 -- 4 };

\end{tikzpicture}
\end{document}

On compile avec LuaLaTeX et...

Patatras !

Ligne 11 :

Package pgfkeys Error: I do not know the key '/tikz/graphs/simple necklace layout' and I am going to ignore it. Perhaps you misspelled it.

Ligne 13 :

Package pgf Error: Unknown arrow tip kind 'Stealth'.

(cette erreur étant répétée 8 fois, le tracé avec flèche se produisant 8 fois..., enfin pas vraiment, seulement 3 fois, 5 autres tracés de ligne se faisant sans la décoration fléchée).

C'est reparti pour un tour, je cherche, pour la première erreur « simple necklace layout » dans le manuel PDF.

Des apparitions sans grand éclat ont lieu aux pages 423, 425, 434, 435, 445, 446, 449 et enfin sur un piedestal en page 482 !

On y apprend que cette clé est fournie par \usegdlibrary{circular}.

Pour l'erreur Unknown arrow tip kind 'Stealth', je vous épargne les recherches et donne directement le résultat, après avoir trouvé des références dans 28 pages précédentes : c'est en page 212 qu'on apprend (via la page 211) qu'il faut charger \usetikzlibrary{arrows.meta}.

Cette-fois, c'est la bonne !

On a dans le préambule :

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{graphs}
\usetikzlibrary{graphdrawing}
\usetikzlibrary{arrows.meta}
\usegdlibrary{routing}
\usegdlibrary{circular}

Le code est fonctionnel, n'est ce pas ? N'est-ce pas ?

Pas du tout !

On a maintenant :

Package pgf Error: You need to say \usetikzlibrary{bending} for flexing and bending arrows.

Bon, ben on met cela (\usetikzlibrary{bending}) dans le préambule et... victoire !

Il est évident que rajouter dans le tout premier code, celui présenté en section 35 du manuel, les lignes grisées suivantes (spécifiant que ce sont des lignes à placer dans le préambule) était trop ardu pour les auteurs du manuel... (pendant ce temps les pauvres utilsateurs qui n'ont pas une mémoire d'éléphant s'arrachent les cheveux) :

\usetikzlibrary{graphs,graphdrawing,arrows.meta,bending}
\usegdlibrary{routing,circular}

(sans compter qu'il serait utile le placer une indication sur la nécessité de compiler exclusivement avec LuaLaTeX dans le cas présent).

Bref, le code complet fonctionnel est le suivant :

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{graphs,graphdrawing,arrows.meta,bending}
\usegdlibrary{routing,circular}

\begin{document}
\begin{tikzpicture}
  \tikz \graph [simple necklace layout, node distance=1.5cm,
              necklace routing,
              nodes={draw,circle}, edges={>={Stealth[round,sep,bend]}}]
  { 1 -> 2 [minimum size=30pt] <- 3 <-> 4 --
    5 -- 6 -- [bend left] 7 -- 1 -- 4 };

\end{tikzpicture}
\end{document}

Un oubli peut toujours arriver, mais ça fait beaucoup d'oublis ici pour un seul code.

Il est fort probable qu'en cas de signalement, on me rétorque de lire le manuel. Certes, on y arrive en lisant le manuel, à coup de jeu de pistes...

Je serais désormais très compréhensif envers les personnes qui posent des questions sur les forums sans publier de MWE, puisque même les meilleurs comme les auteurs du manuel de TikZ donnent l'exemple...

Lien permanent

Publiée hier

quark67's gravatar image

quark67
2946
Taux d'acceptation : 55%

Votre réponse
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.