Afin de générer des nombres entiers aléatoires entre 1 et 6, je me suis inspiré d'un code proposé par un ami. D'ailleurs c'est exactement le même procédé utilisé pour générer un jet de dé sur Excel, à savoir Ouvrir dans l'éditeur
\documentclass{article} \usepackage{fp} \expandafter\FPseed\expandafter=\pdfuniformdeviate 1000000\relax %permet de générer un nombre aléatoire à volonté. c'est à dire sans être limité par la commande \time \usepackage{pstricks-add} \begin{document} \def\nbalea{% \FPrandom{\rand}% un nombre aléatoire entre 0 et 1 est généré. il est appelé \rand \FPeval{\alea}{\rand*6+1} %ce nombre \rand (nouvellement appelé \alea) est évalué, est multiplié par 6 puis additionné à 1. \FPtrunc{\entier}{\alea}{0}% ce nombre (nouvellement appelé \entier ) est tronqué à la partie entière. NB : Je n'ai pas vu d'autre moyen pour récupérer la partie entière d'un nombre. \edef\valeurde{\number\numexpr\entier}} % on appelle \valeurde la valeur numérique du dé \nbalea\psdice{\valeurde} \end{document} En lançant, la compilation un jet de dé est simulé. En ôtant de la dernière ligne du code définissant la macro Ouvrir dans l'éditeur
\edef\valeurde{\entier} Et je constate qu'un nombre aléatoire est quand même généré. Ma question : à quoi servent exactement Posée 17 Déc '15, 05:08 floyd973 unbonpetit ♦♦ |
Tout d'abord, votre code n'est pas compilable en l'état ; ce n'est pas un ECM. Ensuite, la ligne La primitive Ouvrir dans l'éditeur
\number`P % affiche 80 car `P est l'entier 80 (le charcode de la lettre P) dans les cas où TeX attend de lire un nombre entier. Enfin, la primitive de eTeX Ouvrir dans l'éditeur
\number\numexpr3*(1+2*4)-5 % affiche 22 Dans votre code, Le code de votre macro Ouvrir dans l'éditeur
\def\nbalea{\FPeval{\valeurde}{trunc(random*6+1,0)}} Dernier truc : vous avez un espace parasite dans votre macro : Publiée 17 Déc '15, 09:04 unbonpetit ♦♦ Merci beaucoup pour ces réponses très pertinentes. C'est vrai que je me suis compliqué la vie avec mon petit bout de code très scolaire. Mais bon, je suis novice en informatique. D'ailleurs, il va falloir que je me familiarise avec tout ce jargon informatique. Concernant « Cette commande définit une macro de la même manière générale que def. La différence est que TeX développe le texte de remplacement d’un edef immédiatement (mais sans rien exécuter). » Je ne suis pas sûr d'avoir bien compris.
(17 Déc '15, 17:10)
floyd973
1
Je ne me risquerais certainement pas à expliquer la différence entre exécution et développement dans un commentaire : il manque de la place.
(17 Déc '15, 18:17)
unbonpetit ♦♦
|
Votre nombre aléatoire Il s'agit ici d'une question de programmation, vous devriez ouvrir une nouvelle question pour ça. Ouvrir dans l'éditeur
\documentclass{article} \usepackage{fp,pstricks-add} \FPseed\time \newcommand*\lancer{\FPeval\valeurde{trunc(random*6+1,0)}\psdice\valeurde} \begin{document} \lancer \hfill \lancer \hfill \lancer \end{document} Par ailleurs, vous devriez aussi accepter une réponse, ne serait-ce que pour reconnaître le travail de ceux qui vous répondre et pour ne pas les décourager de le faire à l'avenir. Publiée 18 Déc '15, 08:13 unbonpetit ♦♦ Bonjour et merci encore. Croyez moi, j'ai bien validé votre proposition. Je vous le garanti.c'est juste que je m' essaie a plusieurs macros pour comprendre leurs comportements. Cela me permet d'élargir modestement mes connaissances et de solliciter un peu moins les maîtres qui donnent de leur temps pour aider les gens comme moi. Parfois, on est tête dans le guidon et on ne voit pas les évidences. Je ferais plus attention la prochaine fois. Et puis, j attends impatiemment l arrivée d un livre de 580 pages' qui j espère me rendra un peu plus autonome. MERCI ENCORE !!
(18 Déc '15, 11:39)
floyd973
|
Lorsque je fais appel plusieurs fois à un nombre aléatoire par l'intermédiaire de Il vaut mieux compiler ce code sur sa propre machine pour comprendre ce que je décris : Ouvrir dans l'éditeur
\documentclass{article} \usepackage{fp} \expandafter\FPseed\expandafter=\pdfuniformdeviate 1000000\relax %permet de générer un nombre aléatoire à volonté. c'est à dire sans être limité par la commande \time \usepackage{pstricks-add} \begin{document} \FPrandom{\rand} \FPeval{entier}{\rand*6+1} \FPtrunc{\pe}{\entier}{0} \newcommand{\valeur}{\pe} \rand \hspace{\stretch{1}} \rand \hspace{\stretch{1}} \rand \vspace{1cm} \psdice{\pe} \hspace{\stretch{1}} \psdice{\pe} \hspace{\stretch{1}} \psdice{\pe} \end{document} J'ai l'impression que la valeur générée est gardée en mémoire et réutilisée à chaque appel. Par exemple, sur une casio, en allant dans le menu Je souhaite qu'à chaque appel de |
À noter qu'il existe un package permettant de d'obtenir des nombres aléatoire, lcg: Ouvrir dans l'éditeur
\documentclass{article} \usepackage[first=1, last=6]{lcg} \newcommand{\dice}{\rand\arabic{rand}} \begin{document} Trois nombres entre 1 et 6: \dice{} \dice{} \dice{} \end{document} Publiée 17 Déc '15, 12:49 the_alf Oui oui ! Effectivement je l'utilise déjà. En ce moment, j'essaie juste d'aller un peu plus loin pour comprendre le rôle de certaines primitives TeX.
(17 Déc '15, 16:37)
floyd973
|
@unbonpetit : ECM ok. J'avais oublié les balises
\begin{document}
et\end{document}
. Le code est compilable en l'état, mais non via le compilateur en ligne « overleaf » à cause du message d'erreur suivant :Undefined control sequence. l.11 expandafter\FPseed\expandafter=\pdfuniformdeviate 1000000\relax
\pdfuniformdeviate
est une primitive du moteur pdftex. Il est probable que le moteur utilisé par overleaf ne soit pas celui là. Je ne connais pas overleaf donc je ne peux pas en dire plus. C'est une bonne leçon à retenir : éviter si possible d'utiliser des primitives spécifiques à un moteur.Je vous fais remarquer que
\psdice
n'est définie nulle part et va aussi provoquer une erreur : votre code n'est toujours pas un ECM !Enfin, les
\expandafter
sont inutiles : puisque\FPseed
est un compteur de TeX, le développement maximal se fait de toutes façons lors de l'assignation.@unbonpetit: En faisant un copier-coller du code dans mon éditeur et en faisant F1, la compilation fonctionne bel et bien. La macro psdice vient du package{pstricks-add}. Elle prend en argument des valeurs entre 1 et 6 afin d'afficher une face de dé correspondant à cette valeur numérique.
Ainsi, il faut juste penser à utiliser le moteur LaTeX dans le menu « configurer TeXmaker ». Du moins, pour ceux et celles qui l'utilisent. AMHA, je pense que c'est la raison pour laquelle vous obtenez un message d'erreur lors de la compilation.
Je sais me servir de
pstricks
, rassurez-vous. J'avais oublié de copier l'appel àpstricks-add
.