diff options
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/PfCCalculsFractions.tex')
-rw-r--r-- | macros/latex/contrib/profcollege/latex/PfCCalculsFractions.tex | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/macros/latex/contrib/profcollege/latex/PfCCalculsFractions.tex b/macros/latex/contrib/profcollege/latex/PfCCalculsFractions.tex new file mode 100644 index 0000000000..94e3a8d120 --- /dev/null +++ b/macros/latex/contrib/profcollege/latex/PfCCalculsFractions.tex @@ -0,0 +1,177 @@ +\setKVdefault[CalculsFractions]{Couleur=Crimson} + +\NewDocumentCommand\tofrac{m}{% + \IfDecimal{#1}{#1}{% + \StrBefore{#1}{/}[\PfCnum]% + \StrBehind{#1}{/}[\PfCden]% + \frac{\PfCnum}{\PfCden}% + }% +}% + +\NewDocumentCommand\AddFraction{soommo}{% + \useKVdefault[CalculsFractions]% + \setKV[CalculsFractions]{#2}% + \IfBooleanTF{#1}{% + \xdef\PfCFractionOp{-}% + }{% + \xdef\PfCFractionOp{+}% + }% + \IfDecimal{#4}{% + \xdef\PfCNumA{#4}% + \xdef\PfCNumB{1}% + }{% + \StrCut{#4}{/}\PfCNumA\PfCNumB% + }% + \IfDecimal{#5}{% + \xdef\PfCNumC{#5}% + \xdef\PfCNumD{1}% + }{% + \StrCut{#5}{/}\PfCNumC\PfCNumD% + } + \xdef\PfCAddFoo{\PfCNumA/\PfCNumB,\PfCNumC/\PfCNumD}% + \setsepchar[*]{,*/}\ignoreemptyitems% + \readlist*\ListeFractions{\PfCAddFoo}% + \reademptyitems + \setsepchar{,}% + % Partie calculs + \PGCD{\ListeFractions[1,2]}{\ListeFractions[2,2]}% + \xdef\PfCPremierMul{\fpeval{\ListeFractions[2,2]/\the\pgcd}}% + \xdef\PfCDeuxiemeMul{\fpeval{\ListeFractions[1,2]/\the\pgcd}}% + \xdef\PfCAddNumFin{\fpeval{(\ListeFractions[1,1])*(\PfCPremierMul)\PfCFractionOp(\ListeFractions[2,1])*(\PfCDeuxiemeMul)}}% + \xdef\PfCAddDenoFin{\fpeval{(\ListeFractions[1,2])*(\PfCPremierMul)}}% + \PGCD{\fpeval{abs(\PfCAddNumFin)}}{\fpeval{abs(\PfCAddDenoFin)}}\xdef\PfCAddPgcd{\the\pgcd}% + \xdef\PfCAddNumSimp{\fpeval{\PfCAddNumFin/\PfCAddPgcd}}% + \xdef\PfCAddDenoSimp{\fpeval{\PfCAddDenoFin/\PfCAddPgcd}}% + \xdef\PfCAddSumSimp{\PfCAddNumSimp/\PfCAddDenoSimp}% + \IfValueT{#6}{\xdef#6{\PfCAddSumSimp}}% + % Partie affichage + \ensuremath{% + \IfValueTF{#3}{% + \ifnum#3=4\relax% + \tofrac{\PfCAddSumSimp}% + \else% + \ifnum#3=3\relax% + \SSimpliTest{\fpeval{abs(\PfCAddNumFin)}}{\fpeval{abs(\PfCAddDenoFin)}}\ifthenelse{\boolean{Simplification}}{\tofrac{\PfCAddNumFin/\PfCAddDenoFin}}{\tofrac{\PfCAddSumSimp}}% + \else% + \ifnum#3=1\relax% + \ifnum\PfCPremierMul>1\relax% + \frac{\ListeFractions[1,1]_{\times\num{\PfCPremierMul}}}{\ListeFractions[1,2]_{\times\num{\PfCPremierMul}}} + \else% + \tofrac{#4}% + \fi% + \PfCFractionOp% + \ifnum\PfCDeuxiemeMul>1\relax% + \frac{\ListeFractions[2,1]_{\times\num{\PfCDeuxiemeMul}}}{\ListeFractions[2,2]_{\times\num{\PfCDeuxiemeMul}}}% + \else% + \tofrac{#5}% + \fi% + \else% + \ifnum#3=2\relax% + \frac{\num{\fpeval{\ListeFractions[1,1]*\PfCPremierMul}}}{\num{\fpeval{\ListeFractions[1,2]*\PfCPremierMul}}}\PfCFractionOp\frac{\num{\fpeval{\ListeFractions[2,1]*\PfCDeuxiemeMul}}}{\num{\fpeval{\ListeFractions[2,2]*\PfCDeuxiemeMul}}}% + \fi% + \fi% + \fi% + \fi% + }{\tofrac{#4}\PfCFractionOp\tofrac{#5} + }% + }% +}% + +\NewDocumentCommand\SousFraction{oomm}{% + \AddFraction*[#1][#2]{#3}{#4}% +}% + +\NewDocumentCommand\MulFraction{oommo}{% + \useKVdefault[CalculsFractions]% + \setKV[CalculsFractions]{#1}% + \IfDecimal{#3}{% + \xdef\PfCNumA{#3}% + \xdef\PfCNumB{1}% + }{% + \StrCut{#3}{/}{\PfCNumA}{\PfCNumB}% + }% + \IfDecimal{#4}{% + \xdef\PfCNumC{#4}% + \xdef\PfCNumD{1}% + }{% + \StrCut{#4}{/}{\PfCNumC}{\PfCNumD}% + }% + \xdef\PfCMulFoo{\PfCNumA/\PfCNumB,\PfCNumC/\PfCNumD}% + \setsepchar[*]{,*/}\ignoreemptyitems% + \readlist*\ListeFractions{\PfCMulFoo}% + \reademptyitems + \setsepchar{,}% + % Calculs + \xdef\PfCMulNumFin{\fpeval{(\ListeFractions[1,1])*(\ListeFractions[2,1])}} + \xdef\PfCMulDenoFin{\fpeval{\ListeFractions[1,2]*\ListeFractions[2,2]}} + \PGCD{\fpeval{abs(\PfCMulNumFin)}}{\fpeval{abs(\PfCMulDenoFin)}}\xdef\PfCMulPgcd{\pgcd}% + \xdef\PfCMulNumSimp{\fpeval{\PfCMulNumFin/\PfCMulPgcd}}% + \xdef\PfCMulDenoSimp{\fpeval{\PfCMulDenoFin/\PfCMulPgcd}}% + \xdef\PfCMulPdtSimp{\PfCMulNumSimp/\PfCMulDenoSimp}% + \IfValueT{#5}{\xdef#5{\PfCMulPdtSimp}}% + \ensuremath{% + \IfValueTF{#2}{% + \ifnum#2=3\relax + \tofrac{\PfCMulPdtSimp}% + \else + \ifnum#2=2\relax% + \SSimpliTest{\PfCMulNumFin}{\PfCMulDenoFin}\ifthenelse{\boolean{Simplification}}{\frac{\ifnum\PfCMulNumFin<0\relax-\fi\Decomposition[Longue]{\fpeval{abs(\PfCMulNumFin)}}}{\ifnum\PfCMulDenoFin<0\relax-\fi\Decomposition[Longue]{\fpeval{abs(\PfCMulDenoFin)}}}}{\tofrac{\PfCMulPdtSimp}}% + \else% + \ifnum#2=1\relax% + \frac{\ListeFractions[1,1]\times\ifnum\ListeFractions[2,1]<0\relax(\fi\ListeFractions[2,1]\ifnum\ListeFractions[2,1]<0\relax)\fi}{\ListeFractions[1,2]\times\ifnum\ListeFractions[2,2]<0\relax(\fi\ListeFractions[2,2]\ifnum\ListeFractions[2,2]<0\relax)\fi} + \fi + \fi + \fi + }{\tofrac{#3}\times\tofrac{#4} + } + }% +}% + +\NewDocumentCommand\DivFraction{oommo}{% + \useKVdefault[CalculsFractions]% + \setKV[CalculsFractions]{#1}% + \IfDecimal{#3}{% + \xdef\PfCNumA{#3}% + \xdef\PfCNumB{1}% + }{% + \StrCut{#3}{/}{\PfCNumA}{\PfCNumB}% + }% + \IfDecimal{#4}{% + \xdef\PfCNumC{#4}% + \xdef\PfCNumD{1}% + }{% + \StrCut{#4}{/}{\PfCNumC}{\PfCNumD}% + }% + \xdef\PfCDivFoo{\PfCNumA/\PfCNumB,\PfCNumC/\PfCNumD}% + \setsepchar[*]{,*/}\ignoreemptyitems% + \readlist*\ListeFractions{\PfCDivFoo}% + \reademptyitems% + \setsepchar{,}% + % Calculs + \xdef\PfCDivNumFin{\fpeval{(\ListeFractions[1,1])*(\ListeFractions[2,2])}}% + \xdef\PfCDivDenoFin{\fpeval{\ListeFractions[1,2]*\ListeFractions[2,1]}}% + \PGCD{\fpeval{abs(\PfCDivNumFin)}}{\fpeval{abs(\PfCDivDenoFin)}}\xdef\PfCDivPgcd{\pgcd}% + \xdef\PfCDivNumSimp{\fpeval{\PfCDivNumFin/\PfCDivPgcd}}% + \xdef\PfCDivDenoSimp{\fpeval{\PfCDivDenoFin/\PfCDivPgcd}}% + \xdef\PfCDivPdtSimp{\PfCDivNumSimp/\PfCDivDenoSimp}% + \IfValueT{#5}{\xdef#5{\PfCDivPdtSimp}}% + \ensuremath{% + \IfValueTF{#2}{% + \ifnum#2=4\relax + \tofrac{\PfCDivPdtSimp}% + \else\ifnum#2=3\relax + \MulFraction[][\fpeval{#2-1}]{\ListeFractions[1,1]/\ListeFractions[1,2]}{\ListeFractions[2,2]/\ListeFractions[2,1]}% + \else + \ifnum#2=2\relax% + \MulFraction[][\fpeval{#2-1}]{\ListeFractions[1,1]/\ListeFractions[1,2]}{\ListeFractions[2,2]/\ListeFractions[2,1]}% + \else% + \ifnum#2=1\relax% + \tofrac{\ListeFractions[1,1]/\ListeFractions[1,2]}\times\tofrac{\ListeFractions[2,2]/\ListeFractions[2,1]} + \fi + \fi + \fi + \fi + }{\tofrac{#3}\div\tofrac{#4} + } + }% +}%
\ No newline at end of file |