summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/profcollege/latex/PfCProbabilites.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/PfCProbabilites.tex')
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCProbabilites.tex288
1 files changed, 288 insertions, 0 deletions
diff --git a/macros/latex/contrib/profcollege/latex/PfCProbabilites.tex b/macros/latex/contrib/profcollege/latex/PfCProbabilites.tex
new file mode 100644
index 0000000000..58de59761c
--- /dev/null
+++ b/macros/latex/contrib/profcollege/latex/PfCProbabilites.tex
@@ -0,0 +1,288 @@
+%%%
+% Proba
+%%%
+\setKVdefault[ClesProba]{Echelle=false,Arbre=false,Branche=2,Angle=60,Rayon=0.25,LongueurEchelle=5,Affichage=0,Grille=1,Incline}
+
+\def\Updatetoksproba#1/#2\nil{\addtotok\toklistepointproba{"#1","\footnotesize #2",}}
+\def\Updatetoksprobapdf#1/#2\nil{\addtotok\toklistepointproba{"#1","\noexpand\footnotesize #2",}}
+\def\Updatetoksprobaechelle#1/#2/#3\nil{\addtotok\toklistepointproba{#1,#2,"#3",}}
+
+\newtoks\toklistepointproba
+
+% Pour construire l'arbre de probabilit\'e
+\def\buildarbreproba{%
+ \toklistepointproba{}%
+ \ifluatex
+ \foreachitem\compteur\in\ListeProba{\expandafter\Updatetoksproba\compteur\nil}%
+ \else
+ \foreachitem\compteur\in\ListeProba{\expandafter\Updatetoksprobapdf\compteur\nil}%
+ \fi
+ \MPArbreProba{\useKV[ClesProba]{Branche}}{\useKV[ClesProba]{Angle}}{\the\toklistepointproba}{\useKV[ClesProba]{Rayon}}%
+}%
+
+% Pour construire l'\'echelle de probabilit\'e
+\def\buildechelleproba{%
+ \toklistepointproba{}%
+ \foreachitem\compteur\in\ListeProba{\expandafter\Updatetoksprobaechelle\compteur\nil}%
+ \MPEchelleProbaUn{\useKV[ClesProba]{LongueurEchelle}}{\the\toklistepointproba}{\useKV[ClesProba]{Affichage}}{\useKV[ClesProba]{Grille}}%
+}
+
+\def\MPEchelleProbaUn#1#2#3#4{%
+ % #1:longueur du segment repr\'esentant l'\'echelle
+ % #2:Liste des \'ev\`enements/proba
+ % #3: pour l'affichage des labels (0 : rien, 1: fleches, 2 : fleches+ev\`enements, 3: fleches+proba, 4 : tout)
+ % #4 : dimension de "la grille" associ\'ee
+ \ifluatex
+ \begin{mplibcode}
+ pair A,B,C[],D[];%les noeuds de l'arbre
+ %Figure(-10u,-10u,10u,10u);
+ A=u*(1,1);
+ B-A=u*(#1,0);
+ draw segment(A,B);
+ draw marquesegment(A,B);
+ marque_s:=marque_s/2;
+ if #4>1:
+ for k=0 upto (#4-1):
+ D[k]=(k/#4)[A,B];
+ endfor;
+ if (#4 mod 2)=0:
+ for k=0 step 2 until (#4-1):
+ draw marquesegment(D[k],D[k+1]);
+ endfor;
+ else:
+ for k=1 step 2 until (#4-1):
+ draw marquesegment(D[k],D[k+1]);
+ endfor;
+ fi;
+ fi;
+ marque_s:=marque_s*2;
+ labeloffset:=labeloffset*3;
+ label.bot(btex 0 etex,A);
+ label.bot(btex 1 etex,B);
+ labeloffset:=labeloffset/3;
+ n:=1;%compter les informations
+ k:=1;% compter les informations noeud pour les placer
+ vardef toto(text t)=
+ for p_=t:
+ if (n mod 3)=1:
+ num:=p_;
+ fi;
+ if (n mod 3)=2:
+ deno:=p_;
+ fi;
+ if (n mod 3=0):
+ C[k]=(num/deno)[A,B];
+ if (#3>0):
+ drawarrow (C[k]-u*(0,0.5))--(C[k]-u*(0,0.15));
+ fi;
+ if (#3=2) or (#3=4):
+ dotlabel.top(TEX(p_),C[k]);
+ fi;
+ if (#3=1) or (#3=3):
+ dotlabel.top("",C[k]);
+ fi;
+ if (#3>2):
+ label.bot(TEX("$\frac{"&decimal(num)&"}{"&decimal(deno)&"}$"),C[k]-u*(0,0.5));
+ fi;
+ k:=k+1;
+ fi;
+ n:=n+1;
+ endfor;
+ enddef;
+ toto(#2);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={input PfCGeometrie;}]
+ pair A,B,C[],D[];%les noeuds de l'arbre
+ Figure(-10u,-10u,10u,10u);
+ A=u*(1,1);
+ B-A=u*(#1,0);
+ draw segment(A,B);
+ draw marquesegment(A,B);
+ marque_s:=marque_s/2;
+ if #4>1:
+ for k=0 upto (#4-1):
+ D[k]=(k/#4)[A,B];
+ endfor;
+ if (#4 mod 2)=0:
+ for k=0 step 2 until (#4-1):
+ draw marquesegment(D[k],D[k+1]);
+ endfor;
+ else:
+ for k=1 step 2 until (#4-1):
+ draw marquesegment(D[k],D[k+1]);
+ endfor;
+ fi;
+ fi;
+ marque_s:=marque_s*2;
+ labeloffset:=labeloffset*3;
+ label.bot(btex 0 etex,A);
+ label.bot(btex 1 etex,B);
+ labeloffset:=labeloffset/3;
+ n:=1;%compter les informations
+ k:=1;% compter les informations noeud pour les placer
+ vardef toto(text t)=
+ for p_=t:
+ if (n mod 3)=1:
+ num:=p_;
+ fi;
+ if (n mod 3)=2:
+ deno:=p_;
+ fi;
+ if (n mod 3=0):
+ C[k]=(num/deno)[A,B];
+ if (#3>0):
+ drawarrow (C[k]-u*(0,0.5))--(C[k]-u*(0,0.15));
+ fi;
+ if (#3=2) or (#3=4):
+ dotlabel.top(LATEX(p_),C[k]);
+ fi;
+ if (#3=1) or (#3=3):
+ dotlabel.top("",C[k]);
+ fi;
+ if (#3>2):
+ label.bot(LATEX("$\noexpand\frac{"&decimal(num)&"}{"&decimal(deno)&"}$"),C[k]-u*(0,0.5));%Le \noexpand est n\'ecessaire pour \'eviter un probl\`eme \`a la compilation, dû \`a l'expansion du \frac par gmp.
+ fi;
+ k:=k+1;
+ fi;
+ n:=n+1;
+ endfor;
+ enddef;
+ toto(#2);
+ \end{mpost}
+ \fi
+}
+
+\def\MPArbreProba#1#2#3#4{%
+ % #1:longueur d'une branche
+ % #2:angle entre deux branches de m\^eme origine
+ % #3:Liste des \'ev\`enements/proba
+ \ifluatex
+ \begin{mplibcode}
+ boolean Incline;
+ Incline=\useKV[ClesProba]{Incline};
+ pair A[],B[];%les noeuds de l'arbre
+ A0=u*(1,1);
+ B0-A0=u*(#1,0);
+ A1=rotation(B0,A0,#2/2);
+ A2=rotation(B0,A0,-#2/2);
+ B1-A1=B0-A0;
+ A3=rotation(B1,A1,#2/3);
+ A4=rotation(B1,A1,-#2/3);
+ B2-A2=B0-A0;
+ A5=rotation(B2,A2,#2/3);
+ A6=rotation(B2,A2,-#2/3);
+ draw segment(A4,A1);
+ draw segment(A5,A2);
+ draw chemin(A3,A1,A0,A2,A6);
+ for k=1 upto 6:
+ fill cercles(A[k],#4*cm) withcolor white;
+ endfor;
+ n:=1;%compter les informations
+ k:=1;% compter les informations noeud pour les placer
+ l:=1;% compter les informations "num\'eriques"
+ vardef toto(text t)=
+ for p_=t:
+ if (n mod 2)=1:
+ if p_<>"":
+ label(TEX(p_),A[k]);
+ fi;
+ k:=k+1;
+ else:
+ if (l mod 2)=1:
+ if p_<>"":
+ if Incline:
+ draw appelation(A[(l-1) div 2],A[l],4mm,TEX(p_));
+ else:
+ label.ulft(TEX(p_),iso(A[(l-1) div 2],A[l]));
+ fi;
+ fi;
+ else:
+ if p_<>"":
+ if Incline:
+ draw appelation(A[(l-1) div 2],A[l],-4mm,TEX(p_));
+ else:
+ label.llft(TEX(p_),iso(A[(l-1) div 2],A[l]));
+ fi;
+ fi;
+ fi;
+ l:=l+1;
+ fi;
+ n:=n+1;
+ endfor;
+ enddef;
+ toto(#3);
+ \end{mplibcode}
+ \else
+ \begin{mpost}[mpsettings={%input PfCGeometrie;
+ boolean Incline; Incline=\useKV[ClesProba]{Incline};}]
+ pair A[],B[];%les noeuds de l'arbre
+ %Figure(-10u,-10u,10u,10u);
+ A0=u*(1,1);
+ B0-A0=u*(#1,0);
+ A1=rotation(B0,A0,#2/2);
+ A2=rotation(B0,A0,-#2/2);
+ B1-A1=B0-A0;
+ A3=rotation(B1,A1,#2/3);
+ A4=rotation(B1,A1,-#2/3);
+ B2-A2=B0-A0;
+ A5=rotation(B2,A2,#2/3);
+ A6=rotation(B2,A2,-#2/3);
+ draw segment(A4,A1);
+ draw segment(A5,A2);
+ draw chemin(A3,A1,A0,A2,A6);
+ for k=1 upto 6:
+ fill cercles(A[k],#4*cm) withcolor white;
+ endfor;
+ n:=1;%compter les informations
+ k:=1;% compter les informations noeud pour les placer
+ l:=1;% compter les informations "num\'eriques"
+ vardef toto(text t)=
+ for p_=t:
+ if (n mod 2)=1:
+ if p_<>"":
+ label(LATEX(p_),A[k]);
+ fi;
+ k:=k+1;
+ else:
+ if (l mod 2)=1:
+ if p_<>"":
+ if Incline:
+ draw appelation(A[(l-1) div 2],A[l],4mm,LATEX(p_));
+ else:
+ label.ulft(LATEX(p_),iso(A[(l-1) div 2],A[l]));
+ fi;
+ fi;
+ else:
+ if p_<>"":
+ if Incline:
+ draw appelation(A[(l-1) div 2],A[l],-4mm,LATEX(p_));
+ else:
+ label.llft(LATEX(p_),iso(A[(l-1) div 2],A[l]));
+ fi;
+ fi;
+ fi;
+ l:=l+1;
+ fi;
+ n:=n+1;
+ endfor;
+ enddef;
+ toto(#3);
+ \end{mpost}
+ \fi
+}
+
+\newcommand\Proba[2][]{%
+ \useKVdefault[ClesProba]%
+ \setKV[ClesProba]{#1}%
+ % On liste les diff\'erents \'el\'ements sous la forme Ev\`enement/proba
+ \setsepchar[*]{,*/}\ignoreemptyitems%
+ \readlist*\ListeProba{#2}%
+ \ifboolKV[ClesProba]{Echelle}{%
+ \buildechelleproba%
+ }{\ifboolKV[ClesProba]{Arbre}{%
+ \buildarbreproba%
+ }{}%
+ }%
+ \setsepchar{,}%
+}% \ No newline at end of file