Je ne comprends pas le problème

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.

Je ne comprends pas le problème

Messagepar rebouxo » Samedi 17 Août 2019, 11:01

Voilà, je ne comprends pas pourquoi j'ai droit à une erreur. Je n'ai pas essayé avec d'autres possibilité de TiKz (enfin, si avec une couleur stockée dans une macro cela fonctionne). Pour moi les deux codes devraient fonctionner (mais je suis un mauvais compilateur TeX), alors que le 2e me mets un '/tikz/turtle/home,fd,lt,fd,rt,f
d,rt,fd,lt,fd,' and I am going to ignore it. Perhaps you misspelled it.

See the pgfkeys package documentation for explanation.
Type H <return> for immediate help.
...

l.20 \tikz \draw[turtle={\motif}]
Code: Tout sélectionner
\documentclass[12pt]{article}

\usepackage{tikz}
\usetikzlibrary{turtle}


\begin{document}
\tikz \draw[turtle={home,fd,lt,fd,rt,fd,rt,fd,lt,fd,}] ;

\def\motif{home,fd,lt,fd,rt,fd,rt,fd,lt,fd,}
\tikz \draw[turtle={\motif}] ;

\end{document}


Est-ce qu'il y a une ruse pour passer une macro dans tikz ?
Olivier
A line is a point that went for a walk. Paul Klee
Par solidarité, pas de MP
rebouxo
Modérateur
 
Messages: 6937
Inscription: Mercredi 15 Février 2006, 13:18
Localisation: le havre
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: Je ne comprends pas le problème

Messagepar pg » Samedi 17 Août 2019, 11:08

C'est juste un problème de développement. Il y a peut-être mieux, mais une solution de contournement est de mettre toute l'instruction dans une macro développée avec edef :

Code: Tout sélectionner
\documentclass[12pt]{article}

\usepackage{tikz}
\usetikzlibrary{turtle}

\begin{document}
\tikz \draw[turtle={home,fd,lt,fd,rt,fd,rt,fd,lt,fd,}] ;

\def\motif{home,fd,lt,fd,rt,fd,rt,fd,lt,fd,}
\edef\macro{\noexpand\tikz \noexpand\draw[turtle={\motif}] ;}
\macro

\end{document}

Le \noexpand dit à TeX que l'on veut garder \tikz comme \tikz et \draw comme \draw, mais le \edef va avoir pour effet de remplacer \motif par sa définition, à savoir, "home,fd,lt,fd,rt,fd,rt,fd,lt,fd,"
pg
Modérateur
 
Messages: 2595
Inscription: Jeudi 14 Juin 2007, 23:31

Re: Je ne comprends pas le problème

Messagepar rebouxo » Samedi 17 Août 2019, 17:48

Merci pg, j'avais bien pensé à mettre un edef (merci à Christian pour son bouquin), mais le \noexpand c'est nouveau pour moi. Enfin je l'ai déjà vu, mais sans me pencher sur fonctionnement.

Merci.

Bon, cela dit mon vrai problème n'est pas réellement celui-là. Mon vrai problème est de représenter une chaîne de caractères, ne contenant que des A, des D et des G, en instructions pour que tikz (via turtle) puisse comprendre. Et cette chaîne sera elle-même générer par un procédé (les A sont remplacés par AGADADAGA, ou autre chose). J'ai donc pensé à xstring, et tout marche, sauf que tikz n'affiche rien (pas d'erreur, mais pas de dessin).

Voilà mon code :
Code: Tout sélectionner
\documentclass[12pt]{article}

\usepackage{tikz}
\usetikzlibrary{turtle}
\usepackage{xstring}
\begin{document}

\def\motifa{home,fd,lt,fd,rt,fd,rt,fd,lt,fd,}

\def\motif{AGADADAGA}
\StrSubstitute{\motif}{A}{fd,}[\motif]
\StrSubstitute{\motif}{D}{rt,}[\motif]
\StrSubstitute{\motif}{G}{lt,}[\motif]

\edef\foo{\noexpand\draw[turtle={\motif}] ;}
\edef\bar{\noexpand\draw[turtle={\motifa}] ;}

\begin{tikzpicture}
  \foo
  \bar
\end{tikzpicture}

\end{document}



\foo n'est pas affiché, mais \bar l'est. Comme xstring fait des choses très TeXniques, bien au delà de mes capacités, est-ce que quelqu'un à une idée ?
Olivier
A line is a point that went for a walk. Paul Klee
Par solidarité, pas de MP
rebouxo
Modérateur
 
Messages: 6937
Inscription: Mercredi 15 Février 2006, 13:18
Localisation: le havre
Statut actuel: Actif et salarié | Enseignant

Re: Je ne comprends pas le problème

Messagepar un bon petit » Samedi 17 Août 2019, 20:13

rebouxo a écrit:\foo n'est pas affiché, mais \bar l'est. Comme xstring fait des choses très TeXniques, bien au delà de mes capacités, est-ce que quelqu'un à une idée ?

Je n'avais aucune idée, mais en débogage (ou quand on n'y comprend rien), il faut toujours penser à se servir de \show ou \meaning. Ce sont les primitives (avec l'indispensable \showtokens) que j'utilise le plus souvent, et de très loin, lorsque j'écris une macro ou un package.

Ici, comparer \show\foo et \show\bar montre qu'il manque le "home" au début de \foo. Il faut donc le rajouter lors du \edef, par exemple :
Code: Tout sélectionner
\edef\foo{\noexpand\draw[turtle=home,\motif] ;}
un bon petit
Giga-utilisateur
 
Messages: 734
Inscription: Vendredi 12 Juin 2009, 21:35
Localisation: Chambéry
Statut actuel: Actif et salarié | Enseignant

Re: Je ne comprends pas le problème

Messagepar rebouxo » Samedi 17 Août 2019, 21:01

P****n quel c**.
Alors, là je suis ridicule.

Merci Christian. On devrait toujours chercher les choses simples avant les choses compliqués.

Olivier
A line is a point that went for a walk. Paul Klee
Par solidarité, pas de MP
rebouxo
Modérateur
 
Messages: 6937
Inscription: Mercredi 15 Février 2006, 13:18
Localisation: le havre
Statut actuel: Actif et salarié | Enseignant


Retourner vers LaTeX

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 18 invités