J'ai un petit souci qui me chagrine car je pense que je ne suis pas très loin, mais je coince (peut-être des problèmes de résultats développables mais je ne m'y connais pas assez...)
Donc je m'explique, je voudrais pouvoir créer une commande pour générer des nombres aléatoires, les ranger dans l'ordre croissant, et pouvoir les déclarer comme liste compréhensible par listofitems
... pour après la traiter comme paramètres d'une série statistique en accédant aux éléments par leur index (l'idée serait de générer une liste de 5 nombres := min/Q1/med/Q3/max ordonnés du coup, et tracer un diagramme en boîte à moustaches...)
Pour le moment :
- je peux générer une liste d'entiers, en lua, avec
\makeSimpleRandomNumberList
;
- je peux traiter cette liste avec
listofitems
;
- je peux ranger cette liste dans l'ordre croissant, avec
datatool
;
- je ne peux pas exploiter l'ordre croissant avec
listofitems
...
J'ai déjà vu des trucs en LaTeX3
(ça génére très bien les nombres, mais je ne peux pas récupéer le résultat par listofitems
), des trucs avec etoolbox
... bref je tourne en rond, et ça m'agace un peu...
Si des solutions alternatives existent, je suis preneur !
% !TeX TS-program = lualatex
\documentclass[a4paper,11pt]{article}
\usepackage[margin=1.5cm]{geometry}
\usepackage{xinttools}
\usepackage{multido}
\usepackage{listofitems}
\usepackage{xfp}
\usepackage{luarandom}
\usepackage{etoolbox}
\usepackage{datatool}
\setlength{\parindent}{0pt}
\usepackage{siunitx}
\begin{document}
\part{Test}
\newcommand\CreationListe[4][/]{
\makeSimpleRandomNumberList{#2}{#3}{#4}%
\def\ListeEntiersAleatoires{\getNumberFromList{1}}
\xintFor* ##1 in {\xintSeq{1}{\inteval{#4-1}}}\do{%
\appto\ListeEntiersAleatoires{#1\getNumberFromList{##1}}}
}
\newcommand\CreationListeNonRepet[4][/]{
\makeRandomNumberList{#2}{#3}{#4}%
\def\ListeEntiersAleatoires{\getNumberFromList{1}}
\xintFor* ##1 in {\xintSeq{1}{\inteval{#4-1}}}\do{%
\appto\ListeEntiersAleatoires{#1\getNumberFromList{##1}}}
}
\dtlexpandnewvalue%
\DTLgnewdb{teqstordrecroissant}%
\DTLcleardb{teqstordrecroissant}
%on lance la génération
\CreationListe[/]{0}{50}{10}
%on stocke le résultat
\edef\foo{\ListeEntiersAleatoires}
Affichage de la liste générée : \foo
\medskip
%gestion par listofitems
\setsepchar[.]{/}
\readlist*\FOO\foo
Affichage de la liste traitée par listofitems : \showitems{\FOO}
\medskip
\foreachitem\x\in\FOO{%
\DTLnewrow{teqstordrecroissant}%
\xdef\toto{\FOO[\xcnt]}%
\DTLnewdbentry{teqstordrecroissant}{numeric}{\toto}
}
\dtlsort{numeric}{teqstordrecroissant}{\dtlicompare}
\def\ListeEntiersAleatoiresCroissant{%
\DTLforeach{teqstordrecroissant}{\numeroDonnee=numeric}%
{\num{\numeroDonnee}\DTLiflastrow{}{/}}
}%
Affichage de la liste générée et triée : \ListeEntiersAleatoiresCroissant
\medskip
\setsepchar[.]{/}
\readlist*\FOOC\ListeEntiersAleatoiresCroissant
Affichage de la liste triée et traitée par listofitems : \showitems{\FOOC} ?
\medskip
\end{document}
Posée
04 Sep '22, 14:51
cpierquet
336●4
Taux d'acceptation :
12%
Bienvenue sur TeXnique.fr !
Les formules de politesse et les signatures sont à éviter : celle(s) de votre contribution a (ont) été supprimée(s).
Pouvez-vous préciser (pas en répondant à votre question mais en la modifiant) ce que vous entendez par « traiter comme série statistique » et en quoi le package
listofitems
va vous être (plus qu'un autre) utile pour cela ? Peut-être le packagestatistics
et la bibliothèquestatistics
du packagepgfplots
pourraient vous être utiles. En tout cas, avecLaTeX3
, la génération et le tri d'une liste de nombres aléatoires ne nécessite aucun package supplémentaire et seulement une dizaine de lignes de code.Vous pouvez saisir de façon plus simple vos questions et réponses : d'une part, les paragraphes ne nécessitent pas d'être placés entre balises
<p>
et</p>
(il suffit, comme en LaTeX, de laisser une ligne vide entre chacun d'entre eux) ; d'autre part, les FAQ Comment insérer le (un extrait de) code d'un fichier.tex
(ou autre) ? et Dans un paragraphe de texte, comment faire ressortir une commande (La)TeX ou le nom d'un package ? vous indiqueront comment saisir plus simplement du code.Les précisions que vous avez apportées à votre question initiale ne mettent pas en évidence la nécessité de recourir au package
listofitems
.