J'avoue, je me suis peut-être avancé en disant que c'était géré dynamiquement. Mais je suis loin d'être à ce niveau.un bon petit a écrit :Sans vouloir être désagréable, ce n'est pas « géré dynamiquement » car si vous ajoutez un jour, le graphique foire. Pareil si une valeur est supérieure à 50...Mikelenain a écrit :Voilà la solution avec un tableau ET un diagramme en bâtons, gérés dynamiquement
Dans l'immédiat (je progresse lentement dans mon apprentissage) j'essaie de voir si je pourrais faire afficher qu'un certain nombre des arguments d'une liste et non l'intégral en modifiant :
Code : Tout sélectionner
\foreachitem\jourcourant\in\jours{% pour chaque effectif (dans la boucle, chaque effectif sera mis dans \jourcourant)
\eaddtotok\tabtoksa{\expandafter&\jourcourant}
}%
Code : Tout sélectionner
\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[francais]{babel}
\usepackage[T1]{fontenc}
\usepackage{multido}
\usepackage{listofitems}
\usepackage{pst-eucl, pst-plot}
\usepackage{pstricks-add,pst-node}
\usepackage{ifthen}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\eaddtotok#1#2{#1\expandafter\expandafter\expandafter{\expandafter\the\expandafter#1#2}}
\newtoks\tabtoksa\newtoks\tabtoksb
\def\buildtab#1#2{% #1= liste des valeurs #2= liste des effectifs
\begingroup% ouvrir un groupe dans lequel se fait tout le processus
\setsepchar{,}% déclarer que la virgule est le séparateur
\ignoreemptyitems% ignorer les valeurs vides, par exemple "1,,3" sera lu comme "1,3"
% \readlist*\jours{#1}% Lire les noms des jours et supprimer les espaces avant et après chacun et les ranger dans la variable de type tableau \jours
% \readlist*\effectifs{#2}% lire les effectifs et supprimer les espaces avant et après chacun et les ranger dans la variable de type tableau \effectifs
\expandafter\buildtaba\expandafter{\number\numexpr\effectifslen+1}% transmettre à \buildtaba le nombre de valeurs+1
}
\def\buildtaba#1{% #1= nombre de colonnes du tableau
\tabtoksa{\jours[-1]}\tabtoksb{\effectifs[-1]}% initialiser les registre de tokens (contenus de la 1re colonne de chaque ligne)
% \tabtoksa contiendra à la fin le code de la 1re ligne et \tabtoksb celui de la 2e
\foreachitem\jourcourant\in\jours{% pour chaque effectif (dans la boucle, chaque effectif sera mis dans \jourcourant)
\eaddtotok\tabtoksa{\expandafter&\jourcourant}
}%
\foreachitem\effectifcourant\in\effectifs{% pour chaque effectif (dans la boucle, chaque effectif sera mis dans \effectifcourant)
\eaddtotok\tabtoksb{\expandafter&\effectifcourant}% ajouter à \tabtoksb "&" puis l'effectif en cours
}%
\begin{tabular}{*{#1}{|c}|}\hline% préambule du tableau (il y a #1 colonnes toutes centrées)
\the\tabtoksa\\\hline% extraire du registre \tabtoksa son contenu puis tracer une ligne horizontale
\the\tabtoksb\\\hline% extraire du registre \tabtoksb son contenu puis tracer une ligne horizontale
\end{tabular}% fin du tableau
\endgroup% on ferme le groupe, le boulot est fini
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\builddiagbatons}%[2]
{
\psset{xunit=1cm, yunit=0.1cm}
\begin{pspicture*}(-1,-12)(7,70)
\multido{\i=1+1}{5}
{
\psline[linestyle=dotted](\i,0)(\i,50)
\psline[linestyle=solid](\i,-1)(\i,1)
\rput[Br]{45}(\i,-3){\jours[\i]}
\psline{-*}(\i,0)(\i,\effectifs[\i])
}
\multido{\i=10+10}{5}
{
\psline[linestyle=dotted](0,\i)(5,\i)
\psline[linestyle=solid](-0.1,\i)(0.1,\i)
\rput[Br](-0.5,\i){\i}
}
\psline[arrowscale=2]{->}(0,0)(6,0)
\rput(6,-5){\jours[-1]}
\psline[arrowscale=2]{->}(0,0)(0,60)
\rput(0.5,65){\effectifs[-1]}
\end{pspicture*}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\readlist*\jours{Lundi,Mardi,Mercredi,Jeudi,Vendredi,Jours}
\readlist*\effectifs{20,15,45,20,15,Durées (en min)}
%\buildtab{Lundi,Mardi,Mercredi,Jeudi,Vendredi}{20,15,45,20,15}
\buildtab{\jours}{\effectifs}
\builddiagbatons
\end{document}
$\begin{tabular}{ *{7}{ |c } |}
\hline
Jours & Lundi & Mardi & Mercredi & Jeudi & Vendredi & Jours \\
\hline
Durée (en min) & 20 & 15 & 45 & 20 & 15 & Durées (en min)\\
\hline
\end{tabular}$
Du coup, je me suis dit que je pourrais intégrer un \ifthenelse pour n'exécuter \eaddtotoks que si cnt{}<len{} pour lui interdire d'ajouter le dernier terme à la fin :
Code : Tout sélectionner
\foreachitem\jourcourant\in\jours{% pour chaque effectif (dans la boucle, chaque effectif sera mis dans \jourcourant)
\ifthenelse{\jourcourantcnt{}<\jourslen{}}{\eaddtotok\tabtoksa{\expandafter&\jourcourant}}{}% ajouter à \tabtoksa "&" puis le nom du jour courant
}%
No file test_tabular_et_multido3.aux.
! Missing = inserted for \ifnum.
<to be read again>
{
l.78 \buildtab{\jours}{\effectifs}