Problème avec ifx

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.
VMOVMO
Utilisateur débutant
Utilisateur débutant
Messages : 6
Inscription : mardi 10 septembre 2024, 23:08
Statut actuel : Enseignant

Problème avec ifx

Message non lu par VMOVMO »

Bonjour,

Je cherche à faire une feuille qui permettre de créer des figures géométriques simples dans un encadré en tête de page, pour pouvoir faire des questions dessus ultérieurement.

Mais j'ai un gros bug, qui me semble être sur le \ifx ; sans doute un problème de syntaxe. La condition n'est jamais remplie pour aucun élément de la boucle...

Merci d'avance !

Code : Tout sélectionner

\documentclass{article}
\usepackage[a4paper, margin=0.5cm]{geometry}
\usepackage{tikz}
\pagestyle{empty} % Supprime les numéros de page

\begin{document}
	
	\begin{center}
		\begin{tikzpicture}
			% Rectangle aux coins arrondis occupant toute la largeur de la page
			\draw[rounded corners=15pt, thick] (-7.5, -1.5) rectangle (7.5, 1.5);
			
			% Définition des couleurs et des formes
			\def\colors{{"red", "green", "yellow", "blue", "violet", "black", "orange"}}
			\def\shapes{{"circle", "square", "triangle"}}
			

			\pgfmathsetmacro{\numColors}{8} % Nombre de couleurs
			\pgfmathsetmacro{\numShapes}{9} % Nombre de formes
			\pgfmathsetmacro{\numFigures}{int(min(\numColors, \numShapes))} % Nombre de figures à dessiner
		    \node[black] at (2, -7.5) {Nombre de figures: \numFigures}; % Affichage du nombre de figures; pour vérifier le code

		    % Largeur totale disponible pour les figures
			\pgfmathsetmacro{\width}{15} % Largeur du rectangle (ajustée à la page)
			\pgfmathsetmacro{\figWidth}{\width/\numFigures} % Largeur de chaque figure

			
			
			% Position et dimensions des formes
			\foreach \i in {0,..., 9} {
				\pgfmathsetmacro{\x}{-6.75 + \i * 1.5} % Position x pour chaque forme (espacement)
				\pgfmathsetmacro{\c}{int(mod(\i, 7))} % Sélection de la couleur
				\pgfmathsetmacro{\s}{int(mod(\i, 3))} % Sélection de la forme
				\pgfmathparse{\colors[\c]} \edef\currentcolor{\pgfmathresult} % Couleur actuelle
				\pgfmathparse{\shapes[\s]} \edef\currentshape{\pgfmathresult} % Forme actuelle
		    	\node[black] at (-3, -7.5 - \i) {Figure  \i : \currentshape}; % Affichage pour test
		    	
		    		
				% Dessin de la forme
				
				\ifx\currentshape = circle
					\fill[\currentcolor] (\x, -6) circle (0.6); % Cercle
	        	\fi

					\fill[\currentcolor] (\x-0.5, -3.5) rectangle (\x+0.5, -2.5); % Carré

					\fill[\currentcolor] (\x, 0.6) -- (\x-0.5, -0.5) -- (\x+0.5, -0.5) -- cycle; % Triangle

			}
		\end{tikzpicture}
	\end{center}
	
\end{document}

Dans un premier temps, j'essaye de créer ces figures, mais cela ne fonctionne pas ; l'idée, dans un second temps, est de pouvoir avoir un code qui puisse s'adapter automatiquement au nombre d'éléments dans les lsites du début ; et de pouvoir mettre dans une troisième liste des noms associés aux figues.
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2292
Inscription : samedi 29 décembre 2007, 00:58

Re: Problème avec ifx

Message non lu par projetmbc »

Le problème est dans le test, car vous souhaitez comparer des chaînes de caractères, mais $\LaTeX$ raisonne sur des tokens. J'ai donc changé la logique et utilisé le package ifthen. Je garde la logique, même si ici, j'aurais tendance à passer via $\LaTeX3$, mais ceci est une autre histoire plus verbeuse, mais aussi plus flexible.

Afficher ou masquer le code

VMOVMO
Utilisateur débutant
Utilisateur débutant
Messages : 6
Inscription : mardi 10 septembre 2024, 23:08
Statut actuel : Enseignant

Re: Problème avec ifx

Message non lu par VMOVMO »

Merci beaucoup ! Cela fonctionne parfaitement !

Si cela n'est pas abuser, j'ai maintenant un autre problème : je n'arrive pas à utiliser les variables numériques.
Par exemple :
- J'aimerais que la ligne :

Code : Tout sélectionner

\pgfmathsetmacro{\numColors}{8} % Nombre de couleurs
permette le calcul automatique du nombre d'éléments de la liste
- dans la boucle \foreach, j'aimerais remplacer le 9 par \numFigures ; mais si je le remplace tel quel, ça bugge...

Merci d'avance !

Code : Tout sélectionner

\documentclass{article}

\usepackage[a4paper, margin=0.5cm]{geometry}
\usepackage{tikz}
\usepackage{ifthen}

\pagestyle{empty} % Supprime les numéros de page

\begin{document}
	
	\begin{center}
		\begin{tikzpicture}
			% Rectangle aux coins arrondis occupant toute la largeur de la page
			\draw[rounded corners=15pt, thick] (-8, -1.8) rectangle (8, 1.5);
			
			% Définition des couleurs et des formes
			\def\colors{{"red", "green", "yellow", "blue", "violet", "black", "orange"}}
			\def\shapes{{"circle", "square", "triangle"}}
			\def\names{{"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", }}

			
			\pgfmathsetmacro{\numColors}{8} % Nombre de couleurs
			\pgfmathsetmacro{\numShapes}{9} % Nombre de formes
			\pgfmathsetmacro{\numFigures}{int(min(\numColors, \numShapes))} % Nombre de figures à dessiner
			\node[black] at (2, -7.5) {Nombre de figures: \numFigures}; % Affichage du nombre de figures; pour vérifier le code
			
			% Largeur totale disponible pour les figures
			\pgfmathsetmacro{\width}{15} % Largeur du rectangle (ajustée à la page)
			\pgfmathsetmacro{\figWidth}{\width/\numFigures} % Largeur de chaque figure
			
			% Position et dimensions des formes
			\foreach \i in {0,..., 9} {
				\pgfmathsetmacro{\x}{-6.75 + \i * 1.5} % Position x pour chaque forme (espacement)
				\pgfmathsetmacro{\c}{int(mod(\i, 7))} % Sélection de la couleur
				\pgfmathsetmacro{\s}{int(mod(\i, 3))} % Sélection de la forme
				
				\pgfmathparse{\colors[\c]}
				\edef\currentcolor{\pgfmathresult} % Couleur actuelle
				
				\pgfmathparse{\shapes[\s]}
				\edef\currentshape{\pgfmathresult} % Forme actuelle

				\pgfmathparse{\names[\i]}
				\edef\currentname{\pgfmathresult} % Forme actuelle

				
				\node[black] at (\x, -1) {\currentname}; % 
				\node[black] at (-3, -7.5 - \i) {Figure  \i : \currentname}; % Affichage pour test
				
				% Dessin de la forme
				\ifthenelse{\s = 0}{
					\fill[\currentcolor] (\x, 0) circle (0.6); % Cercle
				}{
					\ifthenelse{\s= 1}{
						\fill[\currentcolor] (\x-0.5, -0.5) rectangle (\x+0.5, 0.5); % Carré
					}{
						\fill[\currentcolor] (\x, 0.6) -- (\x-0.5, -0.5) -- (\x+0.5, -0.5) -- cycle; % Triangle
					}
				}
			}
		\end{tikzpicture}
	\end{center}
	
\end{document}
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2292
Inscription : samedi 29 décembre 2007, 00:58

Re: Problème avec ifx

Message non lu par projetmbc »

J'ai peur de mal comprendre car \foreach \i in {1,..., \numFigures} fonctionne. Le rendu n'est pas correct, mais là, c'est juste une petite erreur d'algorithmique facile à régler.