J'ai besoin de faire varier l'ensemble dans lequel la variable de la boucle foreach prend ses valeurs (dans TikZ).

Je m'explique : l'exemple suivant marche (ma variable est \n) :

\documentclass{article}
\usepackage{tikz}
\newcommand{\n}{3}
\begin{document}
\begin{tikzpicture}
\foreach \i in {0,...,\n} \draw (\i,0) circle (0.5);
\end{tikzpicture}
\end{document}

tandis que si je remplace le \n par \n-1 dans le foreach comme dans l'exemple suivant, ça ne fonctionne plus :

\documentclass{article}
\usepackage{tikz}
\newcommand{\n}{3}
\begin{document}
\begin{tikzpicture}
\foreach \i in {0,...,\n-1} \draw (\i,0) circle (0.5);
\end{tikzpicture}
\end{document}

Commment résoudre ce problème ?

Posée 19 Mar '21, 16:29

Mario's gravatar image

Mario
195311
Taux d'acceptation : 100%

1

Est-ce que tu peux compter de 1 à \n et utiliser ensuite \i-1?

(22 Mar '21, 15:33) zkpr9IRn5CrI zkpr9IRn5CrI's gravatar image

\documentclass{article}
\usepackage{tikz}
\newcommand{\n}{3}
\begin{document}
\begin{tikzpicture}
\pgfmathparse{\n-1}
\foreach \i in {0,...,\pgfmathresult}{ 
  \draw (\i,0) circle (0.5);
}
\end{tikzpicture}
\end{document}

alt text

Lien permanent

Publiée 19 Mar '21, 16:57

samcarter's gravatar image

samcarter
8.4k2817
Taux d'acceptation : 56%

Modifiée 19 Mar '21, 16:58

Voici d'autres possibilités :

\documentclass{article}
\usepackage{tikz}
\newcommand{\n}{3}
\begin{document}
\begin{tikzpicture}
\foreach \i in {0,...,\numexpr\n-1} \draw (\i,0) circle (0.5);
\end{tikzpicture}
\end{document}

ou

\documentclass{article}
\usepackage{tikz}
\newcommand{\n}{3}
\begin{document}
\begin{tikzpicture}
\foreach \i in {0,...,\n} {\ifnum\i<\n \draw (\i,0) circle (0.5);\fi}
\end{tikzpicture}
\end{document}

ou encore,

\documentclass{article}
\usepackage{tikz}
\newcommand{\n}{3}
\begin{document}
\begin{tikzpicture}
\foreach \i in {0,...,\n} \draw ({sign(\n-\i)*\i},0) circle (0.5);
\end{tikzpicture}
\end{document}
Lien permanent

Publiée 24 Mar '21, 19:24

touhami's gravatar image

touhami
9.7k410
Taux d'acceptation : 51%

\foreach propose l'option parse pour répondre précisément à ce besoin.

\documentclass{article}
\usepackage{tikz}
\newcommand{\n}{3}
\begin{document}
\begin{tikzpicture}
\foreach[parse=true] \i in {0,...,\n-1} \draw (\i,0) circle (0.5);
\end{tikzpicture}
\end{document}
Lien permanent

Publiée 15 Avr '21, 23:09

Paul%20Gaborit's gravatar image

Paul Gaborit
2.0k16
Taux d'acceptation : 30%

Modifiée 15 Avr '21, 23:12

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.