[tikz] Boucle foreach

Tout ce qui concerne le langage TeX/LaTeX et ses variantes. Ce langage est utilisable sur le forum via les balises tex.
[participation réservée aux utilisateurs inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
djaiff
Utilisateur confirmé
Utilisateur confirmé
Messages : 10
Inscription : mardi 21 septembre 2021, 12:59
Statut actuel : Autre

[tikz] Boucle foreach

Message non lu par djaiff »

Bonjour,
ça fait un petit moment que j'évite le problème de la boucle sur tikz, j'y viens maintenant !
Je cherche à incrémenter des numéros \n tout simplement en faisant varier les \x et en fixant mon ordonnée y.

Code : Tout sélectionner

\foreach \x in {3.125cm, 6.25cm, 7.8125cm, 9.375cm} %normalement \x va jusqu'à 20.3125
\foreach \n in {4,5,...,7} %normalement n va jusqu'à 14
{
\fill [gray!25, draw=black, very thick] (\x,12.5cm) circle (5mm);
\node at (\x,12.5cm) {$\n$};
}
Et bien cela ne fonctionne pas, je n'ai que des 7. Quelqu'un aurait-il la solution ?
Pièces jointes
essainum.jpg
MB
Administrateur
Administrateur
Messages : 8117
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: [tikz] Boucle foreach

Message non lu par MB »

Bonjour,

Il est normal de n'obtenir que des 7 puisque vous écrivez plusieurs fois au même endroit. Vous pouvez tester le code suivant pour observer la différence.

Code : Tout sélectionner

\documentclass{standalone}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}
\foreach \x in {3.125cm, 6.25cm, 7.8125cm, 9.375cm} {
    \foreach \n in {4,5,...,7} {
        \fill [gray!25, draw=black, very thick] (\x,\n) circle (5mm);
        \node at (\x,\n) {$\n$};
    }
}
\end{tikzpicture}

\end{document}
MB. Rejoignez notre partenaire pCloud et bénéficiez de 10Go de stockage gratuits ou d'une offre premium !
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
djaiff
Utilisateur confirmé
Utilisateur confirmé
Messages : 10
Inscription : mardi 21 septembre 2021, 12:59
Statut actuel : Autre

Re: [tikz] Boucle foreach

Message non lu par djaiff »

Bonjour,

Merci pour ce début de réponse, malheureusement cela ne donne pas le résultat escompté.
Pièces jointes
essainum2.png
djaiff
Utilisateur confirmé
Utilisateur confirmé
Messages : 10
Inscription : mardi 21 septembre 2021, 12:59
Statut actuel : Autre

Re: [tikz] Boucle foreach

Message non lu par djaiff »

Si je modifie un peu.

Code : Tout sélectionner

\foreach \x in {3.125cm, 6.25cm, 7.8125cm, 9.375cm} {
    \foreach \n in {4,5,...,7} {
        \fill [gray!25, draw=black, very thick] (\x,12.5) circle (5mm);
        \node at (\x,12,5) {$\n$};
    }}
J'obtiens ça.
Pièces jointes
essainum3.png
djaiff
Utilisateur confirmé
Utilisateur confirmé
Messages : 10
Inscription : mardi 21 septembre 2021, 12:59
Statut actuel : Autre

Re: [tikz] Boucle foreach

Message non lu par djaiff »

J'ai bien mes ronds alignés, mais pas les nombres. Why ?
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2314
Inscription : samedi 29 décembre 2007, 00:58

Re: [tikz] Boucle foreach

Message non lu par projetmbc »

Bonsoir.

Il nous faut un code compilable, un ECM comme on dit.
MB
Administrateur
Administrateur
Messages : 8117
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: [tikz] Boucle foreach

Message non lu par MB »

djaiff a écrit : mercredi 04 octobre 2023, 21:21 Merci pour ce début de réponse, malheureusement cela ne donne pas le résultat escompté.
J'ignore quel est le résultat escompté.
MB. Rejoignez notre partenaire pCloud et bénéficiez de 10Go de stockage gratuits ou d'une offre premium !
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
djaiff
Utilisateur confirmé
Utilisateur confirmé
Messages : 10
Inscription : mardi 21 septembre 2021, 12:59
Statut actuel : Autre

Re: [tikz] Boucle foreach

Message non lu par djaiff »

Voila mon code complet.

Code : Tout sélectionner

\documentclass{standalone}
        \usepackage{graphics}
        \usepackage{tikz}
        \usepackage{pgfplots}
        \usepackage[frenchb]{babel}
          \usepackage[OT1]{fontenc}
        \usepackage[babel=true,kerning=true]{microtype}
        \usepackage{calc}
\usepackage{xcolor}
\usepackage{verbatim}
\usepackage[active,tightpage]{preview}
\usepackage{pgffor}
%

        \pagestyle{empty}
        \usetikzlibrary{patterns,plotmarks, positioning,spy, calc, topaths,shapes,shadings,calc}
        \pgfdeclarelayer{background}
        \pgfdeclarelayer{foreground}
        \pgfsetlayers{background,main,foreground}
          \pgfplotsset{compat=1.7}
					\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{5pt}%
\tikzset{>=latex}
        \begin{document}
%
%%
%
\begin{tikzpicture}
%cable

%définition plaque
\draw[line width=0.5mm, gray!95] (0cm,0cm) rectangle (25cm,25cm);%[line width=3mm]
%définition angle de la plaque
\draw[line width=2mm, black!95] (2cm,0cm) -- (0cm,0cm)-- (0cm,2cm);%[line width=3mm]
\draw[line width=2mm, black!95] (0cm,23cm) -- (0cm,25cm)-- (2cm,25cm);%[line width=3mm]
\draw[line width=2mm, black!95] (23cm,25cm) -- (25cm,25cm)-- (25cm,23cm);%[line width=3mm]
\draw[line width=2mm, black!95] (25cm,2cm) -- (25cm,0cm)-- (23cm,0cm);%[line width=3mm]
%
%%
%séparation plaqueV
\draw[line width=2mm, gray!95] (6.25cm,-5cm) -- (6.25cm,0cm);\draw[line width=0.2mm,dashed, gray!95] (6.25cm,0cm) -- (6.25cm,25cm);\draw[line width=2mm, gray!95] (6.25cm,25cm) -- (6.25cm,30cm);
\draw[line width=2mm, gray!95] (12.5cm,-5cm) -- (12.5cm,0cm);\draw[line width=0.2mm,dashed, gray!95] (12.5cm,0cm) -- (12.5cm,25cm);\draw[line width=2mm, gray!95] (12.5cm,25cm) -- (12.5cm,30cm);
\draw[line width=2mm, gray!95] (18.75cm,-5cm) -- (18.75cm,0cm);\draw[line width=0.2mm,dashed, gray!95] (18.75cm,0cm) -- (18.75cm,25cm);\draw[line width=2mm, gray!95] (18.75cm,25cm) -- (18.75cm,30cm);
%séparationplaqueH
\draw[line width=2mm, gray!95] (-5cm,6.25cm) -- (0cm,6.25cm);\draw[line width=0.2mm,dashed, gray!95] (0cm,6.25cm) -- (25cm,6.25cm);\draw[line width=2mm, gray!95] (25cm,6.25cm) -- (30cm,6.25cm);
\draw[line width=2mm, gray!95] (-5cm,12.5cm) -- (0cm,12.5cm);\draw[line width=0.2mm,dashed, gray!95] (0cm,12.5cm) -- (25cm,12.5cm);\draw[line width=2mm, gray!95] (25cm,12.5cm) -- (30cm,12.5cm);
\draw[line width=2mm, gray!95] (-5cm,18.75cm) -- (0cm,18.75cm);\draw[line width=0.2mm,dashed, gray!95] (0cm,18.75cm) -- (25cm,18.75cm);\draw[line width=2mm, gray!95] (25cm,18.75cm) -- (30cm,18.75cm);
%
%%
%
%Placement noeud de mesures
%1%2%3
\fill [gray!25, draw=black, very thick](6.25cm,21.875cm) circle (5mm) ; \node at (6.25cm,21.875cm) {\huge{1}};
\fill [gray!25, draw=black, very thick](12.5cm,21.875cm) circle (5mm) ; \node at (12.5cm,21.875cm) {\huge{2}};
\fill [gray!25, draw=black, very thick](18.75cm,21.875cm) circle (5mm) ; \node at (18.75cm,21.875cm) {\huge{3}};
%4a14
%
\foreach \x in {3.125cm, 6.25cm, 7.8125cm, 9.375cm} {
    \foreach \n in {4,5,...,7} {
        \fill [gray!25, draw=black, very thick] (\x,12.5) circle (5mm);
        \node at (\x,12,5) {$\n$};
    }}
%\draw [>=stealth,red, very thick,<->] (-9cm,8mm) -- (5.4cm,8mm);\node[scale=1.5,red,rotate=15] at (-1.3cm,12mm) {D\'efaut \`a XX.XX m du bossage};
\end{tikzpicture}
\end{document}
djaiff
Utilisateur confirmé
Utilisateur confirmé
Messages : 10
Inscription : mardi 21 septembre 2021, 12:59
Statut actuel : Autre

Re: [tikz] Boucle foreach

Message non lu par djaiff »

Je souhaite que les ronds vides contiennent des chiffres allant de 4 à 7 pour cette boucle par exemple
Pièces jointes
essainum4.png
jmd
Utilisateur confirmé
Utilisateur confirmé
Messages : 80
Inscription : samedi 06 février 2016, 11:08

Re: [tikz] Boucle foreach

Message non lu par jmd »

Bonjour,

C'est normal que ça ne marche pas et que vous avez des 7 aux quatre noeuds :
chaque valeur de \x prend successivement les 4 valeurs de \n, la dernière étant 7 ; donc à la fin de votre double boucle, quatre 7 sont affichés.

Il y a en plus une faute de frappe : (\x,12,5) doit devenir (\x,12.5)

Il suffit d'écrire les 4 lignes qui suivent à la place de votre double boucle.

Code : Tout sélectionner

\draw[gray!25, draw=black, very thick] (3.125cm,12.5) circle (5mm) ;\node at (3.125cm,12.5) {4};
\draw[gray!25, draw=black, very thick] (6.25cm,12.5) circle (5mm); \node at (6.25cm,12.5){5};
\draw[gray!25, draw=black, very thick] (7.8125cm,12.5) circle (5mm); \node at (7.8125cm,12.5){6};
\draw[gray!25, draw=black, very thick] (9.375cm,12.5) circle (5mm); \node at (9.375cm,12.5) {7};
iMac 27'' Intel Core i9 10 coeurs, 40 Go Ram, MacBook Pro 16", TeX Live
djaiff
Utilisateur confirmé
Utilisateur confirmé
Messages : 10
Inscription : mardi 21 septembre 2021, 12:59
Statut actuel : Autre

Re: [tikz] Boucle foreach

Message non lu par djaiff »

Merci pour l'erreur, je viens de la corriger.;)
Je sais que je peux écrire chaque ligne. L'objectif étant de ne pas à le faire car dans l'exemple je vais jusqu'à 7 mais en réalité je dois faire de 4 à 14 sur la première ligne et cela sur plusieurs lignes avec une numérotation différentes comme le montre la photo ci-joint.
Pièces jointes
essainum5.png
jmd
Utilisateur confirmé
Utilisateur confirmé
Messages : 80
Inscription : samedi 06 février 2016, 11:08

Re: [tikz] Boucle foreach

Message non lu par jmd »

Si après le \usepackage{tikz} tu charge le package \usetikzlibrary{shapes}, tu peux simplifier les instructions d'écriture des noeuds.

Code : Tout sélectionner

\node[draw,circle,fill=gray!25] at (3.125cm,12.5) {\huge 4};
En attendant une solution avec une boucle...
iMac 27'' Intel Core i9 10 coeurs, 40 Go Ram, MacBook Pro 16", TeX Live
jmd
Utilisateur confirmé
Utilisateur confirmé
Messages : 80
Inscription : samedi 06 février 2016, 11:08

Re: [tikz] Boucle foreach

Message non lu par jmd »

Encore mieux, créer un style.

Code : Tout sélectionner

\tikzstyle{noeud}=[draw,circle,fill=gray!25]
\node[noeud] at (3.125cm,12.5) {\huge 4};
iMac 27'' Intel Core i9 10 coeurs, 40 Go Ram, MacBook Pro 16", TeX Live
djaiff
Utilisateur confirmé
Utilisateur confirmé
Messages : 10
Inscription : mardi 21 septembre 2021, 12:59
Statut actuel : Autre

Re: [tikz] Boucle foreach

Message non lu par djaiff »

Ca, ça me plait bien, il me manque plus que la solution avec le foreach, pour ne pas écrire 60 lignes. :)

Je vais essayer d'adapter ce bout de code.

Code : Tout sélectionner

\def\array{$X$, $Y$, $e^{x+z}$, $p$, $t$, $q$}
     \foreach [count=\i] \x in \array {
            \node[label={\x}] (\i) at (3\i, 0) {};
     }
djaiff
Utilisateur confirmé
Utilisateur confirmé
Messages : 10
Inscription : mardi 21 septembre 2021, 12:59
Statut actuel : Autre

Re: [tikz] Boucle foreach

Message non lu par djaiff »

Voilà, mon code modifié qui fonctionne, mais qui peut être amélioré sur la/les boucles foreach.

Code : Tout sélectionner

\documentclass{standalone}
        \usepackage{graphics}
        \usepackage{tikz}
        \usepackage{pgfplots}
        \usepackage[frenchb]{babel}
          \usepackage[OT1]{fontenc}
        \usepackage[babel=true,kerning=true]{microtype}
        \usepackage{calc}
\usepackage{xcolor}
\usepackage{verbatim}
\usepackage[active,tightpage]{preview}
\usepackage{pgffor}
%

        \pagestyle{empty}
        \usetikzlibrary{patterns,plotmarks, positioning,spy, calc, topaths,shapes,shadings,calc}
        \pgfdeclarelayer{background}
        \pgfdeclarelayer{foreground}
        \pgfsetlayers{background,main,foreground}
          \pgfplotsset{compat=1.7}
					\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{5pt}%
\tikzset{>=latex}
        \begin{document}
%
%%
%
\tikzstyle{noeud}=[draw,circle,minimum size=12mm,fill=gray!25]
%
\begin{tikzpicture}
%définition plaque
\draw[line width=0.5mm, gray!95] (0cm,0cm) rectangle (25cm,25cm);
%définition angle de la plaque
\draw[line width=2mm, black!95] (2cm,0cm) -- (0cm,0cm)-- (0cm,2cm);
\draw[line width=2mm, black!95] (0cm,23cm) -- (0cm,25cm)-- (2cm,25cm);
\draw[line width=2mm, black!95] (23cm,25cm) -- (25cm,25cm)-- (25cm,23cm);
\draw[line width=2mm, black!95] (25cm,2cm) -- (25cm,0cm)-- (23cm,0cm);
%
%séparation plaqueVertical
\draw[line width=2mm, gray!95] (6.25cm,-5cm) -- (6.25cm,0cm);\draw[line width=0.2mm,dashed, gray!95] (6.25cm,0cm) -- (6.25cm,25cm);\draw[line width=2mm, gray!95] (6.25cm,25cm) -- (6.25cm,30cm);
\draw[line width=2mm, gray!95] (12.5cm,-5cm) -- (12.5cm,0cm);\draw[line width=0.2mm,dashed, gray!95] (12.5cm,0cm) -- (12.5cm,25cm);\draw[line width=2mm, gray!95] (12.5cm,25cm) -- (12.5cm,30cm);
\draw[line width=2mm, gray!95] (18.75cm,-5cm) -- (18.75cm,0cm);\draw[line width=0.2mm,dashed, gray!95] (18.75cm,0cm) -- (18.75cm,25cm);\draw[line width=2mm, gray!95] (18.75cm,25cm) -- (18.75cm,30cm);
%séparation plaqueHorizontal
\draw[line width=2mm, gray!95] (-5cm,6.25cm) -- (0cm,6.25cm);\draw[line width=0.2mm,dashed, gray!95] (0cm,6.25cm) -- (25cm,6.25cm);\draw[line width=2mm, gray!95] (25cm,6.25cm) -- (30cm,6.25cm);
\draw[line width=2mm, gray!95] (-5cm,12.5cm) -- (0cm,12.5cm);\draw[line width=0.2mm,dashed, gray!95] (0cm,12.5cm) -- (25cm,12.5cm);\draw[line width=2mm, gray!95] (25cm,12.5cm) -- (30cm,12.5cm);
\draw[line width=2mm, gray!95] (-5cm,18.75cm) -- (0cm,18.75cm);\draw[line width=0.2mm,dashed, gray!95] (0cm,18.75cm) -- (25cm,18.75cm);\draw[line width=2mm, gray!95] (25cm,18.75cm) -- (30cm,18.75cm);
%
%Placement noeud de mesures
%1%2%3
\node[noeud] at (6.25cm,21.875cm) {\Large 1};
\node[noeud] at (12.5cm,21.875cm) {\Large 2};
\node[noeud] at (18.75cm,21.875cm) {\Large 3};
%4a14
 \foreach \x / \label in 
 {3.125cm/4, 6.25cm/5, 7.8125cm/6, 9.375cm/7, 10.9375cm/8, 12.5cm/9, 14.0625cm/10, 15.625cm/11, 17.1875cm/12, 18.75cm/13, 21.875/14}
 {   \node[noeud] at (\x,18.75cm) {\Large \label};   }
%15a17
\node[noeud] at (6.25cm,17.1875cm) {\Large 15};
\node[noeud] at (12.5cm,17.1875cm) {\Large 16};
\node[noeud] at (18.75cm,17.1875cm) {\Large 17};
%18a22
 \foreach \x / \label in 
 {6.25cm/18, 9.375cm/19, 12.5cm/20, 15.625cm/21, 18.75cm/22}
 {   \node[noeud] at (\x,15.625cm) {\Large \label};   }
%23a25
\node[noeud] at (6.25cm,14.0625cm) {\Large 23};
\node[noeud] at (12.5cm,14.0625cm) {\Large 24};
\node[noeud] at (18.75cm,14.0625cm) {\Large 25};
%26a36 
\foreach \x / \label in 
 {3.125cm/26, 6.25cm/27, 7.8125cm/28, 9.375cm/29, 10.9375cm/30, 12.5cm/31, 14.0625cm/32, 15.625cm/33, 17.1875cm/34, 18.75cm/35, 21.875/36}
 {   \node[noeud] at (\x,12.5cm) {\Large \label};   }
%37a39
\node[noeud] at (6.25cm,10.9375cm) {\Large 37};
\node[noeud] at (12.5cm,10.9375cm) {\Large 39};
\node[noeud] at (18.75cm,10.9375cm){\Large 40};
%40a44
 \foreach \x / \label in 
 {6.25cm/40, 9.375cm/41, 12.5cm/42, 15.625cm/43, 18.75cm/44}
 {   \node[noeud] at (\x,9.375cm) {\Large \label};   }
%45a47
\node[noeud] at (6.25cm,7.8125cm) {\Large 45};
\node[noeud] at (12.5cm,7.8125cm) {\Large 46};
\node[noeud] at (18.75cm,7.8125cm){\Large 47};
%48a58
\foreach \x / \label in 
 {3.125cm/48, 6.25cm/49, 7.8125cm/50, 9.375cm/51, 10.9375cm/52, 12.5cm/53, 14.0625cm/54, 15.625cm/55, 17.1875cm/56, 18.75cm/57, 21.875/58}
{   \node[noeud] at (\x,6.25cm) {\Large \label};   }
%59a61
\node[noeud] at (6.25cm,3.125cm) {\Large 59};
\node[noeud] at (12.5cm,3.125cm) {\Large 60};
\node[noeud] at (18.75cm,3.125cm){\Large 61};
%
\end{tikzpicture}
\end{document}
Voilà, si ça peut servir à d'autres, mon code fonctionnel. Si certains voient une piste d'amélioration, je suis preneur. ;)
Pièces jointes
schema.png
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2314
Inscription : samedi 29 décembre 2007, 00:58

Re: [tikz] Boucle foreach

Message non lu par projetmbc »

Cela sert à quoi. Simple curiosité.
djaiff
Utilisateur confirmé
Utilisateur confirmé
Messages : 10
Inscription : mardi 21 septembre 2021, 12:59
Statut actuel : Autre

Re: [tikz] Boucle foreach

Message non lu par djaiff »

Un schéma de pointage pour des mesures sur plaque acier. ;)
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2314
Inscription : samedi 29 décembre 2007, 00:58

Re: [tikz] Boucle foreach

Message non lu par projetmbc »

Merci.