diff options
Diffstat (limited to 'macros/latex/contrib/proflycee/tex/ProfLycee-old.sty')
-rw-r--r-- | macros/latex/contrib/proflycee/tex/ProfLycee-old.sty | 3123 |
1 files changed, 3123 insertions, 0 deletions
diff --git a/macros/latex/contrib/proflycee/tex/ProfLycee-old.sty b/macros/latex/contrib/proflycee/tex/ProfLycee-old.sty new file mode 100644 index 0000000000..43de82fa82 --- /dev/null +++ b/macros/latex/contrib/proflycee/tex/ProfLycee-old.sty @@ -0,0 +1,3123 @@ +% Author : C. Pierquet +% licence : Released under the LaTeX Project Public License v1.3c +% or later, see http://www.latex-project.org/lppl.txtf + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{ProfLycee-old}[2022/11/02 v1.3.7 - Aide pour l'utilisation de LaTeX en lycee] +% 1.3.7 Ajout d'un environnement simplifié pour du code python via piton +% 1.3.6 Ajout d'un "générateur" de trinômes (ou mise en forme basique) +% 1.3.5 Correction de bugs sur les calculs de probas (loi géométrique) +% 1.3.4 Ajout des calculs de probas geomtriques et hypergeometriques + petits schémas probas +% 1.3.3 Ajout de commandes pour des arbres de probas classiques, en tikz +% 1.3.2 Correction d'une commande liée à la conversion bintohex (suppression clé trait) +% 1.3.1 Ajout d'une option pour ne pas afficher les bords des cases en pixelart +% 1.3.0 Ajout d'une commande pour mettre en forme une conversion depuis la base 10 +% 1.2.9 Correction d'une incompatibilité avec simplekv (clés vides...) +% 1.2.8 Correction de l'oubli d'une librairie tikz et remise en forme de la documentation +% 1.2.7 Calculs de probas pour des lois classiques +% 1.2.6 Ajout d'un environnement tikz pour des sudomaths personnalisés +% 1.2.5 Ajout d'une commande pour des boites à moustaches, en tikz +% 1.2.4 Correction de quelques bugs mineurs, et mise à jour de la doc +% 1.2.3 Ajout d'un environnement simplifié pour du code python +% 1.2.2 Ajouts de commandes pour des stats à 2 variables +% 1.2.1 Amélioration de la gestion du csv pour les pixelart +% 1.2 Correction d'un méchant bug avec pixelart, erf... +% 1.1.9 Commande pour du pixelart en tikz (avec option csvii pour compatibilité) +% 1.1.8 Ajout d'un style mainlevee pour tikz +% 1.1.7 Ajout de commandes pour des conversions bin/dec/hex +% 1.1.6 Ajout d'une commande pour déterminer les paramètres d'un régression linéaire par moindres carrés +% 1.1.5 Ajout de commandes pour "visualiser" le signe de ax+b ou de ax2+bx+c (cf tnsana !) +% 1.1.4 Ajout d'une commande cercletrigoPL pour, en \TikZ, créer facilement un cercle trigo avec options +% 1.1.3 Ajout d'une commande ensemble pour créer un ensemble à partir d'une liste +% 1.1.2 Modifs mineures +% 1.1.1 Modification mineure de l'environnement CF, avec prise de charge de la taille du texte ! +% 1.1.0 Ajout d'une commande tetraPL pour un tetraèdre dans un environnement TikZ +% 1.0.9 Ajout d'une commande pavePL pour un pave droit dans un environnement TikZ +% 1.0.8 Ajout d'une commande liencapytale pour créer un cartouche "comme sur capytale" +% 1.0.7 Option [build] pour placer les fichiers temporaires dans un répertoire build (désactivée par défaut) +% 1.0.6 Option [nominted] pour éviter de charger minted & nettoyage amssymb +% 1.0.5 Environnement code python avec minted +% 1.0.4 Environnement pour simuler terminal windows & linux +% 1.0.3 Environnement pour présenter du pseudocode +% 1.0.2 Environnement pour présenter du code python (avec pythontex) +% 1.0.1 Modif mineure du chargement de xcolor (compatibilité avec d'autres packages notamment...) +% 1.0 Version initiale + +%------Option(s) +\newif\if@nominted \@nomintedfalse +\DeclareOption{nominted}{\@nomintedtrue} +\newif\if@build \@buildfalse +\DeclareOption{build}{\@buildtrue} +\newif\if@csvii \@csviifalse +\DeclareOption{csvii}{\@csviitrue} +\DeclareOption*{} +\ProcessOptions\relax + +%------Packages utiles +\RequirePackage[table,svgnames]{xcolor}%Gestion des couleurs +\RequirePackage{tikz} +\RequirePackage{tkz-tab} +\RequirePackage{mathtools} +\RequirePackage{pgf,pgffor} +\RequirePackage{ifthen} +\RequirePackage{xparse} +\RequirePackage{xkeyval} +\RequirePackage{xfp} +\RequirePackage{xstring} +\RequirePackage{xintexpr} +\RequirePackage{xintbinhex} +\RequirePackage{simplekv} +\RequirePackage{listofitems} +\RequirePackage{tabularray} +\RequirePackage{siunitx} %test avec v3 +\sisetup{% + locale=FR,% + mode = match, propagate-math-font = true,% + reset-math-version = false, reset-text-family = false,% + reset-text-series = false, reset-text-shape = false,% + text-family-to-math = true, text-series-to-math = true,% + output-decimal-marker={,},% + group-minimum-digits=4% +}% +\RequirePackage{fontawesome5} +\if@csvii + \RequirePackage[legacy]{csvsimple} +\else + \RequirePackage{expl3} + \RequirePackage[l3]{csvsimple} +\fi +%librairies tikz +\usetikzlibrary{calc} +\usetikzlibrary{decorations} +\usetikzlibrary{decorations.pathreplacing} +\usetikzlibrary{decorations.markings} +\usetikzlibrary{arrows,arrows.meta} +\usetikzlibrary{babel} +\usetikzlibrary{shapes.geometric} +\usetikzlibrary{decorations.pathmorphing} +%tcolorbox +\RequirePackage[most]{tcolorbox} +%divers +\RequirePackage{ifluatex} +%python +\RequirePackage{piton} +\RequirePackage{fancyvrb} +\RequirePackage[gobble=auto]{pythontex} +\setpythontexlistingenv{pythont} %pour ne pas télescoper lstlistings (?) +\if@build + \setpythontexoutputdir{./build/pythontex-files-\jobname} %essai de modif pythontex répertoire build +\fi + +%---------------SPLINES---------------------- +%------commande utile pour extraire des infos d'une liste +\newcommand\extractcoeff[2]{% #1=liste & #2=numero + \setsepchar{§}% + \readlist\lcoeffs{#1} + \ifnum \lcoeffslen=1 + \def\COEFFA{#1} + \def\COEFFB{#1} + \else + \itemtomacro\lcoeffs[#2]\COEFF + \IfSubStr{\COEFF}{/}% + {\StrCut{\COEFF}{/}{\COEFFA}{\COEFFB}}% + {\def\COEFFA{\COEFF}\def\COEFFB{\COEFF}} + \fi +} + +%------splines en tikz avec ..controls +\defKV[spline]{% + liste=\def\SPLliste{#1},% + width=\def\SPLepaisseur{#1},% + couleur=\def\SPLcouleur{#1},% + coeffs=\def\SPLcoeffs{#1},% + couleurpoints=\def\SPLcouleurpoints{#1},% + taillepoints=\def\SPLtaillepoints{#1},% + style=\def\SPLstyle{#1} +} + +\setKVdefault[spline]{% + spline={},% + width=1.25pt,% + couleur=red,% + coeffs=3,% + couleurpoints=black,% + taillepoints=2pt,% + affpoints=false,% + style={} +} + +\newcommand\splinetikz[1][]{% + \useKVdefault[spline] + \setKV[spline]{#1}% on paramètres les nouvelles clés et on les simplifie + %on lit la liste des points/nbderivés et on stocke dans \listepoints + \setsepchar[.]{§./}% + \readlist\SPLlistepoints\SPLliste + \def\SPLnbsplines{\inteval{\SPLlistepointslen-1}} + %si uniquement deux points, pas de boucle... + \ifnum \SPLlistepointslen=2 + %extraction des coeffs de compensation + \extractcoeff{\SPLcoeffs}{1}% + %extraction des coordonnées + \itemtomacro\SPLlistepoints[1,1]\xa + \itemtomacro\SPLlistepoints[1,2]\ya + \itemtomacro\SPLlistepoints[1,3]\fprimea + \itemtomacro\SPLlistepoints[2,1]\xb + \itemtomacro\SPLlistepoints[2,2]\yb + \itemtomacro\SPLlistepoints[2,3]\fprimeb + \draw[line width=\SPLepaisseur,\SPLcouleur,\SPLstyle] (\xa,\ya) ..controls +({atan \fprimea}:{(\xb-\xa)/\COEFFA}) and +({-180 + atan \fprimeb}:{(\xb-\xa)/\COEFFA}).. (\xb,\yb) ;% + %sinon on construit bout par bout ! + \else + \foreach \i in {1,2,...,\SPLnbsplines}{ + %extraction des coeffs de compensation + \extractcoeff{\SPLcoeffs}{\i} + \def\j{\inteval{\i+1}} + \itemtomacro\SPLlistepoints[\i,1]\xa + \itemtomacro\SPLlistepoints[\i,2]\ya + \itemtomacro\SPLlistepoints[\i,3]\fprimea + \itemtomacro\SPLlistepoints[\j,1]\xb + \itemtomacro\SPLlistepoints[\j,2]\yb + \itemtomacro\SPLlistepoints[\j,3]\fprimeb + \draw[line width=\SPLepaisseur,\SPLcouleur,\SPLstyle] (\xa,\ya) ..controls +({atan \fprimea}:{(\xb-\xa)/\COEFFA}) and +({-180 + atan \fprimeb}:{(\xb-\xa)/\COEFFB}).. (\xb,\yb) ;% + } + \fi + \ifboolKV[spline]{affpoints}%on affiche les points de contrôle + {% + \foreach \i in {1,2,...,\SPLlistepointslen}{% + \itemtomacro\SPLlistepoints[\i,1]\xa + \itemtomacro\SPLlistepoints[\i,2]\ya + \filldraw[\SPLcouleurpoints] (\xa,\ya) circle[radius=\SPLtaillepoints] ;% + } + } + {} +} + +%------tangente(s) en TikZ, avec point/dérivée ou liste points/dérivées +\defKV[tgte]{% + liste=\def\TGTliste{#1},% + width=\def\TGTepaisseur{#1},% + couleur=\def\TGTcouleur{#1},% + xl=\def\TGTXL{#1},% + xr=\def\TGTXR{#1},% + style=\def\TGTstyle{#1},% + point=\def\TGTnumpt{#1} +} + +\setKVdefault[tgte]{ + liste={},% + width=1.25pt,% + couleur=red,% + xl=0.5,xr=0.5,% + style={},% + point=1 +} + +\newcommand\tangentetikz[1][]{% + \useKVdefault[tgte]% + \setKV[tgte]{#1}% on paramètres les nouvelles clés et on les simplifie + \setsepchar[.]{§./}% + \readlist\TGTlistepoints\TGTliste + \itemtomacro\TGTlistepoints[\TGTnumpt,1]\xa + \itemtomacro\TGTlistepoints[\TGTnumpt,2]\ya + \itemtomacro\TGTlistepoints[\TGTnumpt,3]\fprimea + \def\TGTDEB{\fpeval{\xa-\TGTXL}}\def\TGTFIN{\fpeval{\xa+\TGTXR}}% + \draw[line width=\TGTepaisseur,\TGTcouleur,domain=\TGTDEB:\TGTFIN,\TGTstyle] plot (\x,{\fprimea*(\x-\xa)+\ya}) ;% +} + +%----------------FENÊTRE CALCUL FORMEL +\newcommand\CFchap{\textasciicircum} +\newcounter{CFnum} +%def des clés +\defKV[paramfenxcas]{% + larg=\def\CFlarg{#1},% + esplg=\def\CFesplg{#1},% + premcol=\def\CFpremcol{#1},% + hpremcol=\def\CFhpremcol{#1},% + taille=\def\CFtaille{#1},% + couleur=\def\CFcouleur{#1},% + tailletitre=\def\CFtailletitre{#1},% + couleurcmd=\def\CFcoulcmd{#1},% + couleurres=\def\CFcoulres{#1},% + poscmd=\def\CFposcmd{#1},% + posres=\def\CFposres{#1},% + labeltitre=\def\CFlabeltitre{#1}% +} +\setKVdefault[paramfenxcas]{% + larg=16,esplg=2pt,premcol=0.3,hpremcol=0.4,% + couleur=darkgray,menu=true,titre=false,tailletitre=\normalsize,taille=\normalsize,% + sep=true,posres=centre,poscmd=gauche,% + couleurcmd=red,couleurres=blue,% + labeltitre={Résultats obtenus avec un logiciel de Calcul Formel}} +\newcommand\paramCF[1][]{% + \setcounter{CFnum}{0} + \useKVdefault[paramfenxcas]% + \setKV[paramfenxcas]{#1}% on paramètres les nouvelles clés et on les simplifie +} +%def des clés +\defKV[paramlgxcas]{% + hc=\def\CFhle{#1},% + hr=\def\CFhlr{#1} +} +\setKVdefault[paramlgxcas]{hc=0.75,hr=0.75} +\newcommand\ligneCF[3][]{% + \addtocounter{CFnum}{1} + \def\CFL{\theCFnum} + \def\CFLA{\inteval{\CFL-1}}% + \useKVdefault[paramlgxcas]% + \setKV[paramlgxcas]{#1}% on paramètres les nouvelles clés et on les simplifie + \def\CFLA{\inteval{\CFL-1}}% + %DÉCLARATION DES NŒUDS (les "6" coins des lignes commande et résultat) + \xintifboolexpr{\CFL == 1}%si c'est la première ligne + {\coordinate (A0\CFL) at (0,0);} + {\coordinate (A0\CFL) at ($(A2\CFLA) + (0,{-\CFesplg})$);} + \coordinate (A1\CFL) at ($(A0\CFL) + (0,{-\CFhle})$); + \coordinate (A2\CFL) at ($(A1\CFL) + (0,{-\CFhlr})$); + \coordinate (A3\CFL) at ($(A0\CFL) + ({\CFlarg},0)$); + \coordinate (A4\CFL) at ($(A1\CFL) + ({\CFlarg},0)$); + \coordinate (A5\CFL) at ($(A2\CFL) + ({\CFlarg},0)$); + %DÉCLARATION DES NŒUDS INTERMÉDIAIRES (pour les commandes et les résultats) + \coordinate (C1\CFL) at ($(A0\CFL) + (0,{-0.5*\CFhle})$); + \coordinate (C2\CFL) at ($(A0\CFL) + ({0.5*\CFlarg},{-0.5*\CFhle})$); + \coordinate (C3\CFL) at ($(A0\CFL) + ({\CFlarg},{-0.5*\CFhle})$); + \coordinate (R1\CFL) at ($(A1\CFL) + (0,{-0.5*\CFhlr})$); + \coordinate (R2\CFL) at ($(A1\CFL) + ({0.5*\CFlarg},{-0.5*\CFhlr})$); + \coordinate (R3\CFL) at ($(A1\CFL) + ({\CFlarg},{-0.5*\CFhlr})$); + %RECTANGLE DE BASE + \draw[\CFcouleur] (A0\CFL) rectangle (A5\CFL) ; + %LA COMMANDE EN ROUGE + \IfStrEq{\CFposcmd}{centre}%si poscmd=center + {\draw (C2\CFL) node[\CFcoulcmd,font=\CFtaille] {#2} ;} + {} + \IfStrEq{\CFposcmd}{gauche}%si poscmd=left + {\draw (C1\CFL) node[right,\CFcoulcmd,font=\CFtaille] {#2} ;} + {} + \IfStrEq{\CFposcmd}{right}%si poscmd=right + {\draw (C3\CFL) node[left,\CFcoulcmd,font=\CFtaille] {#2} ;} + {} + %LA LIGNE DE SÉPARATION + \ifboolKV[paramfenxcas]{sep}%si sep=true + {\draw[\CFcouleur] (A1\CFL) -- (A4\CFL);} + {} + %LE RÉSULTAT + \IfStrEq{\CFposres}{centre}%si posrep=center + {\draw (R2\CFL) node[\CFcoulres,font=\CFtaille] {#3} ;} + {} + \IfStrEq{\CFposres}{gauche}%si posrep=left + {\draw (R1\CFL) node[right,\CFcoulres,font=\CFtaille] {#3} ;} + {} + \IfStrEq{\CFposres}{right}%si posrep=right + {\draw (R3\CFL) node[left,\CFcoulres,font=\CFtaille] {#3} ;} + {} + \ifboolKV[paramfenxcas]{sep}%si sep=true + {\draw[\CFcouleur] (A1\CFL) -- (A4\CFL);}% + {} + %LE PETIT NUMÉRO + \draw[\CFcouleur] (A0\CFL) rectangle ++ ({-\CFpremcol},{-\CFhpremcol}) node[\CFcouleur,midway,font=\small\sffamily\bfseries] {\CFL} ; + %LE RECTANGLE "MENU" + \ifboolKV[paramfenxcas]{menu}%si menu=true + {\draw[\CFcouleur,fill=\CFcouleur!25] (A5\CFL) rectangle ++ (-0.65,0.25) node[black,midway,font=\tiny\sffamily\bfseries] {MENU} ;}% + {} + %LE BLOC "TITRE" + \ifboolKV[paramfenxcas]{titre}%si titre=true + {\draw[\CFcouleur,fill=lightgray!25,rounded corners] ($(A01) + (0,2pt)$) rectangle ++ ($({\CFlarg},2em)$) node[ForestGreen!50!\CFcouleur,midway,font=\CFtailletitre\ttfamily\bfseries] {\CFlabeltitre};} + {} +} + +%=========CONSOLEPYTHON=========== OK !! +\defKV[envpythonconsole]{% + largeur=\def\CSPYlargeur{#1},% + centre=\testboolKV{#1} + {\def\hookcenterpre{\begin{center}}\def\hookcenterpost{\end{center}}} + {\def\hookcenterpre{\begin{flushleft}}\def\hookcenterpost{\end{flushleft}}} +} + +\setKVdefault[envpythonconsole]{% + largeur=\linewidth,% + centre=true,% + label=true +} + +\newenvironment{envconsolepythontex}[1][]{% + \useKVdefault[envpythonconsole]% + \setKV[envpythonconsole]{#1}% on paramètres les nouvelles clés et on les simplifie + \VerbatimEnvironment + \hookcenterpre + \begin{minipage}{\CSPYlargeur} + \ifboolKV[envpythonconsole]{label}%si sep=true + {\begin{pyconsole}[][% + framesep=3mm,frame=single,fontsize=\footnotesize,framerule=1pt,rulecolor=\color{ForestGreen},label={[\scriptsize Début de la console python]\scriptsize Fin de la console python}]}% + {\begin{pyconsole}[][% + framesep=3mm,frame=single,fontsize=\footnotesize,framerule=1pt,rulecolor=\color{ForestGreen}]} + } + { + \end{pyconsole} + \end{minipage} + \hookcenterpost +} + +%=========CODEPYTHONTEX=========== OK!! +\defKV[envpythonverb]{% + largeur=\def\CODPYlargeur{#1},% + centre=\testboolKV{#1} + {\def\verbcenterpre{\begin{center}}\def\verbcenterpost{\end{center}}} + {\def\verbcenterpre{}\def\verbcenterpost{}} +} + +\setKVdefault[envpythonverb]{% + largeur=\linewidth,% + centre=true,% + lignes=true +} + +\tcbset{stylepythontex/.style={% + enhanced,boxrule=1.25pt,% + sharp corners=downhill,arc=12pt, + before skip=12pt,after skip=12pt,% + top=10pt,bottom=1mm,rightupper=4pt,%leftupper=25pt, + attach boxed title to top right={yshift=-\tcboxedtitleheight}, + boxed title style={ + size=small,colback=ForestGreen!25,boxrule=1.25pt, + colframe=Green,boxsep=1.25pt, + sharp corners=downhill, + arc=12pt, + top=2pt,bottom=1pt,left=6pt,right=6pt + }, + fonttitle=\color{ForestGreen}\itshape\ttfamily\footnotesize, + title={\scriptsize\faPython}\:Code Python\vphantom{p}, + watermark text={\faPython},watermark opacity=0.175,watermark zoom=0.50, + } +} + +\tcbset{stylepythonnolineos/.style={% + stylepythontex,leftupper=10pt, + colframe=Green,colback=ForestGreen!5,% + fontlower=\small,% + before upper = \renewcommand\theFancyVerbLine{\scriptsize\ttfamily\color{Green}\arabic{FancyVerbLine}} + } +} + +\tcbset{stylepythonlineos/.style={% + stylepythontex,leftupper=25pt, + colframe=Green,colback=ForestGreen!5,% + fontlower=\small,% + before upper = \renewcommand\theFancyVerbLine{\scriptsize\ttfamily\color{Green}\arabic{FancyVerbLine}} + } +} + +\newtcolorbox{tcpythontexcode}[1][\linewidth]{% + width=#1,stylepythonlineos +} + +\newtcolorbox{tcpythontexcodeno}[1][\linewidth]{% + width=#1,stylepythonnolineos +} + +\newenvironment{envcodepythontex}[1][]{% + \useKVdefault[envpythonverb]% + \setKV[envpythonverb]{#1}% on paramètres les nouvelles clés et on les simplifie + \VerbatimEnvironment + \verbcenterpre + \ifboolKV[envpythonverb]{lignes}%si lignes=true + {\begin{tcpythontexcode}[\CODPYlargeur]} + {\begin{tcpythontexcodeno}[\CODPYlargeur]} + \ifboolKV[envpythonverb]{lignes}%si lignes=true + {\begin{pyverbatim}[][fontsize=\footnotesize,numbers=left,numbersep=10pt,commandchars=\\\{\},mathescape]} + {\begin{pyverbatim}[][numbers=none,numbersep=0pt,fontsize=\footnotesize,commandchars=\\\{\},mathescape]} + } + { + \end{pyverbatim} + \ifboolKV[envpythonverb]{lignes}%si lignes=true + {\end{tcpythontexcode}} + {\end{tcpythontexcodeno}} + \verbcenterpost +} + +%=========PYTHONMINTED========= OK !! +\if@nominted + %on ne charge pas minted et la librairie tcbox +\else + \if@build + %on charge minted avec le répertoire build + \RequirePackage[outputdir=build]{minted} + \fi + %on charge minted via la librairie tcbox + \tcbuselibrary{minted} +\fi + +\tcbset{pytmintedno/.style={% + listing engine=minted,minted style=colorful, + minted language=python,listing only, + minted options={tabsize=4,fontsize=\small,autogobble}, + } +} + +\tcbset{pytminted/.style={% + listing engine=minted,minted style=colorful, + minted language=python,listing only, + minted options={tabsize=4,fontsize=\small,autogobble,xleftmargin=16pt,linenos,numbersep=10pt}, + } +} + +\DeclareTCBListing{envcodepythonminted}{ s O{12cm} O{} }{% étoilée sans numéro, taille puis option... + \IfBooleanTF{#1}{pytmintedno}{pytminted}, + enhanced,width=#2,#3, + colframe=Green,colback=ForestGreen!5,% + boxrule=1.25pt, + sharp corners=downhill,arc=12pt, + before skip=12pt,after skip=12pt,% + leftupper=8pt,top=10pt,bottom=4pt,rightupper=4pt,% + attach boxed title to top right={yshift=-\tcboxedtitleheight}, + boxed title style={ + size=small,colback=ForestGreen!25,boxrule=1.25pt, + colframe=Green,boxsep=1.25pt, + sharp corners=downhill, + arc=12pt, + top=2pt,bottom=1pt,left=6pt,right=6pt + }, + fonttitle=\color{ForestGreen}\itshape\ttfamily\footnotesize, + title={\scriptsize\faPython}\:Code Python\vphantom{y}, + watermark text={\faPython},watermark opacity=0.175,watermark zoom=0.50, + before upper = \renewcommand{\theFancyVerbLine}{\scriptsize\ttfamily\color{Green}\arabic{FancyVerbLine}} +} + +%=======STYLE ALGO LST========= OK ! +\ifluatex + \tcbuselibrary{listings} + \lstdefinelanguage{langnat}{% + keywords={}, + inputencoding=utf8, + comment=[l]{}} + \lstdefinestyle{PLpython}{% + language = python, + inputencoding = utf8, + basicstyle = \ttfamily\footnotesize, + keywordstyle = \color{ForestGreen}, + keywordstyle = [2]\color{magenta}, + commentstyle = \color{gray}\itshape, + stringstyle = \color{red!75}, + numberstyle = \scriptsize\ttfamily\color{Green}, + aboveskip = 4pt, + belowskip = 1pt, + tabsize = 4, + showstringspaces = false, + columns = fullflexible, + keepspaces = true, + breaklines = true, + breakatwhitespace = true + } +\else + \tcbuselibrary{listingsutf8} + \lstdefinelanguage{langnat}{% + keywords={}, + inputencoding=utf8/latin1, + comment=[l]{}} + \lstdefinestyle{PLpython}{% + language = python, + inputencoding = utf8/latin1, + basicstyle = \ttfamily\footnotesize, + keywordstyle = \color{ForestGreen}, + keywordstyle = [2]\color{magenta}, + commentstyle = \color{gray}\itshape, + stringstyle = \color{red!75}, + numberstyle = \scriptsize\ttfamily\color{Green}, + aboveskip = 4pt, + belowskip = 1pt, + tabsize = 4, + showstringspaces = false, + columns = fullflexible, + keepspaces = true, + breaklines = true, + breakatwhitespace = true + } +\fi + +%=======PYTHONLISTINGS========= OK !! +\tcbset{stylepythonlst/.style={% + enhanced,boxrule=1.25pt,% + leftupper=10pt, + sharp corners=downhill,arc=12pt, + before skip=12pt,after skip=12pt,% + top=10pt,bottom=1mm,rightupper=4pt,%leftupper=25pt, + attach boxed title to top right={yshift=-\tcboxedtitleheight}, + boxed title style={ + size=small,colback=ForestGreen!25,boxrule=1.25pt, + colframe=Green,boxsep=1.25pt, + sharp corners=downhill, + arc=12pt, + top=2pt,bottom=1pt,left=6pt,right=6pt + }, + colframe=Green,colback=ForestGreen!5,% + fonttitle=\color{ForestGreen}\itshape\ttfamily\footnotesize, + title={\scriptsize\faPython}\:Code Python\vphantom{p}, + watermark text={\faPython},watermark opacity=0.175,watermark zoom=0.50, + listing only,listing engine=listings,% + } +} + +\tcbset{stylepythonlstnolineos/.style={% + stylepythonlst, + listing options={style=PLpython,xleftmargin=0pt,numbers=none} + } +} + +\tcbset{stylepythonlstlineos/.style={% + stylepythonlst, + listing options={style=PLpython,xleftmargin=16pt,numbers=left} + } +} + +\DeclareTCBListing{envcodepython}{ s O{\linewidth} m }{% * off pour numéros de lignes + {largeur} + <options tcbox> + \IfBooleanTF{#1}{stylepythonlstnolineos}{stylepythonlstlineos}, + width=#2,#3 +} + +\NewTCBInputListing{\envcodepythonfichier}{ s O{\linewidth} m m }{ + \IfBooleanTF{#1}{stylepythonlstnolineos}{stylepythonlstlineos}, + width=#2,#3, + listing file={#4}} + +%=========PYTHONPITON========== OK !! +\defKV[envpiton]{% + Largeur=\def\CODPITlargeur{#1},% + Alignement=\def\CODPITalign{#1} +} + +\setKVdefault[envpiton]{% + Largeur=\linewidth,% + Alignement=center,% + Lignes=true +} + +\NewPitonEnvironment{envcodepiton}{ O{} }% + {% + \useKVdefault[envpiton]% + \setKV[envpiton]{#1}% on paramètres les nouvelles clés et on les simplifie + \ifboolKV[envpiton]{Lignes}%si lignes=true + {\PitonOptions{left-margin=12.75pt,line-numbers}}% + {\PitonOptions{}}% + \begin{tcolorbox}[stylepythontex,leftupper=8pt,colframe=Green,colback=ForestGreen!5,width=\CODPITlargeur,fontlower=\small,\CODPITalign] + }% + {% + \end{tcolorbox}% + } + +%=========PSEUDOCODE=========== OK !! +%language pseudocode listings +\lstdefinestyle{pseudocodePL}{% + language=langnat, + basicstyle=\footnotesize\ttfamily, + numberstyle=\scriptsize\ttfamily\color{gray}, + keywordstyle=\bfseries, + stringstyle=\color{red!75}, + keepspaces=true, + tabsize=4,numbersep=10pt, + xleftmargin=14pt, + numbers=left, + morestring=[b]", + showstringspaces=false, + %showtabs=false, + escapeinside={(*}{*)} +} + +\lstdefinestyle{pseudocodenoPL}{% + language=langnat, + basicstyle=\footnotesize\ttfamily, + numberstyle=\scriptsize\ttfamily\color{gray}, + keywordstyle=\bfseries, + stringstyle=\color{red!75}, + keepspaces=true, + tabsize=4,numbersep=10pt, + numbers=none, + showstringspaces=false, + morestring=[b]", + %showtabs=true, + escapeinside={(*}{*)} +} + +%style tcbox pseudocode avec bannière hautdroite +\tcbset{stylepseudocodePL/.style={% + %fontupper=\small\sffamily,% + enhanced,boxrule=1.25pt,sharp corners=downhill,arc=12pt, + before skip=12pt,after skip=12pt,leftupper=10pt,top=8pt,bottom=2pt,rightupper=4pt,% + attach boxed title to top right={yshift=-\tcboxedtitleheight}, + boxed title style={ + size=small,colback=gray!25,boxrule=1.25pt, + colframe=darkgray,boxsep=1.25pt, + sharp corners=downhill, + arc=12pt, + top=2pt,bottom=1pt,left=6pt,right=6pt + }, + fonttitle=\color{darkgray}\ttfamily\footnotesize, + title={\scriptsize\faFileCode}\:\textit{Pseudo-Code}\vphantom{p}, + watermark text={\faCode},watermark opacity=0.175,watermark zoom=0.50, + } +} + +\ifluatex + \newcommand\algomathttPL[1]{\symtt{#1}} +\else + \newcommand\algomathttPL[1]{\mathtt{#1}} +\fi + +\DeclareTCBListing{envpseudocode}{ s O{12cm} !O{} }{% étoilée sans numéro, taille puis option... + width=#2,#3, + stylepseudocodePL, + listing only,listing engine=listings, + listing options={ + style=\IfBooleanTF{#1}{pseudocodenoPL}{pseudocodePL},%version étoilée sans numéro de lignes + aboveskip=2pt,belowskip=2pt, + columns=fullflexible, + literate={é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1% + {ú}{{\'u}}1 {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1% + {è}{{\`e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1% + {À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1% + {ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1% + {Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1% + {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1% + {Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1% + {œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1% + {ű}{{\H{u}}}1 {Ű}{{\H{U}}}1 {ő}{{\H{o}}}1 {Ő}{{\H{O}}}1% + {ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1% + {€}{{\texteuro}}1 {£}{{\pounds}}1% + {=}{\textleftarrow}1 {==}{=}1% + {*}{$\algomathttPL{\times}$}{1}% + } +} + +%============FakeTerm=========== OK !! +%couleurs (inspirées par termsim !) +\definecolor{PLmpurple}{RGB}{48,10,36} +\definecolor{PLmgray}{RGB}{70,72,67} +\definecolor{PLogray}{RGB}{148,147,141} +\definecolor{PLoorange}{RGB}{233,101,56} +\definecolor{PLterminal}{RGB}{80,78,70} +\definecolor{PLlinux}{RGB}{0,39,51} +\definecolor{PLwinblue}{HTML}{1883D7} +\definecolor{PLosxgray}{HTML}{D8D6D9} + +%WINDOWS +\tcbset{PLfaketermwin/.style={% + enhanced,boxrule=1pt,sharp corners,before skip=12pt,after skip=12pt,% + colframe=PLwinblue,colback=black,colbacktitle=white,colupper=white,coltitle=black,% + titlerule=0.4pt,left=2pt,top=2pt,bottom=2pt,right=2pt,middle=2pt,% + fonttitle=\bfseries\small\sffamily + } +} + +\setKVdefault[fakeTERMwin]{titre={Terminal Windows}} + +\newcommand\PLcommandeswin{% + \begin{tikzpicture}[thick,scale=0.66] + \draw (0,0)--(1em,0) ; \draw (2em,0) rectangle (3em,1em) ; \draw (4em,1em)--(5em,0) (4em,0)--(5em,1em) ; + \end{tikzpicture}% +} + +\newcommand\termwintitre[1][]{% + \restoreKV[fakeTERMwin] + \setKV[fakeTERMwin]{#1} + \begin{tblr}{colsep=0pt,rowsep=0pt,width=\linewidth,colspec={X[l]r}} + {\footnotesize\faTerminal}~~\useKV[fakeTERMwin]{titre} & \PLcommandeswin \\ % + \end{tblr} +} + +\DeclareTCBListing{PLtermwin}{ O{\linewidth} m !O{} }{%[taille] puis {titre=...} puis [option] + PLfaketermwin,title={\termwintitre[#2]},% + listing only,listing engine=listings,% + listing options={style=tcblatex,language={},basicstyle=\footnotesize\ttfamily},% + width=#1,#3 +} + +%LINUX +\newcommand{\PLUbuntuWhite}{% + \begin{tikzpicture}[thick,anchor=base,baseline] + \filldraw[PLmgray] (0,0.25em) circle[radius=0.5em] ; + \end{tikzpicture}% +} +\newcommand{\PLUbuntuMin}{% + \begin{tikzpicture}[thick,anchor=base,baseline] + \filldraw[color=PLogray!50!white] (0,0.25em) circle[radius=0.5em]; + \draw[PLterminal](-0.35em,0.25em)--(0.35em,0.25em); + \end{tikzpicture}% +} +\newcommand{\PLUbuntuClose}{% + \begin{tikzpicture}[thick,anchor=base,baseline] + \filldraw[color=PLoorange!70!white] (0,0.25em) circle[radius=0.5em]; + \draw[PLterminal] (-0.32em,-0.07em)--(0.32em,0.57em); + \draw[PLterminal] (-0.32em,0.57em)--(0.32em,-0.07em); + \end{tikzpicture}% +} +\newcommand{\PLUbuntuMax}{% + \begin{tikzpicture}[thick,anchor=base,baseline] + \filldraw[color=PLogray!50!white] (0,0.25em) circle[radius=0.5em]; + \draw[PLterminal] (-0.32em,0.5em) rectangle (0.32em,0); + \end{tikzpicture}% +} + +\tcbset{PLtermlinux/.style={% + enhanced,boxrule=1pt,arc=4pt,before skip=12pt,after skip=12pt,% + colframe=PLmgray,colback=PLmpurple,colbacktitle=PLmgray,colupper=white,coltitle=white,% + titlerule=0.4pt,left=2pt,top=2pt,bottom=2pt,right=2pt,middle=2pt,% + fonttitle=\bfseries\small\sffamily + } +} + +\setKVdefault[fakeTERMnux]{titre={Terminal UNiX}} + +\newcommand\termnuxtitre[1][]{% + \restoreKV[fakeTERMnux] + \setKV[fakeTERMnux]{#1} + \begin{tblr}{colsep=0pt,rowsep=0pt,width=\linewidth,colspec={lX[c]r}} + \PLUbuntuWhite~~\PLUbuntuWhite~~\PLUbuntuWhite & \vphantom{p}\useKV[fakeTERMnux]{titre} & \PLUbuntuMin~~\PLUbuntuMax~~\PLUbuntuClose \\ + \end{tblr} +} + +\DeclareTCBListing{PLtermunix}{ O{\linewidth} m !O{} }{%[taille] puis {titre=...} puis [option] + PLtermlinux,title={\termnuxtitre[#2]},% + listing only,listing engine=listings,% + listing options={style=tcblatex,language={},basicstyle=\footnotesize\ttfamily},% + width=#1,#3 +} + +%OSX +\tcbset{PLfaketermosx/.style={% + enhanced,boxrule=1pt,arc=6pt,before skip=12pt,after skip=12pt,% + colframe=PLosxgray,colback=lightgray!15,colbacktitle=PLosxgray,colupper=black,coltitle=black,% + titlerule=0.4pt,left=2pt,top=2pt,bottom=2pt,right=2pt,middle=2pt,% + fonttitle=\bfseries\small\sffamily + } +} + +\newcommand{\PLOSXRed}{% + \begin{tikzpicture}[thick,anchor=base,baseline] + \filldraw[red] (0,0.25em) circle[radius=0.45em] ; + \end{tikzpicture}% +} + +\newcommand{\PLOSXOrange}{% + \begin{tikzpicture}[thick,anchor=base,baseline] + \filldraw[orange] (0,0.25em) circle[radius=0.45em] ; + \end{tikzpicture}% +} + +\newcommand{\PLOSXGreen}{% + \begin{tikzpicture}[thick,anchor=base,baseline] + \filldraw[ForestGreen] (0,0.25em) circle[radius=0.45em] ; + \end{tikzpicture}% +} + +\newcommand{\PLOSXLG}{% + \begin{tikzpicture}[thick,anchor=base,baseline] + \filldraw[PLosxgray] (0,0.25em) circle[radius=0.45em] ; + \end{tikzpicture}% +} + +\setKVdefault[fakeTERMosx]{titre={Terminal OSX}} + +\newcommand\termosxtitre[1][]{% + \restoreKV[fakeTERMosx] + \setKV[fakeTERMosx]{#1} + \begin{tblr}{colsep=0pt,rowsep=0pt,width=\linewidth,colspec={lX[c]r}} + \PLOSXRed~\PLOSXOrange~\PLOSXGreen & \vphantom{p}\useKV[fakeTERMosx]{titre} & \PLOSXLG~\PLOSXLG~\PLOSXLG \\ + \end{tblr} +} + +\DeclareTCBListing{PLtermosx}{ O{\linewidth} m !O{} }{%[taille] puis {titre=...} puis [option] + PLfaketermosx,title={\termosxtitre[#2]},% + listing only,listing engine=listings,% + listing options={style=tcblatex,language={},basicstyle=\footnotesize\ttfamily},% + width=#1,#3 +} + +%============CartoucheCapytale========= OK !! +\definecolor{vertcapyt}{rgb}{0.0,0.5,0.0} +%\definecolor{vertcapyt}{HTML}{008000} +\DeclareTotalTCBox{\liencapytale}{ s O{} m } + {enhanced,size=fbox,on line,arc=3pt,colback=vertcapyt,colframe=vertcapyt,fontupper=\IfBooleanTF{#1}{\ttfamily}{\sffamily}\bfseries,colupper=white}% + {#3#2~{\scriptsize\faLink}} + +%============PaveDroitTikZ============= OK !! +\defKV[paramspave]{% + largeur=\xdef\PFPaveLg{#1},% + profondeur=\xdef\PFPavePf{#1},% + hauteur=\xdef\PFPaveHt{#1},% + angle=\xdef\PFPaveAngl{#1},% + fuite=\xdef\PFPaveFuite{#1},% + sommets=\def\PFPaveSommets{#1},% + epaisseur=\xdef\PFPaveThick{#1} +} +\setKVdefault[paramspave]{% + aff=false,% + plein=false,% + largeur=2,% + profondeur=1,% + hauteur=1.25,% + angle=30,% + fuite=0.5,% + epaisseur=thick,% + sommets=A§B§C§D§E§F§G§H,% + cube=false +} + +\newcommand\pavePL[1][]{% + \useKVdefault[paramspave]% + \setKV[paramspave]{#1}% + \ifboolKV[paramspave]{cube} + {\xdef\PFPavePf{\PFPaveLg}% + \xdef\PFPaveHt{\PFPaveLg}} + {} + \setsepchar{§}% + \readlist\PFListeSommets\PFPaveSommets + \itemtomacro\PFListeSommets[1]\PaveA + \itemtomacro\PFListeSommets[2]\PaveB + \itemtomacro\PFListeSommets[3]\PaveC + \itemtomacro\PFListeSommets[4]\PaveD + \itemtomacro\PFListeSommets[5]\PaveE + \itemtomacro\PFListeSommets[6]\PaveF + \itemtomacro\PFListeSommets[7]\PaveG + \itemtomacro\PFListeSommets[8]\PaveH + %les nœuds du pave + \coordinate (\PaveA) at (0,0) ; + \coordinate (\PaveB) at ({\PFPaveLg},0) ; + \coordinate (\PaveC) at ($(\PaveB) + ({\PFPaveAngl}:{\PFPaveFuite*\PFPavePf})$) ; + \coordinate (\PaveD) at ($(\PaveA) + ({\PFPaveAngl}:{\PFPaveFuite*\PFPavePf})$) ; + \coordinate (\PaveE) at ($(\PaveA) + (0,{\PFPaveHt})$) ; + \coordinate (\PaveF) at ($(\PaveB) + (0,{\PFPaveHt})$) ; + \coordinate (\PaveG) at ($(\PaveC) + (0,{\PFPaveHt})$) ; + \coordinate (\PaveH) at ($(\PaveD) + (0,{\PFPaveHt})$) ; + \ifboolKV[paramspave]{aff} + {\draw (\PaveA) node[below left] {\PaveA} ; + \draw (\PaveB) node[below right] {\PaveB} ; + \draw (\PaveC) node[above right] {\PaveC} ; + \ifboolKV[paramspave]{plein} + {} + {\draw (\PaveD) node[above left] {\PaveD} ;} + \draw (\PaveE) node[below left] {\PaveE} ; + \draw (\PaveF) node[below right] {\PaveF} ; + \draw (\PaveG) node[above right] {\PaveG} ; + \draw (\PaveH) node[above left] {\PaveH} ;} + {}%on affiche rien + \draw[\PFPaveThick] (\PaveA)--(\PaveB)--(\PaveF)--(\PaveE)--cycle + (\PaveB)--(\PaveC)--(\PaveG)--(\PaveF)--cycle + (\PaveG)--(\PaveH)--(\PaveE) ; + \ifboolKV[paramspave]{plein} + {} + {\draw[dashed,\PFPaveThick] (\PaveA)--(\PaveD)--(\PaveC) + (\PaveD)--(\PaveH) ;} +} + +%============TétraèdreTikZ============= OK !! +\defKV[paramstetra]{% + largeur=\xdef\PFTetraLg{#1},% + profondeur=\xdef\PFTetraPf{#1},% + hauteur=\xdef\PFTetraHt{#1},% + alpha=\xdef\PFTetraAlpha{#1},% + beta=\xdef\PFTetraBeta{#1},% + sommets=\def\PFTetraSommets{#1},% + epaisseur=\xdef\PFTetraThick{#1} +} +\setKVdefault[paramstetra]{% + aff=false,% + plein=false,% + largeur=4,% + profondeur=1.25,% + hauteur=3,% + alpha=40,% + beta=60,% + epaisseur=thick,% + sommets=A§B§C§D,% +} + +\newcommand\tetraPL[1][]{% + \useKVdefault[paramstetra]% + \setKV[paramstetra]{#1}% + \setsepchar{§}% + \readlist\PFListeSommets\PFTetraSommets + \itemtomacro\PFListeSommets[1]\TetraA + \itemtomacro\PFListeSommets[2]\TetraB + \itemtomacro\PFListeSommets[3]\TetraC + \itemtomacro\PFListeSommets[4]\TetraD + %les nœuds du tétraèdre + \coordinate (\TetraA) at (0,0) ; + \coordinate (\TetraB) at ($(\TetraA) + ({-\PFTetraAlpha}:{\PFTetraPf})$) ; + \coordinate (\TetraC) at ({\PFTetraLg},0) ; + \coordinate (\TetraD) at ($(\TetraA) + ({\PFTetraBeta}:{\PFTetraHt})$) ; + \ifboolKV[paramstetra]{aff} + {\draw (\TetraA) node[left] {\TetraA} ; + \draw (\TetraB) node[below] {\TetraB} ; + \draw (\TetraC) node[right] {\TetraC} ; + \draw (\TetraD) node[above] {\TetraD} ;} + {}%on affiche rien + \draw[\PFTetraThick] (\TetraA)--(\TetraD)--(\TetraC)--(\TetraB)--cycle + (\TetraD)--(\TetraB) ; + \ifboolKV[paramstetra]{plein} + {} + {\draw[dashed,\PFTetraThick] (\TetraA)--(\TetraC) ;} +} + +%============EnsembleList============== OK !! +\defKV[kvensemble]{% + sep=\def\PLenssep{#1},% + option=\def\PLensopt{#1} +} + +\setKVdefault[kvensemble]{% + sep={;},% + mathpunct=true,% + option={} +} + +\newcommand\ensPL[2][1]{% + \useKVdefault[kvensemble]% + \setKV[kvensemble]{#1}% + \ifboolKV[kvensemble]{mathpunct}% + {\left\lbrace \PLensopt{} \mathpunct{} \StrSubstitute{#2}{/}{\mathpunct{}{\PLenssep}\mathpunct{}} \mathpunct{} \right\rbrace}% + {\left\lbrace \PLensopt{} \StrSubstitute{#2}{/}{{\PLenssep}} \right\rbrace} +} + +%===============SimplFrac============== OK !! +\DeclareDocumentCommand\convertfraction{ O{} m }{% argument optionnel [d ou t] puis argument mandataire {calcul ou fraction} + \def\calculargument{\xintPRaw{\xintIrr{\xinteval{#2}}}}%on calcule et on transforme en A/B + \IfSubStr{\calculargument}{/}%on teste si le symbole / apparaît + {%si oui := fraction + \StrBefore{\calculargument}{/}[\numerateur]%on extrait le numérateur + \StrBehind{\calculargument}{/}[\denominateur]%on extrait le dénominateur + \ifblank{#1}{\ensuremath{\frac{\numerateur}{\denominateur}}}{}%si l'argument optionnel est vide + \IfStrEq{#1}{d}{\ensuremath{\dfrac{\numerateur}{\denominateur}}}{}%si l'arg opt est d + \IfStrEq{#1}{t}{\ensuremath{\tfrac{\numerateur}{\denominateur}}}{}%si l'arg opt est t + }{%si non := entier + \num{\calculargument}%on affiche l'entier, avec le package siunitx + } +} + +%================CabWeb================ OK !! +\defKV[webrecurr]{% + fct=\def\PLRecurfct{#1},% + nom=\def\PLRecurnom{#1},% + no=\def\PLRecurno{#1},% + nb=\def\PLRecurnb{#1},% + uno=\def\PLRecuruno{#1},% + poslabel=\def\PLRecurposlab{#1},% + decallabel=\def\PLRecuroffset{#1},% + taillelabel=\def\PLRecurlabelsize{#1},% +} + +\setKVdefault[webrecurr]{ + no=0,% + nom=u,% + nb=5,% + afftermes=true,% + poslabel=below,% + decallabel=6pt,% + taillelabel=\small +} + +%\newcommand\recurr[1][]{% + \NewDocumentCommand\recurrPL{ O{} O{thick,color=magenta} O{dotted} }{ + %<clés> + <style cabweb> + <style supplémentaire pointillés> + \useKVdefault[webrecurr]% + \setKV[webrecurr]{#1}% on paramètres les nouvelles clés et on les simplifie + \foreach \i [remember=\i as \x (initially \PLRecuruno)] in {1,...,\PLRecurnb}{% + \def\y{\fpeval{\PLRecurfct}} + %test de la position courbe / bissectrice ? + \ifnum \i=1 + \newdimen \X + \newdimen \Y + \X = \x pt + \Y = \y pt + \ifdim \Y < \X + \draw[#2] (\x,\y)--(\y,\y) ; + \else + \draw[#2] (\x,\x)--(\x,\y)--(\y,\y) ; + \fi + \else + \draw[#2] (\x,\x)--(\x,\y)--(\y,\y) ; + \fi + \ifboolKV[webrecurr]{afftermes} + {\def\indice{\fpeval{\i+\PLRecurno-1}} + \draw[#2,#3] (\x,\y)--(\x,0) node[\PLRecurposlab=\PLRecuroffset,font=\PLRecurlabelsize]{$\PLRecurnom_\indice$};} + {} + \def\i{\fpeval{\y}}% + } + } + +%================CercleTrigo=========== OK !! +\defKV[cercletrigo]{% + rayon=\def\PLcerclerayon{#1},% + epaisseur=\def\PLcerclethick{#1},% + epaisseursol=\def\PLcerclesolthick{#1},% + marge=\def\PLcerclemarge{#1},% + taillevaleurs=\def\PLcerclevaleurs{#1},% + tailleangles=\def\PLcercleangles{#1},% + couleurfond=\def\PLcerclefond{#1},% + decal=\def\PLcercledecal{#1},% + cos=\def\PLcerclevalcos{#1},% + sin=\def\PLcerclevalsin{#1},% + couleursol=\def\PLcerclecoleq{#1} +} + +\setKVdefault[cercletrigo]{ + rayon=3,% + marge=0.25,% + decal=10pt,% + epaisseur=thick,% + epaisseursol=very thick,% + affangles=true,% + afftraits=true,% + affvaleurs=true,% + moinspi=true,% + taillevaleurs=\scriptsize,% + tailleangles=\footnotesize,% + couleurfond=white,% + equationcos=false,% + equationsin=false,% + cos=45,% + sin=30,% + couleursol=blue +} + +\newcommand\cercletrigoPL[1][]{% + \useKVdefault[cercletrigo] + \setKV[cercletrigo]{#1} + \tikzset{PLval/.style={inner sep=1pt,font=\PLcerclevaleurs,fill=\PLcerclefond}} + \tikzset{PLagl/.style={inner sep=1pt,font=\PLcercleangles,fill=\PLcerclefond}} + %valeurs remarquables + \ifboolKV[cercletrigo]{affangles} + {%valeursdudessus + \draw ({\PLcerclerayon},0) node[above right=2pt,font=\PLcercleangles] {0} ; + \draw ($(30:{\PLcerclerayon})+(30:\PLcercledecal)$) node[PLagl] {$\tfrac{\pi}{6}$} ; + \draw ($(45:{\PLcerclerayon})+(45:\PLcercledecal)$) node[PLagl] {$\tfrac{\pi}{4}$} ; + \draw ($(60:{\PLcerclerayon})+(60:\PLcercledecal)$) node[PLagl] {$\tfrac{\pi}{3}$} ; + \draw (0,{\PLcerclerayon}) node[above right=2pt,PLagl] {$\tfrac{\pi}{2}$} ; + \draw ({-\PLcerclerayon},0) node[above left=2pt,PLagl] {$\pi$} ; + \draw ($(150:{\PLcerclerayon})+(150:\PLcercledecal)$) node[PLagl] {$\tfrac{5\pi}{6}$} ; + \draw ($(135:{\PLcerclerayon})+(135:\PLcercledecal)$) node[PLagl] {$\tfrac{3\pi}{4}$} ; + \draw ($(120:{\PLcerclerayon})+(120:\PLcercledecal)$) node[PLagl] {$\tfrac{2\pi}{3}$} ; + \draw ($(30:{\PLcerclerayon})+(30:\PLcercledecal)$) node[PLagl] {$\tfrac{\pi}{6}$} ; + %valeursdudessous + \draw ($(-30:{\PLcerclerayon})+(-30:\PLcercledecal)$) node[PLagl] {$\tfrac{\ifboolKV[cercletrigo]{moinspi}{-}{11}\pi}{6}$} ; + \draw ($(-45:{\PLcerclerayon})+(-45:\PLcercledecal)$) node[PLagl] {$\tfrac{\ifboolKV[cercletrigo]{moinspi}{-}{7}\pi}{4}$} ; + \draw ($(-60:{\PLcerclerayon})+(-60:\PLcercledecal)$) node[PLagl] {$\tfrac{\ifboolKV[cercletrigo]{moinspi}{-}{5}\pi}{3}$} ; + \draw (0,{-\PLcerclerayon}) node[below right=2pt,PLagl] {$\tfrac{\ifboolKV[cercletrigo]{moinspi}{-}{3}\pi}{2}$} ; + \draw ($(-120:{\PLcerclerayon})+(-120:\PLcercledecal)$) node[PLagl] {$\tfrac{\ifboolKV[cercletrigo]{moinspi}{-2}{4}\pi}{3}$} ; + \draw ($(-135:{\PLcerclerayon})+(-135:\PLcercledecal)$) node[PLagl] {$\tfrac{\ifboolKV[cercletrigo]{moinspi}{-3}{5}\pi}{4}$} ; + \draw ($(-150:{\PLcerclerayon})+(-150:\PLcercledecal)$) node[PLagl] {$\tfrac{\ifboolKV[cercletrigo]{moinspi}{-5}{7}\pi}{6}$} ; + \ifboolKV[cercletrigo]{moinspi} + {\draw ({-\PLcerclerayon},0) node[below left=2pt,PLagl] {$-\pi$} ;} + {\draw ({\PLcerclerayon},0) node[below right=2pt,PLagl] {$2\pi$} ;} + }% + {} + %tracés + \draw[\PLcerclethick,->] ({-\PLcerclerayon-\PLcerclemarge},0)--({\PLcerclerayon+\PLcerclemarge},0) ; + \draw[\PLcerclethick,->] (0,{-\PLcerclerayon-\PLcerclemarge})--(0,{\PLcerclerayon+\PLcerclemarge}) ; + \draw[\PLcerclethick] (0,0) circle[radius=\PLcerclerayon] ; + \draw (0,0) node[below left=2pt,PLval] {0} ; + %equations + \ifboolKV[cercletrigo]{equationcos} + {%traitsdeconstructioncos + \draw[\PLcerclethick,dotted,gray] (-45:\PLcerclerayon) -- (135:\PLcerclerayon) + (-135:\PLcerclerayon) -- (45:\PLcerclerayon) + (30:\PLcerclerayon) -- (150:\PLcerclerayon) + (-30:\PLcerclerayon) -- (-150:\PLcerclerayon) + (-60:\PLcerclerayon)--(60:\PLcerclerayon) + (-120:\PLcerclerayon)--(120:\PLcerclerayon) ; + \draw[\PLcerclesolthick,\PLcerclecoleq] ({\PLcerclevalcos}:\PLcerclerayon)--({-\PLcerclevalcos}:\PLcerclerayon) ; + \filldraw[\PLcerclecoleq] ({\PLcerclevalcos}:\PLcerclerayon) circle[radius=2pt] ({-\PLcerclevalcos}:\PLcerclerayon) circle[radius=2pt] ;% + } + {} + \ifboolKV[cercletrigo]{equationsin} + {%traitsdeconstructioncos + \draw[\PLcerclethick,dotted,gray] (-45:\PLcerclerayon) -- (135:\PLcerclerayon) + (-135:\PLcerclerayon) -- (45:\PLcerclerayon) + (30:\PLcerclerayon) -- (150:\PLcerclerayon) + (-30:\PLcerclerayon) -- (-150:\PLcerclerayon) + (-60:\PLcerclerayon)--(60:\PLcerclerayon) + (-120:\PLcerclerayon)--(120:\PLcerclerayon) ; + \draw[\PLcerclesolthick,\PLcerclecoleq] ({\PLcerclevalsin}:\PLcerclerayon)--({180-\PLcerclevalsin}:\PLcerclerayon) ; + \filldraw[\PLcerclecoleq] ({\PLcerclevalsin}:\PLcerclerayon) circle[radius=2pt] ({180-\PLcerclevalsin}:\PLcerclerayon) circle[radius=2pt] ;% + } + {} + %valeurs + \ifboolKV[cercletrigo]{affvaleurs} + {% + \draw ({0.5*\PLcerclerayon},0) node[below=2pt,PLval] {$\tfrac{1}{2}$} ; + \draw ({-0.5*\PLcerclerayon},0) node[below=2pt,PLval] {$-\tfrac{1}{2}$} ; + \draw (0,{0.5*\PLcerclerayon}) node[left=2pt,PLval] {$\tfrac{1}{2}$} ; + \draw (0,{-0.5*\PLcerclerayon}) node[left=2pt,PLval] {$-\tfrac{1}{2}$} ; + \draw ({0.866*\PLcerclerayon},0) node[below=2pt,PLval] {$\tfrac{\sqrt{3}}{2}$} ; + \draw ({-0.866*\PLcerclerayon},0) node[below=2pt,PLval] {$-\tfrac{\sqrt{3}}{2}$} ; + \draw (0,{0.866*\PLcerclerayon}) node[left=2pt,PLval] {$\tfrac{\sqrt{3}}{2}$} ; + \draw (0,{-0.866*\PLcerclerayon}) node[left=2pt,PLval] {$-\tfrac{\sqrt{3}}{2}$} ; + \draw ({0.707*\PLcerclerayon},0) node[above=2pt,PLval] {$\tfrac{\sqrt{2}}{2}$} ; + \draw ({-0.707*\PLcerclerayon},0) node[above=2pt,PLval] {$-\tfrac{\sqrt{2}}{2}$} ; + \draw (0,{0.707*\PLcerclerayon}) node[right=2pt,PLval] {$\tfrac{\sqrt{2}}{2}$} ; + \draw (0,{-0.707*\PLcerclerayon}) node[right=2pt,PLval] {$-\tfrac{\sqrt{2}}{2}$} ; + }% + {} + %valeurs remarquables en dernier + \ifboolKV[cercletrigo]{afftraits} + {% + \draw[\PLcerclethick,dotted,gray] (-120:\PLcerclerayon) rectangle (60:\PLcerclerayon) ; + \draw[\PLcerclethick,dotted,gray] (-150:\PLcerclerayon) rectangle (30:\PLcerclerayon) ; + \draw[\PLcerclethick,dotted,gray] (-135:\PLcerclerayon) rectangle (45:\PLcerclerayon) ; + \draw[\PLcerclethick,dotted,gray] (-120:\PLcerclerayon)--(60:\PLcerclerayon) ; + \draw[\PLcerclethick,dotted,gray] (-150:\PLcerclerayon)--(30:\PLcerclerayon) ; + \draw[\PLcerclethick,dotted,gray] (-135:\PLcerclerayon)--(45:\PLcerclerayon) ; + \draw[\PLcerclethick,dotted,gray] (120:\PLcerclerayon)--(-60:\PLcerclerayon) ; + \draw[\PLcerclethick,dotted,gray] (150:\PLcerclerayon)--(-30:\PLcerclerayon) ; + \draw[\PLcerclethick,dotted,gray] (135:\PLcerclerayon)--(-45:\PLcerclerayon) ; + }% + {} +} + +%==================AideTds============= OK !! +\defKV[aidetds]{% + code=\def\tdsparam{#1},% + couleur=\def\tdscouleur{#1},% + racines=\def\tdsracine{#1},% + largeur=\def\tdslarg{#1},% + hauteur=\def\tdshaut{#1} +} + +\setKVdefault[aidetds]{% + code=da+, + couleur=red,% + largeur=2,% + hauteur=1,% + cadre=true,% + racines=2 +} + +\NewDocumentCommand\schematdsaff{ s m m m m }{%pour les droites (interne) + % * = étoilée -> a négatif + % #2 = couleur + % #3 = largeur + % #4 = hauteur + % #5 = racine + \IfBooleanTF{#1}%si étoile := droite qui descend + {% + \def\possgnavant{above right}\def\possgnapres{below left}\def\sgnavant{\strut+}\def\sgnapres{\strut-}% + \draw[thick,#2] ({-0.5*#3},{0.5*#4})--({0.5*#3},{-0.5*#4}); + } + {% + \def\possgnavant{below right}\def\possgnapres{above left}\def\sgnavant{\strut-}\def\sgnapres{\strut+}% + \draw[thick,#2] ({-0.5*#3},{-0.5*#4})--({0.5*#3},{0.5*#4}); + } + \draw[#2] ({-0.5*#3},0) node[inner sep=0pt,\possgnavant=1pt,font=\scriptsize] {\textcircled{$\sgnavant$}}; + \draw[#2] ({0.5*#3},0) node[inner sep=0pt,\possgnapres=1pt,font=\scriptsize] {\textcircled{$\sgnapres$}}; + \draw[#2] (0,0) node[inner sep=0pt,above=3pt,font=\scriptsize] {$\strut#5$} ; + \filldraw[#2] (0,0) circle[radius=2pt] ; +} + +\NewDocumentCommand\schematdsparab{ m m m m m o }{%pour les paraboles (interne) + % #1 = signe de a (1 ou -1) ? + % #2 = couleur + % #3 = largeur + % #4 = hauteur + % #5 = nb racine + % #6 = liste racines (option) + \xintifboolexpr{ #1 > 0 'and' #5 == 2 } %a>0 et delta>0 + {% + \StrCut{#6}{/}{\xun}{\xdeux} + \draw[thick,#2] ({-0.375*#3},{0.5*#4}) parabola bend (0,{-0.5*#4}) ({0.375*#3},{0.5*#4}) ; + \draw[#2] ({-0.5*#3},0) node[above right=1pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut+$}}; + \draw[#2] ({0.5*#3},0) node[above left=1pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut+$}}; + \draw[#2] (0,0) node[below=1pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut-$}}; + \filldraw[#2] ({0.2625*#3},0) circle[radius=2pt] node[below right=1pt,inner sep=0pt,font=\scriptsize] {$\strut\xdeux$}; + \filldraw[#2] ({-0.2625*#3},0) circle[radius=2pt] node[below left=1pt,inner sep=0pt,font=\scriptsize] {$\strut\xun$};% + } + {} + \xintifboolexpr{ #1 < 0 'and' #5 == 2 } %a<0 et delta>0 + {% + \StrCut{#6}{/}{\xun}{\xdeux} + \draw[thick,#2] ({-0.375*#3},{-0.5*#4}) parabola bend (0,{0.5*#4}) ({0.375*#3},{-0.5*#4}) ; + \draw[#2] ({-0.5*#3},0) node[below right=1pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut-$}}; + \draw[#2] ({0.5*#3},0) node[below left=1pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut-$}}; + \draw[#2] (0,0) node[above=1pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut+$}}; + \filldraw[#2] ({0.2625*#3},0) circle[radius=2pt] node[above right=1pt,inner sep=0pt,font=\scriptsize] {$\strut\xdeux$}; + \filldraw[#2] ({-0.2625*#3},0) circle[radius=2pt] node[above left=1pt,inner sep=0pt,font=\scriptsize] {$\strut\xun$};% + } + {} + \xintifboolexpr{ #1 > 0 'and' #5 == 1 } %a>0 et delta=0 + {% + \draw[thick,#2] ({-0.375*#3},{0.5*#4}) parabola bend (0,0) ({0.375*#3},{0.5*#4}) ; + \filldraw[#2] (0,0) circle[radius=2pt] node[below=3pt,inner sep=1pt,font=\scriptsize] {$#6$}; + \draw[#2] (0,0) node[above=3pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut+$}}; + } + {} + \xintifboolexpr{ #1 < 0 'and' #5 == 1 } %a>0 et delta=0 + {% + \draw[thick,#2] ({-0.375*#3},{-0.5*#4}) parabola bend (0,0) ({0.375*#3},{-0.5*#4}) ; + \filldraw[#2] (0,0) circle[radius=2pt] node[above=3pt,inner sep=0pt,font=\scriptsize] {$#6$}; + \draw[#2] (0,0) node[below=3pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut-$}}; + } + {} + \xintifboolexpr{ #1 > 0 'and' #5 == 0 } %a>0 et delta<0 + {% + \draw[thick,#2] ({-0.375*#3},{0.5*#4}) parabola bend (0,{0.075*#4}) ({0.375*#3},{0.5*#4}) ; + \draw[#2] (0,{0.075*#4}) node[above=2pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut+$}}; + } + {} + \xintifboolexpr{ #1 < 0 'and' #5 == 0 } %a>0 et delta<0 + {% + \draw[thick,#2] ({-0.375*#3},{-0.5*#4}) parabola bend (0,{-0.075*#4}) ({0.375*#3},{-0.5*#4}) ; + \draw[#2] (0,{-0.075*#4}) node[below=2pt,inner sep=0pt,font=\scriptsize] {\textcircled{$\strut-$}}; + } + {} +} + +\newcommand\aidesignePL[1][]{% + \useKVdefault[aidetds] + \setKV[aidetds]{#1} + %simplification des codes + \IfEq{\tdsparam}{da+}{\def\xcode{1}}{} + \IfEq{\tdsparam}{da-}{\def\xcode{-1}}{} + \IfEq{\tdsparam}{pa+d+}{\def\xcode{12}}{} + \IfEq{\tdsparam}{pa-d+}{\def\xcode{-12}}{} + \IfEq{\tdsparam}{pa+d0}{\def\xcode{11}}{} + \IfEq{\tdsparam}{pa-d0}{\def\xcode{-11}}{} + \IfEq{\tdsparam}{pa+d-}{\def\xcode{10}}{} + \IfEq{\tdsparam}{pa-d-}{\def\xcode{-10}}{} + %cadre si booléen true + \ifboolKV[aidetds]{cadre} + {\draw[lightgray] ({-0.5*\tdslarg},{-0.5*\tdshaut}) rectangle ({0.55*\tdslarg},{0.5*\tdshaut}) ;} + {} + %restriction de la petite fenêtre + \clip ({-0.5*\tdslarg},{-0.5*\tdshaut}) rectangle ({0.55*\tdslarg},{0.5*\tdshaut}) ; + %axe (Ox) + \draw[thick,->] ({-0.5*\tdslarg},0)--({0.55*\tdslarg},0); + %1er degré a+ code = 1 + \ifnum\xcode=1 + \schematdsaff{\tdscouleur}{\tdslarg}{\tdshaut}{\tdsracine} + \fi + %1er degré a- code = -1 + \ifnum\xcode=-1 + \schematdsaff*{\tdscouleur}{\tdslarg}{\tdshaut}{\tdsracine} + \fi + %2d degré a+delta+ code = 12 + \ifnum\xcode=12 + \schematdsparab{1}{\tdscouleur}{\tdslarg}{\tdshaut}{2}[\tdsracine] + \fi + %2d degré a-delta+ code = -12 + \ifnum\xcode=-12 + \schematdsparab{-1}{\tdscouleur}{\tdslarg}{\tdshaut}{2}[\tdsracine] + \fi + %2d degré a+delta0 code = 11 + \ifnum\xcode=11 + \schematdsparab{1}{\tdscouleur}{\tdslarg}{\tdshaut}{1}[\tdsracine] + \fi + %2d degré a-delta0 code = -11 + \ifnum\xcode=-11 + \schematdsparab{-1}{\tdscouleur}{\tdslarg}{\tdshaut}{1}[\tdsracine] + \fi + %2d degré a+delta- code = 10 + \ifnum\xcode=10 + \schematdsparab{1}{\tdscouleur}{\tdslarg}{\tdshaut}{0} + \fi + %2d degré a-delta- code = -10 + \ifnum\xcode=-10 + \schematdsparab{-1}{\tdscouleur}{\tdslarg}{\tdshaut}{0} + \fi +} + +%pour l'interaction avec tkz-tab +\defKV[aidetdstkz]{% + echelle=\def\tdstkzscale{#1},% + decal=\def\tdstkzoffset{#1} +} + +\setKVdefault[aidetdstkz]{% + echelle=1,% + decal=1.25 +} + +\NewDocumentCommand\aidesignetkztabPL{ o m O{0.85} O{1.5} }{% + %#1 = codeaidetikz + %#2 = numligne + %#3 = échelle + %#4 = décalage + %\shorthandoff{:}\shorthandoff{!} %bizzzzzzzzare + %\NoAutoSpacing + \coordinate (Z) at ($(T2#2)!.5!(T2\the\numexpr#2+1\relax)$) ; + %\shorthandon{:}\shorthandon{!} + \path (Z.east) + (#4,0) pic[right,scale=#3,every node/.style={scale=#3}] {code={\aidesignePL[#1]}} ; +} + +%=============RegressionLinéaire======= OK !! +%calcul des paramètres +\defKV[coeffreglin]{% + nomcoeffa=\def\RegLinCoeffa{#1},% + nomcoeffb=\def\RegLinCoeffb{#1},% + nomcoeffr=\def\RegLinCoeffr{#1},% + nomcoeffrd=\def\RegLinCoeffrd{#1},% + nomxmin=\def\RegLinCoeffXmin{#1},% + nomxmax=\def\RegLinCoeffXmax{#1} +} + +\setKVdefault[coeffreglin]{% + nomcoeffa=COEFFa,% + nomcoeffb=COEFFb,% + nomcoeffr=COEFFr,% + nomcoeffrd=COEFFrd,% + nomxmin=LXmin,% + nomxmax=LXmax +} + +\newcommand\PLreglin[3][]{ + \useKVdefault[coeffreglin] + \setKV[coeffreglin]{#1}% on paramètres les nouvelles clés et on les simplifie + %xmin et xmax + \expandafter\def\csname\RegLinCoeffXmin\endcsname{\fpeval{min(#2)}} + \expandafter\def\csname\RegLinCoeffXmax\endcsname{\fpeval{max(#2)}} + %listes des données + \def\xliste{#2} + \def\yliste{#3} + \readlist*\LX{\xliste} + \readlist*\LY{\yliste} + %taille des listes + \def\LNB{\inteval{\LXlen}} + %somme des LX et des LY OK + \xdef\LXSomme{0} + \xdef\LYSomme{0} + \foreach \i in {1,2,...,\LNB}{ + \xdef\LXSomme{\fpeval{\LXSomme+\LX[\i]}} + } + \foreach \i in {1,2,...,\LNB}{ + \xdef\LYSomme{\fpeval{\LYSomme+\LY[\i]}} + } + %moyenne des LX et des LY OK + \xdef\LXmoy{\fpeval{\LXSomme/\LNB}} + \xdef\LYmoy{\fpeval{\LYSomme/\LNB}} + %variance des LX et des LY OK + \xdef\LXvar{0} + \foreach \i in {1,2,...,\LNB}{ + \xdef\LXvar{\fpeval{\LXvar+(\LX[\i]-\LXmoy)*(\LX[\i]-\LXmoy)}} + } + \xdef\LXvar{\fpeval{\LXvar/\LNB}} + \xdef\LYvar{0} + \foreach \i in {1,2,...,\LNB}{ + \xdef\LYvar{\fpeval{\LYvar+(\LY[\i]-\LYmoy)*(\LY[\i]-\LYmoy)}} + } + \xdef\LYvar{\fpeval{\LYvar/\LNB}} + %covariance des XY OK + \xdef\LXYvar{0} + \foreach \i in {1,2,...,\LNB}{ + \xdef\LXYvar{\fpeval{\LXYvar+(\LX[\i]-\LXmoy)*(\LY[\i]-\LYmoy)}} + } + \xdef\LXYvar{\fpeval{\LXYvar/\LNB}} + %COEFFS OK + \expandafter\def\csname\RegLinCoeffa\endcsname{\fpeval{\LXYvar/\LXvar}} + \expandafter\def\csname\RegLinCoeffb\endcsname{\fpeval{\LYmoy-\csname\RegLinCoeffa\endcsname*\LXmoy}} + \expandafter\def\csname\RegLinCoeffr\endcsname{\fpeval{\LXYvar/sqrt(\LXvar*\LYvar)}} + \expandafter\def\csname\RegLinCoeffrd\endcsname{\fpeval{\csname\RegLinCoeffr\endcsname*\csname\RegLinCoeffr\endcsname}} +} + +%pour un nuage en TiKz +\defKV[nuagereglin]{% + couleur=\def\RegLinNuageCouleur{#1},% + taille=\def\RegLinNuageTaille{#1}, + Ox=\def\RegLinNuageOx{#1},% + Oy=\def\RegLinNuageOy{#1},% +} + +\setKVdefault[nuagereglin]{% + couleur=teal,% + taille=2pt,% + Ox=0,% + Oy=0 +} + +\newcommand\PLreglinpts[3][]{% + \useKVdefault[nuagereglin] + \setKV[nuagereglin]{#1}% on paramètres les nouvelles clés et on les simplifie + \def\xliste{#2} + \def\yliste{#3} + \readlist*\LX{\xliste} + \readlist*\LY{\yliste} + %taille des listes + \def\LNB{\inteval{\LXlen}} + \foreach \i in {1,2,...,\LNB} {\filldraw[\RegLinNuageCouleur] ({\LX[\i]-\RegLinNuageOx},{\LY[\i]-\RegLinNuageOy}) circle[radius=\RegLinNuageTaille] ;} +} + +%=============ConversionsBases========= OK !! +%dec->bin avec blocs de 4 chiffres +\setKVdefault[CONVDECBIN]{% + affbase=true +} +\NewDocumentCommand\PLconvdecbin{ s O{} m }{% + \useKVdefault[CONVDECBIN] + \setKV[CONVDECBIN]{#2}% on paramètres les nouvelles clés et on les simplifie + \def\resbrut{\xintDecToBin{#3}} + \StrLen{\resbrut}[\nbchiffres] + \def\nbgrp{\fpeval{4*ceil(\nbchiffres/4,0)}} + \IfBooleanTF{#1} + {\num{#3}\ifboolKV[CONVDECBIN]{affbase}{_{10}}{}=\num[digit-group-size=4]{\resbrut}\ifboolKV[CONVDECBIN]{affbase}{_{2}}{}} + {\num{#3}\ifboolKV[CONVDECBIN]{affbase}{_{10}}{}=\num[digit-group-size=4,minimum-integer-digits=\nbgrp]{\resbrut}\ifboolKV[CONVDECBIN]{affbase}{_{2}}{}} +} + +%bin->hexa avec blocs de 4 chiffres +%\defKV[CONVBINHEX]{% +% trait=\def\epcrochet{#1} +%} +\setKVdefault[CONVBINHEX]{% + %trait=0.5pt,% + affbase=true,% + details=true +} +%bourrage de 0 avant +\ExplSyntaxOn +\NewExpandableDocumentCommand{\PLstrzeros}{m} +{ + \int_compare:nT { #1 > 0 } + { + 0 \prg_replicate:nn { #1 - 1 } { 0 } + } +} +\ExplSyntaxOff + + +%la conversion complète +\newcommand\PLconvbinhex[2][]{% + \useKVdefault[CONVBINHEX] + \setKV[CONVBINHEX]{#1}% on paramètres les nouvelles clés et on les simplifie + \def\chbrut{#2} + \StrLen{\chbrut}[\nbchiffres] %nb de chiffres du binaire + \xdef\nbgrp{\fpeval{4*ceil(\nbchiffres/4,0)}} %nb de chiffres avec blocs de 4 + \xdef\nbblocs{\fpeval{\nbgrp/4}} %nb de blocs + %on rajoute des zeros si besoin := OK + \xdef\resinter{\chbrut} + \num[digit-group-size=4]{\chbrut}\ifboolKV[CONVBINHEX]{affbase}{_{2}}{}= + \ifboolKV[CONVBINHEX]{details}{% + \ifnum\nbchiffres<\nbgrp + \xdef\nbz{\inteval{\nbgrp-\nbchiffres}} + \xdef\resinter{\PLstrzeros{\nbz}\chbrut} + \num[digit-group-size=4,minimum-integer-digits=\nbgrp]{\resinter}= + \fi + %découpage par blocs et conversion en hexa := OK + \newcount\cpt + \cpt0 + \loop\ifnum \cpt<\nbblocs + \def\iinit{\fpeval{4*\cpt+1}}% + \def\ifinal{\fpeval{4*(\cpt+1)}}% + \StrMid{\resinter}{\iinit}{\ifinal}[\blocinter]% + {\underbracket{\blocinter}_{\xintBinToHex{\blocinter}}\,} + \advance\cpt by 1 + \repeat + \!= + }% + {} + \xintBinToHex{\chbrut}\ifboolKV[CONVBINHEX]{affbase}{_{16}}{} +} + +%bin/hexa/bin->dec avec écriture polynomiale +\defKV[CONVTODEC]{% + basedep=\def\basedepart{#1} +} +\setKVdefault[CONVTODEC]{% + basedep=2,% + affbase=true,% + details=true,% + zeros=true +} + +\ExplSyntaxOn +\newcommand\convertbasetobasedix[2]{% + \int_from_base:nn {#1}{#2} +} +\ExplSyntaxOff + +\newcommand\PLconvtodec[2][]{% + \useKVdefault[CONVTODEC] + \setKV[CONVTODEC]{#1}% on paramètres les nouvelles clés et on les simplifie + \def\nbdepart{#2} + \StrLen{\nbdepart}[\nbchiffres] + \StrChar{\nbdepart}{1}[\chiffre] + %si on est en base 16 + \xintifboolexpr{\basedepart == 16}% + {% + \nbdepart\ifboolKV[CONVTODEC]{affbase}{_{\basedepart}}{} = + \ifboolKV[CONVTODEC]{details}{% + \xintHexToDec{\chiffre}\times\basedepart^{\inteval{\nbchiffres-1}}% + \newcount\cpt + \cpt2 + \loop\ifnum \cpt<\inteval{\nbchiffres+1} + \def\puiss{\inteval{\nbchiffres-\cpt}} + \StrChar{\nbdepart}{\cpt}[\chiffre] + \ifboolKV[CONVTODEC]{zeros}% + {% + +\xintHexToDec{\chiffre}\times\basedepart^{\puiss}% + } + { + \ifnum\xintHexToDec{\chiffre} > 0 + +\xintHexToDec{\chiffre}\times\basedepart^{\puiss}% + \fi + } + \advance\cpt by 1 + \repeat + = + } + {} + \num{\xintHexToDec{\nbdepart}}\ifboolKV[CONVTODEC]{affbase}{_{10}}{} + }% + {} + \xintifboolexpr{\basedepart == 2}% + {% + \num[digit-group-size=4]{\nbdepart}\ifboolKV[CONVTODEC]{affbase}{_{\basedepart}}{} = + \ifboolKV[CONVTODEC]{details}{% + \chiffre\times\basedepart^{\inteval{\nbchiffres-1}}% + \newcount\cpt + \cpt2 + \loop\ifnum \cpt<\inteval{\nbchiffres+1} + \def\puiss{\inteval{\nbchiffres-\cpt}} + \StrChar{\nbdepart}{\cpt}[\chiffre] + \ifboolKV[CONVTODEC]{zeros}% + {% + +\chiffre\times\basedepart^{\puiss}% + } + { + \ifnum\chiffre > 0 + +\chiffre\times\basedepart^{\puiss}% + \fi + } + \advance\cpt by 1 + \repeat + = + } + {} + \num{\xintBinToDec{\nbdepart}}\ifboolKV[CONVTODEC]{affbase}{_{10}}{} + }% + {} +} + +\newcommand\PLconvversdix[3][]{%1=options,%2=nb,%3=basedep + \useKVdefault[CONVTODEC] + \setKV[CONVTODEC]{#1}% on paramètres les nouvelles clés et on les simplifie + \def\NBdepart{#2} + \def\basedepart{#3} + \StrLen{\NBdepart}[\nbchiffres] + \StrChar{\NBdepart}{1}[\chiffre] + \NBdepart\ifboolKV[CONVTODEC]{affbase}{_{\basedepart}}{} = + \ifboolKV[CONVTODEC]{details}{% + \xintHexToDec{\chiffre}\times\basedepart^{\inteval{\nbchiffres-1}}% + \newcount\cpt + \cpt2 + \loop\ifnum \cpt<\inteval{\nbchiffres+1} + \def\puiss{\inteval{\nbchiffres-\cpt}} + \StrChar{\NBdepart}{\cpt}[\chiffre] + \ifboolKV[CONVTODEC]{zeros}% + {% + +\xintHexToDec{\chiffre}\times\basedepart^{\puiss}% + } + { + \ifnum\xintHexToDec{\chiffre} > 0 + +\xintHexToDec{\chiffre}\times\basedepart^{\puiss}% + \fi + } + \advance\cpt by 1 + \repeat + = + } + {} + \num{\convertbasetobasedix{#2}{#3}}\ifboolKV[CONVTODEC]{affbase}{_{10}}{} +} + +%==============MainLevée TikZ========== OK !! +\tikzset{% + mainlevee/.style args={#1et#2}{decorate,decoration={random steps, segment length=#1,amplitude=#2}}, + mainlevee/.default={5mm et 0.6pt} +} + +%==============PixelArt TikZ=========== OK !! +\defKV[pixelarttkz]{% + codes=\def\PATlettres{#1},% + couleurs=\def\PATcouleurs{#1},% + symboles=\def\PATchiffres{#1},% + style=\def\PATtaille{#1} +} + +\setKVdefault[pixelarttkz]{% + style=\scriptsize,% + correction=false,% + symb=false,% + bordcases=true +} + +\newcommand\PLpixelart[2][]{% + \useKVdefault[pixelarttkz] + \setKV[pixelarttkz]{#1} + %affichage du corrigé + \ifboolKV[pixelarttkz]{correction} + {% + \csvloop{file=#2,no head,command={% + \foreach \l [count=\n] in \csvline {% + \StrDel{\l}{ }[\l] + \setsepchar{,} + \readlist\LCPA\PATcouleurs + \StrPosition{\PATlettres}{\l}[\pixcnt]% + \xintifboolexpr{\pixcnt>0}% + {% + \itemtomacro\LCPA[\pixcnt]\pixcol% + \ifboolKV[pixelarttkz]{bordcases}% + {\draw[fill=\pixcol] ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) ;}% + {\filldraw[\pixcol] ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) ;}% + % + }% + {} + } + } + } + } + {% + \ifboolKV[pixelarttkz]{symb} + {%affichage du pixelart versions chiffres si besoin + \csvloop{file=#2,no head,command={% + \foreach \l [count=\n] in \csvline {% + \StrDel{\l}{ }[\l] + \setsepchar{,} + \readlist\LCNA\PATchiffres + \StrPosition{\PATlettres}{\l}[\pixpos]% + \xintifboolexpr{\pixpos>0}% + {% + \itemtomacro\LCNA[\pixpos]\pixchf% + \draw ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) node[inner sep=0,midway,font=\PATtaille] {\pixchf} ;% + } + {}% + } + } + } + } + {%affichage du pixelart versions lettres ou chiffres simples (<=9) + \csvloop{file=#2,no head,command={% + \foreach \l [count=\n] in \csvline {% + \StrDel{\l}{ }[\l] + \IfSubStr{\PATlettres}{\l}% + {% + \draw ({\n-0.5},{-\thecsvrow+0.5}) rectangle ({\n+0.5},{-\thecsvrow-0.5}) node[inner sep=0,midway,font=\PATtaille] {\l};} + {} + } + } + } + } + } +} + +%=========STATS2VAR========= +%variables directement dans tikzpicture +\tikzset{% + Ox/.store in=\axexOx,Ox/.default=0,Ox=0,%essai + Oy/.store in=\axeyOy,Oy/.default=0,Oy=0,%essai + xmin/.store in=\xmin,xmin/.default=-5,xmin=-5, + xmax/.store in=\xmax,xmax/.default=5,xmax=5, + ymin/.store in=\ymin,ymin/.default=-5,ymin=-5, + ymax/.store in=\ymax,ymax/.default=5,ymax=5, + xgrille/.store in=\xgrille,xgrille/.default=1,xgrille=1, + xgrilles/.store in=\xgrilles,xgrilles/.default=0.5,xgrilles=0.5, + ygrille/.store in=\ygrille,ygrille/.default=1,ygrille=1, + ygrilles/.store in=\ygrilles,ygrilles/.default=0.5,ygrilles=0.5, + xunit/.store in=\xunit,xunit/.default=1,xunit=1, + yunit/.store in=\yunit,yunit/.default=1,yunit=1 +} + +%style point croix +\tikzset{pics/PLdotcross/.style args={#1/#2}{ + code={ + \draw[line width={0.5*#1},rotate=#2] (-#1,0) -- (#1,0); + \draw[line width={0.5*#1},rotate=#2] (0,-#1) -- (0, #1); + } + }, + pics/PLdotcross/.default={4pt/0} +} + +%axeOx +\defKV[PLaxextkz]{% + epaisseur=\def\axexwidth{#1},% + police=\def\axexfont{#1},% + hautgrad=\def\axextickwidth{#1},% + posgrad=\def\axexposlabel{#1} +} + +\setKVdefault[PLaxextkz]{% + epaisseur=1.25pt,% + police=\normalsize\normalfont,% + posgrad=below,% + hautgrad=4pt,% + affgrad=true,% + afforigine=true,% + annee=false +} + +\DeclareDocumentCommand\PLaxextikz{ O{} m }{% + \useKVdefault[PLaxextkz] + \setKV[PLaxextkz]{#1}% on paramètres les nouvelles clés et on les simplifie + %formatage des années + \IfSubStr{\axextickwidth}{/} + {\StrCut{\axextickwidth}{/}{\axextickwidthA}{\axextickwidthB}} + {\def\axextickwidthA{\axextickwidth}\def\axextickwidthB{\axextickwidth}} + \foreach \x in {#2}{% + \draw[line width=\axexwidth] ({\x-\axexOx},{\axextickwidthA}) -- ({\x-\axexOx},{-\axextickwidthB})% + \ifboolKV[PLaxextkz]{affgrad}%on affiche les graduations + {% + \ifboolKV[PLaxextkz]{afforigine}%si on demande d'afficher l'origine + {node[\axexposlabel,font=\axexfont] + {\ifboolKV[PLaxextkz]{annee}% + {\num[group-digits=none]{\x}}% + {\num[text-family-to-math=true,text-series-to-math=true]{\x}}% + } + } + {\xintifboolexpr{\x==\axexOx}{}{node[\axexposlabel,font=\axexfont] {\ifboolKV[PLaxextkz]{annee}% + {\num[group-digits=none]{\x}}% + {\num[text-family-to-math=true,text-series-to-math=true]{\x}}% + } + } + } + } + {} + ;} +} + +%axeOy +\defKV[PLaxeytkz]{% + epaisseur=\def\axeywidth{#1},% + police=\def\axeyfont{#1},% + hautgrad=\def\axeytickwidth{#1},% + posgrad=\def\axeyposlabel{#1} +} + +\setKVdefault[PLaxeytkz]{% + epaisseur=1.25pt,% + police=\normalsize\normalfont,% + posgrad=left,% + hautgrad=4pt,% + affgrad=true,% + afforigine=true,% + annee=false +} + +\DeclareDocumentCommand\PLaxeytikz{ O{} m }{% + \useKVdefault[PLaxeytkz] + \setKV[PLaxeytkz]{#1}% on paramètres les nouvelles clés et on les simplifie + \IfSubStr{\axeytickwidth}{/} + {\StrCut{\axeytickwidth}{/}{\axeytickwidthA}{\axeytickwidthB}} + {\def\axeytickwidthA{\axeytickwidth}\def\axeytickwidthB{\axeytickwidth}} + \foreach \y in {#2}{% + \draw[line width=\axeywidth] ({\axeytickwidthA},{\y-\axeyOy}) -- ({-\axeytickwidthB},{\y-\axeyOy})% + \ifboolKV[PLaxeytkz]{affgrad}%on affiche les graduations + {% + \ifboolKV[PLaxeytkz]{afforigine}%si on demande d'afficher l'origine + {node[\axeyposlabel,font=\axeyfont] + {\ifboolKV[PLaxeytkz]{annee}% + {\num[group-digits=none]{\y}}% + {\num[text-family-to-math=true,text-series-to-math=true]{\y}}% + } + } + {\xintifboolexpr{\y==\axeyOy}{}{node[\axeyposlabel,font=\axeyfont] {\ifboolKV[PLaxeytkz]{annee}% + {\num[group-digits=none]{\y}}% + {\num[text-family-to-math=true,text-series-to-math=true]{\y}}% + } + } + } + } + {} + ;} +} + +%axes +\defKV[PLaxestkz]{% + epaisseur=\def\axeswidth{#1},% + police=\def\axesfont{#1},% + labelx=\def\axeslabelx{#1},% + labely=\def\axeslabely{#1},% + poslabelx=\def\axesposlabelx{#1},% + poslabely=\def\axesposlabely{#1},% + echellefleche=\def\axesechellefleche{#1},% + typefleche=\def\axestypefleche{#1},% + afflabel=\def\axesafflabel{#1} +} + +\setKVdefault[PLaxestkz]{% + epaisseur=1.25pt,% + police=\normalsize\normalfont,% + labelx=$x$,% + labely=$y$,% + afflabel=z,% + poslabelx=right,% + poslabely=above,% + echellefleche=1,% + typefleche=> +} + +\DeclareDocumentCommand\PLaxestikz{ O{} }{% + \useKVdefault[PLaxestkz] + \setKV[PLaxestkz]{#1}% + %on affiche les deux axes + \draw[line width=\axeswidth,-{\axestypefleche[scale=\axesechellefleche]}] ({\xmin-\axexOx},0) -- ({\xmax-\axexOx},0) ; + \draw[line width=\axeswidth,-{\axestypefleche[scale=\axesechellefleche]}] (0,{\ymin-\axeyOy}) -- (0,{\ymax-\axeyOy}) ; + %les labels éventuels + \IfSubStr{\axesafflabel}{x}% + {\draw ({\xmax-\axexOx},0) node[\axesposlabelx,font=\axesfont] {\axeslabelx} ;} + {} + \IfSubStr{\axesafflabel}{y}% + {\draw (0,{\ymax-\axeyOy}) node[\axesposlabely,font=\axesfont] {\axeslabely} ;} + {} +} + +%fenêtre clippée +\newcommand\PLfenetre{% + \clip ({\xmin-\axexOx},{\ymin-\axeyOy}) rectangle ({\xmax-\axexOx},{\ymax-\axeyOy}) ; +} + +%origine +\defKV[PLaxesorig]{% + police=\def\axesorfont{#1},% + pos=\def\axesorpos{#1},% + decal=\def\axesordecal{#1},% + valeur=\def\axesorval{#1} +} + +\setKVdefault[PLaxesorig]{% + police=\normalsize\normalfont,% + pos={below left},% + decal=2pt,% + valeur=0 +} + +\DeclareDocumentCommand\PLorigine{ O{} }{% + \useKVdefault[PLaxesorig] + \setKV[PLaxesorig]{#1}% + \draw (0,0) node[\axesorpos=\axesordecal,font=\axesorfont] {\axesorval} ; +} + +%grilles +\setKVdefault[PLgrillestkz]{% + affp=true,% + affs=true +} + +\DeclareDocumentCommand\PLgrilletikz{ O{} O{thin,lightgray} O{ultra thin,lightgray} }{% + \useKVdefault[PLgrillestkz] + \setKV[PLgrillestkz]{#1}% + \ifboolKV[PLgrillestkz]{affs} + {\draw[xstep=\xgrilles,ystep=\ygrilles,#3] ({\xmin-\axexOx},{\ymin-\axeyOy}) grid ({\xmax-\axexOx},{\ymax-\axeyOy});} + {} + \ifboolKV[PLgrillestkz]{affp} + {\draw[xstep=\xgrille,ystep=\ygrille,#2] ({\xmin-\axexOx},{\ymin-\axeyOy}) grid ({\xmax-\axexOx},{\ymax-\axeyOy});} + {} +} + +%point(s) avec changement origines +\defKV[PLpts]{% + taille=\def\ptstaille{#1},% + couleur=\def\ptscouleur{#1},% + style=\def\ptsstyle{#1} +} + +\setKVdefault[PLpts]{% + taille=2pt,% + couleur=blue,% + style=o +} + +\newcommand\PLnuagepoints[2][]{% + \useKVdefault[PLpts] + \setKV[PLpts]{#1}% + \setsepchar{§}% + \readlist\listepointsaffiches{#2} + \foreachitem\point\in\listepointsaffiches{% + \StrBetween{\point}{(}{,}[\XPT] + \StrBetween{\point}{,}{)}[\YPT] + \IfStrEq{\ptsstyle}{o}% + {\filldraw[\ptscouleur] ({\XPT-\axexOx},{\YPT-\axeyOy}) circle[radius=\ptstaille] ;} + {} + \IfStrEq{\ptsstyle}{x}% + {\draw[\ptscouleur] ({\XPT-\axexOx},{\YPT-\axeyOy}) pic {PLdotcross=\ptstaille/45} ;} + {} + \IfStrEq{\ptsstyle}{+}% + {\draw[\ptscouleur] ({\XPT-\axexOx},{\YPT-\axeyOy}) pic {PLdotcross=\ptstaille/0} ;} + {} + } +} + +\newcommand\PLnuagepts[3][]{% + \useKVdefault[PLpts] + \setKV[PLpts]{#1}% on paramètres les nouvelles clés et on les simplifie + \def\xliste{#2} + \def\yliste{#3} + \readlist*\LX{\xliste} + \readlist*\LY{\yliste} + %taille des listes + \def\LNB{\inteval{\LXlen}} + \foreach \i in {1,2,...,\LNB} { + \IfStrEq{\ptsstyle}{o}% + { + \IfSubStr{\ptscouleur}{/} + {\StrCut{\ptscouleur}{/}{\ptscouleurA}{\ptscouleurB}\draw[thick,\ptscouleurA,fill=\ptscouleurB] ({\LX[\i]-\axexOx},{\LY[\i]-\axeyOy}) circle[radius=\ptstaille] ;} + {\draw[\ptscouleur,fill=\ptscouleur] ({\LX[\i]-\axexOx},{\LY[\i]-\axeyOy}) circle[radius=\ptstaille] ;} + } + {} + \IfStrEq{\ptsstyle}{x}% + {\draw[\ptscouleur] ({\LX[\i]-\axexOx},{\LY[\i]-\axeyOy}) pic {PLdotcross=\ptstaille/45} ;} + {} + \IfStrEq{\ptsstyle}{+}% + {\draw[\ptscouleur] ({\LX[\i]-\axexOx},{\LY[\i]-\axeyOy}) pic {PLdotcross=\ptstaille/0} ;} + {} + } +} + +\defKV[PLptmoy]{% + police=\def\ptmoyfont{#1},% + taille=\def\ptmoytaille{#1},% + couleur=\def\ptmoycouleur{#1},% + style=\def\ptmoystyle{#1},% + xg=\def\ptmoyx{#1},% + yg=\def\ptmoyy{#1},% + nom=\def\ptmoynom{#1},% + pos=\def\ptmoypos{#1},% + decal=\def\ptmoydecal{#1},% +} + +\setKVdefault[PLptmoy]{% + police=\normalsize\normalfont,% + taille=4pt,% + couleur=red,% + style=x,% + xg=\LXmoy,% + yg=\LYmoy,% + nom=G,% + pos=above,% + decal=0pt,% + affnom=true +} + +\newcommand\PLnuageptmoy[1][]{% + \useKVdefault[PLptmoy] + \setKV[PLptmoy]{#1}% on paramètres les nouvelles clés et on les simplifie + \IfStrEq{\ptmoystyle}{o}% + { + \IfSubStr{\ptmoycouleur}{/} + {\StrCut{\ptmoycouleur}{/}{\ptmoycouleurA}{\ptmoycouleurB}\draw[thick,\ptmoycouleurA,fill=\ptmoycouleurB] ({\ptmoyx-\axexOx},{\ptmoyy-\axeyOy}) circle[radius=\ptmoytaille] ;} + {\draw[\ptmoycouleur,fill=\ptmoycouleur] ({\ptmoyx-\axexOx},{\ptmoyy-\axeyOy}) circle[radius=\ptmoytaille] ;} + } + {} + \IfStrEq{\ptmoystyle}{x}% + {\draw[\ptmoycouleur] ({\ptmoyx-\axexOx},{\ptmoyy-\axeyOy}) pic {PLdotcross=\ptmoytaille/45} ;} + {} + \IfStrEq{\ptmoystyle}{+}% + {\draw[\ptmoycouleur] ({\ptmoyx-\axexOx},{\ptmoyy-\axeyOy}) pic {PLdotcross=\ptmoytaille/0} ;} + {} + \ifboolKV[PLptmoy]{affnom} + {\draw ({\ptmoyx-\axexOx},{\ptmoyy-\axeyOy}) node[\ptmoypos={\ptmoytaille+\ptmoydecal},font=\ptmoyfont] {\ptmoynom} ;} + {} + +} + +%courbe ? +\newcommand\PLcourbe[3][]{% + \setsepchar{:}% + \readlist\PLdomaine{#3} + \itemtomacro\PLdomaine[1]\PLDm + \itemtomacro\PLdomaine[2]\PLDM + \saveexpandmode\noexpandarg + \StrSubstitute{#2}{\x}{(\x+\axexOx)}[\fctdecx] + \restoreexpandmode % restore the previous mode + \draw[#1] plot[domain={\PLDm-\axexOx}:{\PLDM-\axexOx}] (\x,{\fctdecx-\axeyOy}) ; +} + +\setKVdefault[PLsimplewindow]{% + axes=true,% + grille=true,% +} + +\DeclareDocumentCommand\PLfenetresimple{ O{} D<>{} m D<>{} m }{% + \useKVdefault[PLsimplewindow] + \setKV[PLsimplewindow]{#1}% on paramètres les nouvelles clés et on les simplifie + \ifboolKV[PLsimplewindow]{grille} + {\PLgrilletikz} + {} + \ifboolKV[PLsimplewindow]{axes} + {\PLaxestikz\PLaxextikz[#2]{#3}\PLaxeytikz[#4]{#5}} + {} +} + +\NewDocumentEnvironment{PLstats}{ O{} } +{% + \begin{tikzpicture}[#1] + }% + {% + \end{tikzpicture}% +} + +%=============BOITES MOUSTACHES======== OK !! +\defKV[boiteamoustaches]{% + parametres=\def\BaMListe{#1},% + couleur=\def\BaMCouleur{#1},% + elevation=\def\BaMElevation{#1},% + hauteur=\def\BaMHauteur{#1},% + moyenne=\def\BaMMoyenne{#1},% + epaisseur=\def\BaMEpaisseur{#1},% + remplir=\def\BaMRemplissage{#1} +} + +\setKVdefault[boiteamoustaches]{% + couleur=black,% + elevation=1,% + hauteur=1,% + affmoyenne=false,% + epaisseur=thick,% + pointilles=false,% + valeurs=false,% + remplir=white +} + +\defKV[boiteamoustachesaxe]{% + min=\def\BaMAxeMin{#1},% + max=\def\BaMAxeMax{#1},% + elargir=\def\BaMAxeElarg{#1},% + epaisseur=\def\BaMAxeEpaisseur{#1},% + valeurs=\def\BaMAxeValeurs{#1} +} + +\setKVdefault[boiteamoustachesaxe]{% + elargir=0.05,% + epaisseur=thick,% + affvaleurs=false +} + +\newcommand\PLboitemoustaxe[1][]{ + \useKVdefault[boiteamoustachesaxe] + \setKV[boiteamoustachesaxe]{#1} + \def\BaMaxelargeur{\fpeval{\BaMAxeMax-\BaMAxeMin}} + \def\BaMaxexmin{\fpeval{\BaMAxeMin-\BaMAxeElarg*\BaMaxelargeur}} + \def\BaMaxexmax{\fpeval{\BaMAxeMax+\BaMAxeElarg*\BaMaxelargeur}} + \draw[\BaMAxeEpaisseur,->] (\BaMaxexmin,0) -- (\BaMaxexmax,0) ; + \ifboolKV[boiteamoustachesaxe]{affvaleurs} + {\foreach \x in \BaMAxeValeurs \draw[\BaMAxeEpaisseur] (\x,3pt)--(\x,-3pt) node[below=3pt] {\num{\x}} ;} + {} +} + +\newcommand\PLboitemoust[1][]{ + \useKVdefault[boiteamoustaches] + \setKV[boiteamoustaches]{#1} + \setsepchar[.]{/}% + \readlist*\BaMListeparams\BaMListe% + \itemtomacro\BaMListeparams[1]\BaMmin% + \itemtomacro\BaMListeparams[2]\BaMqu% + \itemtomacro\BaMListeparams[3]\BaMmed% + \itemtomacro\BaMListeparams[4]\BaMqt% + \itemtomacro\BaMListeparams[5]\BaMmax% + \draw[draw,\BaMEpaisseur,\BaMCouleur,fill=\BaMRemplissage] ({\BaMqu},{\BaMElevation-0.5*\BaMHauteur}) rectangle ({\BaMqt},{\BaMElevation+0.5*\BaMHauteur}) ; + \draw[\BaMEpaisseur,\BaMCouleur] (\BaMmin,{\BaMElevation-0.5*\BaMHauteur})--(\BaMmin,{\BaMElevation+0.5*\BaMHauteur}) (\BaMmax,{\BaMElevation-0.5*\BaMHauteur})--(\BaMmax,{\BaMElevation+0.5*\BaMHauteur}) (\BaMmed,{\BaMElevation-0.5*\BaMHauteur})--(\BaMmed,{\BaMElevation+0.5*\BaMHauteur}); + \draw[\BaMEpaisseur,\BaMCouleur] ({\BaMmin},{\BaMElevation})--({\BaMqu},{\BaMElevation}) ({\BaMqt},{\BaMElevation})--({\BaMmax},{\BaMElevation}) ; + \ifboolKV[boiteamoustaches]{affmoyenne} + {\filldraw[\BaMCouleur] ({\BaMMoyenne},{\BaMElevation}) circle[radius=2.5pt] ;} + {} + \ifboolKV[boiteamoustaches]{pointilles} + { + \draw[\BaMEpaisseur,densely dashed] (\BaMmin,{\BaMElevation-0.5*\BaMHauteur}) -- (\BaMmin,0) ; + \draw[\BaMEpaisseur,densely dashed] (\BaMqu,{\BaMElevation-0.5*\BaMHauteur}) -- (\BaMqu,0) ; + \draw[\BaMEpaisseur,densely dashed] (\BaMmed,{\BaMElevation-0.5*\BaMHauteur}) -- (\BaMmed,0) ; + \draw[\BaMEpaisseur,densely dashed] (\BaMqt,{\BaMElevation-0.5*\BaMHauteur}) -- (\BaMqt,0) ; + \draw[\BaMEpaisseur,densely dashed] (\BaMmax,{\BaMElevation-0.5*\BaMHauteur}) -- (\BaMmax,0) ; + } + {} + \ifboolKV[boiteamoustaches]{valeurs} + { + \filldraw (\BaMmin,0) circle[radius=2pt] node[below=4pt] {\num{\BaMmin}} ; + \filldraw (\BaMqu,0) circle[radius=2pt] node[below=4pt] {\num{\BaMqu}} ; + \filldraw (\BaMmed,0) circle[radius=2pt] node[below=4pt] {\num{\BaMmed}} ; + \filldraw (\BaMqt,0) circle[radius=2pt] node[below=4pt] {\num{\BaMqt}} ; + \filldraw (\BaMmax,0) circle[radius=2pt] node[below=4pt] {\num{\BaMmax}} ; + } + {} +} + +%================SUDOMATHS============= OK !! +\defKV[PLTIKZSUDOM]{% + couleurtexte=\def\PLSMcoultexte{#1},% + epaisseur=\def\PLSMepf{#1},% + epaisseurg=\def\PLSMepg{#1},% + unite=\def\PLSMunite{#1},% + couleurcase=\def\PLSMcoulcase{#1},% + nbcol=\def\PLSMnbcol{#1},% + nbsubcol=\def\PLSMnbsubcol{#1},% + nblig=\def\PLSMnblig{#1},% + nbsublig=\def\PLSMnbsublig{#1},% + police=\def\PLSMfonte{#1},% + policeleg=\def\PLSMfonteleg{#1},% + listelegv=\def\PLSMlistelegv{#1},% + listelegh=\def\PLSMlistelegh{#1},% + decallegende=\def\PLSMdecalleg{#1} +} + +\setKVdefault[PLTIKZSUDOM]{% + epaisseurg=1.5pt,% + epaisseur=0.5pt,% + unite=1cm,% + couleurcase=LightBlue!50,% + couleurtexte=blue,% + nbcol=9,% + nbsubcol=3,% + nblig=9,% + nbsublig=3, + police=\normalfont\normalsize,% + policeleg=\normalfont\sffamily,% + legendes=true,% + listelegv=ABCDEFGHIJKLMNOPQRSTUVWXYZ,% + listelegh=abcdefghijklmnopqrstuvwxyz,% + decallegende=0.45 +} + +\NewDocumentEnvironment{PLenvsudomaths}{ O{} m } + { + \useKVdefault[PLTIKZSUDOM] + \setKV[PLTIKZSUDOM]{#1}% on paramètres les nouvelles clés et on les simplifie + %calculs intermédiaires + \def\larcolinter{\inteval{\PLSMnbcol/\PLSMnbsubcol}} + \def\larliginter{\inteval{\PLSMnblig/\PLSMnbsublig}} + %lecture liste + \IfEq{#2}{}{}% + {% + \setsepchar[.]{§./}% + \readlist*\SPGrilleSudoMaths{#2}% + } + %débt envtik + \begin{tikzpicture}[x=\PLSMunite,y=\PLSMunite,line join=miter] + %cases + \IfEq{#2}{}{}% + {% + \foreach \i in {1,2,...,\PLSMnblig}{% + \foreach \j in {1,2,...,\PLSMnbcol}{% + \itemtomacro\SPGrilleSudoMaths[\i,\j]\SMcase + \IfSubStr{\SMcase}{*}%si on veut colorier via * + {% + \StrDel{\SMcase}{*}[\SMcaseb]% + \draw[draw=none,fill=\PLSMcoulcase] ({\j-1},{1-\i}) rectangle++ (1,-1) node[inner sep=0pt,outer sep=0pt,\PLSMcoultexte,font=\PLSMfonte,midway] {\SMcaseb} ;% + } + {% + \draw ({\j-0.5},{0.5-\i}) node[inner sep=0pt,outer sep=0pt,\PLSMcoultexte,font=\PLSMfonte] {\SMcase} ;% + } + } + }% + } + %grilles + \draw[line width=\PLSMepg] (0,0) rectangle ({\PLSMnbcol},{-\PLSMnblig}) ; + \draw[line width=\PLSMepf,xstep=1,ystep=1] (0,0) grid ({\PLSMnbcol},{-\PLSMnblig}) ; + \draw[line width=\PLSMepg,xstep=\larcolinter,ystep=\larliginter] (0,0) grid ({\PLSMnbcol},{-\PLSMnblig}) ; + %légendes + \ifboolKV[PLTIKZSUDOM]{legendes} + {% + \foreach \i in {1,2,...,\PLSMnbcol}{\draw ({\i-0.5},{\PLSMdecalleg}) node[inner sep=0pt,outer sep=0pt,font=\PLSMfonteleg] {\strut\StrChar{\PLSMlistelegh}{\i}} ;} + \foreach \j in {1,2,...,\PLSMnblig}{\draw ({-\PLSMdecalleg},{0.5-\j}) node[inner sep=0pt,outer sep=0pt,font=\PLSMfonteleg] {\StrChar{\PLSMlistelegv}{\j}} ;} + }{} + } + { + \end{tikzpicture} + } + +\NewDocumentCommand\PLsudomaths{ O{} m }{% + \useKVdefault[PLTIKZSUDOM] + \setKV[PLTIKZSUDOM]{#1}% on paramètres les nouvelles clés et on les simplifie + %calculs intermédiaires + \def\larcolinter{\inteval{\PLSMnbcol/\PLSMnbsubcol}} + \def\larliginter{\inteval{\PLSMnblig/\PLSMnbsublig}} + %lecture liste + \IfEq{#2}{}{}% + {% + \setsepchar[.]{§./}% + \readlist*\SPGrilleSudoMaths{#2}% + } + %débt envtik + \begin{tikzpicture}[x=\PLSMunite,y=\PLSMunite,line join=miter] + %cases + \IfEq{#2}{}{}% + {% + \foreach \i in {1,2,...,\PLSMnblig}{% + \foreach \j in {1,2,...,\PLSMnbcol}{% + \itemtomacro\SPGrilleSudoMaths[\i,\j]\SMcase + \IfSubStr{\SMcase}{*}%si on veut colorier via * + {% + \StrDel{\SMcase}{*}[\SMcaseb]% + \draw[draw=none,fill=\PLSMcoulcase] ({\j-1},{1-\i}) rectangle++ (1,-1) node[inner sep=0pt,outer sep=0pt,\PLSMcoultexte,font=\PLSMfonte,midway] {\SMcaseb} ;% + } + {% + \draw ({\j-0.5},{0.5-\i}) node[inner sep=0pt,outer sep=0pt,\PLSMcoultexte,font=\PLSMfonte] {\SMcase} ;% + } + } + }% + } + %grilles + \draw[line width=\PLSMepg] (0,0) rectangle ({\PLSMnbcol},{-\PLSMnblig}) ; + \draw[line width=\PLSMepf,xstep=1,ystep=1] (0,0) grid ({\PLSMnbcol},{-\PLSMnblig}) ; + \draw[line width=\PLSMepg,xstep=\larcolinter,ystep=\larliginter] (0,0) grid ({\PLSMnbcol},{-\PLSMnblig}) ; + %légendes + \ifboolKV[PLTIKZSUDOM]{legendes} + {% + \foreach \i in {1,2,...,\PLSMnbcol}{\draw ({\i-0.5},{\PLSMdecalleg}) node[inner sep=0pt,outer sep=0pt,font=\PLSMfonteleg] {\strut\StrChar{\PLSMlistelegh}{\i}} ;} + \foreach \j in {1,2,...,\PLSMnblig}{\draw ({-\PLSMdecalleg},{0.5-\j}) node[inner sep=0pt,outer sep=0pt,font=\PLSMfonteleg] {\StrChar{\PLSMlistelegv}{\j}} ;} + }{} + \end{tikzpicture} +} + +%================LOISPROBAS============ OK !! +%calculs "simples" +\newcommand\calcPbinomP[3]{%npk + \xintFloatToDecimal{\xintfloateval{binomial(#1,#3)*#2^#3*(1-#2)^(#1-#3)}} +} +\newcommand\calcPbinomC[4]{%npab + \def\BorneInf{#3}\def\BorneSup{#4} + \ifthenelse{\equal{#3}{*}}% + {\def\BorneInf{0}} + {} + \ifthenelse{\equal{#4}{*}}% + {\def\BorneSup{#1}} + {} + \xintFloatToDecimal{\xintfloateval{add(binomial(#1,i)*#2^i*(1-#2)^(#1-i), i=\BorneInf..\BorneSup)}} +} +\newcommand\calcPgeomP[2]{%pk + \xintFloatToDecimal{\xintfloateval{(1-#1)^(#2-1)*(#1)}} +} +\newcommand\calcPgeomC[3]{%pab + \def\BorneInf{#2}\def\BorneSup{#3} + \ifthenelse{\equal{#2}{*}}% + {\def\BorneInf{1}} + {} + \ifthenelse{\equal{#3}{*}}% + {\def\BorneSup{\fpeval{trunc(1/#1*10,0)}}} + {} + \xintFloatToDecimal{\xintfloateval{add((1-#1)^(i-1)*(#1), i=\BorneInf..\BorneSup)}} +} +\newcommand\calcPhypergeomP[4]{%Nnmk + \xintFloatToDecimal{\xintfloateval{binomial(#3,#4)*binomial(#1-#3,#2-#4)/binomial(#1,#2)}} +} +\newcommand\calcPhypergeomC[5]{%Nnmab + \def\BorneInf{#4}\def\BorneSup{#5} + \ifthenelse{\equal{#4}{*}}% + {\def\BorneInf{0}} + {} + \ifthenelse{\equal{#5}{*}}% + {\def\BorneSup{#1}} + {} + \xintFloatToDecimal{\xintfloateval{add(binomial(#3,i)*binomial(#1-#3,#2-i)/binomial(#1,#2), i=\BorneInf..\BorneSup)}} +} +\newcommand\calcPpoissP[2]{%lk + \xintFloatToDecimal{\xintfloateval{exp(-#1)*#1^#2/factorial(#2)}} +} +\newcommand\calcPpoissC[3]{%lab + \def\BorneInf{#2}\def\BorneSup{#3} + \ifthenelse{\equal{#2}{*}}% + {\def\BorneInf{0}} + {} + \ifthenelse{\equal{#3}{*}}% + {\def\BorneSup{10*#1}} + {} + \xintFloatToDecimal{\xintfloateval{add(exp(-#1)*#1^i/factorial(i), i=\BorneInf..\BorneSup)}} +} +%utiles idée de https://tex.stackexchange.com/questions/355574/im-searching-for-a-table-with-cdf-of-standard-normal-distribution +\xintdeffloatvar a_1,a_2,a_3,a_4,a_5,a_6 := +0.0705230784,0.0422820123,0.0092705272,0.0001520143,0.0002765672,0.0000430638; +\xintdeffloatvar rac2inv := sqrt(2)/2 ; +\xintdeffloatfunc erfc(x) := % uniquement pour x positif +((((((a_6*x+a_5)*x+a_4)*x+a_3)*x+a_2)*x+a_1)*x+1)**-16 ; % fin de définition de erfc(x) +\xintdeffloatfunc Phi(z) := (z>=0)?{1 - 0.5 * erfc(rac2inv * z)}{0.5 * erfc(-rac2inv * z)}; + +\newcommand\calcPnormC[4]{%msab + %def des bornes de l'intervalle suivant l'absence de a ou de b... + \def\BorneInf{#3}\def\BorneSup{#4} + \ifthenelse{\equal{#3}{*}}% + {\def\BorneInf{#4-10*#2}} + {} + \ifthenelse{\equal{#4}{*}}% + {\def\BorneSup{#3+10*#2}} + {} + \xintFloatToDecimal{\xintfloateval{Phi((\BorneSup-#1)/#2)-Phi((\BorneInf-#1)/#2)}} +} +%calculs "simples" fiabilite +\newcommand\calcPexpoC[3]{%lab + \def\BorneInf{#2}\def\BorneSup{#3} + \ifthenelse{\equal{#2}{*}}% + {\def\BorneInf{0}} + {} + \ifthenelse{\equal{#3}{*}}% + {\def\BorneSup{100/#1}} + {} + \xintFloatToDecimal{\xintfloateval{exp(-#1*\BorneInf)-exp(-#1*\BorneSup)}} +} + +%calculs formatés +\NewDocumentCommand{\numPbinomP}{ s O{3} m m m }{%*=sci,2=prec,3=n,4=p,5=k + \IfBooleanTF{#1}% + {% + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(binomial(#3,#5)*#4^#5*(1-#4)^(#3-#5),#2)}}} + }% + {% + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(binomial(#3,#5)*#4^#5*(1-#4)^(#3-#5),#2)}}} + } +} + +\NewDocumentCommand{\numPbinomC}{ s O{3} m m m m }{%*=sci,2=prec,3=n,4=p,5=a,6=b + \def\BorneInf{#5}\def\BorneSup{#6} + \ifthenelse{\equal{#5}{*}}% + {\def\BorneInf{0}} + {} + \ifthenelse{\equal{#6}{*}}% + {\def\BorneSup{#3}} + {} + \IfBooleanTF{#1}% + {% + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#3,i)*#4^i*(1-#4)^(#3-i), i=\BorneInf..\BorneSup),#2)}}} + }% + {% + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#3,i)*#4^i*(1-#4)^(#3-i), i=\BorneInf..\BorneSup),#2)}}} + } +} + +\NewDocumentCommand{\numPgeomP}{ s O{3} m m }{%*=sci,2=prec,3=p,4=k + \IfBooleanTF{#1}% + {% + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round((1-#3)^(#4-1)*(#3),#2)}}} + }% + {% + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round((1-#3)^(#4-1)*(#3),#2)}}} + } +} + +\NewDocumentCommand{\numPgeomC}{ s O{3} m m m }{%*=sci,2=prec,3=p,4=a,5=b + \def\BorneInf{#4}\def\BorneSup{#5} + \ifthenelse{\equal{#4}{*}}% + {\def\BorneInf{1}} + {} + \ifthenelse{\equal{#5}{*}}% + {\def\BorneSup{\fpeval{trunc(1/#3*10,0)}}} + {} + \IfBooleanTF{#1}% + {% + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add((1-#3)^(i-1)*(#3), i=\BorneInf..\BorneSup),#2)}}} + }% + {% + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add((1-#3)^(i-1)*(#3), i=\BorneInf..\BorneSup),#2)}}} + } +} + +\NewDocumentCommand{\numPhypergeomP}{ s O{3} m m m m }{%*=sci,2=prec,3=N,4=n,5=m,6=k + \IfBooleanTF{#1}% + {% + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(binomial(#5,#6)*binomial(#3-#5,#4-#6)/binomial(#3,#4),#2)}}} + }% + {% + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(binomial(#5,#6)*binomial(#3-#5,#4-#6)/binomial(#3,#4),#2)}}} + } +} + +\NewDocumentCommand{\numPhypergeomC}{ s O{3} m m m m m }{%*=sci,2=prec,3=N,4=n,5=m,6=a,7=b + \def\BorneInf{#6}\def\BorneSup{#7} + \ifthenelse{\equal{#6}{*}}% + {\def\BorneInf{0}} + {} + \ifthenelse{\equal{#7}{*}}% + {\def\BorneSup{#3}} + {} + \IfBooleanTF{#1}% + {% + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#5,i)*binomial(#3-#5,#4-i)/binomial(#3,#4), i=\BorneInf..\BorneSup),#2)}}} + }% + {% + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#5,i)*binomial(#3-#5,#4-i)/binomial(#3,#4), i=\BorneInf..\BorneSup),#2)}}} + } +} + +\NewDocumentCommand{\numPpoissP}{ s O{3} m m }{%*=sci,2=prec,3=lbda,4=k + \IfBooleanTF{#1}% + {% + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3)*#3^#4/factorial(#4),#2)}}} + }% + {% + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3)*#3^#4/factorial(#4),#2)}}} + } +} + +\NewDocumentCommand{\numPpoissC}{ s O{3} m m m }{%*=ing,2=prec,3=lbda,4=a,5=b + \def\BorneInf{#4}\def\BorneSup{#5} + \ifthenelse{\equal{#4}{*}}% + {\def\BorneInf{0}} + {} + \ifthenelse{\equal{#5}{*}}% + {\def\BorneSup{10*#3}} + {} + \IfBooleanTF{#1}% + {% + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(exp(-#3)*#3^i/factorial(i), i=\BorneInf..\BorneSup),#2)}}} + }% + {% + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(exp(-#3)*#3^i/factorial(i), i=\BorneInf..\BorneSup),#2)}}} + } +} + +\NewDocumentCommand{\numPnormC}{ s O{3} m m m m }{% + %*=ing,2=prec,3=mu,4=sigma,5=a,6=b + %def des bornes de l'intervalle suivant l'absence de a ou de b... + \def\BorneInf{#5}\def\BorneSup{#6} + \ifthenelse{\equal{#5}{*}}% + {\def\BorneInf{#6-10*#4}} + {} + \ifthenelse{\equal{#6}{*}}% + {\def\BorneSup{#5+10*#4}} + {} + \IfBooleanTF{#1}% + {% + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(Phi((\BorneSup-#3)/#4)-Phi((\BorneInf-#3)/#4),#2)}}} + }% + {% + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(Phi((\BorneSup-#3)/#4)-Phi((\BorneInf-#3)/#4),#2)}}} + } +} + +\NewDocumentCommand{\numPexpoC}{ s O{3} m m m }{%*=ing,2=prec,3=lbda,4=a,5=b + \def\BorneInf{#4}\def\BorneSup{#5} + \ifthenelse{\equal{#4}{*}}% + {\def\BorneInf{0}} + {} + \ifthenelse{\equal{#5}{*}}% + {\def\BorneSup{100/#3}} + {} + \IfBooleanTF{#1}% + {% + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3*\BorneInf)-exp(-#3*\BorneSup),#2)}}} + }% + {% + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintFloatToDecimal{\xintfloateval{round(exp(-#3*\BorneInf)-exp(-#3*\BorneSup),#2)}}}} + } +} + +%===============CONVFROMDEC============ OK !! +\newcommand\PLnoeud[2]{\tikz[remember picture,baseline=(#1.base)]\node[shape=rectangle,inner sep=0pt](#1){#2};} +\ExplSyntaxOn +\newcommand\convertbasedixtobase[2]{% + \int_to_Base:nn {#1}{#2} +} +\ExplSyntaxOff + +\defKV[convfromten]{% + couleur=\def\PLConvCouleur{#1},% + decalh=\def\PLConvDecalH{#1},% + decalv=\def\PLConvDecalV{#1},% + noeud=\def\PLConvNoeud{#1} +} + +\setKVdefault[convfromten]{% + couleur=red,% + decalh=2pt,% + decalv=3pt,% + rect=true,% + noeud=EEE,% + couleurres=false +} + +\newcommand\PLconvDepuisDec[3][]{% + \useKVdefault[convfromten]% + \setKV[convfromten]{#1}% + \xdef\ValRes{\xintDecToHex{#2}}% + \xdef\ValA{#2}\xdef\ValB{#3}% + \xdef\ValTMP{#2}% + \xdef\ValMU{\inteval{#3-1}}% + \ensuremath{% + \left\lbrace\begin{array}{@{\,}r@{\;=\;}l@{\;+\;}r} + %1ere division + \xdef\ValQ{\fpeval{trunc(\ValTMP/#3,0)}}\xdef\ValR{\fpeval{\ValTMP-#3*\ValQ}} + \num{\ValTMP}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}\PLnoeud{\PLConvNoeud1}{\num{\ValR}}% + \xdef\ValTMP{\ValQ}% + \whiledo {\ValTMP > \ValMU}% + {% + \xdef\ValQ{\fpeval{trunc(\ValTMP/#3,0)}}\xdef\ValR{\fpeval{\ValTMP-#3*\ValQ}}% + \\ \num{\ValTMP}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}\num{\ValR} + \xdef\ValTMP{\ValQ}% + } + %dernière + \xdef\ValQ{\fpeval{trunc(\ValTMP/#3,0)}}\xdef\ValR{\fpeval{\ValTMP-#3*\ValQ}}% + \\ \num{\ValTMP}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}\PLnoeud{\PLConvNoeud2}{\num{\ValR}} + \end{array} \right| \Rightarrow \num{#2}_{10}=\ifboolKV[convfromten]{couleurres}{\mathcolor{\PLConvCouleur}{\convertbasedixtobase{#2}{#3}_{#3}}}{\convertbasedixtobase{#2}{#3}_{#3}}}% + \ifboolKV[convfromten]{rect}% + {% + \IfSubStr{\PLConvDecalH}{/}% + {\StrCut{\PLConvDecalH}{/}{\PLConvDecalHg}{\PLConvDecalHd}}% + {\def\PLConvDecalHg{\PLConvDecalH}\def\PLConvDecalHd{\PLConvDecalH}}% + \begin{tikzpicture} + \draw[overlay,rounded corners=4pt,\PLConvCouleur,thick] ($(\PLConvNoeud1.north west)+(-\PLConvDecalHg,\PLConvDecalV)$) rectangle ($(\PLConvNoeud2.south east)+(\PLConvDecalHd,-\PLConvDecalV)$) ; + \draw[overlay,rounded corners=4pt,\PLConvCouleur,thick,->,>=latex] ($(\PLConvNoeud2.east)+(\PLConvDecalHd,0)$)--++(0,{0.75\baselineskip}) ; + \end{tikzpicture}% + }{}% +} + +%===============ARBRESPROBAS=========== OK !! +\defKV[PLTIKZARBRE]{% + unite=\def\PLAPunite{#1},% + espniv=\def\PLAPespniv{#1},% + espfeuille=\def\PLAPespfeuille{#1},% + type=\def\PLAPtype{#1},% + police=\def\PLAPfont{#1},% + policeprobas=\def\PLAPfontproba{#1},% + styletrait=\def\PLAPtypetrait{#1},% + eptrait=\def\PLAPeptrait{#1} +} + +\setKVdefault[PLTIKZARBRE]{% + unite=1cm,% + espniv=3.25,% + espfeuille=1,% + type=2x2,% + police=\normalfont\normalsize,% + policeprobas=\normalfont\small,% + inclineprobas=true,% + fleche=false,% + styletrait={},% + eptrait=semithick +} + +\NewDocumentCommand\PLarbre{ O{} m }{%1=options,2=libellés + \useKVdefault[PLTIKZARBRE]% + \setKV[PLTIKZARBRE]{#1}% + \setsepchar[.]{,./}% + \readlist*\PLARBREDONNES{#2}% + \begin{tikzpicture}[x=\PLAPunite,y=\PLAPunite] + %styles + \tikzstyle{noeud} = [font=\PLAPfont] + \tikzstyle{probas}= [font=\PLAPfontproba] + \ifboolKV[PLTIKZARBRE]{inclineprobas} + {\tikzstyle{PLetiquette}=[pos=0.525,sloped,fill=white]} + {\tikzstyle{PLetiquette}=[pos=0.525,fill=white]} + \ifboolKV[PLTIKZARBRE]{fleche} + {\tikzstyle{PLfleche}=[->,>=latex,\PLAPtypetrait,\PLAPeptrait]} + {\tikzstyle{PLfleche}=[\PLAPtypetrait,\PLAPeptrait]} + %arbre2x2 + \IfEq{\PLAPtype}{2x2} + {% + \coordinate (R) at ({0*\PLAPespniv},{-1.5*\PLAPespfeuille}) ; + \node[noeud] (A11) at ({1*\PLAPespniv},{-0.5*\PLAPespfeuille}) {\PLARBREDONNES[1,1]}; + \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]}; + \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]}; + \node[noeud] (A12) at ({1*\PLAPespniv},{-2.5*\PLAPespfeuille}) {\PLARBREDONNES[4,1]}; + \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[5,1]}; + \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]}; + \IfEq{\PLARBREDONNES[1,2]}{} + {\draw[PLfleche] (R)--(A11) ;} + {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;} + \IfEq{\PLARBREDONNES[2,2]}{} + {\draw[PLfleche] (A11)--(A21) ;} + {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;} + \IfEq{\PLARBREDONNES[3,2]}{} + {\draw[PLfleche] (A11)--(A22) ;} + {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;} + \IfEq{\PLARBREDONNES[4,2]}{} + {\draw[PLfleche] (R)--(A12) ;} + {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;} + \IfEq{\PLARBREDONNES[5,2]}{} + {\draw[PLfleche] (A12)--(A23) ;} + {\draw[PLfleche] (A12)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;} + \IfEq{\PLARBREDONNES[6,2]}{} + {\draw[PLfleche] (A12)--(A24) ;} + {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;} + }{} + %arbre3x2 + \IfEq{\PLAPtype}{3x2} + {% + %sommets + \coordinate (R) at ({0*\PLAPespniv},{-2.5*\PLAPespfeuille}) ; + \node[noeud] (A11) at ({1*\PLAPespniv},{-0.5*\PLAPespfeuille}) {\PLARBREDONNES[1,1]}; + \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]}; + \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]}; + \node[noeud] (A12) at ({1*\PLAPespniv},{-2.5*\PLAPespfeuille}) {\PLARBREDONNES[4,1]}; + \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[5,1]}; + \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]}; + \node[noeud] (A13) at ({1*\PLAPespniv},{-4.5*\PLAPespfeuille}) {\PLARBREDONNES[7,1]}; + \node[noeud] (A25) at ({2*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[8,1]}; + \node[noeud] (A26) at ({2*\PLAPespniv},{-5*\PLAPespfeuille}) {\PLARBREDONNES[9,1]}; + %branches + \IfEq{\PLARBREDONNES[1,2]}{} + {\draw[PLfleche] (R)--(A11) ;} + {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;} + \IfEq{\PLARBREDONNES[2,2]}{} + {\draw[PLfleche] (A11)--(A21) ;} + {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;} + \IfEq{\PLARBREDONNES[3,2]}{} + {\draw[PLfleche] (A11)--(A22) ;} + {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;} + \IfEq{\PLARBREDONNES[4,2]}{} + {\draw[PLfleche] (R)--(A12) ;} + {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;} + \IfEq{\PLARBREDONNES[5,2]}{} + {\draw[PLfleche] (A12)--(A23) ;} + {\draw[PLfleche] (A12)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;} + \IfEq{\PLARBREDONNES[6,2]}{} + {\draw[PLfleche] (A12)--(A24) ;} + {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;} + \IfEq{\PLARBREDONNES[7,2]}{} + {\draw[PLfleche] (R)--(A13) ;} + {\draw[PLfleche] (R)--(A13) node[probas,PLetiquette,{\PLARBREDONNES[7,3]}] {{\PLARBREDONNES[7,2]}} ;} + \IfEq{\PLARBREDONNES[8,2]}{} + {\draw[PLfleche] (A13)--(A25) ;} + {\draw[PLfleche] (A13)--(A25) node[probas,PLetiquette,{\PLARBREDONNES[8,3]}] {{\PLARBREDONNES[8,2]}} ;} + \IfEq{\PLARBREDONNES[9,2]}{} + {\draw[PLfleche] (A13)--(A26) ;} + {\draw[PLfleche] (A13)--(A26) node[probas,PLetiquette,{\PLARBREDONNES[9,3]}] {{\PLARBREDONNES[9,2]}} ;} + }{} + %arbre2x3 + \IfEq{\PLAPtype}{2x3} + {% + %sommets + \coordinate (R) at ({0*\PLAPespniv},{-2.5*\PLAPespfeuille}) ; + \node[noeud] (A11) at ({1*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[1,1]}; + \node[noeud] (A12) at ({1*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[5,1]}; + \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]}; + \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]}; + \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[4,1]}; + \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]}; + \node[noeud] (A25) at ({2*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[7,1]}; + \node[noeud] (A26) at ({2*\PLAPespniv},{-5*\PLAPespfeuille}) {\PLARBREDONNES[8,1]}; + %branches + \IfEq{\PLARBREDONNES[1,2]}{} + {\draw[PLfleche] (R)--(A11) ;} + {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;} + \IfEq{\PLARBREDONNES[5,2]}{} + {\draw[PLfleche] (R)--(A12) ;} + {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;} + \IfEq{\PLARBREDONNES[2,2]}{} + {\draw[PLfleche] (A11)--(A21) ;} + {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;} + \IfEq{\PLARBREDONNES[3,2]}{} + {\draw[PLfleche] (A11)--(A22) ;} + {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;} + \IfEq{\PLARBREDONNES[4,2]}{} + {\draw[PLfleche] (A11)--(A23) ;} + {\draw[PLfleche] (A11)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;} + \IfEq{\PLARBREDONNES[6,2]}{} + {\draw[PLfleche] (A12)--(A24) ;} + {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;} + \IfEq{\PLARBREDONNES[7,2]}{} + {\draw[PLfleche] (A12)--(A25) ;} + {\draw[PLfleche] (A12)--(A25) node[probas,PLetiquette,{\PLARBREDONNES[7,3]}] {{\PLARBREDONNES[7,2]}} ;} + \IfEq{\PLARBREDONNES[8,2]}{} + {\draw[PLfleche] (A12)--(A26) ;} + {\draw[PLfleche] (A12)--(A26) node[probas,PLetiquette,{\PLARBREDONNES[8,3]}] {{\PLARBREDONNES[8,2]}} ;} + }{} + %arbre2x3 + \IfEq{\PLAPtype}{3x3} + {% + %sommets + \coordinate (R) at ({0*\PLAPespniv},{-4*\PLAPespfeuille}) ; + \node[noeud] (A11) at ({1*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[1,1]}; + \node[noeud] (A12) at ({1*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[5,1]}; + \node[noeud] (A13) at ({1*\PLAPespniv},{-7*\PLAPespfeuille}) {\PLARBREDONNES[10,1]}; + \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]}; + \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]}; + \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[4,1]}; + \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]}; + \node[noeud] (A25) at ({2*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[7,1]}; + \node[noeud] (A26) at ({2*\PLAPespniv},{-5*\PLAPespfeuille}) {\PLARBREDONNES[8,1]}; + \node[noeud] (A27) at ({2*\PLAPespniv},{-6*\PLAPespfeuille}) {\PLARBREDONNES[10,1]}; + \node[noeud] (A28) at ({2*\PLAPespniv},{-7*\PLAPespfeuille}) {\PLARBREDONNES[11,1]}; + \node[noeud] (A29) at ({2*\PLAPespniv},{-8*\PLAPespfeuille}) {\PLARBREDONNES[12,1]}; + %branches + \IfEq{\PLARBREDONNES[1,2]}{} + {\draw[PLfleche] (R)--(A11) ;} + {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;} + \IfEq{\PLARBREDONNES[5,2]}{} + {\draw[PLfleche] (R)--(A12) ;} + {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;} + \IfEq{\PLARBREDONNES[9,2]}{} + {\draw[PLfleche] (R)--(A13) ;} + {\draw[PLfleche] (R)--(A13) node[probas,PLetiquette,{\PLARBREDONNES[9,3]}] {{\PLARBREDONNES[9,2]}} ;} + %N2 + \IfEq{\PLARBREDONNES[2,2]}{} + {\draw[PLfleche] (A11)--(A21) ;} + {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;} + \IfEq{\PLARBREDONNES[3,2]}{} + {\draw[PLfleche] (A11)--(A22) ;} + {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;} + \IfEq{\PLARBREDONNES[4,2]}{} + {\draw[PLfleche] (A11)--(A23) ;} + {\draw[PLfleche] (A11)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;} + \IfEq{\PLARBREDONNES[6,2]}{} + {\draw[PLfleche] (A12)--(A24) ;} + {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;} + \IfEq{\PLARBREDONNES[7,2]}{} + {\draw[PLfleche] (A12)--(A25) ;} + {\draw[PLfleche] (A12)--(A25) node[probas,PLetiquette,{\PLARBREDONNES[7,3]}] {{\PLARBREDONNES[7,2]}} ;} + \IfEq{\PLARBREDONNES[8,2]}{} + {\draw[PLfleche] (A12)--(A26) ;} + {\draw[PLfleche] (A12)--(A26) node[probas,PLetiquette,{\PLARBREDONNES[8,3]}] {{\PLARBREDONNES[8,2]}} ;} + \IfEq{\PLARBREDONNES[10,2]}{} + {\draw[PLfleche] (A13)--(A27) ;} + {\draw[PLfleche] (A13)--(A27) node[probas,PLetiquette,{\PLARBREDONNES[10,3]}] {{\PLARBREDONNES[10,2]}} ;} + \IfEq{\PLARBREDONNES[11,2]}{} + {\draw[PLfleche] (A13)--(A28) ;} + {\draw[PLfleche] (A13)--(A28) node[probas,PLetiquette,{\PLARBREDONNES[11,3]}] {{\PLARBREDONNES[11,2]}} ;} + \IfEq{\PLARBREDONNES[12,2]}{} + {\draw[PLfleche] (A13)--(A29) ;} + {\draw[PLfleche] (A13)--(A29) node[probas,PLetiquette,{\PLARBREDONNES[12,3]}] {{\PLARBREDONNES[12,2]}} ;} + }{} + \end{tikzpicture} +} + +\NewDocumentEnvironment{PLenvarbre}{ O{} m }%1=options,2=libellés +{ + \useKVdefault[PLTIKZARBRE] + \setKV[PLTIKZARBRE]{#1} + \setsepchar[.]{,./}% + \readlist*\PLARBREDONNES{#2} + \begin{tikzpicture}[x=\PLAPunite,y=\PLAPunite] + %styles + \tikzstyle{noeud} = [font=\PLAPfont] + \tikzstyle{probas}= [font=\PLAPfontproba] + \ifboolKV[PLTIKZARBRE]{inclineprobas} + {\tikzstyle{PLetiquette}=[pos=0.525,sloped,fill=white]} + {\tikzstyle{PLetiquette}=[pos=0.525,fill=white]} + \ifboolKV[PLTIKZARBRE]{fleche} + {\tikzstyle{PLfleche}=[->,>=latex,\PLAPtypetrait,\PLAPeptrait]} + {\tikzstyle{PLfleche}=[\PLAPtypetrait,\PLAPeptrait]} + %arbre2x2 + \IfEq{\PLAPtype}{2x2} + {% + \coordinate (R) at ({0*\PLAPespniv},{-1.5*\PLAPespfeuille}) ; + \node[noeud] (A11) at ({1*\PLAPespniv},{-0.5*\PLAPespfeuille}) {\PLARBREDONNES[1,1]}; + \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]}; + \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]}; + \node[noeud] (A12) at ({1*\PLAPespniv},{-2.5*\PLAPespfeuille}) {\PLARBREDONNES[4,1]}; + \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[5,1]}; + \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]}; + \IfEq{\PLARBREDONNES[1,2]}{} + {\draw[PLfleche] (R)--(A11) ;} + {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;} + \IfEq{\PLARBREDONNES[2,2]}{} + {\draw[PLfleche] (A11)--(A21) ;} + {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;} + \IfEq{\PLARBREDONNES[3,2]}{} + {\draw[PLfleche] (A11)--(A22) ;} + {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;} + \IfEq{\PLARBREDONNES[4,2]}{} + {\draw[PLfleche] (R)--(A12) ;} + {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;} + \IfEq{\PLARBREDONNES[5,2]}{} + {\draw[PLfleche] (A12)--(A23) ;} + {\draw[PLfleche] (A12)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;} + \IfEq{\PLARBREDONNES[6,2]}{} + {\draw[PLfleche] (A12)--(A24) ;} + {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;} + }{} + %arbre3x2 + \IfEq{\PLAPtype}{3x2} + {% + %sommets + \coordinate (R) at ({0*\PLAPespniv},{-2.5*\PLAPespfeuille}) ; + \node[noeud] (A11) at ({1*\PLAPespniv},{-0.5*\PLAPespfeuille}) {\PLARBREDONNES[1,1]}; + \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]}; + \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]}; + \node[noeud] (A12) at ({1*\PLAPespniv},{-2.5*\PLAPespfeuille}) {\PLARBREDONNES[4,1]}; + \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[5,1]}; + \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]}; + \node[noeud] (A13) at ({1*\PLAPespniv},{-4.5*\PLAPespfeuille}) {\PLARBREDONNES[7,1]}; + \node[noeud] (A25) at ({2*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[8,1]}; + \node[noeud] (A26) at ({2*\PLAPespniv},{-5*\PLAPespfeuille}) {\PLARBREDONNES[9,1]}; + %branches + \IfEq{\PLARBREDONNES[1,2]}{} + {\draw[PLfleche] (R)--(A11) ;} + {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;} + \IfEq{\PLARBREDONNES[2,2]}{} + {\draw[PLfleche] (A11)--(A21) ;} + {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;} + \IfEq{\PLARBREDONNES[3,2]}{} + {\draw[PLfleche] (A11)--(A22) ;} + {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;} + \IfEq{\PLARBREDONNES[4,2]}{} + {\draw[PLfleche] (R)--(A12) ;} + {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;} + \IfEq{\PLARBREDONNES[5,2]}{} + {\draw[PLfleche] (A12)--(A23) ;} + {\draw[PLfleche] (A12)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;} + \IfEq{\PLARBREDONNES[6,2]}{} + {\draw[PLfleche] (A12)--(A24) ;} + {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;} + \IfEq{\PLARBREDONNES[7,2]}{} + {\draw[PLfleche] (R)--(A13) ;} + {\draw[PLfleche] (R)--(A13) node[probas,PLetiquette,{\PLARBREDONNES[7,3]}] {{\PLARBREDONNES[7,2]}} ;} + \IfEq{\PLARBREDONNES[8,2]}{} + {\draw[PLfleche] (A13)--(A25) ;} + {\draw[PLfleche] (A13)--(A25) node[probas,PLetiquette,{\PLARBREDONNES[8,3]}] {{\PLARBREDONNES[8,2]}} ;} + \IfEq{\PLARBREDONNES[9,2]}{} + {\draw[PLfleche] (A13)--(A26) ;} + {\draw[PLfleche] (A13)--(A26) node[probas,PLetiquette,{\PLARBREDONNES[9,3]}] {{\PLARBREDONNES[9,2]}} ;} + }{} + %arbre2x3 + \IfEq{\PLAPtype}{2x3} + {% + %sommets + \coordinate (R) at ({0*\PLAPespniv},{-2.5*\PLAPespfeuille}) ; + \node[noeud] (A11) at ({1*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[1,1]}; + \node[noeud] (A12) at ({1*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[5,1]}; + \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]}; + \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]}; + \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[4,1]}; + \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]}; + \node[noeud] (A25) at ({2*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[7,1]}; + \node[noeud] (A26) at ({2*\PLAPespniv},{-5*\PLAPespfeuille}) {\PLARBREDONNES[8,1]}; + %branches + \IfEq{\PLARBREDONNES[1,2]}{} + {\draw[PLfleche] (R)--(A11) ;} + {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;} + \IfEq{\PLARBREDONNES[5,2]}{} + {\draw[PLfleche] (R)--(A12) ;} + {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;} + \IfEq{\PLARBREDONNES[2,2]}{} + {\draw[PLfleche] (A11)--(A21) ;} + {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;} + \IfEq{\PLARBREDONNES[3,2]}{} + {\draw[PLfleche] (A11)--(A22) ;} + {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;} + \IfEq{\PLARBREDONNES[4,2]}{} + {\draw[PLfleche] (A11)--(A23) ;} + {\draw[PLfleche] (A11)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;} + \IfEq{\PLARBREDONNES[6,2]}{} + {\draw[PLfleche] (A12)--(A24) ;} + {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;} + \IfEq{\PLARBREDONNES[7,2]}{} + {\draw[PLfleche] (A12)--(A25) ;} + {\draw[PLfleche] (A12)--(A25) node[probas,PLetiquette,{\PLARBREDONNES[7,3]}] {{\PLARBREDONNES[7,2]}} ;} + \IfEq{\PLARBREDONNES[8,2]}{} + {\draw[PLfleche] (A12)--(A26) ;} + {\draw[PLfleche] (A12)--(A26) node[probas,PLetiquette,{\PLARBREDONNES[8,3]}] {{\PLARBREDONNES[8,2]}} ;} + }{} + %arbre2x3 + \IfEq{\PLAPtype}{3x3} + {% + %sommets + \coordinate (R) at ({0*\PLAPespniv},{-4*\PLAPespfeuille}) ; + \node[noeud] (A11) at ({1*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[1,1]}; + \node[noeud] (A12) at ({1*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[5,1]}; + \node[noeud] (A13) at ({1*\PLAPespniv},{-7*\PLAPespfeuille}) {\PLARBREDONNES[10,1]}; + \node[noeud] (A21) at ({2*\PLAPespniv},{-0*\PLAPespfeuille}) {\PLARBREDONNES[2,1]}; + \node[noeud] (A22) at ({2*\PLAPespniv},{-1*\PLAPespfeuille}) {\PLARBREDONNES[3,1]}; + \node[noeud] (A23) at ({2*\PLAPespniv},{-2*\PLAPespfeuille}) {\PLARBREDONNES[4,1]}; + \node[noeud] (A24) at ({2*\PLAPespniv},{-3*\PLAPespfeuille}) {\PLARBREDONNES[6,1]}; + \node[noeud] (A25) at ({2*\PLAPespniv},{-4*\PLAPespfeuille}) {\PLARBREDONNES[7,1]}; + \node[noeud] (A26) at ({2*\PLAPespniv},{-5*\PLAPespfeuille}) {\PLARBREDONNES[8,1]}; + \node[noeud] (A27) at ({2*\PLAPespniv},{-6*\PLAPespfeuille}) {\PLARBREDONNES[10,1]}; + \node[noeud] (A28) at ({2*\PLAPespniv},{-7*\PLAPespfeuille}) {\PLARBREDONNES[11,1]}; + \node[noeud] (A29) at ({2*\PLAPespniv},{-8*\PLAPespfeuille}) {\PLARBREDONNES[12,1]}; + %branches + \IfEq{\PLARBREDONNES[1,2]}{} + {\draw[PLfleche] (R)--(A11) ;} + {\draw[PLfleche] (R)--(A11) node[probas,PLetiquette,{\PLARBREDONNES[1,3]}] {{\PLARBREDONNES[1,2]}} ;} + \IfEq{\PLARBREDONNES[5,2]}{} + {\draw[PLfleche] (R)--(A12) ;} + {\draw[PLfleche] (R)--(A12) node[probas,PLetiquette,{\PLARBREDONNES[5,3]}] {{\PLARBREDONNES[5,2]}} ;} + \IfEq{\PLARBREDONNES[9,2]}{} + {\draw[PLfleche] (R)--(A13) ;} + {\draw[PLfleche] (R)--(A13) node[probas,PLetiquette,{\PLARBREDONNES[9,3]}] {{\PLARBREDONNES[9,2]}} ;} + %N2 + \IfEq{\PLARBREDONNES[2,2]}{} + {\draw[PLfleche] (A11)--(A21) ;} + {\draw[PLfleche] (A11)--(A21) node[probas,PLetiquette,{\PLARBREDONNES[2,3]}] {{\PLARBREDONNES[2,2]}} ;} + \IfEq{\PLARBREDONNES[3,2]}{} + {\draw[PLfleche] (A11)--(A22) ;} + {\draw[PLfleche] (A11)--(A22) node[probas,PLetiquette,{\PLARBREDONNES[3,3]}] {{\PLARBREDONNES[3,2]}} ;} + \IfEq{\PLARBREDONNES[4,2]}{} + {\draw[PLfleche] (A11)--(A23) ;} + {\draw[PLfleche] (A11)--(A23) node[probas,PLetiquette,{\PLARBREDONNES[4,3]}] {{\PLARBREDONNES[4,2]}} ;} + \IfEq{\PLARBREDONNES[6,2]}{} + {\draw[PLfleche] (A12)--(A24) ;} + {\draw[PLfleche] (A12)--(A24) node[probas,PLetiquette,{\PLARBREDONNES[6,3]}] {{\PLARBREDONNES[6,2]}} ;} + \IfEq{\PLARBREDONNES[7,2]}{} + {\draw[PLfleche] (A12)--(A25) ;} + {\draw[PLfleche] (A12)--(A25) node[probas,PLetiquette,{\PLARBREDONNES[7,3]}] {{\PLARBREDONNES[7,2]}} ;} + \IfEq{\PLARBREDONNES[8,2]}{} + {\draw[PLfleche] (A12)--(A26) ;} + {\draw[PLfleche] (A12)--(A26) node[probas,PLetiquette,{\PLARBREDONNES[8,3]}] {{\PLARBREDONNES[8,2]}} ;} + \IfEq{\PLARBREDONNES[10,2]}{} + {\draw[PLfleche] (A13)--(A27) ;} + {\draw[PLfleche] (A13)--(A27) node[probas,PLetiquette,{\PLARBREDONNES[10,3]}] {{\PLARBREDONNES[10,2]}} ;} + \IfEq{\PLARBREDONNES[11,2]}{} + {\draw[PLfleche] (A13)--(A28) ;} + {\draw[PLfleche] (A13)--(A28) node[probas,PLetiquette,{\PLARBREDONNES[11,3]}] {{\PLARBREDONNES[11,2]}} ;} + \IfEq{\PLARBREDONNES[12,2]}{} + {\draw[PLfleche] (A13)--(A29) ;} + {\draw[PLfleche] (A13)--(A29) node[probas,PLetiquette,{\PLARBREDONNES[12,3]}] {{\PLARBREDONNES[12,2]}} ;} + }{} + } + { + \end{tikzpicture} +} + +%==============SCHEMASPROBAS============= OK! +%densites utiles +\def\densnorm#1{1/(sqrt(2*pi))*exp(-0.5*(#1*#1))} +\def\densexpo#1{exp(-#1)} + +\defKV[GRPHPROBCONTINUES]{% + CouleurAire=\def\GRPHPROBcoulsurf{#1},% + CouleurCourbe=\def\GRPHPROBcoulcbe{#1},% + Largeur=\def\GRPHPROBlarg{#1},% + Hauteur=\def\GRPHPROBhauteur{#1} +} + +\setKVdefault[GRPHPROBCONTINUES]{% + CouleurAire=LightGray,% + CouleurCourbe=red,% + Largeur=2,% + Hauteur=1,% + AfficheM=true,% + AfficheCadre=true +} + +\NewDocumentCommand\LoiNormaleGraphe{ O{} D<>{} m m m m }{%1=options,2=optionstikz,3=m,4=s,5=a,6=b + %simplekv + \useKVdefault[GRPHPROBCONTINUES]% + \setKV[GRPHPROBCONTINUES]{#1}% + %unites + \def\UNITEX{\fpeval{\GRPHPROBlarg/8}}\def\UNITEY{\fpeval{\GRPHPROBhauteur/0.5}}% + %bornes + \def\BorneInf{\fpeval{(#5-#3)/#4}}\def\BorneSup{\fpeval{(#6-#3)/#4}}% + \ifthenelse{\equal{#5}{*}}{\def\BorneInf{-4}}{}% + \ifthenelse{\equal{#6}{*}}{\def\BorneSup{4}}{}% + %tikzpicture + \begin{tikzpicture}[x=\UNITEX cm,y=\UNITEY cm,#2] + \ifboolKV[GRPHPROBCONTINUES]{AfficheM}% + {\draw (0,-0.0375) node[font=\tiny,scale={2*\UNITEX}] {#3} ;} + {} + \ifboolKV[GRPHPROBCONTINUES]{AfficheCadre}% + {\draw[Gray] (-4,-0.075) rectangle (4,0.425) ;} + {} + \clip (-4,-0.075) rectangle (4,0.425) ; + \draw[black,semithick,fill=\GRPHPROBcoulsurf] ({\BorneInf},0) -- plot [domain={\BorneInf}:{\BorneSup},samples=100] (\x,{\densnorm{\x}}) -- ({\BorneSup},0) -- cycle; + \draw[thick,->,>=stealth] (-4,0)--(4,0) ; + \draw[thick,densely dotted] (0,0)--(0,0.39894) ; + \draw[thick,domain=-4:4,samples=100,\GRPHPROBcoulcbe] plot (\x,{\densnorm{\x}}) ; + \end{tikzpicture} +} + +\NewDocumentCommand\LoiExpoGraphe{ O{} D<>{} m m m }{%1=options,2=optionstikz,3=l,4=a,5=b + %simplekv + \useKVdefault[GRPHPROBCONTINUES]% + \setKV[GRPHPROBCONTINUES]{#1}% + %unites + \def\UNITEX{\fpeval{\GRPHPROBlarg/4}}\def\UNITEY{\fpeval{\GRPHPROBhauteur/1}}% + \def\MOYENNE{\fpeval{trunc(1/#3,0)}}% + %bornes + \def\BorneInf{\fpeval{#3*#4}}\def\BorneSup{\fpeval{#3*#5}}% + \ifthenelse{\equal{#4}{*}}{\def\BorneInf{0}}{}% + \ifthenelse{\equal{#5}{*}}{\def\BorneSup{4}}{}% + %tikzpicture + \begin{tikzpicture}[x=\UNITEX cm,y=\UNITEY cm,#2] + \ifboolKV[GRPHPROBCONTINUES]{AfficheCadre}% + {\draw[Gray] (-0.2,-0.15) rectangle (3.8,0.85) ;} + {} + \clip (-0.2,-0.15) rectangle (3.8,0.85) ; + \draw[black,semithick,fill=\GRPHPROBcoulsurf] ({\BorneInf},0) -- plot [domain={\BorneInf}:{\BorneSup},samples=100] (\x,{0.7*\densexpo{\x}}) -- ({\BorneSup},0) -- cycle; + \ifboolKV[GRPHPROBCONTINUES]{AfficheM}% + {\draw (1,-0.075) node[font=\tiny,scale={\UNITEX}] {\MOYENNE} ; + \draw[thick,densely dotted] (1,0)--(1,{0.7*\densexpo{1}}) ;} + {} + \draw[thick,->,>=stealth] (-0.2,0)--(3.8,0) ; + \draw[thick,->,>=stealth] (0,-0.15)--(0,0.85) ; + \draw[thick,domain=0:3.8,samples=100,\GRPHPROBcoulcbe] plot (\x,{0.7*\densexpo{\x}}) ; + \end{tikzpicture} +} + +%===============TRINOMEALEA============== OK! +\setKVdefault[trinomealea]{% + Alea=false,% + Anegatif=true +} + +\NewDocumentCommand\EcritureTrinome{ O{} m m m }{% + \useKVdefault[trinomealea]% + \setKV[trinomealea]{#1}% + \ifboolKV[trinomealea]{Alea}% + {% + \xdef\Coeffa{\fpeval{randint(#2)}}\xdef\Coeffb{\fpeval{randint(#3)}}\xdef\Coeffc{\fpeval{randint(#4)}}% + \xdef\AleaSigneA{\fpeval{randint(1,2)}}% + \ifboolKV[trinomealea]{Anegatif}% + {\xintifboolexpr{\AleaSigneA == 1}{\def\TriSigneA{}}{\def\TriSigneA{-}}}% + {\def\TriSigneA{}}%forcément a>0 + }% + {% + \xdef\Coeffa{#2}\xdef\Coeffb{#3}\xdef\Coeffc{#4}% + \def\TriSigneA{}% + }% + \def\TriPartieA{\num{\TriSigneA\Coeffa} x^2}% + \xintifboolexpr{\Coeffa == 1}% + {\def\TriPartieA{x^2}}{}% + \xintifboolexpr{\Coeffa == -1}% + {\def\TriPartieA{-x^2}}{}% + \def\TriPartieB{\num[print-implicit-plus]{\Coeffb}x}% + \xintifboolexpr{\Coeffb == 0}% + {\def\TriPartieB{}}{}% + \xintifboolexpr{\Coeffb == 1}% + {\def\TriPartieB{+x}}{}% + \xintifboolexpr{\Coeffb == -1}% + {\def\TriPartieB{-x}}{}% + \xintifboolexpr{\Coeffc == 0}% + {\def\TriPartieC{}}{\def\TriPartieC{\num[print-implicit-plus]{\Coeffc}}}% + %formatage + \ensuremath{\TriPartieA\TriPartieB\TriPartieC}% +} + + +%=================PRESPGCD=============== OK! +\DeclareMathOperator{\PLpgcd}{PGCD} +\defKV[prespgcd]{% + Couleur=\def\PLPGCDCouleur{#1},% + DecalRect=\def\PLPGCDDecal{#1},% + Noeud=\def\PLPGCDNoeud{#1} +} + +\setKVdefault[prespgcd]{% + Couleur=red,% + DecalRect=2pt,% + Rectangle=true,% + Noeud=FFF,% + CouleurResultat=false,% + AfficheConclusion=true,% + AfficheDelimiteurs=true +} + +\newcommand\PresentationPGCD[3][]{% + \useKVdefault[prespgcd]% + \setKV[prespgcd]{#1}% + \xdef\respgcd{\xinteval{gcd(#2,#3)}} + \xdef\ValA{#2}\xdef\ValB{#3}%on stocke les valeurs du départ + \ensuremath{% + \ifboolKV[prespgcd]{AfficheDelimiteurs}% + {\left\lbrace}% + {}% + \begin{array}{@{\,}r@{\;=\;}l@{\;+\;}r} + %1ère division + \xdef\ValQ{\fpeval{trunc(\ValA/\ValB,0)}}\xdef\ValR{\fpeval{\ValA-\ValB*\ValQ}} + \num{\ValA}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}% + \xintifboolexpr{\ValR == \respgcd}% + {\PLnoeud{\PLPGCDNoeud1}{\num{\ValR}}}%noeud si c'est le pgcd + {\num{\ValR}}% + \xdef\ValA{\ValB}\xdef\ValB{\ValR}%nouvelles valeurs + \whiledo {\ValR > 0}% + {% + \xdef\ValQ{\fpeval{trunc(\ValA/\ValB,0)}}\xdef\ValR{\fpeval{\ValA-\ValB*\ValQ}}% + \\% + \num{\ValA}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}% + \xintifboolexpr{\ValR == \respgcd}% + {\PLnoeud{\PLPGCDNoeud1}{\num{\ValR}}}%noeud si c'est le pgcd + {\num{\ValR}}% + \xdef\ValA{\ValB}\xdef\ValB{\ValR}%nouvelles valeurs + }% + \end{array}% + \ifboolKV[prespgcd]{AfficheDelimiteurs}% + {\right|}% + {}% + \ifboolKV[prespgcd]{AfficheConclusion}% + {% + \Rightarrow \PLpgcd\left(\num{#2}\mathpunct{};\num{#3}\right)=\ifboolKV[prespgcd]{CouleurResultat}{\mathcolor{\PLPGCDCouleur}{\num{\respgcd}}}{\num{\respgcd}}% + }% + {}% + }% + \ifboolKV[prespgcd]{Rectangle}% + {% + \begin{tikzpicture} + \draw[overlay,rounded corners=4pt,\PLPGCDCouleur,thick] ($(\PLPGCDNoeud1.north west)+(-\PLPGCDDecal,\PLPGCDDecal)$) rectangle ($(\PLPGCDNoeud1.south east)+(\PLPGCDDecal,-\PLPGCDDecal)$) ; + \end{tikzpicture}% + }{}% +} + +\endinput
\ No newline at end of file |