summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex')
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex538
1 files changed, 538 insertions, 0 deletions
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex
new file mode 100644
index 0000000000..3676422441
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex
@@ -0,0 +1,538 @@
+% tkz-tool-eu-angles.tex
+% Copyright 2023 Alain Matthes
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+% This work has the LPPL maintenance status “maintained”.
+% The Current Maintainer of this work is Alain Matthes.
+
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tool-eu-angles.tex}
+\makeatletter
+%<--------------------------------------------------------------------------–>
+% tkzSetUpArc
+%<--------------------------------------------------------------------------–>
+\pgfkeys{/tkzsetuparc/.cd,
+ color/.store in = \tkz@arc@color,
+ line width/.store in = \tkz@arc@lw,
+ style/.store in = \tkz@arc@style,
+ line width = \tkz@euc@linewidth,
+ color = \tkz@euc@linecolor,
+ style = \tkz@euc@linestyle,
+ /tkzsetuparc/.search also = {/tikz,/tkzcompass},
+ }
+\def\tkzSetUpArc{\pgfutil@ifnextchar[{\tkz@SetUpArc}{\tkz@SetUpArc[]}}
+\def\tkz@SetUpArc[#1]{%
+\pgfqkeys{/tkzsetuparc}{#1}
+\tikzset{arc style/.style={color = \tkz@arc@color,
+ line width = \tkz@arc@lw,
+ style = \tkz@arc@style
+ }}
+}% end setup
+%<------------------------------ Arcs -------------------------------------–
+% options : delta
+% \def\tkz@delta{0}
+% \tikzset{arc style/.style={#1}}
+% \pgfkeys{/tikz/.cd,delta/.code={\def\tkz@delta{#1}}}
+\newif\iftkz@reverse
+\gdef\tkz@numa{0}
+\pgfkeys{/tkzdrawarc/.cd,
+ type/.is choice,
+ type/towards/.code = \def\tkz@numa{0},
+ type/rotate/.code = \def\tkz@numa{1},
+ type/angles/.code = \def\tkz@numa{2},
+ type/R/.code = \def\tkz@numa{3},
+ type/R with nodes/.code = \def\tkz@numa{4},
+ towards/.style = {type=towards},
+ rotate/.style = {type=rotate},
+ R/.style = {type=R},
+ angles/.style = {type=angles},
+ R with nodes/.style = {type=R with nodes},
+ diameter/.code = {},
+ arc/.code = {},
+ size/.code = {},
+ mark/.code = {},
+ mkpos/.code = {},
+ mksize/.code = {},
+ mkcolor/.code = {},
+ type/.default = towards,
+ delta/.store in = \tkz@delta,
+ delta = 0,
+ reverse/.is if = tkz@reverse,
+ reverse/.default = true,
+ reverse = false,
+ /tkzdrawarc/.search also = {/tikz}
+}
+\def\tkzDrawArc{\pgfutil@ifnextchar[{\tkz@DrawArc}{\tkz@DrawArc[]}}
+\def\tkz@DrawArc[#1](#2,#3)(#4){%
+\begingroup
+\pgfqkeys{/tkzdrawarc}{#1}
+\ifcase\tkz@numa%
+ \tkzDrawArcTowards[#1](#2,#3)(#4)
+\or% 1
+ \tkzDrawArcRotate[#1](#2,#3)(#4)
+\or% 2
+ \tkzDrawArcAngles[#1](#2,#3)(#4)
+\or% 3
+ \tkzDrawArcRAngles[#1](#2,#3)(#4)
+\or% 4
+ \tkzDrawArcR[#1](#2,#3)(#4)
+\fi
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% ARC nodes #2 center #3 first point last point #4
+% delta un peu plus à chaque extrémité
+% example : \tkzDrawArc(A,B)(C)
+%<--------------------------------------------------------------------------–>
+\def\tkzDrawArcTowards{\pgfutil@ifnextchar[{\tkz@DrawArcN}{\tkz@DrawArcN[]}}
+\def\tkz@DrawArcN[#1](#2,#3)(#4){%
+\begingroup
+ \tkz@@CalcLengthcm(#2,#3){tkz@radius}
+ \tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@FirstAngle}
+ \tkzFindSlopeAngle(#2,#4)\tkzGetAngle{tkz@SecondAngle}
+ \tkz@DrawArcRAngles[#1](#2,\tkz@radius)(\tkz@FirstAngle,\tkz@SecondAngle)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% nodes #2 center #3 first point rotate #4 with Angle
+% delta un peu plus à chaque extrémité
+% tkzDrawArcRotate(O,A)(60)
+%<--------------------------------------------------------------------------–>
+\def\tkzDrawArcRotate{\pgfutil@ifnextchar[{\tkz@DrawArcRotate}{%
+ \tkz@DrawArcRotate[]}}
+\def\tkz@DrawArcRotate[#1](#2,#3)(#4){%
+\begingroup
+ \tkz@@CalcLength(#2,#3){tkz@radius}
+ \tkzFindSlopeAngle(#2,#3) \tkzGetAngle{tkz@FirstA}
+ \pgfmathadd{\tkz@FirstA}{#4}
+ \edef\tkz@SecondA{\pgfmathresult}
+ \pgfmathgreaterthan{#4}{0}
+ \ifdim\pgfmathresult pt=1 pt\relax%
+ \tkz@DrawArcRAngles[#1](#2,\tkz@radius pt)(\tkz@FirstA,\tkz@SecondA)
+ \else
+ \tkz@DrawArcRAngles[#1](#2,\tkz@radius pt)(\tkz@SecondA,\tkz@FirstA)
+ \fi
+ \endgroup
+}
+%<--------------------------------------------------------------------------–>
+% deux angles
+% \tkzDrawArcAngles(O,A)(0,60)
+%<--------------------------------------------------------------------------–>
+\def\tkzDrawArcAngles{\pgfutil@ifnextchar[{\tkz@DrawArcAngles}{%
+ \tkz@DrawArcAngles[]}}
+\def\tkz@DrawArcAngles[#1](#2,#3)(#4,#5){%
+\begingroup
+ \tkz@@CalcLength(#2,#3){tkzLengthResult}
+ \tkz@DrawArcRAngles[#1](#2,\tkzLengthResult pt)(#4,#5)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Degree #2 center #4 - #3 radius from #5 (degree) to #6(degree)
+%<--------------------------------------------------------------------------–>
+\def\tkzDrawArcRwithNodes{\pgfutil@ifnextchar[{\tkz@DrawArcRwithNodes}{%
+ \tkz@DrawArcRwithNodes[]}}
+\def\tkz@DrawArcRwithNodes[#1](#2,#3,#4)(#5,#6){%
+\begingroup
+ \tkz@@CalcLength(#3,#4){tkzLengthResult}
+ \tkzFindSlopeAngle(#2,#5)\tkzGetAngle{tkz@FirstAngle}
+ \tkzFindSlopeAngle(#2,#6)\tkzGetAngle{tkz@SecondAngle}
+ \tkz@DrawArcRAngles[#1](#2,\tkzLengthResult)(\tkz@FirstAngle,\tkz@SecondAngle)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Nodes R #2 center #3 radius en cm from #4(node) to #5(node)
+% \tkzDrawArcR(O,2)(A,B)
+%<--------------------------------------------------------------------------–>
+\def\tkzDrawArcR{\pgfutil@ifnextchar[{\tkz@DrawArcR}{\tkz@DrawArcR[]}}
+\def\tkz@DrawArcR[#1](#2,#3)(#4,#5){%
+\begingroup
+ \tkzFindSlopeAngle(#2,#4)\tkzGetAngle{tkz@FirstAngle}
+ \tkzFindSlopeAngle(#2,#5)\tkzGetAngle{tkz@SecondAngle}
+ \tkz@DrawArcRAngles[#1](#2,#3)(\tkz@FirstAngle,\tkz@SecondAngle)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+%<--------------------------------------------------------------------------–>
+% #1 center #2 radius #4 first angle (degree) #5 second angle (degree)
+% angles 0 .. 180 or -180 .. 0
+%<--------------------------------------------------------------------------–>
+% example : \tkzDrawArc(A,2)(30,90)
+\def\tkzDrawArcRAngles{\pgfutil@ifnextchar[{\tkz@DrawArcRAngles}{%
+ \tkz@DrawArcRAngles[]}}
+\def\tkz@DrawArcRAngles[#1](#2,#3)(#4,#5){%
+ \begingroup
+ \tkzNormalizeAngle(#4,#5)
+ \pgfmathsubtract{\tkz@FirstAngle}{\tkz@delta}
+ \edef\tkz@FirstAngle{\pgfmathresult}%
+ \pgfmathadd{\tkz@SecondAngle}{\tkz@delta}
+ \edef\tkz@SecondAngle{\pgfmathresult}
+ \iftkz@reverse
+ \let\tkztemp\tkz@FirstAngle
+ \let\tkz@FirstAngle\tkz@SecondAngle
+ \let\tkz@SecondAngle\tkztemp
+ \fi
+ \draw[shift = {(#2)},arc style,/tkzdrawarc/.cd,#1]%
+ (\tkz@FirstAngle:#3) arc (\tkz@FirstAngle:\tkz@SecondAngle:#3);
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\pgfkeys{
+ /@tkzmarkarc/.cd,
+ pos/.store in = \tkz@mkarcpos,
+ color/.store in = \tkz@mkcolor,
+ mark/.store in = \tkz@markarcseg,
+ size/.store in = \tkz@mkarcsize,
+ color = teal!20,
+ size = 4pt,
+ pos = .5,
+ mark = none,
+ /@tkzmarkarc/.search also={/tikz},
+}
+\def\tkzMarkArc{\pgfutil@ifnextchar[{\tkz@MarkArc}{\tkz@MarkArc[]}}
+\def\tkz@MarkArc[#1](#2,#3,#4){%
+\begingroup
+ \pgfqkeys{/@tkzmarkarc}{#1} \def\tkz@mymarkarc{\pgfsetplotmarksize{\tkz@mkarcsize}\pgfuseplotmark{\tkz@markarcseg}}
+\tkz@@CalcLength(#2,#3){tkz@radius}
+\tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@FirstAngle}
+\tkzFindSlopeAngle(#2,#4)\tkzGetAngle{tkz@SecondAngle}
+\tkzNormalizeAngle(\tkz@FirstAngle,\tkz@SecondAngle)
+ \pgfmathsubtract{\tkz@FirstAngle}{\tkz@delta}
+ \edef\tkz@FirstAngle{\pgfmathresult}%
+ \pgfmathadd{\tkz@SecondAngle}{\tkz@delta}
+ \edef\tkz@SecondAngle{\pgfmathresult}
+\begin{scope}[decoration={markings,mark=at position \tkz@mkarcpos with {\tkz@mymarkarc}}]
+\path[shift = {(#2)},\tkz@mkcolor,/@tkzmarkarc/.cd,#1,postaction={decorate}]%
+(\tkz@FirstAngle:\tkz@radius pt) arc (\tkz@FirstAngle:\tkz@SecondAngle:\tkz@radius pt);
+\end{scope}
+\endgroup
+}
+
+\def\tkzLabelArc{\pgfutil@ifnextchar[{\tkz@LabelArc}{\tkz@LabelArc[]}}
+\def\tkz@LabelArc[#1](#2,#3,#4)#5{%
+\begingroup
+\pgfqkeys{/@tkzmarkarc}{#1}
+\tkz@@CalcLength(#2,#3){tkz@radius}
+\tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@FirstAngle}
+\tkzFindSlopeAngle(#2,#4)\tkzGetAngle{tkz@SecondAngle}
+\tkzNormalizeAngle(\tkz@FirstAngle,\tkz@SecondAngle)
+\pgfmathsubtract{\tkz@FirstAngle}{\tkz@delta}
+\edef\tkz@FirstAngle{\pgfmathresult}%
+\pgfmathadd{\tkz@SecondAngle}{\tkz@delta}
+\edef\tkz@SecondAngle{\pgfmathresult}
+\begin{scope}[decoration={markings,mark=at position \tkz@mkarcpos with \node{#5};}]
+ \path[shift = {(#2)},/@tkzmarkarc/.cd,#1,postaction={decorate}]%
+ (\tkz@FirstAngle:\tkz@radius pt) arc (\tkz@FirstAngle:\tkz@SecondAngle:\tkz@radius pt); \end{scope}
+\endgroup
+}
+%<--------------------------------------------------------------------------->
+% tkzDrawArcRAN >
+%<--------------------------------------------------------------------------->
+\def\tkzDrawArcRAN[#1](#2,#3)(#4,#5){%
+\begingroup
+ \draw[shift = {(#2)},/tkzdrawarc/.cd,#1] (#4:#3) arc (#4:#5:#3);
+\endgroup
+}
+%<--------------- tkzPathArcRAN ----------------------------------
+\def\tkzPathArcRAN[#1](#2,#3)(#4,#5){%
+\begingroup
+ \path[shift = {(#2)},/tkzdrawarc/.cd,#1] (#4:#3) arc (#4:#5:#3);
+\endgroup
+}
+%<--------------------------------------------------------------------------->
+% Mark an angle modi 3.03 suppression de \tkz@mksize,
+%<--------------------------------------------------------------------------->
+% \tkzMarkAngle(B, A, C)
+%
+% Marque d'angle
+% arc de cercle (simple/double/triple) et marque d'églité.
+%
+% Par défaut:
+% arc = simple
+% size = 1 (rayon de l'arc)
+% style traits pleins
+% mkpos ? position: 0.5 (position de la marque)
+% mark rien du tout (ignoré si type est utilisé)
+%
+% Paramètres (optionnels)
+% arc : l, ll, lll
+% mksize : 1
+% gap : 3pt
+% dist ?
+% style : type de traits
+% position: 0.5
+% mark : none , |, ||,|||, z, s, x, o, oo mais tous les
+% % symboles de tikz sont permis
+%<------------------------- Label on angle -------------------------------->
+\def\tkz@arcsimple{l}
+\def\tkz@arcdouble{ll}
+\def\tkz@arctriple{lll}
+
+%\tikzset{lbstyle/.style = {color=\tkz@mainlinecolor}}
+
+\pgfkeys{/tkzmkangle/.cd,
+ arc/.estore in = \tkz@arc,
+ size/.store in = \tkz@size,
+ mark/.store in = \tkz@markang,
+ mkpos/.estore in = \tkz@mkpos,
+ mksize/.store in = \tkz@mksize,
+ mkcolor/.store in = \tkz@mkcolor,
+ arc = l,
+ size = 1,
+ mark = none,
+ mksize = 4pt,
+ mkcolor = black,
+ mkpos = 0.5,
+ /tkzmkangle/.search also={/tikz}
+}
+\def\tkzMarkAngle{\pgfutil@ifnextchar[{\tkz@MarkAngle}{\tkz@MarkAngle[]}}
+\def\tkz@MarkAngle[#1](#2,#3,#4){%
+\begingroup
+\pgfqkeys{/tkzmkangle}{#1}
+\tkzFindSlopeAngle(#3,#2)\tkzGetAngle{tkz@dirOne}
+\tkzFindSlopeAngle(#3,#4)\tkzGetAngle{tkz@dirTwo}
+\tkzNormalizeAngle(\tkz@dirOne,\tkz@dirTwo)
+
+\def\tkz@mymark{\pgfsetplotmarksize{\tkz@mksize}\pgfuseplotmark{\tkz@markang}}
+% draw the arcs
+\begin{scope}[veclen]
+ \begin{scope}[decoration= {markings,
+ mark=at position \tkz@mkpos with {\tkz@mymark}}]
+ \ifx\tkz@arc\tkz@arcsimple
+ \tkzDrawArcRAN[#1,fill=none]%
+ (#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle)%
+ \tkzPathArcRAN[\tkz@mkcolor,postaction={decorate}]%
+ (#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle)
+ \else
+ \ifx\tkz@arc\tkz@arcdouble
+ \tkzDrawArcRAN[#1,fill=none](#3,\tkz@size cm-2.5\pgflinewidth)%
+ (\tkz@FirstAngle,\tkz@SecondAngle)
+ \tkzPathArcRAN[\tkz@mkcolor,postaction={decorate}]%
+ (#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle)%
+ \tkzDrawArcRAN[#1,fill=none](#3,\tkz@size cm+2.5\pgflinewidth)%
+ (\tkz@FirstAngle,\tkz@SecondAngle)%
+ \else
+ \ifx\tkz@arc\tkz@arctriple
+ \tkzDrawArcRAN[#1,fill=none]%
+ (#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle)%
+ \tkzPathArcRAN[\tkz@mkcolor,postaction={decorate}]%
+ (#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle)%
+ \tkzDrawArcRAN[#1,fill=none](#3,\tkz@size cm-2.5\pgflinewidth)%
+ (\tkz@FirstAngle,\tkz@SecondAngle)%
+ \tkzDrawArcRAN[#1,fill=none](#3,\tkz@size cm+2.5\pgflinewidth)%
+ (\tkz@FirstAngle,\tkz@SecondAngle)%
+ \fi
+ \fi
+ \fi
+ \end{scope}
+\end{scope}
+
+\endgroup
+}
+%<--------------------------------------------------------------------------->
+% multiple
+\def\tkz@multiMA#1 #2\@nil{%
+ \protected@edef\tkz@temp{
+ \noexpand \tkzMarkAngle[\tkz@optma](#1)}\tkz@temp%
+ \def\tkz@nextArg{#2}%
+ \ifx\tkzutil@empty\tkz@nextArg
+ \let\next\@gobble
+ \fi
+ \next#2\@nil
+}
+%<--------------------------------------------------------------------------->
+\def\tkzMarkAngles{\pgfutil@ifnextchar[{\tkz@MarkAngles}{\tkz@MarkAngles[]}}
+\def\tkz@MarkAngles[#1](#2){%
+\xdef\tkz@optma{#1}
+ \begingroup
+ \let\next\tkz@multiMA
+ \next#2 \@nil %
+\endgroup
+}
+% fin de \tkzMarkAngle
+%<--------------------------------------------------------------------------->
+% Pic Angle
+%<--------------------------------------------------------------------------->
+\def\tkzPicAngle{\pgfutil@ifnextchar[{\tkz@PicAngle}{\tkz@PicAngle[]}}
+\def\tkz@PicAngle[#1](#2,#3,#4){%
+\begingroup
+\draw pic [#1]{angle=#2--#3--#4};
+\endgroup
+}
+\def\tkzPicRightAngle{\pgfutil@ifnextchar[{\tkz@PicRightAngle}{\tkz@PicRightAngle[]}}
+\def\tkz@PicRightAngle[#1](#2,#3,#4){%
+\begingroup
+\draw pic [#1]{right angle=#2--#3--#4};
+\endgroup
+}
+%<--------------------------------------------------------------------------->
+% FillAngle
+%<--------------------------------------------------------------------------->
+\pgfkeys{/tkzFill/.cd,
+ size/.store in = \tkz@size,
+ size = 1,
+ /tkzFill/.search also = {/tikz}
+ }
+
+\def\tkzFillAngle{\pgfutil@ifnextchar[{\tkz@FillAngle}{\tkz@FillAngle[]}}
+\def\tkz@FillAngle[#1](#2,#3,#4){%
+\begingroup
+\pgfqkeys{/tkzFill}{#1}
+ \tkzFindSlopeAngle(#3,#2)\tkzGetAngle{tkz@dirOne}
+ \tkzFindSlopeAngle(#3,#4)\tkzGetAngle{tkz@dirTwo}
+ \tkzNormalizeAngle(\tkz@dirOne,\tkz@dirTwo)
+ \path[shift = {(#3)},fill=\tkz@euc@linecolor!10,/tkzFill/.cd,#1]%
+ (#3) -- (\tkz@FirstAngle:\tkz@size) arc%
+ (\tkz@FirstAngle:\tkz@SecondAngle:\tkz@size)--cycle;
+\endgroup
+}
+%<--------------------------------------------------------------------------->
+% multiple
+\def\tkz@multiFA#1 #2\@nil{\protected@edef\tkz@temp{%
+ \noexpand \tkzFillAngle[\tkz@optfa](#1)}%
+ \tkz@temp%
+ \def\tkz@nextArg{#2}%
+ \ifx\tkzutil@empty\tkz@nextArg
+ \let\next\@gobble
+ \fi
+ \next#2\@nil
+}
+%<--------------------------------------------------------------------------->
+\def\tkzFillAngles{\pgfutil@ifnextchar[{\tkz@MFillAngles}{\tkz@MFillAngles[]}}
+\def\tkz@MFillAngles[#1](#2){%
+\xdef\tkz@optfa{#1}
+\begingroup
+ \let\next\tkz@multiFA
+ \next#2 \@nil %
+\endgroup
+}
+%<------------------------- Label on angle -------------------------------->
+\pgfkeys{/tkzlabelangle/.cd,
+ dist/.store in = \tkzlabeldist,
+ angle/.store in = \tkzlabelangle,
+ dist = 1,
+ angle = {},
+ /tkzlabelangle/.search also={/tikz}
+}
+\def\tkzLabelAngle{\pgfutil@ifnextchar[{\tkz@LabelAngle}{\tkz@LabelAngle[]}}
+\def\tkz@LabelAngle[#1](#2,#3,#4)#5{%2016 added normalize from karu's code
+\begingroup
+ \pgfqkeys{/tkzlabelangle}{#1}
+ \ifx\tkzutil@empty\tkzlabelangle% no value so calc angle of bisector
+ \tkzFindSlopeAngle(#3,#2)\tkzGetAngle{tkz@dirOne}
+ \tkzFindSlopeAngle(#3,#4)\tkzGetAngle{tkz@dirTwo}
+ \tkzNormalizeAngle(\tkz@dirOne,\tkz@dirTwo)
+ \edef\tkzlabelAngle{\fpeval{(\tkz@SecondAngle+\tkz@FirstAngle)/2}}
+ \fi
+ \path (#3) --+(\tkzlabelAngle:\tkzlabeldist) node[label angle style,%
+ /tkzlabelangle/.cd,#1] {#5};
+\endgroup
+}
+%<--------------------------------------------------------------------------->
+%<--------------------------------------------------------------------------->
+% multiple labels
+\def\tkz@multiLBA#1 #2\@nil{%
+ \protected@edef\tkz@temp{
+ \noexpand \tkzLabelAngle[\tkz@optlba](#1){\tkz@labelangle}}\tkz@temp%
+ \def\tkz@nextArg{#2}%
+ \ifx\tkzutil@empty\tkz@nextArg
+ \let\next\@gobble
+ \fi
+ \next#2\@nil
+}
+% %<---------------------------------------------------------------------
+\def\tkzLabelAngles{\pgfutil@ifnextchar[{\tkz@LabelAngles}{%
+ \tkz@LabelAngles[]}}
+\def\tkz@LabelAngles[#1](#2)#3{%
+ \def\tkz@optlba{#1}
+ \def\tkz@labelangle{#3}
+ \begingroup
+ \let\next\tkz@multiLBA
+ \next#2 \@nil %
+ \endgroup
+}
+%<-----------------------------------------------------------------------
+% Symbole droites perpendiculaires
+%<----------------------------------------------------------------------
+\pgfkeys{/tkzrightangle/.cd,
+ norm tkz code/.is if = normtkzcode@execute,
+ german/.code = \normtkzcode@executefalse,
+ size/.store in = \tkz@ra@size,
+ dotsize/.store in = \tkz@dotsize,
+ size = .25,
+ dotsize = 3 pt,
+ /tkzrightangle/.search also={/tikz},
+}
+\newcommand*{\tkzMarkRightAngle}[1][]{\tkz@MarkRightAngle[#1]}
+\def\tkz@MarkRightAngle[#1](#2,#3,#4){%
+\begingroup
+\normtkzcode@executetrue
+\pgfqkeys{/tkzrightangle}{#1}
+ \tkzpointnormalised{\pgfpointdiff{\pgfpointanchor{#3}{center}}{%
+ \pgfpointanchor{#2}{center}}}
+ \tkz@ax=\pgf@x\relax%
+ \tkz@ay=\pgf@y\relax%
+ \tkzpointnormalised{\pgfpointdiff{\pgfpointanchor{#3}{center}}{%
+ \pgfpointanchor{#4}{center}}}
+ \tkz@bx=\pgf@x\relax%
+ \tkz@by=\pgf@y\relax%
+ \ifnormtkzcode@execute%
+ \draw[/tkzrightangle/.cd,#1]
+ (#3) --++( 28.45274*\tkz@ra@size\tkz@ax , 28.45274*\tkz@ra@size\tkz@ay)
+ --++( 28.45274*\tkz@ra@size\tkz@bx , 28.45274*\tkz@ra@size\tkz@by)
+ --++(-28.45274*\tkz@ra@size\tkz@ax ,-28.45274*\tkz@ra@size\tkz@ay)
+ -- (#3);
+ \else%
+ % find angles
+ \tkzFindSlopeAngle(#3,#2)\tkzGetAngle{tkz@dirOne}
+ \tkzFindSlopeAngle(#3,#4)\tkzGetAngle{tkz@dirTwo}
+ \tkzNormalizeAngle(\tkz@dirOne,\tkz@dirTwo)
+ \edef\tkzCircleAngle{\fpeval{(\tkz@SecondAngle+\tkz@FirstAngle)/2}}
+ \tkzDrawArcRAN[/tkzrightangle/.cd,#1](#3,\tkz@ra@size)%
+ (\tkz@FirstAngle,\tkz@SecondAngle)
+ \path (#3) --+ (\tkzCircleAngle:\tkz@ra@size/2)
+ node[fill,circle,minimum size=\tkz@dotsize,
+ inner sep=0 pt,/tkzrightangle/.cd,#1] {};
+\fi%
+\endgroup
+}
+%<--------------------------------------------------------------------------->
+\def\tkz@multiRA#1 #2\@nil{%
+\protected@edef\tkz@temp{
+ \noexpand \tkzMarkRightAngle[\tkz@optRA](#1)}\tkz@temp%
+\def\tkz@nextArg{#2}%
+ \ifx\tkzutil@empty\tkz@nextArg
+ \let\next\@gobble
+ \fi
+\next#2\@nil
+}
+%<--------------------------------------------------------------------------->
+\def\tkzMarkRightAngles{\pgfutil@ifnextchar[{\tkz@RightAngles}{%
+ \tkz@RightAngles[]}}
+\def\tkz@RightAngles[#1](#2){%
+\xdef\tkz@optRA{#1}
+\begingroup
+ \let\next\tkz@multiRA
+ \next#2 \@nil %
+\endgroup
+}
+%<--------------------------------------------------------------------------->
+% tkzdefMidArc center and two points
+\def\tkzDefMidArc(#1,#2,#3){%
+\begingroup
+\tkz@@CalcLength(#1,#2){tkz@radius}
+\tkzFindSlopeAngle(#1,#2)\tkzGetAngle{tkz@FirstAngle}
+\tkzFindSlopeAngle(#1,#3)\tkzGetAngle{tkz@SecondAngle}
+\tkzNormalizeAngle(\tkz@FirstAngle,\tkz@SecondAngle)
+ \path[shift = {(#1)}](\tkz@FirstAngle:\tkz@radius pt) arc
+ (\tkz@FirstAngle:\tkz@SecondAngle:\tkz@radius pt) coordinate[midway] (tkzPointResult);
+\endgroup
+}
+\makeatother
+
+\endinput \ No newline at end of file