%%%
% Somme des angles
%%%
\def\filedateSommeAngles{2025/12/23}%
\def\fileversionSommeAngles{0.1}%
\message{-- \filedateSommeAngles\space v\fileversionSommeAngles}%
%
\setKVdefault[ClesSommeAngle]{Detail,Isocele=false,Rectangle=false,Figure=false,FigureSeule=false,Angle=0,Perso=false,Echelle=1cm,SansNom=false}%

\def\MPFigureSommeAngle#1#2#3#4#5{%
  % #1 Premier sommet
  % #2 Deuxi\`eme sommet
  % #3 Troisi\`eme sommet
  % #4 1er angle
  % #5 2eme angle
  \mplibforcehmode%
  \begin{mplibcode}%
    pair A,B,C,O,I;%
    u:=\useKV[ClesSommeAngle]{Echelle};
    Angle:=\useKV[ClesSommeAngle]{Angle};
    boolean Rectangle,Isocele;
    Rectangle=\useKV[ClesSommeAngle]{Rectangle};%
    Isocele=\useKV[ClesSommeAngle]{Isocele};
    A=u*(1,1);
    B-A=u*(4,0);
    if Rectangle:
      C=3/5[B,rotation(A,B,-90)];
    else:
      C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]);
    fi;
    O=CentreCercleC(A,B,C);
    % On tourne pour \'eventuellement moins de lassitude :)
    A:=rotation(A,O,Angle);
    B:=rotation(B,O,Angle);
    C:=rotation(C,O,Angle);
    I=CentreCercleI(A,B,C);
    % on dessine \`a main lev\'ee :)
    path triangle;
    triangle=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}--B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}--C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}--cycle;
    % pour marquer les angles
    path cc;
    cc=fullcircle scaled 1u;
    picture MAngle;
    path cd; pair M[];
    MAngle=image(%
      if Isocele:%
        if Rectangle:
          trace codeperp(A,B,C,5);
          cd=A--CentreCercleI(A,B,C);
          M1=cd intersectionpoint (cc shifted A);
          trace 9/10[A,M1]--11/10[A,M1];
          cd:=C--CentreCercleI(A,B,C);
          M1:=cd intersectionpoint (cc shifted C);
          trace 9/10[C,M1]--11/10[C,M1];
        else:
          cd=B--CentreCercleI(A,B,C);
          M1=cd intersectionpoint (cc shifted B);
          trace 9/10[B,M1]--11/10[B,M1];
          cd:=C--CentreCercleI(A,B,C);
          M1:=cd intersectionpoint (cc shifted C);
          trace 9/10[C,M1]--11/10[C,M1];
        fi;
      fi;
      if Rectangle:
        trace codeperp(A,B,C,5);
      else:
        draw (cc shifted B);
      fi;
      draw (cc shifted A);
      draw (cc shifted C);
    );
    draw MAngle;
    clip currentpicture to triangle;
    draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
    draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
    draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
    % on labelise
    label(btex #1 etex,1.2[O,A]);
    label(btex #2 etex,1.2[O,B]);
    label(btex #3 etex,1.2[O,C]);
    % Codage
    if Isocele:
      marque_s:=marque_s/2;
      if Rectangle:
        draw Codelongueur(A,B,B,C,2);
      else:
        draw Codelongueur(A,B,A,C,2);
      fi;
      marque_s:=marque_s*2;
    fi;
    % Affichage des angles:
    if Isocele:
      if Rectangle:
        label(btex ? etex,A+0.95u*unitvector(I-A));
      else:
        if #4>#5:%Cas où b est vide donc on affiche la mesure commune
          label(btex $\ang{#4}$ etex,A+0.95u*unitvector(I-A));
          label(btex ? etex,B+0.95u*unitvector(I-B));
        else:
          label(btex $\ang{#5}$ etex,B+0.95u*unitvector(I-B));
          label(btex ? etex,A+0.95u*unitvector(I-A));
        fi;
      fi;
    else:
      if Rectangle:
        if #4>#5:
          label(btex $\ang{#4}$ etex,C+0.95u*unitvector(I-C));
        else:
          label(btex $\ang{#5}$ etex,C+0.95u*unitvector(I-C));
        fi;
      else:
        label(btex $\ang{#4}$ etex,B+0.95u*unitvector(I-B));
        label(btex $\ang{#5}$ etex,C+0.95u*unitvector(I-C));
      fi;
      label(btex ? etex,A+0.95u*unitvector(I-A));
    fi;
  \end{mplibcode}%
}%

\makeatletter
\newcounter{PfC@AngleConnu}

\NewDocumentCommand\SommeAngles{om}{%
  \setcounter{PfC@AngleConnu}{0}%
  \useKVdefault[ClesSommeAngle]%
  \setKV[ClesSommeAngle]{#1}%
  \edef\PfC@LectureArgument{#2}%
  \setsepchar{,}\ignoreemptyitems%
  \readlist*\PfC@ListeAngles{\PfC@LectureArgument}%
  \reademptyitems%
  \edef\PfC@SommeIntermediaire{0}%
  \StrCount{\PfC@ListeAngles[1]}{?}[\PfC@NBetoilesA]%
  \StrCount{\PfC@ListeAngles[2]}{?}[\PfC@NBetoilesB]%
  \StrCount{\PfC@ListeAngles[3]}{?}[\PfC@NBetoilesC]%
  \StrCut{\PfC@ListeAngles[1]}{=}{\PfC@NomAngleA}{\PfC@NomValeurA}%
  \StrCut{\PfC@ListeAngles[2]}{=}{\PfC@NomAngleB}{\PfC@NomValeurB}%
  \StrCut{\PfC@ListeAngles[3]}{=}{\PfC@NomAngleC}{\PfC@NomValeurC}%
  \edef\NomTriangle{\PfC@NomAngleA}%
  \edef\PfC@AngleConnuA{0}%
  \edef\PfC@AngleConnuB{0}%
  \ifnum\PfC@NBetoilesA=0\relax%
    \edef\PfC@SommeIntermediaire{\fpeval{\PfC@SommeIntermediaire+\PfC@NomValeurA}}%
    \stepcounter{PfC@AngleConnu}%
    \expandafter\edef\csname PfC@AngleConnu\Alph{PfC@AngleConnu}\endcsname{\PfC@NomValeurA}%
    \expandafter\edef\csname PfC@NomConnu\Alph{PfC@AngleConnu}\endcsname{\PfC@NomAngleA}%
  \fi%
  \ifnum\PfC@NBetoilesB=0\relax%
    \edef\PfC@SommeIntermediaire{\fpeval{\PfC@SommeIntermediaire+\PfC@NomValeurB}}%
    \stepcounter{PfC@AngleConnu}%
    \expandafter\edef\csname PfC@AngleConnu\Alph{PfC@AngleConnu}\endcsname{\PfC@NomValeurB}%
    \expandafter\edef\csname PfC@NomConnu\Alph{PfC@AngleConnu}\endcsname{\PfC@NomAngleB}%
  \fi%
  \ifnum\PfC@NBetoilesC=0\relax%
    \edef\PfC@SommeIntermediaire{\fpeval{\PfC@SommeIntermediaire+\PfC@NomValeurC}}%
    \stepcounter{PfC@AngleConnu}%
    \expandafter\edef\csname PfC@AngleConnu\Alph{PfC@AngleConnu}\endcsname{\PfC@NomValeurC}%
    \expandafter\edef\csname PfC@NomConnu\Alph{PfC@AngleConnu}\endcsname{\PfC@NomAngleC}%
  \fi%
  \edef\PfC@SommeEtoiles{\fpeval{\PfC@NBetoilesA+\PfC@NBetoilesB+\PfC@NBetoilesC}}%
  % Triangle rectangle ?
  \edef\PfC@TriangleRectangleReconnu{0}%
  \ifnum\PfC@AngleConnuA=90\relax%
    \edef\PfC@TriangleRectangleReconnu{1}%
    \edef\PfCAngleIntermediaire{\PfC@AngleConnuB}%
    \IfStrEqCase{90}{%
      {\PfC@NomValeurA}{%
        \StrMid{\PfC@NomAngleA}{2}{2}[\PfC@SommetAngleRectangle]%
      }%
      {\PfC@NomValeurB}{%
        \StrMid{\PfC@NomAngleB}{2}{2}[\PfC@SommetAngleRectangle]%
      }%
      {\PfC@NomValeurC}{%
        \StrMid{\PfC@NomAngleC}{2}{2}[\PfC@SommetAngleRectangle]%
      }%
    }%
  \else%
    \ifnum\PfC@AngleConnuB=90\relax%
      \edef\PfC@TriangleRectangleReconnu{1}%
      \IfStrEqCase{90}{%
        {\PfC@NomValeurA}{%
          \StrMid{\PfC@NomAngleA}{2}{2}[\PfC@SommetAngleRectangle]%
        }%
        {\PfC@NomValeurB}{%
          \StrMid{\PfC@NomAngleB}{2}{2}[\PfC@SommetAngleRectangle]%
        }%
        {\PfC@NomValeurC}{%
          \StrMid{\PfC@NomAngleC}{2}{2}[\PfC@SommetAngleRectangle]%
        }%
      }%
      \edef\PfCAngleIntermediaire{\PfC@AngleConnuA}%
    \fi%
  \fi%
  \ifnum\PfC@SommeEtoiles=1\relax%
    \xdef\ResultatAngle{\fpeval{180-\PfC@SommeIntermediaire}}%
    \ifnum\PfC@TriangleRectangleReconnu=1\relax%
      \setKV[ClesSommeAngle]{Rectangle}%
      \xdef\ResultatAngle{\fpeval{180-\PfC@SommeIntermediaire}}%
      \IfStrEqCase{?}{%
        {\PfC@NomValeurA}{%
          \ifnum\PfC@NomValeurB=90\relax\StrMid{\PfC@NomAngleA}{2}{2}[\NomC]\StrMid{\PfC@NomAngleC}{2}{2}[\NomB]\else\StrMid{\PfC@NomAngleA}{2}{2}[\NomC]\StrMid{\PfC@NomAngleB}{2}{2}[\NomB]\fi%
          \edef\NomA{\PfC@SommetAngleRectangle}%
        }%
        {\PfC@NomValeurB}{%
          \ifnum\PfC@NomValeurA=90\relax\StrMid{\PfC@NomAngleB}{2}{2}[\NomC]\StrMid{\PfC@NomAngleC}{2}{2}[\NomB]\else\StrMid{\PfC@NomAngleB}{2}{2}[\NomC]\StrMid{\PfC@NomAngleA}{2}{2}[\NomB]\fi%
          \edef\NomA{\PfC@SommetAngleRectangle}%
        }%
        {\PfC@NomValeurC}{%
          \ifnum\PfC@NomValeurA=90\relax\StrMid{\PfC@NomAngleC}{2}{2}[\NomC]\StrMid{\PfC@NomAngleB}{2}{2}[\NomB]\else\StrMid{\PfC@NomAngleC}{2}{2}[\NomC]\StrMid{\PfC@NomAngleA}{2}{2}[\NomB]\fi%
          \edef\NomA{\PfC@SommetAngleRectangle}%
        }%
      }%
      \ifboolKV[ClesSommeAngle]{FigureSeule}{%
        \MPFigureSommeAngle{\NomC}{\NomA}{\NomB}{0}{\PfCAngleIntermediaire}%
      }{%
        \ifboolKV[ClesSommeAngle]{Figure}{%
          \begin{multicols}{2}
            {\em La figure est donn\'ee \`a titre indicatif.}%
            \[\MPFigureSommeAngle{\NomC}{\NomA}{\NomB}{0}{\PfCAngleIntermediaire}\]%
            \par\columnbreak\par
            \PfC@RedactionSommeAngleRectangle%
          \end{multicols}
        }{%
          \PfC@RedactionSommeAngleRectangle%
        }%
      }%
    \else%
      \ifnum\PfC@AngleConnuA=\PfC@AngleConnuB\relax%Cas du triangle isocèle où on connait les angles à la base
        \setKV[ClesSommeAngle]{Isocele}%
        \xdef\ResultatAngle{\fpeval{180-\PfC@SommeIntermediaire}}%
        \edef\PfCAngleIntermediaire{\PfC@AngleConnuA}%
        \IfStrEqCase{1}{%
          {\PfC@NBetoilesA}{\StrMid{\PfC@NomAngleA}{2}{2}[\PfC@SommetAngleIso]%
            \StrMid{\PfC@NomAngleA}{1}{1}[\NomB]%
            \StrMid{\PfC@NomAngleA}{3}{3}[\NomC]%
            \edef\NomA{\PfC@SommetAngleIso}%
          }%
          {\PfC@NBetoilesB}{\StrMid{\PfC@NomAngleB}{2}{2}[\PfC@SommetAngleIso]%
            \StrMid{\PfC@NomAngleB}{1}{1}[\NomB]%
            \StrMid{\PfC@NomAngleB}{3}{3}[\NomC]%
            \edef\NomA{\PfC@SommetAngleIso}%
          }%
          {\PfC@NBetoilesC}{\StrMid{\PfC@NomAngleC}{2}{2}[\PfC@SommetAngleIso]%
            \StrMid{\PfC@NomAngleC}{1}{1}[\NomB]%
            \StrMid{\PfC@NomAngleC}{3}{3}[\NomC]%
            \edef\NomA{\PfC@SommetAngleIso}%
          }%
        }%
        \edef\PfCSommeIntermediaire{\PfC@SommeIntermediaire}%
        \ifboolKV[ClesSommeAngle]{FigureSeule}{%
          \MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{0}{\PfCAngleIntermediaire}%
        }{%
          \ifboolKV[ClesSommeAngle]{Figure}{%
            \begin{multicols}{2}
              {\em La figure est donn\'ee \`a titre indicatif.}%
              \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{0}{\PfCAngleIntermediaire}\]%
              \par\columnbreak\par
              \PfC@RedactionSommeAngleIsoSimple%
            \end{multicols}
          }{%
            \PfC@RedactionSommeAngleIsoSimple%
          }%
        }%
      \else%
        \IfStrEqCase{?}{%
          {\PfC@NomValeurA}{%
            \StrMid{\PfC@NomAngleA}{2}{2}[\NomB]%
            \StrMid{\PfC@NomAngleB}{2}{2}[\NomA]%
            \StrMid{\PfC@NomAngleC}{2}{2}[\NomC]%
          }%
          {\PfC@NomValeurB}{%
            \StrMid{\PfC@NomAngleA}{2}{2}[\NomA]%
            \StrMid{\PfC@NomAngleB}{2}{2}[\NomB]%
            \StrMid{\PfC@NomAngleC}{2}{2}[\NomC]%
          }%
          {\PfC@NomValeurC}{%
            \StrMid{\PfC@NomAngleA}{2}{2}[\NomA]%
            \StrMid{\PfC@NomAngleB}{2}{2}[\NomC]%
            \StrMid{\PfC@NomAngleC}{2}{2}[\NomB]%
          }%
        }%
        \edef\PfCAngleIntermediaireA{\PfC@AngleConnuA}%
        \edef\PfCAngleIntermediaireB{\PfC@AngleConnuB}%
        \ifboolKV[ClesSommeAngle]{FigureSeule}{%
          \MPFigureSommeAngle{\NomB}{\NomA}{\NomC}{\PfCAngleIntermediaireA}{\PfCAngleIntermediaireB}%
        }{%
          \ifboolKV[ClesSommeAngle]{Figure}{%
            \begin{multicols}{2}
              {\em La figure est donn\'ee \`a titre indicatif.}%
              \[\MPFigureSommeAngle{\NomB}{\NomA}{\NomC}{\PfCAngleIntermediaireA}{\PfCAngleIntermediaireB}\]%
              \par\columnbreak\par
              \PfC@RedactionSommeAngleGenerale%
            \end{multicols}
          }{%
            \PfC@RedactionSommeAngleGenerale%
          }%
        }%
      \fi%
    \fi%
  \else%
    \ifnum\PfC@SommeEtoiles=2\relax%
      \setKV[ClesSommeAngle]{Isocele}%
      \ifnum\PfC@TriangleRectangleReconnu=1\relax\setKV[ClesSommeAngle]{Rectangle}\fi%
      \xdef\ResultatAngle{\fpeval{90-\PfC@SommeIntermediaire/2}}%
      \IfStrEqCase{0}{%
        {\PfC@NBetoilesA}{\StrMid{\PfC@NomAngleA}{2}{2}[\PfC@SommetAngleIso]
          \StrMid{\PfC@NomAngleA}{1}{1}[\NomC]%
          \ifnum\PfC@TriangleRectangleReconnu=1\relax%
            \StrMid{\PfC@NomAngleA}{3}{3}[\NomA]%
            \edef\NomB{\PfC@SommetAngleIso}%
          \else%
            \StrMid{\PfC@NomAngleA}{3}{3}[\NomB]%
            \edef\NomA{\PfC@SommetAngleIso}%
          \fi%
        }%
        {\PfC@NBetoilesB}{\StrMid{\PfC@NomAngleB}{2}{2}[\PfC@SommetAngleIso]%
          \StrMid{\PfC@NomAngleB}{3}{3}[\NomC]%
          \ifnum\PfC@TriangleRectangleReconnu=1\relax
            \StrMid{\PfC@NomAngleB}{1}{1}[\NomA]%
            \edef\NomB{\PfC@SommetAngleIso}%
          \else%
            \StrMid{\PfC@NomAngleB}{1}{1}[\NomB]%
            \edef\NomA{\PfC@SommetAngleIso}%
          \fi%
        }%
        {\PfC@NBetoilesC}{\StrMid{\PfC@NomAngleC}{2}{2}[\PfC@SommetAngleIso]%
          \StrMid{\PfC@NomAngleC}{3}{3}[\NomC]%
          \ifnum\PfC@TriangleRectangleReconnu=1\relax%
            \StrMid{\PfC@NomAngleC}{1}{1}[\NomA]%
            \edef\NomB{\PfC@SommetAngleIso}%
          \else%
            \StrMid{\PfC@NomAngleC}{1}{1}[\NomB]%
            \edef\NomA{\PfC@SommetAngleIso}%
          \fi%
        }%
      }%
      \edef\PfCSommeIntermediaire{\PfC@SommeIntermediaire}%
      \ifboolKV[ClesSommeAngle]{FigureSeule}{%
        \MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{\PfCSommeIntermediaire}{0}%
      }{%
        \ifboolKV[ClesSommeAngle]{Figure}{%
          \begin{multicols}{2}
            {\em La figure est donn\'ee \`a titre indicatif.}%
            \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{\PfCSommeIntermediaire}{0}\]%
            \par\columnbreak\par
            \PfC@RedactionSommeAngleIsoDouble%
          \end{multicols}
        }{%
          \PfC@RedactionSommeAngleIsoDouble%
        }%
      }%
    \fi%
  \fi%
}%

\def\RedactionSomme{}

\NewDocumentCommand\PfC@RedactionIntro{}{%
  \ifboolKV[ClesSommeAngle]{Perso}{\RedactionSomme}{%
    Dans le triangle $\PfC@NomAngleA$, \ifboolKV[ClesSommeAngle]{Isocele}{\ifnum\PfC@TriangleRectangleReconnu=1\relax rectangle \fi isocèle en $\PfC@SommetAngleIso$, }{\ifboolKV[ClesSommeAngle]{Rectangle}{rectangle en $\PfC@SommetAngleRectangle$, }{}}on a :
  }%
}%

\NewDocumentCommand\PfC@RedactionSommeAngleIsoDouble{}{%
  \ifboolKV[ClesSommeAngle]{SansNom}{}{\PfC@RedactionIntro}%
  \ifnum\PfC@TriangleRectangleReconnu=1\relax%
    \ifboolKV[ClesSommeAngle]{SansNom}{%
      \begin{align*}
        2\times?&=\ang{90}\\
        ?&=\ang{45}
      \end{align*}
    }{%
      \begin{align*}
        2\times\IfStrEq{\PfC@NomValeurA}{?}{\widehat{\PfC@NomAngleA}}{\IfStrEq{\PfC@NomValeurB}{?}{\widehat{\PfC@NomAngleB}}{}}&=\ang{90}\\
        \IfStrEq{\PfC@NomValeurA}{?}{\widehat{\PfC@NomAngleA}}{\IfStrEq{\PfC@NomValeurB}{?}{\widehat{\PfC@NomAngleB}}{}}&=\ang{45}
      \end{align*}
    }%
  \else%
    \ifboolKV[ClesSommeAngle]{SansNom}{%
      \begin{align*}
        2\times?+\ang{\PfC@SommeIntermediaire}&=\ang{180}\\
        \ifboolKV[ClesSommeAngle]{Detail}{%
        2\times?&=\ang{180}-\ang{\PfC@SommeIntermediaire}\\}{}
        2\times?&=\ang{\fpeval{180-\PfC@SommeIntermediaire}}\\
        ?&=\frac{\ang{\fpeval{180-\PfC@SommeIntermediaire}}}2\\
        ?&=\ang{\fpeval{90-\PfC@SommeIntermediaire/2}}
      \end{align*}
    }{%
      \begin{align*}
        \widehat{\PfC@NomAngleA}+\widehat{\PfC@NomAngleB}+\widehat{\PfC@NomAngleC}&=\ang{180}\\
        2\times\IfStrEq{\PfC@NomValeurA}{?}{\widehat{\PfC@NomAngleA}}{\IfStrEq{\PfC@NomValeurB}{?}{\widehat{\PfC@NomAngleB}}{}}+\ang{\PfC@SommeIntermediaire}&=\ang{180}\\
        \ifboolKV[ClesSommeAngle]{Detail}{%
        2\times\IfStrEq{\PfC@NomValeurA}{?}{\widehat{\PfC@NomAngleA}}{\IfStrEq{\PfC@NomValeurB}{?}{\widehat{\PfC@NomAngleB}}{}}&=\ang{180}-\ang{\PfC@SommeIntermediaire}\\}{}
        2\times\IfStrEq{\PfC@NomValeurA}{?}{\widehat{\PfC@NomAngleA}}{\IfStrEq{\PfC@NomValeurB}{?}{\widehat{\PfC@NomAngleB}}{}}&=\ang{\fpeval{180-\PfC@SommeIntermediaire}}\\
        \IfStrEq{\PfC@NomValeurA}{?}{\widehat{\PfC@NomAngleA}}{\IfStrEq{\PfC@NomValeurB}{?}{\widehat{\PfC@NomAngleB}}{}}&=\frac{\ang{\fpeval{180-\PfC@SommeIntermediaire}}}2\\
        \IfStrEq{\PfC@NomValeurA}{?}{\widehat{\PfC@NomAngleA}}{\IfStrEq{\PfC@NomValeurB}{?}{\widehat{\PfC@NomAngleB}}{}}&=\ang{\fpeval{90-\PfC@SommeIntermediaire/2}}
      \end{align*}
    }%
  \fi%
}%

\NewDocumentCommand\PfC@RedactionSommeAngleRectangle{}{%
  \ifboolKV[ClesSommeAngle]{SansNom}{}{\PfC@RedactionIntro}%
  \ifboolKV[ClesSommeAngle]{SansNom}{%
    \begin{align*}
      ?+\ifnum\PfC@AngleConnuA=90\relax\ang{\PfC@AngleConnuB}\else\ang{\PfC@AngleConnuA}\fi&=\ang{90}\\
      ?&=\ifboolKV[ClesSommeAngle]{Detail}{%\\
      \ang{90}-\ifnum\PfC@AngleConnuA=90\relax\ang{\PfC@AngleConnuB}\else\ang{\PfC@AngleConnuA}\fi\\
      }{\ang{\ResultatAngle}}%
      \ifboolKV[ClesSommeAngle]{Detail}{%
      ?&=\ang{\ResultatAngle}%\\
      }{}%
    \end{align*}
  }{%
    \begin{align*}
      \IfStrEq{\PfC@NomValeurA}{?}{\widehat{\PfC@NomAngleA}}{\IfStrEq{\PfC@NomValeurB}{?}{\widehat{\PfC@NomAngleB}}{\widehat{\PfC@NomAngleC}}}+\ifnum\PfC@AngleConnuA=90\relax\widehat{\PfC@NomConnuB}\else\widehat{\PfC@NomConnuA}\fi&=\ang{90}\\
      \IfStrEq{\PfC@NomValeurA}{?}{\widehat{\PfC@NomAngleA}}{\IfStrEq{\PfC@NomValeurB}{?}{\widehat{\PfC@NomAngleB}}{\widehat{\PfC@NomAngleC}}}+\ifnum\PfC@AngleConnuA=90\relax\ang{\PfC@AngleConnuB}\else\ang{\PfC@AngleConnuA}\fi&=\ang{90}\\
      \IfStrEq{\PfC@NomValeurA}{?}{\widehat{\PfC@NomAngleA}}{\IfStrEq{\PfC@NomValeurB}{?}{\widehat{\PfC@NomAngleB}}{\widehat{\PfC@NomAngleC}}}&=\ifboolKV[ClesSommeAngle]{Detail}{%\\
      \ang{90}-\ifnum\PfC@AngleConnuA=90\relax\ang{\PfC@AngleConnuB}\else\ang{\PfC@AngleConnuA}\fi\\
      }{\ang{\ResultatAngle}}%
      \ifboolKV[ClesSommeAngle]{Detail}{%
      \IfStrEq{\PfC@NomValeurA}{?}{\widehat{\PfC@NomAngleA}}{\IfStrEq{\PfC@NomValeurB}{?}{\widehat{\PfC@NomAngleB}}{\widehat{\PfC@NomAngleC}}}&=\ang{\ResultatAngle}%\\
      }{}%
    \end{align*}
  }%
}%

\NewDocumentCommand\PfC@RedactionSommeAngleIsoSimple{}{%
  \ifboolKV[ClesSommeAngle]{SansNom}{}{\PfC@RedactionIntro}%
  \ifboolKV[ClesSommeAngle]{SansNom}{%
    \begin{align*}
      ?+2\times\ang{\PfC@AngleConnuA}&=\ang{180}\\
      ?+\ang{\fpeval{2*\PfC@AngleConnuA}}&=\ang{180}\\
      ?&=\ifboolKV[ClesSommeAngle]{Detail}{%\\
      \ang{180}-\ang{\fpeval{2*\PfC@AngleConnuA}}\\
      }{\ang{\ResultatAngle}}%
      \ifboolKV[ClesSommeAngle]{Detail}{%
      ?&=\ang{\ResultatAngle}%\\
      }{}%
    \end{align*}
  }{%
    \begin{align*}
      \widehat{\PfC@NomAngleA}+\widehat{\PfC@NomAngleB}+\widehat{\PfC@NomAngleC}&=\ang{180}\\
      \IfStrEq{\PfC@NomValeurA}{?}{\widehat{\PfC@NomAngleA}}{\IfStrEq{\PfC@NomValeurB}{?}{\widehat{\PfC@NomAngleB}}{\widehat{\PfC@NomAngleC}}}+2\times\ang{\PfC@AngleConnuA}&=\ang{180}\\
      \IfStrEq{\PfC@NomValeurA}{?}{\widehat{\PfC@NomAngleA}}{\IfStrEq{\PfC@NomValeurB}{?}{\widehat{\PfC@NomAngleB}}{\widehat{\PfC@NomAngleC}}}+\ang{\fpeval{2*\PfC@AngleConnuA}}&=\ang{180}\\
      \IfStrEq{\PfC@NomValeurA}{?}{\widehat{\PfC@NomAngleA}}{\IfStrEq{\PfC@NomValeurB}{?}{\widehat{\PfC@NomAngleB}}{\widehat{\PfC@NomAngleC}}}&=\ifboolKV[ClesSommeAngle]{Detail}{%\\
      \ang{180}-\ang{\fpeval{2*\PfC@AngleConnuA}}\\
      }{\ang{\ResultatAngle}}%
      \ifboolKV[ClesSommeAngle]{Detail}{%
      \IfStrEq{\PfC@NomValeurA}{?}{\widehat{\PfC@NomAngleA}}{\IfStrEq{\PfC@NomValeurB}{?}{\widehat{\PfC@NomAngleB}}{\widehat{\PfC@NomAngleC}}}&=\ang{\ResultatAngle}%\\
      }{}%
    \end{align*}
  }%
}%

\NewDocumentCommand\PfC@RedactionSommeAngleGenerale{}{%
  \ifboolKV[ClesSommeAngle]{SansNom}{}{\PfC@RedactionIntro}%
  \ifboolKV[ClesSommeAngle]{SansNom}{%
    \begin{align*}
      \IfStrEq{\PfC@NomValeurA}{?}{?}{\ang{\PfC@NomValeurA}}+\IfStrEq{\PfC@NomValeurB}{?}{?}{\ang{\PfC@NomValeurB}}+\IfStrEq{\PfC@NomValeurC}{?}{?}{\ang{\PfC@NomValeurC}}&=\ang{180}\\
      ?+\ang{\PfC@SommeIntermediaire}&=\ang{180}\\
      ?&=\ifboolKV[ClesSommeAngle]{Detail}{\ang{180}-\ang{\PfC@SommeIntermediaire}}{\ang{\ResultatAngle}}%\\
      \ifboolKV[ClesSommeAngle]{Detail}{\\%
      ?&=\ang{\ResultatAngle}
         }{}
    \end{align*}
  }{%
    \begin{align*}
      \widehat{\PfC@NomAngleA}+\widehat{\PfC@NomAngleB}+\widehat{\PfC@NomAngleC}&=\ang{180}\\
      \IfStrEq{\PfC@NomValeurA}{?}{\widehat{\PfC@NomAngleA}}{\ang{\PfC@NomValeurA}}+\IfStrEq{\PfC@NomValeurB}{?}{\widehat{\PfC@NomAngleB}}{\ang{\PfC@NomValeurB}}+\IfStrEq{\PfC@NomValeurC}{?}{\widehat{\PfC@NomAngleC}}{\ang{\PfC@NomValeurC}}&=\ang{180}\\
      \IfStrEqCase{?}{%
      {\PfC@NomValeurA}{\widehat{\PfC@NomAngleA}+\ang{\PfC@SommeIntermediaire}}%
      {\PfC@NomValeurB}{\widehat{\PfC@NomAngleB}+\ang{\PfC@SommeIntermediaire}}%
      {\PfC@NomValeurC}{\ang{\PfC@SommeIntermediaire}+\widehat{\PfC@NomAngleC}}%
      }&=\ang{180}\\
      \IfStrEqCase{?}{%
      {\PfC@NomValeurA}{\widehat{\PfC@NomAngleA}}%
      {\PfC@NomValeurB}{\widehat{\PfC@NomAngleB}}%
      {\PfC@NomValeurC}{\widehat{\PfC@NomAngleC}}%
      }&=\ifboolKV[ClesSommeAngle]{Detail}{\ang{180}-\ang{\PfC@SommeIntermediaire}}{\ang{\ResultatAngle}}%\\
      \ifboolKV[ClesSommeAngle]{Detail}{\\%
      \IfStrEqCase{?}{%
      {\PfC@NomValeurA}{\widehat{\PfC@NomAngleA}}%
      {\PfC@NomValeurB}{\widehat{\PfC@NomAngleB}}%
      {\PfC@NomValeurC}{\widehat{\PfC@NomAngleC}}%
      }&=\ang{\ResultatAngle}
         }{}
    \end{align*}
  }%
}%
\makeatother

\NewDocumentCommand\RedactionSom{ommm}{%
  % #1 : nom du triangle pA pB pC
  % #2 : mesure de l'angle pApBpC
  % #3 : mesure de l'angle pBpCpA
  \useKVdefault[ClesSommeAngle]%
  \setKV[ClesSommeAngle]{#1}%
  \ifboolKV[ClesSommeAngle]{SansNom}{%
    \ifboolKV[ClesSommeAngle]{Rectangle}{%
      \ifboolKV[ClesSommeAngle]{Isocele}{%
        \ifx\bla#3\bla%
          \begin{align*}
            2\times?&=\ang{90}\\%
            \ifboolKV[ClesSommeAngle]{Detail}{?&=\frac{\ang{90}}{2}\\}{?&=\ang{45}}%\\
            \ifboolKV[ClesSommeAngle]{Detail}{?&=\ang{45}}{}%
          \end{align*}%
        \fi%
      }{%
        \ifx\bla#3\bla%
          \begin{align*}
            ?+\ang{#4}&=\ang{90}\\%
            \xdef\totalangle{\fpeval{90-#4}}\ifboolKV[ClesSommeAngle]{Detail}{?&=\ang{90}-\ang{#4}\\}{?&=\ang{\totalangle}}%\\
            \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomB\NomA\NomC}&=\ang{\totalangle}}{}%
          \end{align*}%
        \fi%
      }%
    }{%
      \ifboolKV[ClesSommeAngle]{Isocele}{%
        \ifx\bla#4\bla%
          \begin{align*}%
            2\times\ang{#3}+?&=\ang{180}\\%
            \xdef\sommeangle{\fpeval{2*#3}}\xdef\totalangle{\fpeval{180-\sommeangle}}\ang{\sommeangle}+?&=\ang{180}\\%
            \ifboolKV[ClesSommeAngle]{Detail}{?&=\ang{180}-\ang{\sommeangle}\\}{?&=\ang{\totalangle}}%\\
            \ifboolKV[ClesSommeAngle]{Detail}{?&=\ang{\totalangle}}{}%
          \end{align*}%
          \xdef\ResultatAngle{\totalangle}%
        \else%
          \begin{align*}%
            2\times?+\ang{#4}&=\ang{180}\\%
            \xdef\totalangle{\fpeval{180-#4}}%
            \ifboolKV[ClesSommeAngle]{Detail}{2\times?&=\ang{180}-\ang{#4}\\}{2\times?=\ang{\totalangle}\\}%
            \ifboolKV[ClesSommeAngle]{Detail}{2\times?&=\ang{\totalangle}\\}{?&=\frac{\ang{\totalangle}}{2}\\}%
            \ifboolKV[ClesSommeAngle]{Detail}{?&=\frac{\ang{\totalangle}}{2}\\}{?&=\ang{\fpeval{0.5*(180-#4)}}}%\\
            \ifboolKV[ClesSommeAngle]{Detail}{?&=\ang{\fpeval{0.5*(180-#4)}}}{}%
          \end{align*}%
          \xdef\ResultatAngle{\fpeval{0.5*(180-#4)}}%
        \fi%
      }{%
        \begin{align*}%
          \ang{#3}+\ang{#4}+?&=\ang{180}\\%
          \xdef\sommeangle{\fpeval{#3+#4}}\xdef\totalangle{\fpeval{180-\sommeangle}}\ang{\sommeangle}+?&=\ang{180}\\%
          \ifboolKV[ClesSommeAngle]{Detail}{?&=\ang{180}-\ang{\sommeangle}\\}{?&=\ang{\totalangle}}%\\
          \ifboolKV[ClesSommeAngle]{Detail}{?&=\ang{\totalangle}}{}%
        \end{align*}%
        \xdef\ResultatAngle{\totalangle}%
      }%
    }%
  }{%
    % On r\'ecup\`ere les noms des sommets.
    \StrMid{#2}{1}{1}[\NomA]%
    \StrMid{#2}{2}{2}[\NomB]%
    \StrMid{#2}{3}{3}[\NomC]%
    \xdef\NomTriangle{\NomA\NomB\NomC}%
    \xdef\NomSommetB{\NomB}%
    \xdef\NomSommetA{\NomA}%
    \xdef\NomSommetC{\NomC}%
    % On r\'edige
    \ifboolKV[ClesSommeAngle]{Perso}{\RedactionSomme}{Dans le triangle $\NomA\NomB\NomC$, \ifboolKV[ClesSommeAngle]{Rectangle}{ rectangle \ifboolKV[ClesSommeAngle]{Isocele}{isocèle }{}en $\NomB$, }{\ifboolKV[ClesSommeAngle]{Isocele}{ isoc\`ele en $\NomA$, }{}}%
              on a :}%
    \ifboolKV[ClesSommeAngle]{Rectangle}{%
    \ifboolKV[ClesSommeAngle]{Isocele}{%
      \ifx\bla#3\bla%
      \begin{align*}
        2\times\widehat{\NomB\NomA\NomC}&=\ang{90}\\%
        \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomB\NomA\NomC}&=\frac{\ang{90}}{2}\\}{\widehat{\NomA\NomB\NomC}&=\ang{45}}%
      \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomB\NomA\NomC}&=\ang{45}}{}%
      \end{align*}%
      \fi%
    }{%
      \ifx\bla#3\bla%
      \begin{align*}
        \widehat{\NomB\NomA\NomC}+\widehat{\NomB\NomC\NomA}&=\ang{90}\\%
        \widehat{\NomB\NomA\NomC}+\ang{#4}&=\ang{90}\\%
        \xdef\totalangle{\fpeval{90-#4}}\ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomB\NomA\NomC}&=\ang{90}-\ang{#4}\\}{\widehat{\NomB\NomA\NomC}&=\ang{\totalangle}}%
      \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomB\NomA\NomC}&=\ang{\totalangle}}{}%
      \end{align*}%
      \fi%
    }%
  }{%
    \ifboolKV[ClesSommeAngle]{Isocele}{%
      \ifx\bla#4\bla%
      \begin{align*}%
        \widehat{\NomA\NomB\NomC}+\widehat{\NomB\NomC\NomA}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\%
        2\times\ang{#3}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\%
        \xdef\sommeangle{\fpeval{2*#3}}\xdef\totalangle{\fpeval{180-\sommeangle}}\ang{\sommeangle}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\%
        \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomC\NomA\NomB}&=\ang{180}-\ang{\sommeangle}\\}{\widehat{\NomC\NomA\NomB}&=\ang{\totalangle}}%\\
    \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomC\NomA\NomB}&=\ang{\totalangle}}{}%
      \end{align*}%
      \xdef\ResultatAngle{\totalangle}%
      \else%
      \begin{align*}%
        \widehat{\NomA\NomB\NomC}+\widehat{\NomB\NomC\NomA}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\%
        2\times\widehat{\NomA\NomB\NomC}+\ang{#4}&=\ang{180}\\%
        \xdef\totalangle{\fpeval{180-#4}}%
        \ifboolKV[ClesSommeAngle]{Detail}{2\times\widehat{\NomA\NomB\NomC}&=\ang{180}-\ang{#4}\\}{2\times\widehat{\NomA\NomB\NomC}&=\ang{\totalangle}\\}%
        \ifboolKV[ClesSommeAngle]{Detail}{2\times\widehat{\NomA\NomB\NomC}&=\ang{\totalangle}\\}{\widehat{\NomA\NomB\NomC}&=\frac{\ang{\totalangle}}{2}\\}%
        \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomA\NomB\NomC}&=\frac{\ang{\totalangle}}{2}\\}{\widehat{\NomA\NomB\NomC}&=\ang{\fpeval{0.5*(180-#4)}}}%\\
        \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomA\NomB\NomC}&=\ang{\fpeval{0.5*(180-#4)}}}{}%
      \end{align*}%
      \xdef\ResultatAngle{\fpeval{0.5*(180-#4)}}%
      \fi%
    }{%
      \begin{align*}%
        \widehat{\NomA\NomB\NomC}+\widehat{\NomB\NomC\NomA}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\%
        \ang{#3}+\ang{#4}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\%
        \xdef\sommeangle{\fpeval{#3+#4}}\xdef\totalangle{\fpeval{180-\sommeangle}}\ang{\sommeangle}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\%
        \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomC\NomA\NomB}&=\ang{180}-\ang{\sommeangle}\\}{\widehat{\NomC\NomA\NomB}&=\ang{\totalangle}}%\\
        \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomC\NomA\NomB}&=\ang{\totalangle}}{}%
      \end{align*}%
      \xdef\ResultatAngle{\totalangle}%
    }%
  }%
  }%
}%

% \newcommand\SommeAngles[4][]{% Macro calculant la mesure de l'angle pCpApB
\NewDocumentCommand\SommeAnglesOld{ommm}{% Macro calculant la mesure de l'angle pCpApB
  % #1 : nom du triangle pA pB pC
  % #2 : mesure de l'angle pApBpC
  % #3 : mesure de l'angle pBpCpA
  \useKVdefault[ClesSommeAngle]%obligatoire car la macro n'est pas dans un groupe.
  \setKV[ClesSommeAngle]{#1}%lit les arguments optionnels
  % On r\'ecup\`ere les noms des sommets.
  \StrMid{#2}{1}{1}[\NomA]%
  \StrMid{#2}{2}{2}[\NomB]%
  \StrMid{#2}{3}{3}[\NomC]%
  % Figure ou pas ?
  \ifboolKV[ClesSommeAngle]{FigureSeule}{%
    \ifx\bla#3\bla%
      \MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#4}{0}%
    \else%
      \ifx\bla#4\bla%
        \MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{0}{#3}%
      \else%
        \MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#3}{#4}%
      \fi%
    \fi%
  }{%
    \ifboolKV[ClesSommeAngle]{Figure}{%
      \begin{multicols}{2}%
        {\em La figure est donn\'ee \`a titre indicatif.}%
        \ifx\bla#3\bla%
        \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#4}{0}\]%
        \else%
        \ifx\bla#4\bla%
        \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{0}{#3}\]%
        \else%
        \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#3}{#4}\]%
        \fi%
        \fi%
        \par\columnbreak\par%
        \RedactionSom[#1]{#2}{#3}{#4}%
      \end{multicols}%
    }{% on r\'edige
      \RedactionSom[#1]{#2}{#3}{#4}%
    }%
  }%
}%