Bonjour, J'ai écrit une boucle foreach que je voudrais pouvoir réutiliser en modifiant uniquement la variable de dimension que j'ai appelée longueur. Sans cette variable en utilisant en lieu et place la valeur 4, cela fonctionne bien

[evaluate=x as xx using {x*(4*.347296355)}]

et il apparaît bien l'image ci-dessous :

mais lorsque je remplace la valeur 4 par la variable longueur qui mesure 4cm avec

[evaluate=x as xx using {x*(longueur*.347296355)}]

cela ne fonctionne plus et j'obtiens cette image

alt text

L'ECM qui fonctionne est celui-ci :

Ouvrir dans l'éditeur Overleaf
\documentclass[a4paper, 11pt,landscape]{article}

\usepackage{tikz}               
\usepackage[frenchb]{babel}

\begin{document}

\newlength{\longueur}
\setlength{\longueur}{4cm}

\begin{tikzpicture}
\clip (0,0) rectangle({\longueur*3.125667198},{\longueur*.984807753});
\foreach \x  [evaluate=\x as \xx using {\x*(4*.347296355)}] in {0,1,...,9}{
\draw (\xx,0)--++(80:\longueur);
\draw(\xx,0)--++(100:\longueur);
}
\draw (0,0) rectangle({\longueur*3.125667198},{\longueur*.984807753});
\end{tikzpicture}
\end{document}

L'ECM qui ne fonctionne pas est celui-ci :

Ouvrir dans l'éditeur Overleaf
\documentclass[a4paper, 11pt,landscape]{article}

\usepackage{tikz}               
\usepackage[frenchb]{babel}

\begin{document}

\newlength{\longueur}
\setlength{\longueur}{4cm}

\begin{tikzpicture}
\clip (0,0) rectangle({\longueur*3.125667198},{\longueur*.984807753});
\foreach \x  [evaluate=\x as \xx using {\x*(\longueur*.347296355)}] in {0,1,...,9}{
\draw (\xx,0)--++(80:\longueur);
\draw(\xx,0)--++(100:\longueur);
}
\draw (0,0) rectangle({\longueur*3.125667198},{\longueur*.984807753});
\end{tikzpicture}
\end{document}

Comment faire pour pouvoir utiliser une dimension variable dans l'evaluate de la boucle foreach ? merci de vos lumières.

Posée 20 Mai, 20:59

Andr%C3%A9C's gravatar image

AndréC
1578
Taux d'acceptation : 0%

1

Il suffit de remplacer \newlength{\longueur} \setlength{\longueur}{4cm} par \newcommand*\longueur{4}

(20 Mai, 23:35) touhami touhami's gravatar image

Parfait ! merci beaucoup !

(21 Mai, 10:56) AndréC Andr%C3%A9C's gravatar image

@touhami Une question : j'avais tenté de remplacer les longueurs avec \def\longueur{4} sans succès, pourquoi cela ne fonctionne t-il pas avec \def mais fonctionne avec \newcommand ?

(22 Mai, 23:24) AndréC Andr%C3%A9C's gravatar image

@AndréC Pour moi ça marche.

(23 Mai, 00:12) touhami touhami's gravatar image

Vous avez raison ça marche, en fait j'avais remplacé par \def\longueur{4cm} et non pas par \def\longueur{4} et c'est ce problème de conversion de longueur qui s'est posé.

(23 Mai, 00:15) AndréC Andr%C3%A9C's gravatar image

TeX converti les longueurs en pt donc 4cm=\longueur=113.81102pt. Lors de l'évaluation c'est cette valeur qui est utilisée i.e. 113.81102. Une solution est d'utiliser \longueur/1cm* qui est 113.81102pt/28.45274pt=(4)

Ouvrir dans l'éditeur Overleaf
\documentclass[a4paper, 11pt,landscape]{article}

\usepackage{tikz}               
\usepackage[frenchb]{babel}

\begin{document}

\newlength{\longueur}
\setlength{\longueur}{4cm}

\begin{tikzpicture}
\clip (0,0) rectangle({\longueur*3.125667198},{\longueur*.984807753});
\foreach \x  [evaluate=\x as \xx using {\x*(\longueur/1cm*.347296355)}] in {0,1,...,9}{
\draw (\xx,0)--++(80:\longueur);
\draw(\xx,0)--++(100:\longueur);
}
\draw (0,0) rectangle({\longueur*3.125667198},{\longueur*.984807753});
\end{tikzpicture}

\end{document}
Lien permanent

Publiée 21 Mai, 00:42

touhami's gravatar image

touhami
2.2k26
Taux d'acceptation : 49%

Modifiée 21 Mai, 00:42

@touhami Merci beaucoup, vos deux solutions fonctionnent parfaitement.

(21 Mai, 11:00) AndréC Andr%C3%A9C's gravatar image

@AndréC n'oubliez pas d'accepter la réponse si elle convient.

(26 Mai, 00:22) pluton pluton's gravatar image
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.

Mots-clés de la question :

×16
×1
×1
×1
×1

Question posée : 20 Mai, 20:59

Question vue : 235 fois

Dernière mise à jour : 26 Mai, 00:22