Nombre variable d'arguments d'une commande

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.

Nombre variable d'arguments d'une commande

Messagepar evariste_G » Mercredi 10 Juin 2009, 16:41

Bonjour.

J'avais envie de créer une commande \toto{arg1,arg2,...,arg_n}, où le nombre d'arguments serait variable. Le problème, c'est que je ne vois pas vraiment comment faire.
Dans la commande \toto, je souhaite faire une boucle pour un indice variant de 1 au nombre d'arguments.

Une idée peut-être ?
Mathématiques, LaTeX et Python : http://www.mathweb.fr
Cours de math, aide à distance : https://cours-particuliers-bordeaux.fr/
evariste_G
Téra-utilisateur
 
Messages: 1422
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: Nombre variable d'arguments d'une commande

Messagepar rebouxo » Mercredi 10 Juin 2009, 20:39

C'est pas tout a fait la même chose qu'un nombre variable d'argument. Là j'ai quand même l'impression que tu veux faire un argument de taille variable (une liste ?) En latex (pas en tex) une macro ne peut avoir que 9 arguments (bon on peut ruser).

Sans savoir vraiment ce que tu veux faire, je dirais bien l'extension xarg ou de l'extension xstring.

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

Re: Nombre variable d'arguments d'une commande

Messagepar evariste_G » Jeudi 11 Juin 2009, 11:08

Le package xargs ne me convient pas. xstring ets plus proche de ce qui pourrait m'aider, mais c'est super lourd.
En gros, je veux créer une macro \diag{n_1,n_2,...,n_p} qui me représente un diagramme en rectangle des p valeurs mises, sachant que p n'est pas connu.
Mathématiques, LaTeX et Python : http://www.mathweb.fr
Cours de math, aide à distance : https://cours-particuliers-bordeaux.fr/
evariste_G
Téra-utilisateur
 
Messages: 1422
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant

Re: Nombre variable d'arguments d'une commande

Messagepar kojak » Jeudi 11 Juin 2009, 12:03

evariste_G a écrit:En gros, je veux créer une macro \diag{n_1,n_2,...,n_p} qui me représente un diagramme en rectangle des p valeurs mises, sachant que p n'est pas connu.

si je comprens bien tu veux faire des stats avec ça. As tu essayé le package TIKZ d'Alain Matthes, en particulier le
tkz-tukey.sty
pas d'aide par MP
kojak
Modérateur
 
Messages: 10397
Inscription: Samedi 18 Novembre 2006, 19:50
Statut actuel: Actif et salarié | Enseignant

Re: Nombre variable d'arguments d'une commande

Messagepar evariste_G » Jeudi 11 Juin 2009, 14:05

En fait, j'utilise déjà les packages d'A. Matthes, mais je veux construire une macro pour faire des diagrammes en 3D. Mais outre cela, je voudrais tout simplement savoir faire une macro avec un nombre variable de paramètres .

EDIT : Bon, j'ai trouvé une astuce, mais il me reste quelques détails à régler et je n'arrive pas à comprendre.

Le code suivant :

Code: Tout sélectionner
\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{xcolor}
\usepackage{tikz}
\usepackage{xifthen}
\usetikzlibrary[arrows,fadings]

\newcommand{\barre}[6]{ % n° colonne, largeur, hauteur, coefficient de profondeur, couleur, texte
   \def\Ey{#3}
   \pgfmathparse{(#1-1)*#2} \let\Ex\pgfmathresult
   \pgfmathparse{#4*cos(-135)+\Ex} \let\Ax\pgfmathresult
   \pgfmathparse{#4*sin(-135)+\Ey} \let\Ay\pgfmathresult
   \pgfmathparse{\Ax+#2} \let\Bx\pgfmathresult
   \pgfmathparse{\Ex+#2} \let\Fx\pgfmathresult 
   \pgfmathparse{\Ay-#3} \let\Cy\pgfmathresult
   \filldraw[fill=#5,draw=black] (\Ax,\Ay) rectangle +(#2,-#3);
   \filldraw[fill=#5!50,draw=black] (\Ax,\Ay) -- (\Ex,\Ey) -- (\Fx,\Ey) -- (\Bx,\Ay) -- cycle;
   \filldraw[fill=#5!20,draw=black] (\Bx,\Ay) -- (\Fx,\Ey) -- (\Fx,0) -- (\Bx,\Cy) -- cycle;
   \pgfmathparse{\Ex+#2/4} \let\texteB\pgfmathresult
   \node[rotate=45,below left] at (\texteB,-.2) {\begin{tiny}\textcolor{#5}{#6}\end{tiny}};
}

\newcommand{\repere}[3]{ % xmax, ymax, profondeur max
   \tikzfading[name=fade right,left color=transparent!0,right color=transparent!100]
   \tikzfading[name=fade left,left color=transparent!100,right color=transparent!0]
   \pgfmathparse{#3*cos(-135)} \let\X\pgfmathresult
   \pgfmathparse{#3*sin(-135)} \let\Y\pgfmathresult
   \pgfmathparse{2*#1/3} \let\XXr\pgfmathresult
   \pgfmathparse{#1/3} \let\Xr\pgfmathresult
   \pgfmathparse{\Y+#2-0.5} \let\ZZ\pgfmathresult
   \pgfmathparse{#2-0.5} \let\YY\pgfmathresult
   \pgfmathparse{#1-0.3} \let\XX\pgfmathresult
   \pgfmathparse{\X+#1} \let\XXX\pgfmathresult
   \shade [inner color=gray,outer color=white] (0,0) -- (\X,\Y) .. controls (\Xr,-#3) and (\XXr,\Y) .. (#1,0.2) -- cycle; 
   \fill[gray,path fading=fade right] (0,0) rectangle +(#1,\YY);
   \fill[gray,path fading=fade left] (0,0) -- (0,\YY) -- (\X,\ZZ) -- (\X,\Y) -- cycle;
   \draw[->,>=stealth'] (0,0) -- (#1,0);
   \draw[->,>=stealth'] (0,0) -- (0,#2);   
   \draw[->,>=stealth'] (0,0) -- (\X,\Y);     
   \foreach \i in {1,2,...,\YY}
   {
      \pgfmathparse{(#3-0.2)*cos(-135)} \let\ZX\pgfmathresult
      \pgfmathparse{(#3-0.2)*sin(-135)+\i} \let\ZY\pgfmathresult
      \draw[dotted] (\ZX,\ZY) -- (0,\i) -- (\XX,\i);
     
   }
}

\newcommand{\totoD}[1]{%
   \begin{tikzpicture}
   \repere{5}{6}{1}
   \foreach \n/\hauteur/\largeur/\coefprof/\couleur/\texte in {#1}
   {
      \ifthenelse{\isempty{\largeur}}{\pgfmathparse{\textwidth/(\n+1)} \let\largeur\pgfmathresult}{}
      \ifthenelse{\isempty{\coefprof}}{\def\coefprof{0.33}}{}
      \ifthenelse{\isempty{\couleur}}{\def\couleur{blue}}{}                 
      \barre{\n}{\largeur}{\hauteur}{\coefprof}{\couleur}{\texte}
   }
   \end{tikzpicture}
}

\begin{document}

\totoD{1/3/1/0.33/red/Bus,%
       2/5/1/0.33/green/Vélo,%
       3/2/1/0.33/yellow/A pieds}

\end{document}


donne :

diagramme.jpg
diagramme.jpg (9.28 Kio) Vu 1885 fois


Mon problème est le suivant :

Quand je met le code :

Code: Tout sélectionner
\totoD{1/3/ / / / ,%
       2/5/ / / / ,%
       3/2/ / / / }


ça ne fonctionne pas malgré la présence du \ifthenelse dans la macro \totoD ...

Avez-vous des explications par hasard ?
Mathématiques, LaTeX et Python : http://www.mathweb.fr
Cours de math, aide à distance : https://cours-particuliers-bordeaux.fr/
evariste_G
Téra-utilisateur
 
Messages: 1422
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant

Re: Nombre variable d'arguments d'une commande

Messagepar pg » Vendredi 12 Juin 2009, 11:35

C'est tes ifthenelse qui ne font pas leur travail correctement (et aussi toi qui ne tapes pas ce qu'il faut : taper "/ /" donne une espace, pas une commande vide).

Remplace tes tests par des trucs du genre

Code: Tout sélectionner
\ifx\couleur\empty\def\couleur{blue}\fi

et ensuite fait attention à utiliser

Code: Tout sélectionner
\totoD{1/3////,%
       2/5////,%
       3/2////}


Voici le code complet :

Code: Tout sélectionner
\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{xcolor}
\usepackage{tikz}
\usetikzlibrary[arrows,fadings]

\newcommand{\barre}[6]{ % n° colonne, largeur, hauteur, coefficient de profondeur, couleur, texte
   \def\Ey{#3}
   \pgfmathparse{(#1-1)*#2} \let\Ex\pgfmathresult
   \pgfmathparse{#4*cos(-135)+\Ex} \let\Ax\pgfmathresult
   \pgfmathparse{#4*sin(-135)+\Ey} \let\Ay\pgfmathresult
   \pgfmathparse{\Ax+#2} \let\Bx\pgfmathresult
   \pgfmathparse{\Ex+#2} \let\Fx\pgfmathresult
   \pgfmathparse{\Ay-#3} \let\Cy\pgfmathresult
   \filldraw[fill=#5,draw=black] (\Ax,\Ay) rectangle +(#2,-#3);
   \filldraw[fill=#5!50,draw=black] (\Ax,\Ay) -- (\Ex,\Ey) -- (\Fx,\Ey) -- (\Bx,\Ay) -- cycle;
   \filldraw[fill=#5!20,draw=black] (\Bx,\Ay) -- (\Fx,\Ey) -- (\Fx,0) -- (\Bx,\Cy) -- cycle;
   \pgfmathparse{\Ex+#2/4} \let\texteB\pgfmathresult
   \node[rotate=45,below left] at (\texteB,-.2) {\begin{tiny}\textcolor{#5}{#6}\end{tiny}};
}

\newcommand{\repere}[3]{ % xmax, ymax, profondeur max
   \tikzfading[name=fade right,left color=transparent!0,right color=transparent!100]
   \tikzfading[name=fade left,left color=transparent!100,right color=transparent!0]
   \pgfmathparse{#3*cos(-135)} \let\X\pgfmathresult
   \pgfmathparse{#3*sin(-135)} \let\Y\pgfmathresult
   \pgfmathparse{2*#1/3} \let\XXr\pgfmathresult
   \pgfmathparse{#1/3} \let\Xr\pgfmathresult
   \pgfmathparse{\Y+#2-0.5} \let\ZZ\pgfmathresult
   \pgfmathparse{#2-0.5} \let\YY\pgfmathresult
   \pgfmathparse{#1-0.3} \let\XX\pgfmathresult
   \pgfmathparse{\X+#1} \let\XXX\pgfmathresult
   \shade [inner color=gray,outer color=white] (0,0) -- (\X,\Y) .. controls (\Xr,-#3) and (\XXr,\Y) .. (#1,0.2) -- cycle;
   \fill[gray,path fading=fade right] (0,0) rectangle +(#1,\YY);
   \fill[gray,path fading=fade left] (0,0) -- (0,\YY) -- (\X,\ZZ) -- (\X,\Y) -- cycle;
   \draw[->,>=stealth'] (0,0) -- (#1,0);
   \draw[->,>=stealth'] (0,0) -- (0,#2);   
   \draw[->,>=stealth'] (0,0) -- (\X,\Y);     
   \foreach \i in {1,2,...,\YY}
   {
      \pgfmathparse{(#3-0.2)*cos(-135)} \let\ZX\pgfmathresult
      \pgfmathparse{(#3-0.2)*sin(-135)+\i} \let\ZY\pgfmathresult
      \draw[dotted] (\ZX,\ZY) -- (0,\i) -- (\XX,\i);
     
   }
}

\newcommand{\totoD}[1]{%
   \begin{tikzpicture}
   \repere{5}{6}{1}
   \foreach \n/\hauteur/\largeur/\coefprof/\couleur/\texte in {#1}
   {
      \ifx\largeur\empty\def\largeur{1}\fi
      \ifx\coefprof\empty\def\coefprof{0.33}\fi
      \ifx\couleur\empty\def\couleur{blue}\fi
      \barre{\n}{\largeur}{\hauteur}{\coefprof}{\couleur}{\texte}
   }
   \end{tikzpicture}
}

\begin{document}

\totoD{1/3////,%
       2/5////,%
       3/2////}

\end{document}
pg
Modérateur
 
Messages: 2592
Inscription: Jeudi 14 Juin 2007, 23:31

Re: Nombre variable d'arguments d'une commande

Messagepar evariste_G » Vendredi 12 Juin 2009, 13:42

Ah génial ! C'est ce qu'il me fallait. Tout roule ! Il me reste plus qu'une chose à voir, mais là, je vais poster un autre sujet car ça n'a rien à voir. Merci encore !
Mathématiques, LaTeX et Python : http://www.mathweb.fr
Cours de math, aide à distance : https://cours-particuliers-bordeaux.fr/
evariste_G
Téra-utilisateur
 
Messages: 1422
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant


Retourner vers LaTeX

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Google [Bot], Google Adsense [Bot], Grapeshot [Crawler], Proximic [Spider] et 19 invités