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}

alt text

Posée 04 Sep, 14:51

cpierquet's gravatar image

cpierquet
1413
Taux d'acceptation : 0%

Modifiée 04 Sep, 15:50

Bienvenue sur TeXnique.fr !

(04 Sep, 15:13) denis ♦♦ denis's gravatar image

Les formules de politesse et les signatures sont à éviter : celle(s) de votre contribution a (ont) été supprimée(s).

(04 Sep, 15:13) denis ♦♦ denis's gravatar image

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 package statistics et la bibliothèque statistics du package pgfplots pourraient vous être utiles. En tout cas, avec LaTeX3, 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.

(04 Sep, 15:38) denis ♦♦ denis's gravatar image

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.

(04 Sep, 15:46) denis ♦♦ denis's gravatar image

Les précisions que vous avez apportées à votre question initiale ne mettent pas en évidence la nécessité de recourir au package listofitems.

(04 Sep, 20:27) denis ♦♦ denis's gravatar image

Bon après être tombé par hasard sur un fil de tex.stackexchange.com j'ai trouvé que \eappto de etoolbox permettait de gérer le problème de la fin !

Donc a priori mon problème est réglé, avec le code ci-dessous (sans doute pas du tout optimisé mais bon...)

% !TeX TS-program = lualatex

\documentclass[a4paper,11pt]{article}
\usepackage[margin=1.5cm]{geometry}
\usepackage{xinttools}
\usepackage{xstring}
\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{2}{\inteval{#4}}}\do{%
        \appto\ListeEntiersAleatoires{#1\getNumberFromList{##1}}}
}

\newcommand\CreationListeNonRepet[4][/]{
    \makeRandomNumberList{#2}{#3}{#4}%
    \def\ListeEntiersAleatoires{\getNumberFromList{1}}
    \xintFor* ##1 in {\xintSeq{2}{\inteval{#4}}}\do{%
        \appto\ListeEntiersAleatoires{#1\getNumberFromList{##1}}}
}

\dtlexpandnewvalue%
\DTLgnewdb{teqstordrecroissant}%
\DTLcleardb{teqstordrecroissant}

%on lance la génération
\CreationListeNonRepet[/]{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}%
    {\eappto\ListeEntiersAleatoiresCroissant{\num{\numeroDonnee}/}}
\StrGobbleRight{\ListeEntiersAleatoiresCroissant}{1}[\LEAC]

Affichage de la liste générée et triée : \LEAC

\medskip

\setsepchar[.]{/}
\readlist*\FOOC\LEAC
Affichage de la liste triée et traitée par listofitems : \showitems{\FOOC}

\medskip

\end{document}
Lien permanent

Publiée 04 Sep, 18:31

cpierquet's gravatar image

cpierquet
1413
Taux d'acceptation : 0%

Modifiée 04 Sep, 21:45

Attention ! Les contre-obliques (\) saisies telles quelles dans les contributions ne sont visibles que si elles sont insérées en tant que ⟨code⟩. Pour insérer du ⟨code⟩, notamment des commandes LaTeX, cf. la FAQ Comment mettre en forme ma contribution ?. Merci de corriger votre contribution si cela n'a pas déjà été fait.

(04 Sep, 20:24) denis ♦♦ denis's gravatar image
Votre réponse
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.

Mots-clés de la question :

×1

Question posée : 04 Sep, 14:51

Question vue : 148 fois

Dernière mise à jour : 04 Sep, 22:29

Questions similaires