texlive[67172] Master/texmf-dist: proflycee (20may23)
commits+karl at tug.org
commits+karl at tug.org
Sat May 20 22:18:54 CEST 2023
Revision: 67172
http://tug.org/svn/texlive?view=revision&revision=67172
Author: karl
Date: 2023-05-20 22:18:53 +0200 (Sat, 20 May 2023)
Log Message:
-----------
proflycee (20may23)
Modified Paths:
--------------
trunk/Master/texmf-dist/doc/latex/proflycee/ProfLycee-doc.pdf
trunk/Master/texmf-dist/doc/latex/proflycee/ProfLycee-doc.tex
trunk/Master/texmf-dist/tex/latex/proflycee/ProfLycee.sty
trunk/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-aleatoire.tex
trunk/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-analyse.tex
trunk/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-arithm.tex
trunk/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-geom.tex
trunk/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-probas.tex
Modified: trunk/Master/texmf-dist/doc/latex/proflycee/ProfLycee-doc.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/proflycee/ProfLycee-doc.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/proflycee/ProfLycee-doc.tex 2023-05-20 20:18:42 UTC (rev 67171)
+++ trunk/Master/texmf-dist/doc/latex/proflycee/ProfLycee-doc.tex 2023-05-20 20:18:53 UTC (rev 67172)
@@ -5,8 +5,9 @@
% arara: lualatex: {shell: yes, synctex: no, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)')
\documentclass[a4paper,french,11pt]{article}
-\def\PLversion{2.6.3}
-\def\PLdate{9 mai 2023}
+\def\PLversion{2.6.4}
+\def\PLdate{19 mai 2023}
+\usepackage{amsfonts}
\usepackage{ProfLycee}
\useproflyclib{piton,minted,pythontex}
\usepackage[math-style=french]{fourier-otf}
@@ -307,8 +308,9 @@
\medskip
-{\small\noindent%
+{\footnotesize\noindent%
{\deblst} résoudre, de manière approchée, des équations\\
+{\deblst} calculer (et représenter) une valeur approchée d'une intégrale\\
{\deblst} tracer \textit{facilement} des repères/grilles/courbes\\
{\deblst} tracer des courbes \textit{lisses} avec gestion des extrema et des dérivées\\
{\deblst} présenter du code \textsf{python} ou \textsf{pseudocode}, une console d'exécution \textsf{Python} \\
@@ -326,11 +328,14 @@
{\deblst} générer des listes d'entiers aléatoires (avec ou sans répétitions)\\
{\deblst} déterminer la mesure principale d'un angle \\
{\deblst} calculer les lignes trigonométriques d'angles \og classiques \fg{} \\
+{\deblst} résoudre une équation diophantienne \og classique \fg{} \\
+{\deblst} travailler avec un peu de géométrie analytique \\
+
{\deblst} \ldots}
~
-\hfill{}\textsl{Merci à Anne et quark67 pour ses retours et sa relecture !}
+\hfill{}\textsl{Merci à Anne et quark67 pour leurs retours et relectures !}
\hfill{}\textsl{Merci à Christophe et Denis pour leurs retours et éclairages !}
@@ -394,7 +399,7 @@
\begin{itemize}
\item \ctex{xcolor} avec l' option \textsf{[table,svgnames]} ;
- \item \ctex{tikz}, \ctex{pgf}, \ctex{pgffor}, \ctex{nicefrac} ;
+ \item \ctex{tikz}, \ctex{pgf}, \ctex{pgffor}, \ctex{nicefrac}, \ctex{nicematrix} ;
\item \ctex{tcolorbox} avec l'option \textsf{[most]} ;
\item \ctex{xparse}, \ctex{xstring}, \ctex{simplekv}, \ctex{xinttools} ;
\item \ctex{listofitems}, \ctex{xintexpr} , \ctex{xintbinhex}, \ctex{xintgcd} ;
@@ -595,9 +600,6 @@
%Valeur approchée d'une intégrale
\IntegraleApprochee[clés]{fonction}{a}{b}
-
-%Équation réduite d'une droite
-\EquationReduite[option]{A/xa/ya,B/xb/yb}
\end{PresCodeTexPL}
\begin{PresCodeTexPL}{listing only}
@@ -640,8 +642,6 @@
\begin{PseudoCodeAlt}(*)[largeur]{commandes tcbox}...\end{PseudoCodeAlt}
\end{PresCodeTexPL}
-\pagebreak
-
\begin{PresCodeTexPL}{listing only}
%terminal OS
\begin{TerminalWin}[largeur]{clés}[options]...\end{TerminalWin}
@@ -662,6 +662,42 @@
\end{PresCodeTexPL}
\begin{PresCodeTexPL}{listing only}
+%Affichage des coordonnées d'un point (2 ou 3 coordonnées)
+\AffPoint[options de formatage](liste des coordonnées)
+%Affichage des coordonnées d'un vecteur (2 ou 3 coordonnées)
+\AffVecteur[options de formatage]<options nicematrix>(liste des coordonnées)
+
+%Avec un vecteur normal et un point
+\TrouveEqCartPlan[clés](vecteur normal)(point)
+%Avec deux vecteurs directeurs et un point
+\TrouveEqCartPlan[clés](vecteur dir1)(vecteur dir2)(point)
+%Avec trois points
+\TrouveEqCartPlan[clés](point1)(point2)(point3)
+
+%Avec un vecteur directeur et un point
+\TrouveEqParamDroite[clés](vecteur directeur)(point)
+%Avec deux points
+\TrouveEqParamDroite[clés](point1)(point2)
+
+%Avec un vecteur normal (choix par défaut) et un point
+\TrouveEqCartDroite[clés](vecteur normal)(point)
+%Avec un vecteur directeur et un point
+\TrouveEqCartDroite[clés,VectDirecteur](vecteur directeur)(point1)
+%Avec deux points
+\TrouveEqCartDroite[clés](point1)(point2)
+
+%Avec le point et le plan via vect normal + point
+\TrouveDistancePtPlan(point)(vec normal du plan)(point du plan)
+%Avec le point et le plan via vect normal + point
+\TrouveDistancePtPlan(point)(équation cartésienne)
+\end{PresCodeTexPL}
+
+\begin{PresCodeTexPL}{listing only}
+%Équation réduite d'une droite
+\EquationReduite[option]{A/xa/ya,B/xb/yb}
+\end{PresCodeTexPL}
+
+\begin{PresCodeTexPL}{listing only}
%paramètres d'une régression linéaire, nuage de points
\CalculsRegLin[clés]{listeX}{listeY}
\PointsRegLin[clés]{listeX}{listeY}
@@ -756,6 +792,9 @@
%PGCD présenté
\PresentationPGCD[options]{a}{b}
+
+%Équation diophantienne
+\EquationDiophantienne[clés]{equation}
\end{PresCodeTexPL}
\begin{PresCodeTexPL}{listing only}
@@ -1180,80 +1219,6 @@
\newpage
-\section{Équation réduite d'une droite}\label{eqreduite}
-
-\subsection{Idée}
-
-\begin{tipblock}
-\cmaj{2.6.3} L'idée est de proposer une commande pour déterminer l'équation réduite d'une droite passant par deux points :
-\begin{itemize}
- \item en traitant les cas particuliers \textit{horizontale}, \textit{verticale} ;
- \item en affichant une méthode de résolution ;
- \item en travaillant sous forme exacte fractionnaire (les racines carrées ou autres ne seront pas gérés).
-\end{itemize}
-
-À noter que les calculs et résultats sont traités par la commande de \textit{conversion de fraction} de \ctex{ProfLycee}.
-\end{tipblock}
-
-\begin{warningblock}
-La commande se charge de formater (normalement !) correctement les différentes étapes de calculs (il se peut quand même que cela puisse ne pas donner le résultat réellement escompté\ldots) :
-
-\begin{itemize}
- \item en travaillant en fraction ;
- \item en mettant les parenthèses nécessaires devant les éventuels nombres négatifs ;
- \item en traitant les cas particuliers $m=\pm1$ et $b=0$.
-\end{itemize}
-\vspace*{-\baselineskip}\leavevmode
-\end{warningblock}
-
-\begin{PresCodeTexPL}{listing only}
-\EquationReduite[option]{A/xa/ya,B/xb/yb}
-\end{PresCodeTexPL}
-
-\subsection{Clés et arguments}
-
-\begin{cautionblock}
-Concernant le fonctionnement de la commande :
-
-\begin{itemize}
- \item le premier argument, optionnel et entre \ctex{[...]} et valant \Cle{[d]} par défaut, permet de formater les fractions éventuelles en mode \ctex{\textbackslash displaystyle} ;
- \item le second argument, obligatoire et entre \ctex{\{...\}}, permet de donner les coordonnées des points concernés.
-\end{itemize}
-\vspace*{-\baselineskip}\leavevmode
-\end{cautionblock}
-
-\begin{PresCodePL}{}
-\EquationReduite{C/2/0,D/-2/-8}
-\end{PresCodePL}
-
-\subsection{Exemples}
-
-\begin{PresCodePL}{}
-\EquationReduite{I/-4/5,J/-4/12}
-\end{PresCodePL}
-
-\begin{PresCodePL}{}
-\EquationReduite{U/-4/5,V/-4/5}
-\end{PresCodePL}
-
-\begin{PresCodePL}{}
-\EquationReduite{L/10/7,M/-2/7}
-\end{PresCodePL}
-
-\begin{PresCodePL}{}
-\EquationReduite{L/{1/3}/2.5,M/{-5/7}/{3/5}}
-\end{PresCodePL}
-
-\begin{PresCodePL}{}
-\EquationReduite{P/4/-4,Q/-2/2}
-\end{PresCodePL}
-
-\begin{PresCodePL}{}
-\EquationReduite{G/-4/5,H/10/4}
-\end{PresCodePL}
-
-\newpage
-
\phantom{t}\par\vfill\par
\begin{PART}
\begin{center}
@@ -3853,8 +3818,438 @@
\hfill~
\end{PresCodeSortiePL}
+\pagebreak
+
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Outils pour la géométrie analytique}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
+
\newpage
+\part{Outils pour la géométrie analytique}
+
+\section{Affichage de coordonnées}\label{affcoord}
+
+\subsection{Idée}
+
+\begin{tipblock}
+\cmaj{2.6.4} L'idée est de proposer des commandes pour simplifier la saisie de coordonnées de vecteurs ou de points (plan ou espace), en saisissant les coordonnées \textit{en ligne}.
+
+\smallskip
+
+À noter que les calculs et résultats sont traités par la commande de \textit{conversion de fraction} de \ctex{ProfLycee}.
+\end{tipblock}
+
+\begin{warningblock}
+Logiquement les commandes (à insérer dans un environnement mathématique) doivent donner des résultats satisfaisants pour tout ce qui est \textit{rationnel}, mais cela ne sera pas pertinent dans le cas de coordonnées irrationnelles\ldots
+\end{warningblock}
+
+\begin{PresCodeTexPL}{listing only}
+%Affichage des coordonnées d'un point (2 ou 3 coordonnées)
+\AffPoint[options de formatage](liste des coordonnées)
+
+%Affichage des coordonnées d'un vecteur (2 ou 3 coordonnées)
+\AffVecteur[options de formatage]<options nicematrix>(liste des coordonnées)
+\end{PresCodeTexPL}
+
+\begin{warningblock}
+Dans cette partie liée à la géométrie analytique, j'ai choisi de saisir les arguments (coordonnées) via les délimiteurs \ctex{(...)} :
+
+\begin{itemize}
+ \item avec le séparateur \ctex{,} pour les points ;
+ \item avec le séparateur \ctex{;} pour les vecteurs.
+\end{itemize}
+
+De ce fait, le code \textit{sait} s'il est face à un point ou à un vecteur, et adapte sa méthode de calcul en conséquence !
+\end{warningblock}
+
+\subsection{Options et arguments}
+
+\begin{cautionblock}
+Concernant les arguments des commandes :
+
+\begin{itemize}
+ \item le premier argument, optionnel et entre \ctex{[...]} permet de spécifier la ou les caractéristiques de formatage des coordonnées, de manière globale ou individuelle, et de manière cohérente avec les options disponibles pour la commande de \textit{conversion en fraction} de \ctex{ProfLycee} :
+ \begin{itemize}
+ \item \Cle{d} : pour un formatage en \ctex{dfrac} si nécessaire ;
+ \item \Cle{t} : pour un formatage en \ctex{tfrac} si nécessaire ;
+ \item \Cle{n} : pour un formatage en \ctex{nicefrac} si nécessaire ;
+ \item \Cle{dec} : pour la forme décimale (brute) ;
+ \item \Cle{dec=k} : pour la forme décimale à $10^{-k}$.
+ \end{itemize}
+ Il est possible de spécifier des formatages différents en utilisant une \textit{liste} sous la forme \Cle{f1,f2} ou \Cle{f1,f2,f3} ;
+ \item l'argument \textit{optionnel} et entre \ctex{<...>} (uniquement pour les vecteurs !) permet de spécifier des options de type \textit{nicematrix} ;
+ \item l'argument obligatoire, et entre \ctex{\{...\}} est quant à lui la liste des coordonnées, en ligne et au format \textit{naturel xint}.
+\end{itemize}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
+
+\begin{noteblock}
+Il est donc possible de mettre des \textit{calculs} dans l'argument des coordonnées.
+
+Il suffit \textit{juste} d'utiliser une syntaxe compréhensible par les commandes du package \ctex{xint}.
+\end{noteblock}
+
+\begin{PresCodePL}{}
+%Point, avec affichage classique en dfrac
+$\AffPoint(1,2/3)$ \\
+%Point, avec affichage en décimal + dfrac + dfrac
+$\AffPoint[dec,d,d](-0.5,1,2/3)$ \\
+%Vecteurs, avec affichages classiques
+$\AffVecteur(1;2)$ et $\AffVecteur(1;2;3)$ \\
+%Vecteurs, avec option nicematrix et affichage en décimal + tfrac
+$\AffVecteur[dec;t]<cell-space-limits=2pt>(0.5;2/3)$ \\
+%Vecteurs, avec option nicematrix et affichage en décimal
+$\AffVecteur[dec]<cell-space-limits=2pt>(0.5;0.6;0.75)$ \\
+%Vecteurs, avec cacluls et affichage classique
+$\AffVecteur((2-(-3));(5-6);(1-1))$
+\end{PresCodePL}
+
+\newpage
+
+\section{Équation cartésienne d'un plan de l'espace}\label{eqcartplan}
+
+\subsection{Idée et commande}
+
+\begin{tipblock}
+\cmaj{2.6.4} L'idée est de proposer une commande pour déterminer une équation cartésienne d'un plan dans l'un des cas suivants :
+
+\begin{itemize}
+ \item en donnant un vecteur normal et un point ;
+ \item en donnant deux vecteurs directeurs et un point ;
+ \item en donnant trois points.
+\end{itemize}
+\vspace*{-\baselineskip}\leavevmode
+\end{tipblock}
+
+\begin{PresCodeTexPL}{listing only}
+%Avec un vecteur normal et un point
+\TrouveEqCartPlan[clés](vecteur normal)(point)
+%Avec deux vecteurs directeurs et un point
+\TrouveEqCartPlan[clés](vecteur dir1)(vecteur dir2)(point)
+%Avec trois points
+\TrouveEqCartPlan[clés](point1)(point2)(point3)
+\end{PresCodeTexPL}
+
+\subsection{Clés et arguments}
+
+\begin{cautionblock}
+Concernant les arguments des commandes :
+
+\begin{itemize}
+ \item le premier argument, optionnel et entre \ctex{[...]} contient les clés :
+ \begin{itemize}
+ \item \Cle{OptionCoeffs} pour spécifier un formatage \textit{global} des coefficients ; \hfill{}défaut : \Cle{d}
+ \item \Cle{SimplifCoeffs} pour forcer des coefficients simples (entiers et premiers entre eux) ;
+
+ \hfill{}défaut : \Cle{false}
+ \item \Cle{Facteur} pour spécifier un facteur personnalisé aux simplifications. \hfill{}défaut : \Cle{1}
+ \end{itemize}
+ \item les arguments suivants, entre \ctex{(...)} correspondent aux données utilisées (entre 2 et 3).
+\end{itemize}
+
+À noter que les séparateurs \ctex{,} ou \ctex{;} permettent de spécifier point ou vecteur.
+\end{cautionblock}
+
+\begin{PresCodePL}{}
+Une équation cartésienne du plan $\mathcal{P}$ de vecteur normal $\vec{n} \AffVecteur(1;2;3)$ et passant par le point A de coordonnées $\AffPoint(4,5,6)$ est $\mathcal{P}$ : $\TrouveEqCartPlan(1;2;3)(4,5,6)$
+\end{PresCodePL}
+
+\begin{PresCodePL}{}
+Une équation cartésienne du plan $\mathcal{P}$ de vecteur normal $\vec{n} \AffVecteur[n](1/2;2/3;3/5)$ et passant par le point A de coordonnées $\AffPoint(4,5,6)$ est $\mathcal{P}$ : $\TrouveEqCartPlan(1/2;2/3;3/5)(4,5,6) \Leftrightarrow \TrouveEqCartPlan[SimplifCoeffs](1/2;2/3;3/5)(4,5,6)$
+\end{PresCodePL}
+
+\begin{PresCodePL}{}
+Une équation cartésienne du plan $\mathcal{P}$ de vecteur normal $\vec{n} \AffVecteur[n](1;2/3;0)$ et passant par le point A de coordonnées $\AffPoint[dec,dec,d](0.75,0.56,1/3)$ est $\mathcal{P}$ : $\TrouveEqCartPlan(1;2/3;0)(0.75,0.56,1/3) \Leftrightarrow \TrouveEqCartPlan[SimplifCoeffs](1;2/3;0)(0.75,0.56,1/3)$
+\end{PresCodePL}
+
+\begin{PresCodePL}{}
+Une équation cartésienne du plan $\mathcal{P}_3$ passant par les points $A\AffPoint(2,0,1)$, $B\AffPoint(3,1,1)$ et $C\AffPoint(1,-2,0)$ est
+\[ \mathcal{P}_3 \text{ : } \TrouveEqCartPlan(2,0,1)(3,1,1)(1,-2,0)\]
+\end{PresCodePL}
+
+
+
+\begin{PresCodePL}{}
+Une équation cartésienne du plan $\mathcal{R}$ passant par le points $A\AffPoint(0,0,1)$, $B\AffPoint(4,2,3)$ et $C\AffPoint(-3,1,1)$ est
+\[ \mathcal{R} \text{ : } \TrouveEqCartPlan[SimplifCoeffs](0,0,1)(4,2,3)(-3,1,1)\]
+\[ \mathcal{R} \text{ : } \TrouveEqCartPlan[SimplifCoeffs,Facteur=-1](0,0,1)(4,2,3)(-3,1,1)\]
+\end{PresCodePL}
+
+\begin{PresCodePL}{}
+Une équation cartésienne du plan $\mathcal{P}_0$ dirigé par les vecteurs $\AffVecteur(9;7;-8)$ et $\AffVecteur(-2;2;-1)$ et passant par le point $A\AffPoint(5,1,-1)$ est :
+\[ \mathcal{P}_0 \text{ : } \TrouveEqCartPlan[SimplifCoeffs](9;7;-8)(-2;2;-1)(5,1,-1)\]
+\end{PresCodePL}
+
+\newpage
+
+\section{Équation paramétrique d'une droite de l'espace}\label{eqparamdroite}
+
+\subsection{Idée et commande}
+
+\begin{tipblock}
+\cmaj{2.6.4} L'idée est de proposer une commande pour déterminer un système d'équations paramétriques d'une droite de l'espace dans l'un des cas suivants :
+
+\begin{itemize}
+ \item en donnant un vecteur directeur et un point ;
+ \item en donnant deux points.
+\end{itemize}
+\vspace*{-\baselineskip}\leavevmode
+\end{tipblock}
+
+\begin{PresCodeTexPL}{listing only}
+%Avec un vecteur directeur et un point
+\TrouveEqParamDroite[clés](vecteur directeur)(point)
+%Avec deux points
+\TrouveEqParamDroite[clés](point1)(point2)
+\end{PresCodeTexPL}
+
+\subsection{Clés et arguments}
+
+\begin{cautionblock}
+Concernant les arguments des commandes :
+
+\begin{itemize}
+ \item le premier argument, optionnel et entre \ctex{[...]} contient les clés :
+ \begin{itemize}
+ \item \Cle{OptionCoeffs} pour spécifier un formatage \textit{global} des coefficients ; \hfill{}défaut : \Cle{d}
+ \item \Cle{Reel} pour coder le paramètre réel ; \hfill{}défaut : \Cle{k}
+ \item le booléen \Cle{Oppose} pour utiliser plutôt l'opposé du vecteur directeur ; \hfill{}défaut : \Cle{false}
+ \item le booléen \Cle{Rgras} pour utiliser le symbole \textbf{R} ou lieu de $\mathbb{R}$ (si \ctex{amsfonts} est chargé !).
+
+ \hfill{}défaut : \Cle{false}
+ \end{itemize}
+ \item les arguments suivants, entre \ctex{(...)} correspondent aux données utilisées.
+\end{itemize}
+
+À noter que les séparateurs \ctex{,} ou \ctex{;} permettent de spécifier point ou vecteur.
+\end{cautionblock}
+
+\begin{PresCodePL}{}
+Une équation paramétrique de la droite $(d)$ dirigée par le vecteur $\vec{u}\AffVecteur(2;5;-4)$ et passant par $A\AffPoint(-1,-1,-1)$ est
+\[ \TrouveEqParamDroite(2;5;-4)(-1,-1,-1) \]
+\end{PresCodePL}
+
+\begin{PresCodePL}{}
+Une équation paramétrique de la droite $(d)$ passant par $\AffPoint(2,5,-4)$ et $\AffPoint(-1,-1,-1)$ est
+\[ \TrouveEqParamDroite[Oppose](2,5,-4)(-1,-1,-1) \text{ ou } \TrouveEqParamDroite(2,5,-4)(-1,-1,-1) \]
+\end{PresCodePL}
+
+\begin{PresCodePL}{}
+Une équation paramétrique de la droite $(d)$ dirigée par le vecteur $\vec{u}\AffVecteur(0;-1;3)$ et passant par $O\AffPoint(0,0,0)$ est
+\[ \TrouveEqParamDroite(0;-1;3)(0,0,0) \]
+\end{PresCodePL}
+
+\begin{PresCodePL}{}
+Une équation paramétrique de la droite $(d)$ dirigée par le vecteur $\vec{u}\AffVecteur(-1;2;3)$ et passant par $A\AffPoint(2,0,-3)$ est
+\[ \TrouveEqParamDroite[Reel=\ell,Rgras](-1;2;3)(2,0,-3) \]
+\end{PresCodePL}
+
+\newpage
+
+\section{Équation cartésienne d'une droite du plan}\label{eqcartdroite}
+
+\subsection{Idée et commande}
+
+\begin{tipblock}
+\cmaj{2.6.4} L'idée est de proposer une commande pour déterminer une équation cartésienne d'une droite du plan dans l'un des cas suivants :
+
+\begin{itemize}
+ \item en donnant un vecteur directeur et un point ;
+ \item en donnant un vecteur normal et un point ;
+ \item en donnant deux points.
+\end{itemize}
+\vspace*{-\baselineskip}\leavevmode
+\end{tipblock}
+
+\begin{PresCodeTexPL}{listing only}
+%Avec un vecteur normal (choix par défaut) et un point
+\TrouveEqCartDroite[clés](vecteur normal)(point)
+%Avec un vecteur directeur et un point
+\TrouveEqCartDroite[clés,VectDirecteur](vecteur directeur)(point1)
+%Avec deux points
+\TrouveEqCartDroite[clés](point1)(point2)
+\end{PresCodeTexPL}
+
+\subsection{Clés et arguments}
+
+\begin{cautionblock}
+Concernant les arguments des commandes :
+
+\begin{itemize}
+ \item le premier argument, optionnel et entre \ctex{[...]} contient les clés :
+ \begin{itemize}
+ \item \Cle{OptionCoeffs} pour spécifier un formatage \textit{global} des coefficients ; \hfill{}défaut : \Cle{d}
+ \item le booléen \Cle{SimplifCoeffs} pour forcer des coeffs simples (entiers et premiers entre eux) ;
+
+ \hfill{}défaut : \Cle{false}
+ \item \Cle{Facteur} pour spécifier un facteur personnalisé aux simplifications ; \hfill{}défaut : \Cle{1}
+ \item le booléen \Cle{VectDirecteur} pour pour préciser que le vecteur utilisé est directeur.\hfill{}défaut : \Cle{false}
+ \end{itemize}
+ \item les arguments suivants, entre \ctex{(...)} correspondent aux données utilisées.
+\end{itemize}
+
+À noter que les séparateurs \ctex{,} ou \ctex{;} permettent de spécifier point ou vecteur.
+\end{cautionblock}
+
+\begin{PresCodePL}{}
+Une équation cartésienne de la droite $\mathcal{D}$ de vecteur normal $\vec{n} \AffVecteur(1;2)$ et passant par le point A de coordonnées $\AffPoint(4,5)$ est $\mathcal{D}$ : $\TrouveEqCartDroite[VectNormal](1;2)(4,5)$
+\end{PresCodePL}
+
+\begin{PresCodePL}{}
+Une équation cartésienne de la droite $\mathcal{D}$ de vecteur directeur $\vec{u} \AffVecteur[n](1/2;2/3)$ et passant par le point A de coordonnées $\AffPoint(5,6)$ est $\mathcal{D}$ : $\TrouveEqCartDroite[VectDirecteur](1/2;2/3)(5,6) \Leftrightarrow \TrouveEqCartDroite[SimplifCoeffs,VectDirecteur](1/2;2/3)(5,6) \Leftrightarrow \TrouveEqCartDroite[SimplifCoeffs,VectDirecteur,Facteur=-1](1/2;2/3)(5,6)$
+\end{PresCodePL}
+
+\begin{PresCodePL}{}
+Une équation cartésienne de la droite $\mathcal{D}$ passant par les points $\AffPoint(2,4)$ et $\AffPoint(-4,2)$ est \[\mathcal{D} \text{ : } \TrouveEqCartDroite(2,4)(-4,2) \Leftrightarrow \TrouveEqCartDroite[SimplifCoeffs](2,4)(-4,2)\]
+\end{PresCodePL}
+
+\newpage
+
+\section{Distance d'un point à un plan}\label{distptplan}
+
+\subsection{Idée et commande}
+
+\begin{tipblock}
+\cmaj{2.6.4} L'idée est de proposer une commande pour déterminer la distance d'un point à un plan :
+
+\begin{itemize}
+ \item en donnant le point puis le plan défini par vecteur normal \&{} point ;
+ \item en donnant le point puis le plan défini par une équation cartésienne.
+\end{itemize}
+\vspace*{-\baselineskip}\leavevmode
+\end{tipblock}
+
+\begin{PresCodeTexPL}{listing only}
+%Avec le point et le plan via vect normal + point
+\TrouveDistancePtPlan(point)(vec normal du plan)(point du plan)
+%Avec le point et le plan via vect normal + point
+\TrouveDistancePtPlan(point)(équation cartésienne)
+\end{PresCodeTexPL}
+
+\begin{noteblock}
+Le résultat étant souvent écrit à l'aide d'une racine carrée, le code se charge de simplifier le résultat sous la forme $\frac{a\sqrt{n}}{b}$.
+
+Dans le cas où les coordonnées ne seraient pas rationnelles, le résultat risque de ne pas être conforme à celui attendu.
+\end{noteblock}
+
+\subsection{Clés et arguments}
+
+\begin{cautionblock}
+Concernant les arguments de cette commande :
+
+\begin{itemize}
+ \item si on travaille avec une équation cartésienne, elle est à donner sous la forme \ctex{ax+by+cz=0} ou \ctex{ax+by+cz}
+ \item les séparateurs \ctex{,} ou \ctex{;} permettent de spécifier point ou vecteur pour les arguments 1 et 3.
+\end{itemize}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
+
+\begin{PresCodePL}{}
+La distance entre le point $\AffPoint(1,2,3)$ et le plan de vecteur normal $\AffVecteur(-1;-2;3)$ et passant par $\AffPoint(5,0,2)$ vaut
+\[ d = \displaystyle\TrouveDistancePtPlan(1,2,3)(-1;-2;3)(5,0,2) \]
+\end{PresCodePL}
+
+\begin{PresCodePL}{}
+La distance entre le point $\AffPoint(1,2,3)$ et le plan d'équation $x+2y+2z-7=0$ vaut
+\[ d = \displaystyle\TrouveDistancePtPlan(1,2,3)(x+2y-2z+7) \]
+\end{PresCodePL}
+
+\begin{PresCodePL}{}
+La distance entre le point $\AffPoint(-7,0,4)$ et le plan d'équation $0,5x+2y-z-1=0$ vaut
+\[ d = \displaystyle\TrouveDistancePtPlan(-7,0,4)(0.5x+2y-z-1=0) \]
+\end{PresCodePL}
+
+\begin{PresCodePL}{}
+La distance entre le point $H\AffPoint(0,4,8)$ et le plan d'équation $-x+y+z-4=0$ vaut
+\[ d = \displaystyle\TrouveDistancePtPlan(0,4,8)(-x+y+z-4=0) \]
+\end{PresCodePL}
+
+\begin{PresCodePL}{}
+La distance entre le point $H\AffPoint(0,0,5)$ et le plan d'équation $z-1=0$ vaut
+\[ d = \displaystyle\TrouveDistancePtPlan(0,0,5)(z-1=0) \]
+\end{PresCodePL}
+
+\newpage
+
+\section{Équation réduite d'une droite du plan}\label{eqreduite}
+
+\subsection{Idée}
+
+\begin{tipblock}
+\cmaj{2.6.3} L'idée est de proposer une commande pour déterminer l'équation réduite d'une droite passant par deux points :
+\begin{itemize}
+ \item en traitant les cas particuliers \textit{horizontale}, \textit{verticale} ;
+ \item en affichant une méthode de résolution ;
+ \item en travaillant sous forme exacte fractionnaire (les racines carrées ou autres ne seront pas gérés).
+\end{itemize}
+
+À noter que les calculs et résultats sont traités par la commande de \textit{conversion de fraction} de \ctex{ProfLycee}.
+\end{tipblock}
+
+\begin{warningblock}
+La commande se charge de formater (normalement !) correctement les différentes étapes de calculs (il se peut quand même que cela puisse ne pas donner le résultat réellement escompté\ldots) :
+
+\begin{itemize}
+ \item en travaillant en fraction ;
+ \item en mettant les parenthèses nécessaires devant les éventuels nombres négatifs ;
+ \item en traitant les cas particuliers $m=\pm1$ et $b=0$.
+\end{itemize}
+\vspace*{-\baselineskip}\leavevmode
+\end{warningblock}
+
+\begin{PresCodeTexPL}{listing only}
+\EquationReduite[option]{A/xa/ya,B/xb/yb}
+\end{PresCodeTexPL}
+
+\subsection{Clés et arguments}
+
+\begin{cautionblock}
+Concernant le fonctionnement de la commande :
+
+\begin{itemize}
+ \item le premier argument, optionnel et entre \ctex{[...]} et valant \Cle{[d]} par défaut, permet de formater les fractions éventuelles en mode \ctex{\textbackslash displaystyle} ;
+ \item le second argument, obligatoire et entre \ctex{\{...\}}, permet de donner les coordonnées des points concernés.
+\end{itemize}
+\vspace*{-\baselineskip}\leavevmode
+\end{cautionblock}
+
+\begin{PresCodePL}{}
+\EquationReduite{C/2/0,D/-2/-8}
+\end{PresCodePL}
+
+\subsection{Exemples}
+
+\begin{PresCodePL}{}
+\EquationReduite{I/-4/5,J/-4/12}
+\end{PresCodePL}
+
+\begin{PresCodePL}{}
+\EquationReduite{U/-4/5,V/-4/5}
+\end{PresCodePL}
+
+\begin{PresCodePL}{}
+\EquationReduite{L/10/7,M/-2/7}
+\end{PresCodePL}
+
+\begin{PresCodePL}{}
+\EquationReduite{L/{1/3}/2.5,M/{-5/7}/{3/5}}
+\end{PresCodePL}
+
+\begin{PresCodePL}{}
+\EquationReduite{P/4/-4,Q/-2/2}
+\end{PresCodePL}
+
+\begin{PresCodePL}{}
+\EquationReduite{G/-4/5,H/10/4}
+\end{PresCodePL}
+
+\newpage
+
\phantom{t}\par\vfill\par
\begin{PART}
\begin{center}
@@ -4418,7 +4813,9 @@
\item \Cle{Epaisseur} qui est l'épaisseur des graduations ; \hfill~défaut \Cle{1pt}
\item \Cle{Police} qui est le style des labels des graduations ; \hfill~défaut \Cle{\textbackslash{}normalsize\textbackslash{}normalfont}
\item \Cle{PosGrad} qui est la position des graduations par rapport à l'axe ; \hfill~défaut \Cle{below} et \Cle{left}
- \item \Cle{HautGrad} qui est la position des graduations (sous la forme \Cle{lgt} ou \Cle{lgta/lgtb}) ; \hfill~défaut \Cle{4pt}
+ \item \Cle{HautGrad} qui est la position des graduations (sous la forme \Cle{lgt} ou \Cle{lgta/lgtb}) ;
+
+ \hfill~défaut \Cle{4pt}
\item le booléen \Cle{AffGrad} pour afficher les valeurs (formatés avec \ctex{num} donc dépendant de \ctex{sisetup}) des graduations ; \hfill~défaut \Cle{true}
\item le booléen \Cle{AffOrigine} pour afficher la graduation de l'origine ; \hfill~défaut \Cle{true}
\item le booléen \Cle{Annee} qui permet de ne pas formater les valeurs des graduations (type \textsf{année}). \hfill~défaut \Cle{false}
@@ -4494,7 +4891,9 @@
\begin{itemize}
\item \Cle{Taille} qui est la taille des points du nuage ; \hfill~défaut \Cle{2pt}
\item \Cle{Style} parmi \Cle{o} (rond) ou \Cle{x} (croix) ou \Cle{+} (plus) ; \hfill~défaut \Cle{o}
- \item \Cle{Couleur} qui est la couleur (éventuellement \Cle{couleurA/couleurB} pour les ronds). \hfill~défaut \Cle{blue}
+ \item \Cle{Couleur} qui est la couleur (éventuellement \Cle{couleurA/couleurB} pour les ronds).
+
+ \hfill~défaut \Cle{blue}
\end{itemize}
\vspace*{-\baselineskip}\leavevmode
\end{cautionblock}
@@ -4502,14 +4901,12 @@
\begin{PresCodeTexPL}{listing only}
\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008, 2009,2010}
\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661, 1656,1649}
+\end{PresCodeTexPL}
+\begin{PresCodeTexPL}{listing only}
\begin{tikzpicture}[...]
\NuagePointsTikz[Couleur=blue/red]{\LLX}{\LLY}
\end{tikzpicture}
-~~
-\begin{tikzpicture}[...]
- \NuagePointsTikz[Couleur=ForestGreen,Style=x,Taille=6pt]{\LLX}{\LLY}
-\end{tikzpicture}
\end{PresCodeTexPL}
\begin{PresCodeSortiePL}{text only}
@@ -4523,7 +4920,19 @@
\AxeyTikz{1640,1650,...,1720}
\NuagePointsTikz[Couleur=blue/red]{\LLX}{\LLY}
\end{tikzpicture}
+\end{PresCodeSortiePL}
+\begin{PresCodeTexPL}{listing only}
+\begin{tikzpicture}[...]
+ \NuagePointsTikz[Couleur=ForestGreen,Style=x,Taille=6pt]{\LLX}{\LLY}
+\end{tikzpicture}
+\end{PresCodeTexPL}
+
+\begin{PresCodeSortiePL}{text only}
+\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010}
+\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649}
+\CalculsRegLin{\LLX}{\LLY}
+
\begin{tikzpicture}[x=0.35cm,y=0.07cm,Ox=1992,xmin=1992,xmax=2012,xgrille=2,xgrilles=1,Oy=1640,ymin=1640,ymax=1730,ygrille=10,ygrilles=5]
\GrilleTikz \AxesTikz
\AxexTikz[Annee,Police=\small]{1992,1994,...,2010}
@@ -4711,7 +5120,9 @@
\item le booléen \Cle{AffMoyenne} qui permet d'afficher ou non la moyenne (sous forme d'un point) ;
\hfill~défaut \Cle{false}
- \item le booléen \Cle{Pointilles} qui permet d'afficher des pointillés au niveau des paramètres ; \hfill~défaut \Cle{false}
+ \item le booléen \Cle{Pointilles} qui permet d'afficher des pointillés au niveau des paramètres ;
+
+ \hfill~défaut \Cle{false}
\item le booléen \Cle{Valeurs} qui permet d'afficher les valeurs des paramètres au niveau des abscisses.
\hfill~défaut \Cle{false}
@@ -5452,7 +5863,9 @@
\begin{itemize}
\item les versions étoilées ne formatent pas le résultat grâce à \ctex{\textbackslash num} de \ctex{sinuitx} ;
\item le booléen \Cle{Notation} pour avoir la notation au début ; \hfill~défaut \Cle{false}
- \item le booléen \Cle{NotationAncien} pour avoir la notation \og ancienne \fg{} des combinaisons au début ; \hfill~défaut \Cle{false}
+ \item le booléen \Cle{NotationAncien} pour avoir la notation \og ancienne \fg{} des combinaisons au début ;
+
+ \hfill~défaut \Cle{false}
\item le booléen \Cle{Formule} permet de présenter la formule avant le résultat ;
\hfill~défaut \Cle{false}
@@ -5857,8 +6270,6 @@
\PresentationPGCD[CouleurResultat]{150}{27}
\end{PresCodePL}
-\pagebreak
-
\begin{PresCodePL}{}
\PresentationPGCD[CouleurResultat,Couleur=ForestGreen]{1250}{450}.
@@ -5887,6 +6298,77 @@
\newpage
+\section{Résolution d'une équation diophantienne}\label{eqdioph}
+
+\subsection{Idée}
+
+\begin{tipblock}
+L'idée est de proposer une résolution d'équation diophantienne du type $ax+by=c$ avec $(a;b;c) \in \mathbb{Z}^3$.
+
+\smallskip
+
+Le \textit{code} se charge de tester les différentes conditions d'existence, et d'adapter la rédaction (fixée et non modifiable\ldots) aux différentes situations :
+
+\begin{itemize}
+ \item cas où $\text{PGCD}(a;b)=1$ ;\hfill~existence de solutions
+ \item cas où $\text{PGCD}(a;b) \neq 1$ et $\text{PGCD}(a;b) \mid c$;\hfill~existence de solutions
+ \item cas où $\text{PGCD}(a;b) \neq 1$ et $\text{PGCD}(a;b) \not\mid c$.\hfill~pas de solution
+\end{itemize}
+\vspace*{-\baselineskip}\leavevmode
+\end{tipblock}
+
+\begin{warningblock}
+Logiquement le \textit{code} se charge de \textit{parenthéser} de manière automatique pour les nombres négatifs, mais il se peut que certains cas particuliers puissent donner des résultats \og non esthétiques \fg{}\ldots
+\end{warningblock}
+
+\begin{PresCodeTexPL}{listing only}
+\EquationDiophantienne[Clés]{equation}
+\end{PresCodeTexPL}
+
+\subsection{Options et clés}
+
+\begin{cautionblock}
+Concernant les Clés disponibles pour cette commande, à donner entre \ctex{[...]} :
+
+\begin{itemize}
+ \item la clé \Cle{Lettre} pour spécifier le \textit{nom} de l'équation ; \hfill{}défaut \Cle{E}
+ \item la clé \Cle{Inconnues} qui paramètre les noms des inconnues, sous la forme \Cle{x/y} ; \hfill{}défaut \Cle{x/y}
+ \item la clé \Cle{Entier} qui gère le nom de l'entier dans la solution ; \hfill{}défaut \Cle{k}
+ \item le booléen \Cle{Cadres} pour mettre en valeur les solutions ;\hfill{}défaut \Cle{false}
+ \item le booléen \Cle{PresPGCD} présenter le calcul du PGCD de $|a|$ et de $|b|$.\hfill{}défaut \Cle{true}
+\end{itemize}
+
+L'argument obligatoire, et entre \ctex{\{...\}} est quant à lui l'équation, en langage \og naturel \fg{} du type \ctex{ax+by=c} (le \textit{code} se charge d'extraire les coefficients, donc pas besoin des signes *).
+\end{cautionblock}
+
+\begin{PresCodePL}{}
+\EquationDiophantienne{48x+18y=3}
+\end{PresCodePL}
+
+\begin{PresCodePL}{}
+\EquationDiophantienne[PresPGCD=false]{48x+18y=-5}
+\end{PresCodePL}
+
+\pagebreak
+
+\begin{PresCodePL}{}
+\EquationDiophantienne{3x+4y=1}
+\end{PresCodePL}
+
+\pagebreak
+
+\begin{PresCodePL}{}
+\EquationDiophantienne[Cadres,Inconnues=u/v,Entier=l]{48u+18v=12}
+\end{PresCodePL}
+
+\pagebreak
+
+\begin{PresCodePL}{}
+\EquationDiophantienne{47x-18y=1}
+\end{PresCodePL}
+
+\newpage
+
\phantom{t}\par\vfill\par
\begin{PART}
\begin{center}
@@ -6567,6 +7049,12 @@
\part{Historique}
+{\small \bverb|v 2.6.4|~:~~~~Résolution d'une équation diophantienne $ax+by=c$ (page \pageref{eqdioph})
+
+{\small \bverb| |~:~~~~Correction de bugs mineurs
+
+{\small \bverb| |~:~~~~Ajout de commandes en géométrie analytique (pages \pageref{affcoord} et \pageref{eqcartplan} et \pageref{eqparamdroite} et \pageref{eqcartdroite} et \pageref{distptplan})
+
{\small \bverb|v 2.6.3|~:~~~~Ajout d'une commande pour déterminer une équation réduite (page \pageref{eqreduite})
{\small \bverb|v 2.6.2|~:~~~~Ajout d'une clé [AffTraitsEq] pour les équations trigo (page \pageref{cercletrigo})
Modified: trunk/Master/texmf-dist/tex/latex/proflycee/ProfLycee.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/proflycee/ProfLycee.sty 2023-05-20 20:18:42 UTC (rev 67171)
+++ trunk/Master/texmf-dist/tex/latex/proflycee/ProfLycee.sty 2023-05-20 20:18:53 UTC (rev 67172)
@@ -3,8 +3,9 @@
% or later, see http://www.latex-project.org/lppl.txtf
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{ProfLycee}[2023/05/09 2.6.3 Aide pour l'utilisation de LaTeX en lycee]
-% 2.6.3 Ajout d'une commande pour l'équation affine d'une droite passant par deux points
+\ProvidesPackage{ProfLycee}[2023/05/19 2.6.4 Aide pour l'utilisation de LaTeX en lycee]
+% 2.6.4 Correction d'un dysfonctionnement avec les racines (oubli du \num) + Equation diophantienne ax+by=c + Eq cartésiennes (plan & droite) + Corrections de bugs mineurs
+% 2.6.3 Ajout d'une commande pour rédiger l'obtention de l'équation affine d'une droite passant par deux points
% 2.6.2 Correction de commandes pour la pseudo3d + nouvelle clé pour la trigo
% 2.6.1 Ajout de commandes pour du calcul intégral (valeur approchée + tikz)
% 2.6.0 Ajout d'une clé [Brut] pour les mesures principales + commande calcul ligne trigo
Modified: trunk/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-aleatoire.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-aleatoire.tex 2023-05-20 20:18:42 UTC (rev 67171)
+++ trunk/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-aleatoire.tex 2023-05-20 20:18:53 UTC (rev 67172)
@@ -25,7 +25,7 @@
\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}
+ {\left\lbrace \PLensopt{} \StrSubstitute{#2}{/}{{\PLenssep}} \right\rbrace}%
}
%%------TRINOMEALEA
Modified: trunk/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-analyse.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-analyse.tex 2023-05-20 20:18:42 UTC (rev 67171)
+++ trunk/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-analyse.tex 2023-05-20 20:18:53 UTC (rev 67172)
@@ -334,7 +334,7 @@
\ensuremath{\frac{%
\xintifboolexpr{\RacNumSimpl == 1 && \RacRacSimpl == 1}%
{1}%
- { \xintifboolexpr{\RacNumSimpl == 1}{}{\RacNumSimpl} \xintifboolexpr{\RacRacSimpl == 1}{}{\sqrt{\RacRacSimpl}} }%
+ { \xintifboolexpr{\RacNumSimpl == 1}{}{\RacNumSimpl} \xintifboolexpr{\RacRacSimpl == 1}{}{\sqrt{\num{\RacRacSimpl}}} }%
}%
{ \RacDenomSimpl }}%
}%
Modified: trunk/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-arithm.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-arithm.tex 2023-05-20 20:18:42 UTC (rev 67171)
+++ trunk/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-arithm.tex 2023-05-20 20:18:53 UTC (rev 67172)
@@ -16,12 +16,12 @@
\NewDocumentCommand\ConversionDecBin{ 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}}{}}
+ \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}}{}}%
}
\setKVdefault[CONVBINHEX]{%
@@ -43,35 +43,35 @@
%la conversion complète
\newcommand\ConversionBinHex[2][]{%
- \useKVdefault[CONVBINHEX]
+ \useKVdefault[CONVBINHEX]%
\setKV[CONVBINHEX]{#1}% on paramètres les nouvelles clés et on les simplifie
- \def\chbrut{#2}
+ \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}}{}=
+ \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
+ \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
+ \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
- \!=
+ {\underbracket{\blocinter}_{\xintBinToHex{\blocinter}}\,}%
+ \advance\cpt by 1%
+ \repeat%
+ \!=%
}%
- {}
- \xintBinToHex{\chbrut}\ifboolKV[CONVBINHEX]{AffBase}{_{16}}{}
+ {}%
+ \xintBinToHex{\chbrut}\ifboolKV[CONVBINHEX]{AffBase}{_{16}}{}%
}
%hexa/bin->dec avec écriture polynomiale
@@ -94,62 +94,62 @@
\newcommand\ConversionVersDec[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]
+ \def\nbdepart{#2}%
+ \StrLen{\nbdepart}[\nbchiffres]%
+ \StrChar{\nbdepart}{1}[\chiffre]%
%si on est en base 16
\xintifboolexpr{\basedepart == 16}%
{%
- \nbdepart\ifboolKV[CONVTODEC]{AffBase}{_{\basedepart}}{} =
+ \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]
+ \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
+ }%
+ {%
+ \ifnum\xintHexToDec{\chiffre} > 0%
+\xintHexToDec{\chiffre}\times\basedepart^{\puiss}%
- \fi
- }
- \advance\cpt by 1
- \repeat
- =
- }
- {}
- \num{\xintHexToDec{\nbdepart}}\ifboolKV[CONVTODEC]{AffBase}{_{10}}{}
+ \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}}{} =
+ \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]
+ \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
+ \ifnum\chiffre > 0%
+\chiffre\times\basedepart^{\puiss}%
- \fi
- }
- \advance\cpt by 1
- \repeat
- =
- }
- {}
- \num{\xintBinToDec{\nbdepart}}\ifboolKV[CONVTODEC]{AffBase}{_{10}}{}
+ \fi%
+ }%
+ \advance\cpt by 1%
+ \repeat%
+ =%
+ }%
+ {}%
+ \num{\xintBinToDec{\nbdepart}}\ifboolKV[CONVTODEC]{AffBase}{_{10}}{}%
}%
{}%
}
@@ -157,30 +157,30 @@
\newcommand\ConversionBaseDix[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}}{} =
+ \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]
+ \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
+ }%
+ {%
+ \ifnum\xintHexToDec{\chiffre} > 0%
+\xintHexToDec{\chiffre}\times\basedepart^{\puiss}%
- \fi
- }
- \advance\cpt by 1
- \repeat
- =
+ \fi%
+ }%
+ \advance\cpt by 1%
+ \repeat%
+ =%
}%
{}%
\num{\convertbasetobasedix{#2}{#3}}\ifboolKV[CONVTODEC]{AffBase}{_{10}}{}%
@@ -231,7 +231,7 @@
}
%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}}
+ \\ \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}%
{%
@@ -263,6 +263,8 @@
AfficheDelimiteurs=true
}
+\RequirePackage{xintgcd}
+
\newcommand\PresentationPGCD[3][]{%
\useKVdefault[prespgcd]%
\setKV[prespgcd]{#1}%
@@ -274,7 +276,7 @@
{}%
\begin{array}{@{\,}r@{\;=\;}l@{\;+\;}r}
%1ère division
- \xdef\ValQ{\fpeval{trunc(\ValA/\ValB,0)}}\xdef\ValR{\fpeval{\ValA-\ValB*\ValQ}}
+ \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
@@ -308,4 +310,150 @@
}{}%
}
+%%===égalité de Bezout
+\NewDocumentCommand\AffCoeffBezout{ m }{%
+ \xintifboolexpr{#1 < 0}%
+ {\left( \num{#1} \right)}%
+ {\num{#1}}%
+}
+\NewDocumentCommand\EgaliteBezout{ O{black} m m }{%
+ \xintAssign{\xintBezout{#2}{#3}}\to\TmpU\TmpV\TmpD%
+ \ensuremath{\num{#2} \times \mathcolor{#1}{\AffCoeffBezout{\TmpU}} + \AffCoeffBezout{#3} \times \mathcolor{#1}{\AffCoeffBezout{\TmpV}} = \num{\TmpD}}%
+}
+
+%%===Équations diophantiennes
+\RequirePackage{cancel}
+\NewDocumentCommand\AffCoeffDioph{ m }{%
+ \xintifboolexpr{#1 < 0}%
+ {\left( \num{#1} \right)}%
+ {\num{#1}}%
+}
+\NewDocumentCommand\AffCoeffDiophSign{ m }{%
+ \xintifboolexpr{#1 < 0}%
+ {\num{#1}}%
+ {+\num{#1}}%
+}
+
+\defKV[eqdioph]{%
+ Lettre=\def\LettreSolEDioph{#1},%
+ Couleur=\def\CouleurSolEDioph{#1},%
+ Inconnues=\def\InconnuesSolEDioph{#1},%
+ Entier=\def\KKK{#1}
+}
+
+\setKVdefault[eqdioph]{%
+ Lettre=E,%
+ Couleur=black,%
+ Inconnues=x/y,%
+ Entier=k,%
+ Cadres=false,%
+ PresPGCD=true
+}
+
+\NewDocumentCommand\EquationDiophantienne{ O{} m }{%v2 avec équation en "dur"
+ \useKVdefault[eqdioph]%
+ \setKV[eqdioph]{#1}%
+ \setlength{\parindent}{0pt}%
+ %extractions des paramètres
+ \StrBefore[1]{\InconnuesSolEDioph}{/}[\XXX]%
+ \StrBehind[1]{\InconnuesSolEDioph}{/}[\YYY]%
+ \StrBefore{#2}{\XXX}[\AA]%
+ \StrBetween{#2}{\XXX}{\YYY}[\BB]%
+ \StrBehind{#2}{=}[\CC]%
+ \IfStrEq{\AA}{}%
+ {\def\AA{1}}{}%
+ \IfStrEq{\AA}{-}%
+ {\def\AA{-1}}{}%
+ \StrLen{\BB}[\lgtB]%
+ \xintifboolexpr{ \lgtB > 1 }%+b ou -b
+ {%
+ \StrDel{\BB}{+}[\BB]%
+ }%
+ {%
+ \IfStrEq{\BB}{-}%
+ {\def\BB{-1}}{}%
+ \IfStrEq{\BB}{+}%
+ {\def\BB{1}}{}%
+ }%
+ %Calcul du PGCD
+ \xdef\PGCDD{\xinteval{gcd(\AA,\BB)}}%
+ On cherche à résoudre l'équation diophantienne :\[ \num{\AA}\XXX + \AffCoeffDioph{\BB}\YYY=\num{\CC} \xintifboolexpr{ \PGCDD == 1 'or' \xintiiRem{\CC}{\PGCDD} != 0 }{\qquad (\LettreSolEDioph)}{} \]%
+ \ifboolKV[eqdioph]{PresPGCD}%
+ {D'après l'algorithme d'Euclide : \PresentationPGCD[Rectangle=false]{\xinteval{abs(\AA)}}{\xinteval{abs(\BB)}}.}%
+ {Le PGCD de \num{\AA} et de \num{\BB} vaut \num{\PGCDD}.}%
+ \par\smallskip
+ \xintifboolexpr{ \xintiiRem{\CC}{\PGCDD} == 0 }%solutions obligatoires
+ {%
+ \xintifboolexpr{ \PGCDD == 1}%
+ {%
+ Les entiers \num{\xinteval{abs(\AA)}} et \num{\xinteval{abs(\BB)}} sont premiers entre eux, donc l'équation $(\LettreSolEDioph)$ admet une infinité de solutions.\par
+ \xdef\AAA{\AA}\xdef\BBB{\BB}\xdef\CCC{\CC}%
+ }%
+ {%
+ Le PGCD de \num{\AA} et \num{\BB} divise \num{\CC}, donc on peut simplifier l'équation diophantienne par \num{\PGCDD}.%
+ \xdef\AAA{\xintiieval{\AA/\PGCDD}}\xdef\BBB{\xintiieval{\BB/\PGCDD}}\xdef\CCC{\xintiieval{\CC/\PGCDD}}%
+ %
+ \[ \num{\AA}\XXX+\AffCoeffDioph{\BB}\YYY=\num{\CC} \underset{\div\num{\PGCDD}}{\Longleftrightarrow} \num{\AAA}\XXX+\AffCoeffDioph{\BBB}\YYY=\num{\CCC} \qquad (\LettreSolEDioph) \]%
+ Les entiers \num{\AAA} et \num{\BBB} sont premiers entre eux, donc l'équation $(\LettreSolEDioph)$ admet une infinité de solutions.\par
+ }%
+ \xintAssign{\xintBezout{\AAA}{\BBB}}\to\TmpU\TmpV\TmpD
+ %
+ On détermine une solution particulière de $(E)$ : \[ \num{\AAA} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffBezout{\TmpU}} + \AffCoeffBezout{\BBB} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffBezout{\TmpV}} = \num{\TmpD}
+ \xintifboolexpr{ \CCC != 1}%
+ {%
+ \underset{\times\AffCoeffDioph{\CCC}}{\implies}
+ \num{\AAA} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\TmpU*\CCC}}} + \AffCoeffBezout{\BBB} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\TmpV*\CCC}}} = \num{\CCC}
+ }%
+ {}%
+ \qquad ({\LettreSolEDioph}_0)
+ \]%
+ %
+ Par soustraction :
+ %
+ \[%
+ {\renewcommand\arraystretch{1.25}%
+ \begin{array}{ @{\,} c @{\,} c @{\;\times\;} c @{\;+\;} c @{\;\times\;} c @{\;=\;} c }
+ & \num{\AAA} & \XXX & \AffCoeffDioph{\BBB} & \YYY & \num{\CCC} \\
+ -~~~~~ & \num{\AAA} & \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\TmpU*\CCC}}} & \AffCoeffDioph{\BBB} & \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\TmpV*\CCC}}} & \num{\CCC} \\ \hline
+ & \num{\AAA} & \left( \XXX \mathcolor{\CouleurSolEDioph}{\AffCoeffDiophSign{\xinteval{-\TmpU*\CCC}}} \right)& \AffCoeffDioph{\BBB} & \left( \YYY \mathcolor{\CouleurSolEDioph}{\AffCoeffDiophSign{\xinteval{-\TmpV*\CCC}}} \right) & 0\\
+ \end{array}}
+ \]%
+ \xdef\TmpPartieA{\XXX \mathcolor{\CouleurSolEDioph}{\AffCoeffDiophSign{\xinteval{-\TmpU*\CCC}}}}%
+ \xdef\TmpPartieB{\YYY \mathcolor{\CouleurSolEDioph}{\AffCoeffDiophSign{\xinteval{-\TmpV*\CCC}}}}%
+ %
+ On en déduit que $\num{\AAA} \times \underbrace{\left( \TmpPartieA \right)}_{\text{entier}} = \num{\xinteval{-\BBB}} \times \left( \TmpPartieB \right)$, et donc que $\num{\AAA} \mid \num{\xinteval{-\BBB}} \times \left( \TmpPartieB \right)$.\par\smallskip
+ Or \num{\xinteval{abs(\AAA)}} et \num{\xinteval{abs(\BBB)}} sont premiers entre eux, donc d'après le théorème de Gauss, on a $\num{\AAA} \mid \TmpPartieB$.\par
+ Il existe donc un entier $\KKK$ tel que $\TmpPartieB = \num{\AAA} \times \KKK$, ce qui donne
+ $\ifboolKV[eqdioph]{Cadres}
+ {\boxed{\YYY = \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK}}
+ {\YYY = \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK}
+ $.\par
+ En remplaçant, on obtient :
+ %
+ \begin{align*}
+ \num{\AAA} \times \left( \TmpPartieA \right) = \num{\xinteval{-\BBB}} \times \left( \TmpPartieB \right) & \implies \num{\AAA} \times \left( \TmpPartieA \right) = \num{\xinteval{-\BBB}} \times \big( \underbrace{\mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK}_{\mathclap{\YYY}} \mathcolor{\CouleurSolEDioph}{\AffCoeffDiophSign{\xinteval{-\CCC*\TmpV}}} \big) \\
+ & \implies \num{\AAA} \times \left( \TmpPartieA \right) = \num{\xinteval{-\BBB}} \times \left( \num{\AAA}\KKK \right) \\
+ & \implies \TmpPartieA = \num{\xinteval{-\BBB}}\KKK \\
+ & \implies \ifboolKV[eqdioph]{Cadres}
+ {\boxed{\XXX = \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpU}}} \AffCoeffDiophSign{\xinteval{-\BBB}}\KKK}}
+ {\XXX = \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpU}}} \AffCoeffDiophSign{\xinteval{-\BBB}}\KKK}
+ \end{align*}
+ %
+ Ainsi, si $\XXX$ et $\YYY$ sont solutions de $(\LettreSolEDioph)$, alors il existe un entier $\KKK$ tel que ${\XXX=\mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpU}}} \AffCoeffDiophSign{\xinteval{-\BBB}}\KKK}$ et ${\YYY=\mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK}$.\par\medskip
+ Réciproquement, soit $\KKK$ un entier quelconque :
+ %
+ \begin{align*}
+ \num{\AAA} \times \left( \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpU}}} \AffCoeffDiophSign{\xinteval{-\BBB}}\KKK \right) + \AffCoeffDioph{\BBB} \times \left( \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK \right) & = \num{\AAA} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\CCC*\TmpU}}} + \cancel{\AffCoeffDioph{\AAA} \times \AffCoeffDioph{\xinteval{-\BBB}} \KKK} + \AffCoeffDioph{\BBB} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\CCC*\TmpV}}} + \cancel{\AffCoeffDioph{\BBB} \times \AffCoeffDioph{\AAA} \KKK} \\
+ & = \underbrace{\num{\AAA} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\CCC*\TmpU}}} + \AffCoeffDioph{\BBB} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\CCC*\TmpV}}}}_{=\,\num{\CCC} \text{ d'après } ({\LettreSolEDioph}_0)} \\
+ & = \num{\CCC}
+ \end{align*}
+ %
+ On en déduit que $\left(\mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpU}}} \AffCoeffDiophSign{\xinteval{-\BBB}}\KKK \mathpunct{}; \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK \right)$ est solution de $(\LettreSolEDioph)$.\par\medskip
+ En conclusion, les solutions de $(E)$ sont donc les couples $\left(\mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpU}}} \AffCoeffDiophSign{\xinteval{-\BBB}}\KKK \mathpunct{}; \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK \right)$, avec $\KKK$ un entier relatif.
+ }%
+ {%
+ Le PGCD de \num{\AA} et \num{\BB} ne divise pas \num{\CC}, donc l'équation $(\LettreSolEDioph)$ n'admet aucune solution.
+ }%
+}
+
\endinput
\ No newline at end of file
Modified: trunk/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-geom.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-geom.tex 2023-05-20 20:18:42 UTC (rev 67171)
+++ trunk/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-geom.tex 2023-05-20 20:18:53 UTC (rev 67172)
@@ -135,5 +135,493 @@
mainlevee/.default={5mm et 0.6pt}
}
+%%Equations Cartésiennes + Affichages coordonnées
+\RequirePackage{nicematrix}
+\NewDocumentCommand\AffCoeffSgn{ s O{} m m D<>{} }{%
+ \IfStrEq{#5}{}%si argument vide, on convertit en fraction
+ {%
+ \xintifboolexpr{\xinteval{#3} == 0}%
+ {}%on n'affiche rien si le coeff est nul
+ {%sinon on teste >0 puis else
+ \xintifboolexpr{\xinteval{#3} > 0}%
+ {%
+ \IfBooleanTF{#1}{}{+}%
+ \xintifboolexpr{\xinteval{#3} == 1}%
+ {#4}%
+ {\ConversionFraction[#2]{#3}#4}%
+ }%
+ {%
+ \xintifboolexpr{\xinteval{#3} == -1}%
+ {-#4\relax}%
+ {\ConversionFraction[#2]{#3}#4}%
+ }%
+ }%
+ }%
+ %sinon on met en brut
+ {%
+ #3#4
+ }%
+}
+\NewDocumentCommand\AffCoeffSgnSimpl{ s O{} m D<>{} }{%
+ \IfStrEq{#4}{}%si argument vide, on convertit en fraction
+ {%
+ \xintifboolexpr{\xinteval{#3} == 0}%
+ {}%on n'affiche rien si le coeff est nul
+ {%sinon on teste >0 puis else
+ \xintifboolexpr{\xinteval{#3} > 0}%
+ {%
+ \IfBooleanTF{#1}{}{+}%
+ \xintifboolexpr{\xinteval{#3} == 1}%
+ {#3}%
+ {+\ConversionFraction[#2]{#3}}%
+ }%
+ {%
+ \xintifboolexpr{\xinteval{#3} == -1}%
+ {#3\relax}%
+ {\ConversionFraction[#2]{#3}}%
+ } %
+ }%
+ }%
+ %sinon on met en brut
+ {%
+ #3
+ }%
+}
+
+\defKV[eqcartplan]{%
+ OptionCoeffs=\def\eqcartplformat{#1},%
+ Facteur=\def\eqcartplfact{#1}
+}
+
+\setKVdefault[eqcartplan]{%
+ OptionCoeffs={d},%
+ SimplifCoeffs=false,%
+ Facteur=1
+}
+
+\NewDocumentCommand\TrouveEqCartPlan{ O{} r() r() d() }{%test commande générique avec VP ou PPP ou PVV
+ \restoreKV[eqcartplan]% revenir au valeurs par défaut
+ \setKV[eqcartplan]{#1}% lit les arguments optionnels
+ \IfNoValueTF{#4}%c'est Vect+Point
+ {%
+ \setsepchar{;}\readlist*\CoordVecNorm{#2}%
+ \setsepchar{,}\readlist*\CoordPt{#3}%
+ \itemtomacro\CoordVecNorm[1]\vecnx%
+ \itemtomacro\CoordVecNorm[2]\vecny%
+ \itemtomacro\CoordVecNorm[3]\vecnz%
+ \itemtomacro\CoordPt[1]\xpta%
+ \itemtomacro\CoordPt[2]\ypta%
+ \itemtomacro\CoordPt[3]\zpta%
+ %calculs
+ \xdef\coeffd{-((\xpta)*(\vecnx)+(\ypta)*(\vecny)+(\zpta)*(\vecnz))}%
+ \xdef\PPCMDenom{\xinteval{lcm([\xintDenominator{\xintIrr{\xinteval{\vecnx}}},\xintDenominator{\xintIrr{\xinteval{\vecny}}},\xintDenominator{\xintIrr{\xinteval{\vecnz}}},\xintDenominator{\xintIrr{\xinteval{\coeffd}}}])}}%
+ \xdef\PGCDsiEntiers{1}%
+ \xintifboolexpr{\xinteval{isint(\vecnx)}*\xinteval{isint(\vecny)}*\xinteval{isint(\vecnz)}*\xinteval{isint(\coeffd)} == 1}%tous les coeffs sont entiers
+ {%
+ \xdef\PGCDsiEntiers{\xinteval{gcd([\xinteval{\vecnx},\xinteval{\vecny},\xinteval{\vecnz},\xinteval{\coeffd}])}}%
+ }%
+ {}%
+ %affichages
+ \ifboolKV[eqcartplan]{SimplifCoeffs}%
+ {%
+ \AffCoeffSgn*[\eqcartplformat]{(\vecnx)*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{x} \AffCoeffSgn[\eqcartplformat]{(\vecny)*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{y} \AffCoeffSgn[\eqcartplformat]{(\vecnz)*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{z} \AffCoeffSgnSimpl*[\eqcartplformat]{\coeffd*\PPCMDenom/\PGCDsiEntiers} = 0%
+ }%
+ {%
+ \AffCoeffSgn*[\eqcartplformat]{\vecnx}{x} \AffCoeffSgn[\eqcartplformat]{\vecny}{y} \AffCoeffSgn[\eqcartplformat]{\vecnz}{z} \AffCoeffSgnSimpl*[\eqcartplformat]{\coeffd} = 0%
+ }%
+ }%sinon c'est Point+Point+Point ou vectdir+vectdir+point
+ {%
+ \IfSubStr{#2}{,}%c'est point+point+point
+ {%
+ \setsepchar{,}\readlist*\CoordPtA{#2}%
+ \setsepchar{,}\readlist*\CoordPtB{#3}%
+ \setsepchar{,}\readlist*\CoordPtC{#4}%
+ \itemtomacro\CoordPtA[1]\ptxa%
+ \itemtomacro\CoordPtA[2]\ptya%
+ \itemtomacro\CoordPtA[3]\ptza%
+ \itemtomacro\CoordPtB[1]\ptxb%
+ \itemtomacro\CoordPtB[2]\ptyb%
+ \itemtomacro\CoordPtB[3]\ptzb%
+ \itemtomacro\CoordPtC[1]\ptxc%
+ \itemtomacro\CoordPtC[2]\ptyc%
+ \itemtomacro\CoordPtC[3]\ptzc%
+ %calculs
+ \xdef\vecxab{(\ptxb-\ptxa)}%
+ \xdef\vecyab{(\ptyb-\ptya)}%
+ \xdef\veczab{(\ptzb-\ptza)}%
+ \xdef\vecxac{(\ptxc-\ptxa)}%
+ \xdef\vecyac{(\ptyc-\ptya)}%
+ \xdef\veczac{(\ptzc-\ptza)}%
+ %coeffs a/b/c
+ \xdef\coeffa{(\vecyab*\veczac-\veczab*\vecyac)}%
+ \xdef\coeffb{(\vecxac*\veczab-\vecxab*\veczac)}%
+ \xdef\coeffc{(\vecxab*\vecyac-\vecxac*\vecyab)}%
+ %coeffd
+ \xdef\coeffd{(-(\ptxa)*\vecyab*\veczac-(\ptza)*\vecxab*\vecyac-(\ptya)*\vecxac*\veczab+(\ptza)*\vecyab*\vecxac+(\ptxa)*\veczab*\vecyac+(\ptya)*\vecxab*\veczac)}%
+ %pour simplifier
+ \xdef\PPCMDenom{\xinteval{lcm([\xintDenominator{\xintIrr{\xinteval{\coeffa}}},\xintDenominator{\xintIrr{\xinteval{\coeffb}}},\xintDenominator{\xintIrr{\xinteval{\coeffc}}},\xintDenominator{\xintIrr{\xinteval{\coeffd}}}])}}%
+ \xdef\PGCDsiEntiers{1}%
+ \xintifboolexpr{\xinteval{isint(\coeffa)}*\xinteval{isint(\coeffb)}*\xinteval{isint(\coeffc)}*\xinteval{isint(\coeffd)} == 1}%tous les coeffs sont entiers
+ {%
+ \xdef\PGCDsiEntiers{\xinteval{gcd([\xinteval{\coeffa},\xinteval{\coeffb},\xinteval{\coeffc},\xinteval{\coeffd}])}}%
+ }%
+ {}%
+ %affichages
+ \ifboolKV[eqcartplan]{SimplifCoeffs}%
+ {%
+ \AffCoeffSgn*[\eqcartplformat]{\coeffa*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{x} \AffCoeffSgn[\eqcartplformat]{\coeffb*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{y} \AffCoeffSgn[\eqcartplformat]{\coeffc*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{z} \AffCoeffSgnSimpl*[\eqcartplformat]{\coeffd*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers} = 0%
+ }%
+ {%
+ \AffCoeffSgn*[\eqcartplformat]{\coeffa}{x} \AffCoeffSgn[\eqcartplformat]{\coeffb}{y} \AffCoeffSgn[\eqcartplformat]{\coeffc}{z} \AffCoeffSgnSimpl*[\eqcartplformat]{\coeffd} = 0%
+ }%
+ }%
+ {%
+ \setsepchar{;}\readlist*\CoordVecA{#2}%
+ \setsepchar{;}\readlist*\CoordVecB{#3}%
+ \setsepchar{,}\readlist*\CoordPtC{#4}%
+ \itemtomacro\CoordVecA[1]\vecxab%
+ \itemtomacro\CoordVecA[2]\vecyab%
+ \itemtomacro\CoordVecA[3]\veczab%
+ \itemtomacro\CoordVecB[1]\vecxac%
+ \itemtomacro\CoordVecB[2]\vecyac%
+ \itemtomacro\CoordVecB[3]\veczac%
+ \itemtomacro\CoordPtC[1]\ptxc%
+ \itemtomacro\CoordPtC[2]\ptyc%
+ \itemtomacro\CoordPtC[3]\ptzc%
+ %coeff a/b/c
+ \xdef\coeffa{((\vecyab)*(\veczac)-(\vecyac)*(\veczab))}%
+ \xdef\coeffb{((\veczab)*(\vecxac)-(\veczac)*(\vecxab))}%
+ \xdef\coeffc{((\vecxab)*(\vecyac)-(\vecxac)*(\vecyab))}%
+ %coeffd
+ \xdef\coeffd{-((\ptxc)*\coeffa+(\ptyc)*\coeffb+(\ptzc)*\coeffc)}%
+ %pour simplifier
+ \xdef\PPCMDenom{\xinteval{lcm([\xintDenominator{\xintIrr{\xinteval{\coeffa}}},\xintDenominator{\xintIrr{\xinteval{\coeffb}}},\xintDenominator{\xintIrr{\xinteval{\coeffc}}},\xintDenominator{\xintIrr{\xinteval{\coeffd}}}])}}%
+ \xdef\PGCDsiEntiers{1}%
+ \xintifboolexpr{\xinteval{isint(\coeffa)}*\xinteval{isint(\coeffb)}*\xinteval{isint(\coeffc)}*\xinteval{isint(\coeffd)} == 1}%tous les coeffs sont entiers
+ {%
+ \xdef\PGCDsiEntiers{\xinteval{gcd([\xinteval{\coeffa},\xinteval{\coeffb},\xinteval{\coeffc},\xinteval{\coeffd}])}}%
+ }%
+ {}%
+ %affichages
+ \ifboolKV[eqcartplan]{SimplifCoeffs}%
+ {%
+ \AffCoeffSgn*[\eqcartplformat]{\coeffa*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{x} \AffCoeffSgn[\eqcartplformat]{\coeffb*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{y} \AffCoeffSgn[\eqcartplformat]{\coeffc*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{z} \AffCoeffSgnSimpl*[\eqcartplformat]{\coeffd*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers} = 0%
+ }%
+ {%
+ \AffCoeffSgn*[\eqcartplformat]{\coeffa}{x} \AffCoeffSgn[\eqcartplformat]{\coeffb}{y} \AffCoeffSgn[\eqcartplformat]{\coeffc}{z} \AffCoeffSgnSimpl*[\eqcartplformat]{\coeffd} = 0%
+ }%
+ }%
+ }%
+}
+
+\defKV[eqcartdroite]{%
+ OptionCoeffs=\def\eqcartdteformat{#1},%
+ Facteur=\def\eqcartdtefact{#1}
+}
+
+\setKVdefault[eqcartdroite]{%
+ OptionCoeffs={d},%
+ SimplifCoeffs=false,%
+ VectDirecteur=false,%
+ Facteur=1
+}
+
+\NewDocumentCommand\TrouveEqCartDroite{ O{} r() r() }{%vect/point ou point/point
+ \restoreKV[eqcartdroite]% revenir au valeurs par défaut
+ \setKV[eqcartdroite]{#1}% lit les arguments optionnels
+ %on teste si c'est point/point
+ \IfSubStr{#2}{;}%c'est vecteur+point, sinon c'est point+point
+ {%
+ \setsepchar{;}\readlist*\CoordVec{#2}%
+ \setsepchar{,}\readlist*\CoordPt{#3}%
+ \itemtomacro\CoordVec[1]\vecnx%
+ \itemtomacro\CoordVec[2]\vecny%
+ \itemtomacro\CoordPt[1]\xpta%
+ \itemtomacro\CoordPt[2]\ypta%
+ %calculs
+ \ifboolKV[eqcartdroite]{VectDirecteur}%
+ {%
+ \xdef\coeffd{((\xpta)*(\vecny)-(\ypta)*(\vecnx))}%
+ }%
+ {%
+ \xdef\coeffd{-((\xpta)*(\vecnx)+(\ypta)*(\vecny))}%
+ }%
+ \xdef\PPCMDenom{\xinteval{lcm([\xintDenominator{\xintIrr{\xinteval{\vecnx}}},\xintDenominator{\xintIrr{\xinteval{\vecny}}},\xintDenominator{\xintIrr{\xinteval{\coeffd}}}])}}%
+ \xdef\PGCDsiEntiers{1}%
+ \xintifboolexpr{\xinteval{isint(\vecnx)}*\xinteval{isint(\vecny)}*\xinteval{isint(\coeffd)} == 1}%tous les coeffs sont entiers
+ {%
+ \xdef\PGCDsiEntiers{\xinteval{gcd([\xinteval{\vecnx},\xinteval{\vecny},\xinteval{\coeffd}])}}%
+ }%
+ {}%
+ %affichages
+ \ifboolKV[eqcartdroite]{SimplifCoeffs}%
+ {%
+ \ifboolKV[eqcartdroite]{VectDirecteur}%
+ {%
+ \AffCoeffSgn*[\eqcartdteformat]{-(\vecny)*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers}{x} \AffCoeffSgn[\eqcartdteformat]{(\vecnx)*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers}{y} \AffCoeffSgnSimpl*[\eqcartdteformat]{\coeffd*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers} = 0%
+ }%
+ {%
+ \AffCoeffSgn*[\eqcartdteformat]{(\vecnx)*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers}{x} \AffCoeffSgn[\eqcartdteformat]{(\vecny)*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers}{y} \AffCoeffSgnSimpl*[\eqcartdteformat]{\coeffd*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers} = 0%
+ }%
+ }%
+ {%
+ \ifboolKV[eqcartdroite]{VectDirecteur}%
+ {%
+ \AffCoeffSgn*[\eqcartdteformat]{-(\vecny)}{x} \AffCoeffSgn[\eqcartdteformat]{\vecnx}{y} \AffCoeffSgnSimpl*[\eqcartdteformat]{\coeffd} = 0%
+ }%
+ {%
+ \AffCoeffSgn*[\eqcartdteformat]{\vecnx}{x} \AffCoeffSgn[\eqcartdteformat]{\vecny}{y} \AffCoeffSgnSimpl*[\eqcartdteformat]{\coeffd} = 0%
+ }%
+ }%
+ }%
+ {%
+ \setsepchar{,}\readlist*\CoordPtA{#2}%
+ \setsepchar{,}\readlist*\CoordPtB{#3}%
+ \itemtomacro\CoordPtA[1]\xpta%
+ \itemtomacro\CoordPtA[2]\ypta%
+ \itemtomacro\CoordPtB[1]\xptb%
+ \itemtomacro\CoordPtB[2]\yptb%
+ \xdef\vecnx{((\xptb)-(\xpta))}%
+ \xdef\vecny{((\yptb)-(\ypta))}%
+ %calculs
+ \xdef\coeffd{((\xpta)*(\vecny)-(\ypta)*(\vecnx))}%
+ \xdef\PPCMDenom{\xinteval{lcm([\xintDenominator{\xintIrr{\xinteval{\vecnx}}},\xintDenominator{\xintIrr{\xinteval{\vecny}}},\xintDenominator{\xintIrr{\xinteval{\coeffd}}}])}}%
+ \xdef\PGCDsiEntiers{1}%
+ \xintifboolexpr{\xinteval{isint(\vecnx)}*\xinteval{isint(\vecny)}*\xinteval{isint(\coeffd)} == 1}%tous les coeffs sont entiers
+ {%
+ \xdef\PGCDsiEntiers{\xinteval{gcd([\xinteval{\vecnx},\xinteval{\vecny},\xinteval{\coeffd}])}}%
+ }%
+ {}%
+ %affichages
+ \ifboolKV[eqcartdroite]{SimplifCoeffs}%
+ {%
+ \AffCoeffSgn*[\eqcartdteformat]{-(\vecny)*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers}{x} \AffCoeffSgn[\eqcartdteformat]{(\vecnx)*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers}{y} \AffCoeffSgnSimpl*[\eqcartdteformat]{\coeffd*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers} = 0%
+ }%
+ {%
+ \AffCoeffSgn*[\eqcartdteformat]{-(\vecny)}{x} \AffCoeffSgn[\eqcartdteformat]{(\vecnx)}{y} \AffCoeffSgnSimpl*[\eqcartdteformat]{\coeffd} = 0%
+ }%
+ }%
+}
+
+\NewDocumentCommand\AffVecteur{ O{d} D<>{} r() }{%
+ \setsepchar{;}\readlist*\CoordVec{#3}%
+ \xintifboolexpr{\CoordVeclen == 2}%
+ {%
+ \IfSubStr{#1}{;}%si l'option est globale...
+ {%
+ \setsepchar{;}\readlist*\OptVec{#1}%
+ \itemtomacro\OptVec[1]\optvecx%
+ \itemtomacro\OptVec[2]\optvecy%
+ }%
+ {%
+ \xdef\optvecx{#1}\xdef\optvecy{#1}%
+ }%
+ \itemtomacro\CoordVec[1]\vecx%
+ \itemtomacro\CoordVec[2]\vecy%
+ \begin{pNiceMatrix}[#2] \ConversionFraction[\optvecx]{\vecx} \\ \ConversionFraction[\optvecy]{\vecy} \end{pNiceMatrix}%
+ }%
+ {}%
+ \xintifboolexpr{\CoordVeclen == 3}%
+ {%
+ \IfSubStr{#1}{;}%si l'option est globale...
+ {%
+ \setsepchar{;}\readlist*\OptVec{#1}%
+ \itemtomacro\OptVec[1]\optvecx%
+ \itemtomacro\OptVec[2]\optvecy%
+ \itemtomacro\OptVec[3]\optvecz%
+ }%
+ {%
+ \xdef\optvecx{#1}\xdef\optvecy{#1}\xdef\optvecz{#1}%
+ }%
+ \itemtomacro\CoordVec[1]\vecx%
+ \itemtomacro\CoordVec[2]\vecy%
+ \itemtomacro\CoordVec[3]\vecz%
+ \begin{pNiceMatrix}[#2] \ConversionFraction[\optvecx]{\vecx} \\ \ConversionFraction[\optvecy]{\vecy} \\ \ConversionFraction[\optvecz]{\vecz} \end{pNiceMatrix}%
+ }%
+ {}%
+}
+
+\NewDocumentCommand\AffPoint{ O{d} r() }{%
+ \setsepchar{,}
+ \readlist*\CoordPt{#2}%
+ \xintifboolexpr{\CoordPtlen == 2}%
+ {%
+ \IfSubStr{#1}{,}%si l'option est globale...
+ {%
+ \setsepchar{,}\readlist*\OptPt{#1}%
+ \itemtomacro\OptPt[1]\optptx%
+ \itemtomacro\OptPt[2]\optpty%
+ }%
+ {%
+ \xdef\optptx{#1}\xdef\optpty{#1}%
+ }%
+ \itemtomacro\CoordPt[1]\ptx%
+ \itemtomacro\CoordPt[2]\pty%
+ \left( \ConversionFraction[\optptx]{\ptx} ; \ConversionFraction[\optpty]{\pty} \right)%
+ }%
+ {}%
+ \xintifboolexpr{\CoordPtlen == 3}%
+ {%
+ \IfSubStr{#1}{,}%si l'option est globale...
+ {%
+ \setsepchar{,}\readlist*\OptPt{#1}%
+ \itemtomacro\OptPt[1]\optptx%
+ \itemtomacro\OptPt[2]\optpty%
+ \itemtomacro\OptPt[3]\optptz%
+ }%
+ {%
+ \xdef\optptx{#1}\xdef\optpty{#1}\xdef\optptz{#1}%
+ }%
+ \itemtomacro\CoordPt[1]\ptx%
+ \itemtomacro\CoordPt[2]\pty%
+ \itemtomacro\CoordPt[3]\ptz%
+ \left( \ConversionFraction[\optptx]{\ptx} ; \ConversionFraction[\optpty]{\pty} ; \ConversionFraction[\optptz]{\ptz} \right)%
+ }%
+ {}%
+}
+
+%%Équation paramétrique de droite
+\defKV[eqparamdroite]{%
+ OptionCoeffs=\def\eqparamdteformat{#1},%
+ Reel=\def\eqparamdtereel{#1}
+}
+
+\setKVdefault[eqparamdroite]{%
+ OptionCoeffs={d},%
+ Reel=k,%
+ Aligne=false,%
+ Oppose=false,%
+ Rgras=false
+}
+
+\NewDocumentCommand\AffVarDteParam{ m m }{%
+ \xdef\restmp{\ConversionFraction[\eqparamdteformat]{#1} \AffCoeffSgn[\eqcartdteformat]{#2}{\eqparamdtereel}}%
+ \xintifboolexpr{\xinteval{#1} == 0 'and' \xinteval{#2} == 0}{\xdef\restmp{0}}{}%
+ \xintifboolexpr{\xinteval{#1} == 0 'and' \xinteval{#2} != 0}{\xdef\restmp{\AffCoeffSgn*[\eqcartdteformat]{#2}{\eqparamdtereel}}}{}%
+ \restmp%
+}
+
+\NewDocumentCommand\AffVarDteParamAlign{ m m }{%
+ \xdef\restmp{\ConversionFraction[\eqparamdteformat]{#1} & \AffCoeffSgn[\eqcartdteformat]{#2}{\eqparamdtereel}}%
+ \xintifboolexpr{\xinteval{#1} == 0 'and' \xinteval{#2} == 0}{\xdef\restmp{0 & }}{}%
+ \xintifboolexpr{\xinteval{#1} == 0 'and' \xinteval{#2} != 0}{\xdef\restmp{ & \AffCoeffSgn*[\eqcartdteformat]{#2}{\eqparamdtereel}}}{}%
+ \restmp%
+}
+
+\NewDocumentCommand\TrouveEqParamDroite{ O{} r() r() }{%vect/point ou point/point
+ \restoreKV[eqparamdroite]% revenir au valeurs par défaut
+ \setKV[eqparamdroite]{#1}% lit les arguments optionnels
+ %on teste si c'est point/point
+ \IfSubStr{#2}{;}%c'est vecteur+point, sinon c'est point+point
+ {%
+ \setsepchar{;}\readlist*\CoordVec{#2}%
+ \setsepchar{,}\readlist*\CoordPt{#3}%
+ \itemtomacro\CoordVec[1]\vecdirx%
+ \itemtomacro\CoordVec[2]\vecdiry%
+ \itemtomacro\CoordVec[3]\vecdirz%
+ \itemtomacro\CoordPt[1]\xpta%
+ \itemtomacro\CoordPt[2]\ypta%
+ \itemtomacro\CoordPt[3]\zpta%
+ }%
+ {%
+ \setsepchar{,}\readlist*\CoordPtA{#2}%
+ \setsepchar{,}\readlist*\CoordPtB{#3}%
+ \itemtomacro\CoordPtA[1]\xpta%
+ \itemtomacro\CoordPtA[2]\ypta%
+ \itemtomacro\CoordPtA[2]\zpta%
+ \itemtomacro\CoordPtB[1]\xptb%
+ \itemtomacro\CoordPtB[2]\yptb%
+ \itemtomacro\CoordPtB[2]\zptb%
+ \ifboolKV[eqparamdroite]{Oppose}%
+ {%
+ \xdef\vecdirx{((\xpta)-(\xptb))}%
+ \xdef\vecdiry{((\ypta)-(\yptb))}%
+ \xdef\vecdirz{((\zpta)-(\zptb))}%
+ }%
+ {%
+ \xdef\vecdirx{((\xptb)-(\xpta))}%
+ \xdef\vecdiry{((\yptb)-(\ypta))}%
+ \xdef\vecdirz{((\zptb)-(\zpta))}%
+ }%
+ }%
+ \ifboolKV[eqparamdroite]{Aligne}%
+ {%
+ \left\lbrace\begin{array}{@{\,}l@{\;=\;}l@{\;}r}
+ x & \AffVarDteParamAlign{\xpta}{\vecdirx} \\
+ y & \AffVarDteParamAlign{\ypta}{\vecdiry} \\
+ z & \AffVarDteParamAlign{\zpta}{\vecdirz} \\
+ \end{array}\right.
+ \text{, } \eqparamdtereel \in \ifboolKV[eqparamdroite]{Rgras}{\textbf{R}}{\mathbb{R}}%
+ }%
+ {%
+ \begin{dcases}
+ x = \AffVarDteParam{\xpta}{\vecdirx} \\
+ y = \AffVarDteParam{\ypta}{\vecdiry} \\
+ z = \AffVarDteParam{\zpta}{\vecdirz} \\
+ \end{dcases}
+ \text{, } \eqparamdtereel \in \ifboolKV[eqparamdroite]{Rgras}{\textbf{R}}{\mathbb{R}}%
+ }%
+}
+
+\NewDocumentCommand\TrouveDistancePtPlan{ r() r() d() }{%pt+vect+pt
+ \IfNoValueTF{#3}%c'est Point + Equation // sinon c'est point + vectnorm + point
+ {%
+ \StrDel{#2}{=0}[\tmpeq]%
+ %%\tmpeq \text{ et }%
+ \setsepchar{,}\readlist*\CoordPtA{#1}%
+ \itemtomacro\CoordPtA[1]\xa%
+ \itemtomacro\CoordPtA[2]\ya%
+ \itemtomacro\CoordPtA[3]\za%.
+ %calcul de d
+ \StrSubstitute{\tmpeq}{x}{(0)}[\tmpcoeffd]%
+ \StrSubstitute{\tmpcoeffd}{y}{(0)}[\tmpcoeffd]%
+ \StrSubstitute{\tmpcoeffd}{z}{(0)}[\tmpcoeffd]%
+ \xdef\coeffd{\tmpcoeffd}%
+ %%d=\xinteval{\coeffd} \text{ et }%
+ %calcul de a
+ \StrSubstitute{\tmpeq}{x}{(1)}[\tmpcoeffa]%
+ \StrSubstitute{\tmpcoeffa}{y}{(0)}[\tmpcoeffa]%
+ \StrSubstitute{\tmpcoeffa}{z}{(0)}[\tmpcoeffa]%
+ \xdef\vectx{(\tmpcoeffa)-(\coeffd)}%
+ %%a=\xinteval{\vectx} \text{ et }%
+ %calcul de b
+ \StrSubstitute{\tmpeq}{x}{(0)}[\tmpcoeffb]%
+ \StrSubstitute{\tmpcoeffb}{y}{(1)}[\tmpcoeffb]%
+ \StrSubstitute{\tmpcoeffb}{z}{(0)}[\tmpcoeffb]%
+ \xdef\vecty{(\tmpcoeffb)-(\coeffd)}%
+ %%b=\xinteval{\vecty} \text{ et }%
+ %calcul de c
+ \StrSubstitute{\tmpeq}{x}{(0)}[\tmpcoeffc]%
+ \StrSubstitute{\tmpcoeffc}{y}{(0)}[\tmpcoeffc]%
+ \StrSubstitute{\tmpcoeffc}{z}{(1)}[\tmpcoeffc]%
+ \xdef\vectz{(\tmpcoeffc)-(\coeffd)}%
+ %c=\xinteval{\vectz} \text{ et }%
+ %calcul du numérateur
+ \StrSubstitute{\tmpeq}{x}{(\xa)}[\resnum]%
+ \StrSubstitute{\resnum}{y}{(\ya)}[\resnum]%
+ \StrSubstitute{\resnum}{z}{(\za)}[\resnum]%
+ %%\text{num}=\xinteval{\resnum} \text{ et }
+ %le carré
+ \xdef\restmp{(\resnum)**2/((\vectx)**2+(\vecty)**2+(\vectz)**2)}%
+ %%\text{resultatcarré}=\xinteval{\restmp} \text{ et }%
+ }%
+ {%
+ \setsepchar{,}\readlist*\CoordPtA{#1}%
+ \setsepchar{;}\readlist*\CoordVec{#2}%
+ \setsepchar{,}\readlist*\CoordPtB{#3}%
+ \itemtomacro\CoordPtA[1]\xa%
+ \itemtomacro\CoordPtA[2]\ya%
+ \itemtomacro\CoordPtA[3]\za%
+ \itemtomacro\CoordVec[1]\vectx%
+ \itemtomacro\CoordVec[2]\vecty%
+ \itemtomacro\CoordVec[3]\vectz%
+ \itemtomacro\CoordPtB[1]\xb%
+ \itemtomacro\CoordPtB[2]\yb%
+ \itemtomacro\CoordPtB[3]\zb%
+ \def\restmp{((\vectx)*((\xb)-(\xa))+(\vecty)*((\yb)-(\ya))+(\vectz)*((\zb)-(\za)))**2/((\vectx)**2+(\vecty)**2+(\vectz)**2)}%
+ }%
+ \SimplificationRacine{\restmp}%
+}
+
\endinput
\ No newline at end of file
Modified: trunk/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-probas.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-probas.tex 2023-05-20 20:18:42 UTC (rev 67171)
+++ trunk/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-probas.tex 2023-05-20 20:18:53 UTC (rev 67172)
@@ -14,53 +14,53 @@
\xintFloatToDecimal{\xintfloateval{binomial(#1,#3)*#2^#3*(1-#2)^(#1-#3)}}
}
\newcommand\CalcBinomC[4]{%npab
- \def\BorneInf{#3}\def\BorneSup{#4}
+ \def\BorneInf{#3}\def\BorneSup{#4}%
\ifthenelse{\equal{#3}{*}}%
- {\def\BorneInf{0}}
- {}
+ {\def\BorneInf{0}}%
+ {}%
\ifthenelse{\equal{#4}{*}}%
- {\def\BorneSup{#1}}
- {}
- \xintFloatToDecimal{\xintfloateval{add(binomial(#1,i)*#2^i*(1-#2)^(#1-i), i=\BorneInf..\BorneSup)}}
+ {\def\BorneSup{#1}}%
+ {}%
+ \xintFloatToDecimal{\xintfloateval{add(binomial(#1,i)*#2^i*(1-#2)^(#1-i), i=\BorneInf..\BorneSup)}}%
}
\newcommand\CalcGeomP[2]{%pk
- \xintFloatToDecimal{\xintfloateval{(1-#1)^(#2-1)*(#1)}}
+ \xintFloatToDecimal{\xintfloateval{(1-#1)^(#2-1)*(#1)}}%
}
\newcommand\CalcGeomC[3]{%pab
- \def\BorneInf{#2}\def\BorneSup{#3}
+ \def\BorneInf{#2}\def\BorneSup{#3}%
\ifthenelse{\equal{#2}{*}}%
- {\def\BorneInf{1}}
- {}
+ {\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)}}
+ {\def\BorneSup{\fpeval{trunc(1/#1*10,0)}}}%
+ {}%
+ \xintFloatToDecimal{\xintfloateval{add((1-#1)^(i-1)*(#1), i=\BorneInf..\BorneSup)}}%
}
\newcommand\CalcHypergeomP[4]{%Nnmk
- \xintFloatToDecimal{\xintfloateval{binomial(#3,#4)*binomial(#1-#3,#2-#4)/binomial(#1,#2)}}
+ \xintFloatToDecimal{\xintfloateval{binomial(#3,#4)*binomial(#1-#3,#2-#4)/binomial(#1,#2)}}%
}
\newcommand\CalcHypergeomC[5]{%Nnmab
- \def\BorneInf{#4}\def\BorneSup{#5}
+ \def\BorneInf{#4}\def\BorneSup{#5}%
\ifthenelse{\equal{#4}{*}}%
- {\def\BorneInf{0}}
- {}
+ {\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)}}
+ {\def\BorneSup{#1}}%
+ {}%
+ \xintFloatToDecimal{\xintfloateval{add(binomial(#3,i)*binomial(#1-#3,#2-i)/binomial(#1,#2), i=\BorneInf..\BorneSup)}}%
}
\newcommand\CalcPoissP[2]{%lk
- \xintFloatToDecimal{\xintfloateval{exp(-#1)*#1^#2/factorial(#2)}}
+ \xintFloatToDecimal{\xintfloateval{exp(-#1)*#1^#2/factorial(#2)}}%
}
\newcommand\CalcPoissC[3]{%lab
- \def\BorneInf{#2}\def\BorneSup{#3}
+ \def\BorneInf{#2}\def\BorneSup{#3}%
\ifthenelse{\equal{#2}{*}}%
- {\def\BorneInf{0}}
- {}
+ {\def\BorneInf{0}}%
+ {}%
\ifthenelse{\equal{#3}{*}}%
- {\def\BorneSup{10*#1}}
- {}
- \xintFloatToDecimal{\xintfloateval{add(exp(-#1)*#1^i/factorial(i), i=\BorneInf..\BorneSup)}}
+ {\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 :=
@@ -72,25 +72,25 @@
\newcommand\CalcNormC[4]{%msab
%def des bornes de l'intervalle suivant l'absence de a ou de b...
- \def\BorneInf{#3}\def\BorneSup{#4}
+ \def\BorneInf{#3}\def\BorneSup{#4}%
\ifthenelse{\equal{#3}{*}}%
- {\def\BorneInf{#4-10*#2}}
- {}
+ {\def\BorneInf{#4-10*#2}}%
+ {}%
\ifthenelse{\equal{#4}{*}}%
- {\def\BorneSup{#3+10*#2}}
- {}
- \xintFloatToDecimal{\xintfloateval{Phi((\BorneSup-#1)/#2)-Phi((\BorneInf-#1)/#2)}}
+ {\def\BorneSup{#3+10*#2}}%
+ {}%
+ \xintFloatToDecimal{\xintfloateval{Phi((\BorneSup-#1)/#2)-Phi((\BorneInf-#1)/#2)}}%
}
%calculs "simples" fiabilite
\newcommand\CalcExpoC[3]{%lab
\def\BorneInf{#2}\def\BorneSup{#3}
\ifthenelse{\equal{#2}{*}}%
- {\def\BorneInf{0}}
- {}
+ {\def\BorneInf{0}}%
+ {}%
\ifthenelse{\equal{#3}{*}}%
- {\def\BorneSup{100/#1}}
- {}
- \xintFloatToDecimal{\xintfloateval{exp(-#1*\BorneInf)-exp(-#1*\BorneSup)}}
+ {\def\BorneSup{100/#1}}%
+ {}%
+ \xintFloatToDecimal{\xintfloateval{exp(-#1*\BorneInf)-exp(-#1*\BorneSup)}}%
}
%calculs formatés
@@ -97,54 +97,54 @@
\NewDocumentCommand{\BinomP}{ 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[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)}}}
- }
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(binomial(#3,#5)*#4^#5*(1-#4)^(#3-#5),#2)}}}%
+ }%
}
\NewDocumentCommand{\BinomC}{ s O{3} m m m m }{%*=sci,2=prec,3=n,4=p,5=a,6=b
- \def\BorneInf{#5}\def\BorneSup{#6}
+ \def\BorneInf{#5}\def\BorneSup{#6}%
\ifthenelse{\equal{#5}{*}}%
- {\def\BorneInf{0}}
- {}
+ {\def\BorneInf{0}}%
+ {}%
\ifthenelse{\equal{#6}{*}}%
- {\def\BorneSup{#3}}
- {}
+ {\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[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)}}}
- }
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#3,i)*#4^i*(1-#4)^(#3-i), i=\BorneInf..\BorneSup),#2)}}}%
+ }%
}
\NewDocumentCommand{\GeomP}{ 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[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)}}}
- }
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round((1-#3)^(#4-1)*(#3),#2)}}}%
+ }%
}
\NewDocumentCommand{\GeomC}{ s O{3} m m m }{%*=sci,2=prec,3=p,4=a,5=b
- \def\BorneInf{#4}\def\BorneSup{#5}
+ \def\BorneInf{#4}\def\BorneSup{#5}%
\ifthenelse{\equal{#4}{*}}%
- {\def\BorneInf{1}}
- {}
+ {\def\BorneInf{1}}%
+ {}%
\ifthenelse{\equal{#5}{*}}%
- {\def\BorneSup{\fpeval{trunc(1/#3*10,0)}}}
- {}
+ {\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[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)}}}
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add((1-#3)^(i-1)*(#3), i=\BorneInf..\BorneSup),#2)}}}%
}
}
@@ -151,91 +151,91 @@
\NewDocumentCommand{\HypergeomP}{ 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[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)}}}
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(binomial(#5,#6)*binomial(#3-#5,#4-#6)/binomial(#3,#4),#2)}}}%
}
}
\NewDocumentCommand{\HypergeomC}{ 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}
+ \def\BorneInf{#6}\def\BorneSup{#7}%
\ifthenelse{\equal{#6}{*}}%
- {\def\BorneInf{0}}
- {}
+ {\def\BorneInf{0}}%
+ {}%
\ifthenelse{\equal{#7}{*}}%
- {\def\BorneSup{#3}}
- {}
+ {\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[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{\PoissonP}{ 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[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)}}}
- }
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3)*#3^#4/factorial(#4),#2)}}}%
+ }%
}
\NewDocumentCommand{\PoissonC}{ s O{3} m m m }{%*=ing,2=prec,3=lbda,4=a,5=b
- \def\BorneInf{#4}\def\BorneSup{#5}
+ \def\BorneInf{#4}\def\BorneSup{#5}%
\ifthenelse{\equal{#4}{*}}%
- {\def\BorneInf{0}}
- {}
+ {\def\BorneInf{0}}%
+ {}%
\ifthenelse{\equal{#5}{*}}%
- {\def\BorneSup{10*#3}}
- {}
+ {\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[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)}}}
- }
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(exp(-#3)*#3^i/factorial(i), i=\BorneInf..\BorneSup),#2)}}}%
+ }%
}
\NewDocumentCommand{\NormaleC}{ 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}
+ \def\BorneInf{#5}\def\BorneSup{#6}%
\ifthenelse{\equal{#5}{*}}%
- {\def\BorneInf{#6-10*#4}}
- {}
+ {\def\BorneInf{#6-10*#4}}%
+ {}%
\ifthenelse{\equal{#6}{*}}%
- {\def\BorneSup{#5+10*#4}}
- {}
+ {\def\BorneSup{#5+10*#4}}%
+ {}%
\IfBooleanTF{#1}%
{%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(Phi((\BorneSup-#3)/#4)-Phi((\BorneInf-#3)/#4),#2)}}}
+ \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)}}}
- }
+ \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(Phi((\BorneSup-#3)/#4)-Phi((\BorneInf-#3)/#4),#2)}}}%
+ }%
}
\NewDocumentCommand{\ExpoC}{ s O{3} m m m }{%*=ing,2=prec,3=lbda,4=a,5=b
- \def\BorneInf{#4}\def\BorneSup{#5}
+ \def\BorneInf{#4}\def\BorneSup{#5}%
\ifthenelse{\equal{#4}{*}}%
- {\def\BorneInf{0}}
- {}
+ {\def\BorneInf{0}}%
+ {}%
\ifthenelse{\equal{#5}{*}}%
- {\def\BorneSup{100/#3}}
- {}
+ {\def\BorneSup{100/#3}}%
+ {}%
\IfBooleanTF{#1}%
{%
- \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3*\BorneInf)-exp(-#3*\BorneSup),#2)}}}
+ \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)}}}}
- }
+ }%
}
%%------ARBRESPROBAS
More information about the tex-live-commits
mailing list.