summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/tkz
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-01-24 03:02:57 +0000
committerNorbert Preining <norbert@preining.info>2023-01-24 03:02:57 +0000
commitb06c6695162b493aeec3b594c6beb518c15c98ba (patch)
tree0c1dc3cfc73ea789d6bdc4673d776f3ef652d6d8 /macros/latex/contrib/tkz
parent4451a2090261307c963209bc65fea9fde4eceeea (diff)
CTAN sync 202301240302
Diffstat (limited to 'macros/latex/contrib/tkz')
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/README.md10
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-FAQ.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-angles.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-examples.tex36
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-labelling.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lua.tex22
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex17
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-marking.tex140
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-news.tex13
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-others.tex5
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-presentation.tex12
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-tools.tex7
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdfbin1109639 -> 1115481 bytes
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-angles.tex)88
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-circles.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-circles.tex)15
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-compass.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-compass.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-lines.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-lines.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-points.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-points.tex)9
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-polygons.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-polygons.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-protractor.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-protractor.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-sectors.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-sectors.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-show.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-show.tex)19
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-marks.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-lib-eu-marks.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-shape.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-lib-eu-shape.tex)10
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-circles.tex223
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-by.tex522
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-spc.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-spc.tex)117
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-with.tex269
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points.tex169
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-axesmin.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-axesmin.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles-by.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-circles-by.tex)11
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-circles.tex)18
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-grids.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-grids.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-lines.tex)12
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-by.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-by.tex)40
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-rnd.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-with.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-with.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-polygons.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-polygons.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-triangles.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-triangles.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg10
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty82
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-angles.tex102
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-base.tex89
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-intersections.tex525
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-math.tex417
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-BB.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-BB.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-angles.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-angles.tex)49
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-base.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-base.tex)10
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-colors.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-colors.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-intersections.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-intersections.tex)74
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-math.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-math.tex)43
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-modules.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-modules.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-text.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-text.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-utilities.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-utilities.tex)68
55 files changed, 2851 insertions, 544 deletions
diff --git a/macros/latex/contrib/tkz/tkz-euclide/README.md b/macros/latex/contrib/tkz/tkz-euclide/README.md
index 770c67d356..c476d7a07f 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/README.md
+++ b/macros/latex/contrib/tkz/tkz-euclide/README.md
@@ -1,6 +1,6 @@
# tkz-euclide — for euclidean geometry
-Release 4.25c 2022/09/23
+Release 5.00c 2023/01/23
## Description
@@ -41,16 +41,12 @@ To use the package `tkz-euclide`, place the following lines in the preamble of
your LaTeX document:
```
-\usepackage{tkz-euclide}
+\usepackage{tkz-euclide} or \usepackage[lua]{tkz-euclide}
\begin{document}
\begin{tikzpicture}
your code
\end{tikzpicture}
```
-
-The line `\usetkzobj{all}` is no longer required with `tkz-euclide` but you can use it with
-other packages.
-
If you use the `xcolor` package, load that package before `tkz-euclide` to avoid
package conflicts.
@@ -67,6 +63,8 @@ Other examples, in French, are on my site.
## History
+- 5.00c Added the "lua" option to the package, allowing to perform most of the calculations with "lua". This saves time and precision;
+
- 4.25c. Remove \input{tkz-obj-eu-draw-triangles.tex} from the list of files to load.
- 4.24c. Correction of a bug in the macro `\tkzMarkAngle`;
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-FAQ.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-FAQ.tex
index 8aee9b7021..97e137007e 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-FAQ.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-FAQ.tex
@@ -25,7 +25,7 @@
\item Do not mix the syntax of \tkzNamePack{pgfmath} and \tkzNamePack{xfp}. I've often chosen \tkzNamePack{xfp} but if you prefer pgfmath then do your calculations before passing parameters.
- \item Error "dimension too large" : In some cases, this error occurs. One way to avoid it is to use the "\tkzname{xfp}" option. When this option is used in an scope, the "veclen" function is replaced by a function dependent on "xfp". Do not use intersection macros in this scope. For example, an error occurs if you use the macro \tkzcname{tkzDrawArc}
+ \item Error "dimension too large" : In some cases, this error occurs. One way to avoid it is to use the "\tkzname{veclen}" option. When this option is used in an scope, the "veclen" function is replaced by a function dependent on "xfp". Do not use intersection macros in this scope. For example, an error occurs if you use the macro \tkzcname{tkzDrawArc}
with too small an angle. The error is produced by the \NameLib{decoration} library when you want to place a mark on an arc. Even if the mark is absent, the error is still present.
\end{itemize}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-angles.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-angles.tex
index d077256d8a..3ab43bd43e 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-angles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-angles.tex
@@ -20,7 +20,7 @@ Let us agree that an angle measured counterclockwise is positive.
\tkzname{Angles} are involved in several macros like \tkzcname{tkzDefPoint},\tkzcname{tkzDefPointBy[rotation = \dots]}, \tkzcname{tkzDrawArc}
and the next one \tkzcname{tkzGetAngle}. With the exception of the last one, all these macros accept negative angles.
- \begin{figure}[!h]
+ \begin{figure}[!ht]
\centering
\begin{tabular}{|c|c|}
\hline
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-examples.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-examples.tex
index 45a9be0f98..e436c406fe 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-examples.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-examples.tex
@@ -94,24 +94,24 @@ The figure below shows a semicircle, with diameter $AB$. A tangent line is drawn
\end{tikzpicture}%
\begin{tkzexample}[vbox,small]
-\begin{tikzpicture}[scale=.75]
- \tkzDefPoint(0,0){D} \tkzDefPoint(8,0){A}
- \tkzDefSquare(D,A) \tkzGetPoints{B}{C}
- \tkzDefMidPoint(D,A) \tkzGetPoint{E}
- \tkzInterLC(D,A)(E,B)\tkzGetSecondPoint{F}
- \tkzInterLC(A,B)(A,F)\tkzGetSecondPoint{G}
- \tkzDefSquare(A,F)\tkzGetFirstPoint{H}
- \tkzInterLL(C,D)(H,G)\tkzGetPoint{I}
- \tkzFillPolygon[teal!10](I,G,B,C)
- \tkzFillPolygon[teal!10](A,F,H,G)
- \tkzDrawArc[angles](E,B)(0,120)
- \tkzDrawSemiCircle(A,F)
- \tkzDrawSegments(A,F E,B H,I F,H)
- \tkzDrawPolygons(A,B,C,D)
- \tkzDrawPoints(A,...,I)
- \tkzLabelPoints[below right](A,E,D,F,I)
- \tkzLabelPoints[above right](C,B,G,H)
-\end{tikzpicture}
+ \begin{tikzpicture}[scale=.75]
+ \tkzDefPoint(0,0){D} \tkzDefPoint(8,0){A}
+ \tkzDefSquare(D,A) \tkzGetPoints{B}{C}
+ \tkzDefMidPoint(D,A) \tkzGetPoint{E}
+ \tkzInterLC(D,A)(E,B)\tkzGetSecondPoint{F}
+ \tkzInterLC[near](B,A)(A,F)\tkzGetFirstPoint{G}
+ \tkzDefSquare(A,F)\tkzGetFirstPoint{H}
+ \tkzInterLL(C,D)(H,G)\tkzGetPoint{I}
+ \tkzFillPolygon[teal!10](I,G,B,C)
+ \tkzFillPolygon[teal!10](A,F,H,G)
+ \tkzDrawArc[angles](E,B)(0,120)
+ \tkzDrawSemiCircle(A,F)
+ \tkzDrawSegments(A,F E,B H,I F,H)
+ \tkzDrawPolygons(A,B,C,D)
+ \tkzDrawPoints(A,...,I)
+ \tkzLabelPoints[below right](A,E,D,F,I)
+ \tkzLabelPoints[above right](C,B,G,H)
+ \end{tikzpicture}
\end{tkzexample}
\newpage
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-labelling.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-labelling.tex
index 4fbe35123c..f3c8a0b3da 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-labelling.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-labelling.tex
@@ -93,7 +93,7 @@ Here the points are positioned relative to the center of gravity of $A,B,C \text
\tkzDrawCircle(O,A)
\tkzDrawPoints(O,A,B,C)
\tkzDrawSegments(C,B B,A A,O O,C)
- \tkzDefCentroid(A,B,C,O)
+ \tkzDefTriangleCenter[centroid](A,B,C) \tkzGetPoint{O}
\tkzDrawPoint(tkzPointResult)
\tkzLabelPoints(O,A,C,B)
\end{tikzpicture}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lua.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lua.tex
new file mode 100644
index 0000000000..e5e9f999dd
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lua.tex
@@ -0,0 +1,22 @@
+\newpage
+\section{Working with lua : option \tkzname{lua}} \label{calc_with_lua}
+
+You can now use the "lua" option with \tkzname{\tkznameofpack} version 5.
+You just have to write in your preamble
+
+ |usepackage[lua]{tkz-euclide}|.
+ Évidemment vous devrez compiler avec LuaLaTeX. Nothing changes for the syntax.
+
+Without the option you can use \tkzname{\tkznameofpack} with the proposed code of version 4.25.
+
+This version is not yet finalized although the documentation you are currently reading has been compiled with this option.
+
+Some information about the method used and the results obtained. Concerning the method, I considered two possibilities. The first one was simply to replace everywhere I could the calculations made by "xfp" or sometimes by "lua". This is how I went from "fp" to "xfp" and now to "lua". The second and more ambitious possibility would have been to associate to each point a complex number and to make the calculations on the complexes with "lua". Unfortunately for that I have to use libraries for which I don't know the license.
+
+Otherwise the results are good. This documentation with "LualaTeX" and "xfp" compiles in 47s while with "lua" it takes only 30s for 236 pages.
+
+Another document of 61 pages is compiled 16s with "pdflaTeX" and "xfp" and 13s with "LualaTeX" and "xfp".
+
+This documentation compiles with |\usepackage{tkz-base}| and |\usepackage[lua]{tkz-euclide}| but I didn't test all the interactions thoroughly.
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex
index 9203b9e562..1f4e33dd60 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex
@@ -1,6 +1,6 @@
% !TEX TS-program = lualatex
% encoding : utf8
-% Documentation of tkz-euclide v4
+% Documentation of tkz-euclide v5
% Copyright 2022 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
@@ -22,10 +22,10 @@
]{tkz-doc}
%\usepackage{etoc}
\gdef\tkznameofpack{tkz-euclide}
-\gdef\tkzversionofpack{4.25c}
+\gdef\tkzversionofpack{5.00c}
\gdef\tkzdateofpack{\today}
\gdef\tkznameofdoc{doc-tkz-euclide}
-\gdef\tkzversionofdoc{4.25c}
+\gdef\tkzversionofdoc{5.00c}
\gdef\tkzdateofdoc{\today}
\gdef\tkzauthorofpack{Alain Matthes}
\gdef\tkzadressofauthor{}
@@ -37,7 +37,9 @@
% -- Packages ---------------------------------------------------
\usepackage[dvipsnames,svgnames]{xcolor}
\usepackage{calc}
-\usepackage{tkz-base,tkz-euclide,pgfornament}
+\usepackage{tkz-base}
+\usepackage[lua]{tkz-euclide}
+\usepackage{pgfornament}
\usetikzlibrary{backgrounds}
\usepackage[colorlinks,pdfencoding=auto, psdextra]{hyperref}
\hypersetup{
@@ -113,11 +115,11 @@
\begin{document}
\parindent=0pt
-\tkzTitleFrame{tkz-euclide\\Euclidean Geometry}
+\tkzTitleFrame{tkz-euclide v5\\Euclidean Geometry}
\clearpage
\defoffile{\lefthand\
-From version 4.00, \tkzname{\tkznameofpack} became independent from \tkzname{tkz-base} . This has implied some changes : the next major step will be the version 5 which will see the introduction of Lua. To prepare for this change, I removed the last macros that allowed to plot and define at the same time. Indeed Lua will be there to make all the calculations and define all the necessary nodes. As for \TIKZ\ , it will remain to carry out the tracings, the markings and the labels.\\
+\tkzname{\tkznameofpack} passes in version 5 with the possibility of carrying out part of the calculations using \tkzname{lua}. See the "news" and "lua" sections for more information.\\
\tkzname{\tkznameofpack} is a set of convenient macros for drawing in a plane (fundamental two-dimensional object) with a Cartesian coordinate system. It handles the most classic situations in Euclidean Geometry. \tkzname{\tkznameofpack} is built on top of PGF and its associated front-end \TIKZ\ and is a (La)TeX-friendly drawing package. The aim is to provide a high-level user interface to build graphics relatively simply. The idea is to allow you to follow step by step a construction that would be done by hand as naturally as possible.\\
English is not my native language so there might be some errors.
}
@@ -128,7 +130,7 @@ English is not my native language so there might be some errors.
\lefthand\ Firstly, I would like to thank \textbf{Till Tantau} for the beautiful \LaTeX{} package, namely \href{http://sourceforge.net/projects/pgf/}{\TIKZ}.
\vspace*{12pt}
-\lefthand\ Acknowledgements : I received much valuable advice, remarks, corrections and examples from \tkzimp{Jean-Côme Charpentier}, \tkzimp{Josselin Noirel}, \tkzimp{Manuel Pégourié-Gonnard}, \tkzimp{Franck Pastor}, \tkzimp{David Arnold}, \tkzimp{Ulrike Fischer}, \tkzimp{Stefan Kottwitz}, \tkzimp{Christian Tellechea}, \tkzimp{Nicolas Kisselhoff}, \tkzimp{David Arnold}, \tkzimp{Wolfgang Büchel}, \tkzimp{John Kitzmiller}, \tkzimp{Dimitri Kapetas}, \tkzimp{Gaétan Marris}, \tkzimp{Mark Wibrow}, \tkzimp{Yves Combe} for his work on a protractor, \tkzimp{Paul Gaborit}, \tkzimp{Laurent Van Deik} for all his corrections, remarks and questions and \tkzimp{Muzimuzhi Z} for the code about the option "dim".
+\lefthand\ Acknowledgements : I received much valuable advice, remarks, corrections and examples from \tkzimp{Jean-Côme Charpentier}, \tkzimp{Josselin Noirel}, \tkzimp{Manuel Pégourié-Gonnard}, \tkzimp{Franck Pastor}, \tkzimp{David Arnold}, \tkzimp{Ulrike Fischer}, \tkzimp{Stefan Kottwitz}, \tkzimp{Christian Tellechea}, \tkzimp{Nicolas Kisselhoff}, \tkzimp{David Arnold}, \tkzimp{Wolfgang Büchel}, \tkzimp{John Kitzmiller}, \tkzimp{Dimitri Kapetas}, \tkzimp{Gaétan Marris}, \tkzimp{Mark Wibrow}, \tkzimp{Yves Combe} for his work on a protractor, \tkzimp{Paul Gaborit}, \tkzimp{Laurent Van Deik} for all his corrections, remarks and questions and \tkzimp{Muzimuzhi Z} for the code about the option "dim". A big thank you to \tkzimp{Chetan Shirore} and \tkzimp{Dr. Ajit Kumar} because their work on complex numbers in their package \tkzimp{luamaths} helped me a lot.
\vspace*{12pt}
\lefthand\ I would also like to thank Eric Weisstein, creator of MathWorld:
@@ -152,6 +154,7 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch
\part{General survey : a brief but comprehensive review}
\input{TKZdoc-euclide-news.tex}
+\input{TKZdoc-euclide-lua.tex}
\input{TKZdoc-euclide-installation.tex}
\input{TKZdoc-euclide-presentation.tex}
\input{TKZdoc-euclide-elements.tex}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-marking.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-marking.tex
index c23d56a460..97bf596219 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-marking.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-marking.tex
@@ -126,118 +126,6 @@ More delicate operation because there are many options. The symbols used for mar
|, ||,|||, z, s, x, o, oo
\end{tkzltxexample}
-% Their definitions are as follows
-%
-% \begin{tkzltxexample}[]
-% \pgfdeclareplotmark{||}
-% %double bar
-% {%
-% \pgfpathmoveto{\pgfqpoint{2\pgflinewidth}{\pgfplotmarksize}}
-% \pgfpathlineto{\pgfqpoint{2\pgflinewidth}{-\pgfplotmarksize}}
-% \pgfpathmoveto{\pgfqpoint{-2\pgflinewidth}{\pgfplotmarksize}}
-% \pgfpathlineto{\pgfqpoint{-2\pgflinewidth}{-\pgfplotmarksize}}
-% \pgfusepathqstroke
-% }
-% \end{tkzltxexample}
-%
-% \begin{tkzltxexample}[]
-% %triple bar
-% \pgfdeclareplotmark{|||}
-% {%
-% \pgfpathmoveto{\pgfqpoint{0 pt}{\pgfplotmarksize}}
-% \pgfpathlineto{\pgfqpoint{0 pt}{-\pgfplotmarksize}}
-% \pgfpathmoveto{\pgfqpoint{-3\pgflinewidth}{\pgfplotmarksize}}
-% \pgfpathlineto{\pgfqpoint{-3\pgflinewidth}{-\pgfplotmarksize}}
-% \pgfpathmoveto{\pgfqpoint{3\pgflinewidth}{\pgfplotmarksize}}
-% \pgfpathlineto{\pgfqpoint{3\pgflinewidth}{-\pgfplotmarksize}}
-% \pgfusepathqstroke
-% }
-% \end{tkzltxexample}
-%
-% \begin{tkzltxexample}[]
-% % An bar slant
-% \pgfdeclareplotmark{s|}
-% {%
-% \pgfpathmoveto{\pgfqpoint{-.70710678\pgfplotmarksize}%
-% {-.70710678\pgfplotmarksize}}
-% \pgfpathlineto{\pgfqpoint{.70710678\pgfplotmarksize}%
-% {.70710678\pgfplotmarksize}}
-% \pgfusepathqstroke
-% }
-% \end{tkzltxexample}
-%
-%
-% \begin{tkzltxexample}[]
-% % An double bar slant
-% \pgfdeclareplotmark{s||}
-% {%
-% \pgfpathmoveto{\pgfqpoint{-0.75\pgfplotmarksize}{-\pgfplotmarksize}}
-% \pgfpathlineto{\pgfqpoint{0.25\pgfplotmarksize}{\pgfplotmarksize}}
-% \pgfpathmoveto{\pgfqpoint{0\pgfplotmarksize}{-\pgfplotmarksize}}
-% \pgfpathlineto{\pgfqpoint{1\pgfplotmarksize}{\pgfplotmarksize}}
-% \pgfusepathqstroke
-% }
-% \end{tkzltxexample}
-%
-%
-% \begin{tkzltxexample}[]
-% % z
-% \pgfdeclareplotmark{z}
-% {%
-% \pgfpathmoveto{\pgfqpoint{0.75\pgfplotmarksize}{-\pgfplotmarksize}}
-% \pgfpathlineto{\pgfqpoint{-0.75\pgfplotmarksize}{-\pgfplotmarksize}}
-% \pgfpathlineto{\pgfqpoint{0.75\pgfplotmarksize}{\pgfplotmarksize}}
-% \pgfpathlineto{\pgfqpoint{-0.75\pgfplotmarksize}{\pgfplotmarksize}}
-% \pgfusepathqstroke
-% }
-% \end{tkzltxexample}
-%
-% \begin{tkzltxexample}[]
-% % s
-% \pgfdeclareplotmark{s}
-% {%
-% \pgfpathmoveto{\pgfqpoint{0pt}{0pt}}
-% \pgfpathcurveto
-% {\pgfpoint{0pt}{0pt}}
-% {\pgfpoint{-\pgfplotmarksize}{\pgfplotmarksize}}
-% {\pgfpoint{\pgfplotmarksize}{\pgfplotmarksize}}
-% \pgfpathmoveto{\pgfqpoint{0pt}{0pt}}
-% \pgfpathcurveto
-% {\pgfpoint{0pt}{0pt}}
-% {\pgfpoint{\pgfplotmarksize}{-\pgfplotmarksize}}
-% {\pgfpoint{-\pgfplotmarksize}{-\pgfplotmarksize}}
-% \pgfusepathqstroke
-% }
-% \end{tkzltxexample}
-%
-% \begin{tkzltxexample}[]
-% % infinity
-% \pgfdeclareplotmark{oo}
-% {%
-% \pgfpathmoveto{\pgfqpoint{0pt}{0pt}}
-% \pgfpathcurveto
-% {\pgfpoint{0pt}{0pt}}
-% {\pgfpoint{.5\pgfplotmarksize}{1\pgfplotmarksize}}
-% {\pgfpoint{\pgfplotmarksize}{0pt}}
-% \pgfpathmoveto{\pgfqpoint{0pt}{0pt}}
-% \pgfpathcurveto
-% {\pgfpoint{0pt}{0pt}}
-% {\pgfpoint{-.5\pgfplotmarksize}{1\pgfplotmarksize}}
-% {\pgfpoint{-\pgfplotmarksize}{0pt}}
-% \pgfpathmoveto{\pgfqpoint{0pt}{0pt}}
-% \pgfpathcurveto
-% {\pgfpoint{0pt}{0pt}}
-% {\pgfpoint{.5\pgfplotmarksize}{-1\pgfplotmarksize}}
-% {\pgfpoint{\pgfplotmarksize}{0pt}}
-% \pgfpathmoveto{\pgfqpoint{0pt}{0pt}}
-% \pgfpathcurveto
-% {\pgfpoint{0pt}{0pt}}
-% {\pgfpoint{-.5\pgfplotmarksize}{-1\pgfplotmarksize}}
-% {\pgfpoint{-\pgfplotmarksize}{0pt}}
-% \pgfusepathqstroke
-% }
-% \end{tkzltxexample}
-%
% \tkzMarkAngle(B, A, C)
@@ -300,6 +188,34 @@ options & default & definition \\
With common options, there is a macro for multiple angles.
\end{NewMacroBox}
+\subsection{Problem to mark a small angle: {\tkzname{Option veclen}}}\label{opt-veclen}
+ The problem comes from the "decorate" action and from the value used in size in
+ \tkzcname{tkzMarkAngle}. The solution is to enclose the macro \tkzcname{tkzMarkAngle}.
+ In the next example without the "scope" the result is : Latex Error: Dimension too large.
+
+ \begin{tkzexample}[latex=6cm,small]
+ \begin{tikzpicture}[scale=1]
+ \tkzDefPoint(0,0){O}
+ \tkzDefPoint(2.5,0){N}
+ \tkzDefPoint(-4.2,0.5){M}
+ \tkzDefPointBy[rotation=center O angle 30](N)
+ \tkzGetPoint{B}
+ \tkzDefPointBy[rotation=center O angle -50](N)
+ \tkzGetPoint{A}
+ \tkzInterLC[common=B](M,B)(O,B) \tkzGetFirstPoint{C}
+ \tkzInterLC[common=A](M,A)(O,A) \tkzGetFirstPoint{A'}
+ \tkzDrawSegments(A,C M,A M,B A,B)
+ \tkzDrawCircle(O,N)
+ \begin{scope}[veclen]
+ \tkzMarkAngle[mkpos=.2, size=1.2](C,A,M)
+ \end{scope}
+ \tkzDrawPoints(O, A, B, M, B, C, A')
+ \tkzLabelPoints[right](O,A,B)
+ \tkzLabelPoints[above left](M,C)
+ \tkzLabelPoint[below left](A'){$A'$}
+ \end{tikzpicture}
+ \end{tkzexample}
+
\subsection{Marking a right angle: {\tkzcname{tkzMarkRightAngle}}}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-news.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-news.tex
index a36ade459b..d4efae7995 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-news.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-news.tex
@@ -1,5 +1,15 @@
\section*{News and compatibility}
+\subsection{With 5.0 version} % (fold)
+
+\begin{itemize}
+
+ \item Finally, I added the "lua" option for the package \tkzname{\tkznameofpack}. This allows to do the calculations for the main functions using lua; (see \ref{calc_with_lua}). The syntax is unchanged. Nothing changes for the user.
+
+ \item The "xfp" option has become "veclen" see \ref{opt-veclen};
+
+\end{itemize}
+
\subsection{With 4.2 version} % (fold)
\label{sub:with_4_2_version}
@@ -43,7 +53,7 @@ If you want to draw a circle, you can't do so |\tkzDrawCircle[R](A,1)|. First yo
\item |\tkzDefLine[euler](A,B,C)| is a macro that allows you to obtain the line of \tkzname{Euler} when possible. |\tkzDefLine[altitude](A,B,C)| is possible again, as well as |\tkzDefLine[tangent at=A](O)| and |\tkzDefLine[tangent from=P](O,A)| which did not works;
-\item | \tkzDefTangent| is replaced by |\tkzDelLine[tangent from = ...]| or |\tkzDelLine[tangent at = ...]|;
+\item | \tkzDefTangent| is replaced by |\tkzDefLine[tangent from = ...]| or |\tkzDefLine[tangent at = ...]|;
\item I added the macro |\tkzPicAngle[tikz options](A,B,C)| for those who prefer to use \TIKZ ;
@@ -117,6 +127,7 @@ As a reminder, the following changes have been made previously:
you can use |\iftkzLinear| (idem for |\tkzIsOrtho|);
\item A style for vectors has been added that you can of course modify
+
|tikzset{vector style/.style={>=Latex,->}}|;
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-others.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-others.tex
index 0548bbaf6a..0df63975d8 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-others.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-others.tex
@@ -69,10 +69,9 @@ Another possiblity is to use \tkzcname{tkzFillAngle}.
\tkzDrawCircle(O,N)
\tkzLabelCircle[above left](O,N)(120){%
$\mathcal{C}$}
- \begin{scope}[xfp]
- \tkzMarkAngle[mkpos=.2, size=1.2](C,A,M)
+ \begin{scope}[veclen]
+ \tkzMarkAngle[mkpos=.2, size=1.2](C,A,M)
\end{scope}
-
\tkzDrawPoints(O, A, B, M, B, C)
\tkzLabelPoints[right](O,A,B)
\tkzLabelPoints[above left](M,C)
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-presentation.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-presentation.tex
index e9fc2c6388..6228a9b8a8 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-presentation.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-presentation.tex
@@ -240,8 +240,8 @@ We draw the circle $\mathcal{K}$ with center $D$ and passing through $G$. It int
\tkzDefPoint(0.75,0.25){B}
\tkzDefPoint(1,1.5){C}
\tkzDefTriangle[equilateral](A,B) \tkzGetPoint{D}
-\tkzInterLC[near](D,B)(B,C) \tkzGetSecondPoint{G}
-\tkzInterLC[near](D,A)(D,G) \tkzGetFirstPoint{L}
+\tkzInterLC[near](D,B)(B,C) \tkzGetSecondPoint{G}
+\tkzInterLC[near](A,D)(D,G) \tkzGetFirstPoint{L}
\tkzDrawCircles(B,C D,G)
\tkzDrawLines[add=0 and 2](D,A D,B)
\tkzDrawSegment(A,B)
@@ -259,10 +259,14 @@ We draw the circle $\mathcal{K}$ with center $D$ and passing through $G$. It int
\end{tikzpicture}
\end{tkzexample}
-\subsection{\tkzname{\tkznameofpack 4} vs \tkzname{\tkznameofpack 3}}
+\subsection{\tkzname{\tkznameofpack\ 4} vs \tkzname{\tkznameofpack\ 3}}
Now I am no longer a Mathematics teacher, and I only spend a few hours studying geometry. I wanted to avoid multiple complications by trying to make \tkzname{tkz-euclide} independent of \tkzname{tkz-base}. Thus was born \tkzname{\tkznameofpack} 4. The latter is a simplified version of its predecessor. The macros of \tkzname{tkz-euclide 3} have been retained. The unit is now \tkzname{cm}. If you need some macros from \tkzname{tkz-base}, you may need to use the \tkzcname{tkzInit}.
+\subsection{\tkzname{\tkznameofpack\ 5} vs \tkzname{\tkznameofpack\ 4}}
+
+Rien ne change pour l'utilisateur. La compilation doit être effectuée avec le moteur LuaLaTeX et les résultats sont plus précis et obtenus plus rapidement. Il suffit de charger \tkzname{\tkznameofpack} 5 comme ceci |\usepackage[lua{tkz-euclide}]|.
+
\subsection{How to use the \tkzname{\tkznameofpack} package ?}
\subsubsection{Let's look at a classic example}
In order to show the right way, we will see how to build an equilateral triangle. Several possibilities are open to us, we are going to follow the steps of Euclid.
@@ -274,7 +278,7 @@ In order to show the right way, we will see how to build an equilateral triangle
\end{verbatim}
\item Then load the \tkzname{\tkznameofpack} package:
\begin{verbatim}
-\usepackage{tkz-euclide}
+\usepackage{tkz-euclide} or \usepackage[lua]{tkz-euclide}
\end{verbatim}
You don't need to load \TIKZ\ because the \tkzname{\tkznameofpack} package works on top of TikZ and loads it.
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-tools.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-tools.tex
index 979801aa33..1123d86a2f 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-tools.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-tools.tex
@@ -294,12 +294,11 @@ arguments & example & explanation \\
\tkzDrawPoints(A,H) \tkzLabelPoints(A,B,H)
\tkzLabelPoints[above](C)
\tkzDotProduct(A,B,C) \tkzGetResult{pabc}
- \pgfmathparse{round(10*\pabc)/10}
+ % \pgfmathparse{round(10*\pabc)/10}
\let\pabc\pgfmathresult
- \node at (1,-3) {%
- $\overrightarrow{PA}\cdot \overrightarrow{PB}=\pabc$};
+ \node at (1,-3) {$\overrightarrow{PA}\cdot \overrightarrow{PB}=\pabc$};
\tkzDotProduct(A,H,B) \tkzGetResult{phab}
- \pgfmathparse{round(10*\phab)/10}
+ % \pgfmathparse{round(10*\phab)/10}
\let\phab\pgfmathresult
\node at (1,-4) {$PA \times PH = \phab $};
\end{tikzpicture}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdf b/macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdf
index 540a04d5a5..c24f592ca7 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdf
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdf
Binary files differ
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-angles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex
index 5b8f9747ba..3676422441 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-angles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex
@@ -1,5 +1,5 @@
% tkz-tool-eu-angles.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-tool-eu-angles.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tool-eu-angles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% tkzSetUpArc
@@ -93,10 +93,10 @@
\def\tkzDrawArcTowards{\pgfutil@ifnextchar[{\tkz@DrawArcN}{\tkz@DrawArcN[]}}
\def\tkz@DrawArcN[#1](#2,#3)(#4){%
\begingroup
- \tkz@@CalcLength(#2,#3){tkz@radius}
+ \tkz@@CalcLengthcm(#2,#3){tkz@radius}
\tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@FirstAngle}
\tkzFindSlopeAngle(#2,#4)\tkzGetAngle{tkz@SecondAngle}
- \tkz@DrawArcRAngles[#1](#2,\tkz@radius pt)(\tkz@FirstAngle,\tkz@SecondAngle)
+ \tkz@DrawArcRAngles[#1](#2,\tkz@radius)(\tkz@FirstAngle,\tkz@SecondAngle)
\endgroup
}
%<--------------------------------------------------------------------------–>
@@ -300,35 +300,38 @@
\def\tkz@mymark{\pgfsetplotmarksize{\tkz@mksize}\pgfuseplotmark{\tkz@markang}}
% draw the arcs
-\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)%
+\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
- \fi
+ \fi
+ \end{scope}
\end{scope}
+
\endgroup
}
%<--------------------------------------------------------------------------->
@@ -465,31 +468,31 @@
dotsize = 3 pt,
/tkzrightangle/.search also={/tikz},
}
-\newcommand*{\tkzMarkRightAngle}[1][]{\tkz@RightAngle[#1]}
-\def\tkz@RightAngle[#1](#2,#3,#4){%
+\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}}}
+ \pgfpointanchor{#2}{center}}}
\tkz@ax=\pgf@x\relax%
- \tkz@ay=\pgf@y\relax%
+ \tkz@ay=\pgf@y\relax%
\tkzpointnormalised{\pgfpointdiff{\pgfpointanchor{#3}{center}}{%
- \pgfpointanchor{#4}{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)
+ \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);
+ -- (#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}}
+ \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)
@@ -531,4 +534,5 @@
\endgroup
}
\makeatother
+
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-circles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-circles.tex
index e168ae6004..8a9764d763 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-circles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-circles.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-draw-circles.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-draw-circles.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-draw-circles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% tkzSetUpCircle
@@ -49,6 +49,9 @@
\def\tkz@DrawCircle[#1](#2,#3){%
\begingroup
\node [draw,circle through=(#3), circle style,#1] at (#2) {};
+%perhaps I need to use the last method
+ % \tkzCalcLength(#2,#3) \tkzGetLength{tkz@ncradius}
+ % \draw[circle style,#1](#2) circle (\tkz@ncradius);
\endgroup
}
%<--------------------------------------------------------------------------–>
@@ -81,8 +84,8 @@
{\pgfpointanchor{#3}{center}}%
\tkz@ax=\pgf@x%
\tkz@ay=\pgf@y%
- \path(#2)--++(-\tkz@ax,-\tkz@ay)coordinate (tkz@pt);
- \tkzDrawArc[#1,delta=0](#2,#3)(tkz@pt)
+ \path(#2)--++(-\tkz@ax,-\tkz@ay) coordinate (tkz@pt);
+ \tkzDrawArc[#1,delta=0](#2,#3)(tkz@pt)
\endgroup
}%
%<--------------------------------------------------------------------------–>
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-compass.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-compass.tex
index 9798e98f4f..76f3a888be 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-compass.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-compass.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-compass.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-compass.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-compass.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Author Alain Matthes
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-lines.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-lines.tex
index 8c0d448ac8..216bc15fcb 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-lines.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-lines.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-draw-lines.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-draw-lines.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-draw-lines.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-points.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-points.tex
index 4a80f44f17..eeffaecff2 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-points.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-points.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-points.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-points.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-points.tex}
\makeatletter
%<--------------------------------------------------------------------------->
% tkzSetUpPoint définit la forme d'un point
@@ -168,5 +168,4 @@
\endgroup
}
\let\tkzShowPointCoord\tkzPointShowCoord
-\makeatother
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-polygons.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-polygons.tex
index 6b3d2246e9..a0f59a0a65 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-polygons.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-polygons.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-polygons.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-polygons.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-polygons.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Polygon
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-protractor.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-protractor.tex
index 6aa6624611..fb995eead7 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-protractor.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-protractor.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-protractor.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-protractor.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-protractor.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% !!! idea from Y. Combe !!!
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-sectors.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-sectors.tex
index a934e87122..685ee59242 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-sectors.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-sectors.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-sectors.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-sectors.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-sectors.tex}
\makeatletter
%<----------------------- Sectors ------------------------------–>
\gdef\tkz@nums{0}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-show.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-show.tex
index 3b3a00e745..2f5d97bc98 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-show.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-show.tex
@@ -1,5 +1,5 @@
%tkz-obj-eu-show.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-show.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-show.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% finding specific points in a triangle
@@ -121,6 +121,7 @@
\tkzCompass[compass style,#1](#3,MED@2)
\endgroup
}
+
\def\tkzShowLLLine{\pgfutil@ifnextchar[{\tkz@ShowLLLine}{\tkz@ShowLLLine[]}}
\def\tkz@ShowLLLine[#1](#2,#3)(#4){%
\begingroup
@@ -328,18 +329,18 @@ translation/.code args={from #1 to #2}{%
\pgfnodealias{tkz@pointtsf}{tkzPointResult}
\tkz@VecKCoLinear[1](#2,#3,tkz@pointtsf)
\pgfnodealias{SO@tmp1}{tkzPointResult}
- \tkz@VecKCoLinear[-1](#2,#3,tkz@pointtsf)
+ \tkz@VecKCoLinear[-1](#2,#3,tkz@pointtsf)
\pgfnodealias{SO@tmp2}{tkzPointResult}
- \tkz@VecKNorm[\tkz@show@size](tkz@pointtsf,SO@tmp1)
+ \tkz@VecKNorm[\tkz@show@size](tkz@pointtsf,SO@tmp1)
\pgfnodealias{SO@1}{tkzPointResult}
- \tkz@VecKNorm[\tkz@show@size](tkz@pointtsf,SO@tmp2)
+ \tkz@VecKNorm[\tkz@show@size](tkz@pointtsf,SO@tmp2)
\pgfnodealias{SO@2}{tkzPointResult}
- \tkz@VecKNorm[-\tkz@show@gap](tkz@pointtsf,#4)
+ \tkz@VecKNorm[-\tkz@show@gap](tkz@pointtsf,#4)
\pgfnodealias{SO@3}{tkzPointResult}
\tkzCompass[compass style,#1](#4,SO@1)
\tkzCompass[compass style,#1](#4,SO@2)
\tkzCompass[compass style,#1](SO@1,SO@3)
- \tkzCompass[compass style,#1,length=\tkz@show@ratio*\tkz@show@length](SO@2,SO@3)
+ \tkzCompass[compass style,#1,length=\tkz@show@ratio*\tkz@show@length](SO@2,SO@3)
\endgroup
}
\makeatother
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-lib-eu-marks.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-marks.tex
index 999b28734e..3e536edc33 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-lib-eu-marks.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-marks.tex
@@ -1,5 +1,5 @@
% tkz-eu-lib-marks.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-lib-eu-marks.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-lib-eu-marks.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Création des symboles
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-lib-eu-shape.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-shape.tex
index 12965c9e51..522e205162 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-lib-eu-shape.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-shape.tex
@@ -1,5 +1,5 @@
% tkz-lib-eu-shape.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,10 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-lib-eu-shape.tex}
-\makeatletter
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-lib-eu-shape.tex}
%<--------------------------------------------------------------------------–>
% Création des symboles
%<--------------------------------------------------------------------------–>
@@ -47,5 +46,4 @@
\pgfpathlineto{\pgfqpoint{\pgf@xb}{0 pt}}
}
}
-\makeatother
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-circles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-circles.tex
new file mode 100644
index 0000000000..9be8dd8be7
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-circles.tex
@@ -0,0 +1,223 @@
+% tkz-obj-lua-circles.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-obj-lua-circles.tex}
+\makeatletter
+%<--------------------------------------------------------------------------–>
+% tkzCircle center and one point
+%<--------------------------------------------------------------------------–>
+% attention radius circle is defined by center and a point on the circle
+% R defined by center and the value of the radius
+% no need to define a circle with R tikz uses this method.
+% through instead of radius
+\def\tkz@numc{0}
+\pgfkeys{/tkzcircle/.cd,
+ R/.code = \def\tkz@numc{0},
+ diameter/.code = \def\tkz@numc{1},
+ circum/.code = \def\tkz@numc{2},
+ in/.code = \def\tkz@numc{3},
+ ex/.code = \def\tkz@numc{4},
+ euler/.code = \def\tkz@numc{5},
+ nine/.code = \def\tkz@numc{5},
+ apollonius/.code = \def\tkz@numc{6},
+ spieker/.code = \def\tkz@numc{7},
+ orthogonal from/.code args = {#1}{\gdef\tkz@numc{8}
+ \def\tkz@ptfrom{#1}},
+ orthogonal through/.code args = {#1 and #2}{\gdef\tkz@numc{9}
+ \def\tkz@ptone{#1}
+ \def\tkz@pttwo{#2}},
+ K/.code = \def\tkz@koeff{#1},
+ K = 1,
+ circum
+ }
+\def\tkzDefCircle{\pgfutil@ifnextchar[{\tkz@DefCircle}{\tkz@DefCircle[]}}
+\def\tkz@DefCircle[#1](#2){%
+\begingroup
+\pgfqkeys{/tkzcircle}{#1}
+\ifcase\tkz@numc%
+ \tkzDefCircleR(#2)
+ \or% 1
+ \tkzDefCircleD(#2)
+ \or% 2
+ \tkzDefCircumCircle(#2)
+ \or% 3
+ \tkzDefInCircle(#2)
+ \or% 4
+ \tkzDefExCircle(#2)
+ \or% 5
+ \tkzDefEulerCircle(#2)
+ \or% 6
+ \tkzDefApolloniusCircle(#2)
+ \or% 7
+ \tkzDefSpiekerCircle(#2)
+ \or% 8
+ \tkzDefOrthogonalCircle(#2,\tkz@ptfrom)
+ \or% 9
+ \tkzDefOrthoThroughCircle(#2,\tkz@ptone,\tkz@pttwo)
+ \fi
+\endgroup
+}
+%for compatibility
+%<--------------------------------------------------------------------------–>
+% R
+%<--------------------------------------------------------------------------–>
+\def\tkzDefCircleR(#1,#2){%
+\begingroup
+ \edef\tkzLengthResult{\fpeval{round(#2,5)}}
+ \global\let\tkzLengthResult\tkzLengthResult
+ \path (#1)--++(\tkzLengthResult,0) coordinate (tkzSecondPointResult);
+ \tkzRenamePoint(tkzSecondPointResult){tkzPointResult}
+\endgroup
+}
+
+%<--------------------------------------------------------------------------–>
+% Diameter Circle
+%<--------------------------------------------------------------------------–>
+\def\tkzDefCircleD(#1,#2){%
+\begingroup
+ \tkzDefMidPoint(#1,#2)
+ \pgfnodealias{tkzFirstPointResult}{tkzPointResult}
+ \pgfnodealias{tkzSecondPointResult}{#2}
+ \tkz@@CalcLengthcm(#1,tkzPointResult){tkzLengthResult}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Circum Circle
+%<--------------------------------------------------------------------------–>
+\def\tkzDefCircumCircle(#1,#2,#3){%
+\begingroup
+ \tkzCircumCenter(#1,#2,#3)
+ \tkzRenamePoint(tkzPointResult){tkzFirstPointResult}
+ \tkzRenamePoint(#1){tkzSecondPointResult}
+ \tkz@@CalcLengthcm(#1,tkzPointResult){tkzLengthResult}%3.06 add [cm]
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% In(scribe) Circle
+%<--------------------------------------------------------------------------–>
+\def\tkzDefInCircle(#1,#2,#3){%
+\begingroup
+ \tkzInCenter(#1,#2,#3)
+ \pgfnodealias{tkz@incenter}{tkzPointResult}
+ \tkzUProjection(#1,#3)(tkz@incenter)
+ \pgfnodealias{tkzSecondPointResult}{tkzPointResult}
+ \tkz@@CalcLengthcm(tkzPointResult,tkz@incenter){tkzLengthResult}
+ \pgfnodealias{tkzPointResult}{tkz@incenter}
+ \pgfnodealias{tkzFirstPointResult}{tkz@incenter}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Ex(scribe) Circle
+%<--------------------------------------------------------------------------–>
+\def\tkzDefExCircle(#1,#2,#3){%
+\begingroup
+ \tkzExCenter(#1,#2,#3)
+ \pgfnodealias{tkz@excenter}{tkzPointResult}
+ \tkzUProjection(#1,#3)(tkz@excenter)
+ \pgfnodealias{tkzSecondPointResult}{tkzPointResult}
+ \tkz@@CalcLengthcm(tkzPointResult,tkz@excenter){tkzLengthResult}% for tkzGetLength
+ \pgfnodealias{tkzPointResult}{tkz@excenter}
+ \pgfnodealias{tkzFirstPointResult}{tkz@excenter}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Radius Ex Circle
+%<--------------------------------------------------------------------------–>
+\def\tkzDefExRadius(#1,#2,#3){%
+\begingroup
+ \tkzExCenter(#1,#2,#3)
+ \tkzUProjection(#1,#3)(tkzPointResult)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% The nine-point circle, also called Euler's circle or the Feuerbach circle
+% best way Ma,Mb,Mc circum center 2020
+%<--------------------------------------------------------------------------–>
+\def\tkzDefEulerCircle(#1,#2,#3){%
+\begingroup
+ \tkzDefMidPoint(#1,#2) \pgfnodealias{tkz@e1}{tkzPointResult}
+ \tkzDefMidPoint(#2,#3) \pgfnodealias{tkz@e2}{tkzPointResult}
+ \tkzDefMidPoint(#1,#3) \pgfnodealias{tkz@e3}{tkzPointResult}
+ \tkzCircumCenter(tkz@e1,tkz@e2,tkz@e3)
+ \pgfnodealias{tkzFirstPointResult}{tkzPointResult}
+ \tkzRenamePoint(tkz@e1){tkzSecondPointResult}
+ \tkz@@CalcLengthcm(tkzPointResult,tkz@e1){tkzLengthResult}
+\endgroup
+}
+\let\tkzDefNinePointsCircle\tkzEulerCircle%
+\let\tkzFeuerBachCircle\tkzEulerCircle%
+
+\def\tkzDefEulerRadius(#1,#2,#3){%
+\begingroup
+ \tkzEulerCenter(#1,#2,#3)
+ \pgfnodealias{eur@pta}{tkzPointResult}
+ \tkzDefMidPoint(#1,#2)
+ \tkz@@CalcLengthcm(eur@pta,tkzPointResult){tkzLengthResult}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Apollonius circle
+%<--------------------------------------------------------------------------–>
+\def\tkzDefApolloniusCircle(#1,#2){%
+\begingroup
+ \tkzDefBarycentricPointTwo(#1,1,#2,\tkz@koeff)
+ \pgfnodealias{apo@pta}{tkzPointResult}
+ \pgfnodealias{tkzSecondPointResult}{tkzPointResult}
+ \tkzDefBarycentricPointTwo(#1,1,#2,-\tkz@koeff)
+ \pgfnodealias{apo@ptb}{tkzPointResult}
+ \tkzDefMidPoint(apo@pta,apo@ptb)
+ \pgfnodealias{tkzFirstPointResult}{tkzPointResult}
+ \tkz@@CalcLengthcm(tkzFirstPointResult,apo@pta){tkzLengthResult}
+ \pgfnodealias{tkzThirdPointResult}{apo@ptb}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzDefOrthogonalCircle(#1,#2,#3){%
+\begingroup
+ \tkzTgtFromP(#1,#2)(#3)
+ \tkz@@CalcLengthcm(#1,tkzFirstPointResult){tkzLengthResult}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzDefOrthoThroughCircle(#1,#2,#3,#4){%
+\begingroup
+ \tkz@@CalcLengthcm(#1,#3){tkz@lnb}%
+ \edef\tkz@lnc{\fpeval{1/\tkz@lnb}}
+ \tkzVecKNorm[\tkz@lnc](#1,#3)
+ \pgfnodealias{tkz@PointResult}{tkzPointResult}
+ \tkzCircumCenter(tkz@PointResult,#3,#4)
+ \tkz@@CalcLengthcm(tkzPointResult,#3){tkzLengthResult}
+ \pgfnodealias{tkzFirstPointResult}{tkzPointResult}
+ \pgfnodealias{tkzSecondPointResult}{#3}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Spieker Circle
+%<--------------------------------------------------------------------------–>
+\def\tkzDefSpiekerCircle(#1,#2,#3){%
+\begingroup
+ \tkzSpiekerCenter(#1,#2,#3)
+ \pgfnodealias{tkzFirstPointResult}{tkzPointResult}
+ \tkzUProjection(tkz@m1,tkz@m2)(tkzPointResult)
+ \pgfnodealias{tkzSecondPointResult}{tkzPointResult}
+ \tkz@@CalcLength(tkzSecondPointResult,tkzFirstPointResult){tkzLengthResult}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+
+%<--------------------------------------------------------------------------–>
+% End Def Circle
+%<--------------------------------------------------------------------------–>
+\makeatother
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-by.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-by.tex
new file mode 100644
index 0000000000..1db32f48bf
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-by.tex
@@ -0,0 +1,522 @@
+% tkz-tools-lua-points-by.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-tools-lua-points-by.tex}
+\makeatletter
+%<--------------------------------------------------------------------------–>
+% Transformations Géométriques
+%<--------------------------------------------------------------------------–>
+\def\tkz@numtrsf{0}
+\pgfkeys{/tkzDefPointBy/.cd,
+ translation/.code args={from #1 to #2}{ \def\tkzfrom{#1}%
+ \def\tkzto{#2}%
+ \def\tkz@numtrsf{0}},
+ homothety/.code args={center #1 ratio #2}{ \def\tkzcenter{#1}%
+ \def\tkzratio{#2}%
+ \def\tkz@numtrsf{1}},
+ reflection/.code args={over #1--#2}{ \def\tkzdeb{#1}%
+ \def\tkzfin{#2}%
+ \def\tkz@numtrsf{2}},
+ symmetry/.code args={center #1}{ \def\tkzcenter{#1}%
+ \def\tkz@numtrsf{3}},
+ projection/.code args={onto #1--#2}{ \def\tkzdeb{#1}%
+ \def\tkzfin{#2}%
+ \def\tkz@numtrsf{4}},
+ rotation/.code args={center #1 angle #2}{ \def\tkzcenter{#1}%
+ \def\tkzangle{#2}%
+ \def\tkz@numtrsf{5}},
+ rotation in rad/.code args={center #1 angle #2}{ \def\tkzcenter{#1}%
+ \def\tkzangle{#2}%
+ \def\tkz@numtrsf{6}},
+ inversion/.code args={center #1 through #2}{ \def\tkzcenter{#1}%
+ \def\tkzpoint{#2}%
+ \def\tkz@numtrsf{7}},
+ inversion negative/.code args={center #1 through #2}{ \def\tkzcenter{#1}%
+ \def\tkzpoint{#2}%
+ \def\tkz@numtrsf{8}},
+ rotation with nodes/.code args={center #1 from #2 to #3}{ \def\tkzcenter{#1}%
+ \def\tkzfrom{#2}%
+ \def\tkzto{#3}%
+ \def\tkz@numtrsf{9}}
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzDefPointBy{\pgfutil@ifnextchar[{\tkz@DefPointBy}{\tkz@DefPointBy[]}}
+\def\tkz@DefPointBy[#1](#2){%
+\begingroup
+\pgfqkeys{/tkzDefPointBy}{#1}
+ \ifcase\tkz@numtrsf%
+% % first case 0
+ \tkzUTranslation(\tkzfrom,\tkzto)(#2)
+\or% 1
+ \tkzUHomo(\tkzcenter,\tkzratio)(#2)
+\or% 2
+ \tkzUSymOrth(\tkzdeb,\tkzfin)(#2)
+\or% 3
+ \tkzUCSym(\tkzcenter)(#2)
+\or% 4
+ \tkzUProjection(\tkzdeb,\tkzfin)(#2)
+\or% 5
+ \tkzURotateAngle(\tkzcenter,\tkzangle)(#2)
+\or% 6
+ \tkzURotateInRad(\tkzcenter,\tkzangle)(#2)
+\or% 7
+ \tkzUInversePoint(\tkzcenter,\tkzpoint)(#2)
+\or% 8
+ \tkzUInverseNegativePoint(\tkzcenter,\tkzpoint)(#2)
+\or% 9
+ \tkzURotateWithNodes(\tkzcenter,\tkzfrom,\tkzto)(#2)
+\fi
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzDefPointsBy{\pgfutil@ifnextchar[{\tkz@DefPointsBy}{\tkz@DefPointsBy[]}}
+\def\tkz@DefPointsBy[#1](#2)#3{%
+\begingroup
+\pgfqkeys{/tkzDefPointBy}{#1}
+\ifcase\tkz@numtrsf%
+ % first case 0
+ \tkzTranslation(\tkzfrom,\tkzto)(#2){#3}
+ \or% 1
+ \tkzHomo(\tkzcenter,\tkzratio)(#2){#3}
+ \or% 2
+ \tkzSymOrth(\tkzdeb,\tkzfin)(#2){#3}
+ \or% 3
+ \tkzCSym(\tkzcenter)(#2){#3}
+ \or% 4
+ \tkzProjection(\tkzdeb,\tkzfin)(#2){#3}
+ \or% 5
+ \tkzRotateAngle(\tkzcenter,\tkzangle)(#2){#3}
+ \or% 6
+ \tkzRotateInRad(\tkzcenter,\tkzangle)(#2){#3}
+ \or% 7
+ \tkzInversePoint(\tkzcenter,\tkzpoint)(#2){#3}
+ \or% 8
+ \tkzInverseNegativePoint(\tkzcenter,\tkzpoint)(#2){#3}
+ \or% 9
+ \tkzRotateWithNodes(\tkzcenter,\tkzfrom,\tkzto)(#2){#3}
+\fi
+\endgroup
+}
+
+%<--------------------------------------------------------------------------–>
+
+\def\ExtractPoint#1,#2\@nil{%
+\xdef\tkz@LastList{#2}
+\xdef\tkz@FirstPoint{#1}
+}
+\def\FirstPointInList#1{%
+\edef\tkz@templist{#1,}
+\expandafter\ExtractPoint\tkz@templist\@nil
+}
+%<--------------------------------------------------------------------------–>
+% Translation par rapport à un point
+%<--------------------------------------------------------------------------–>
+\def\tkzTranslation(#1,#2)(#3)#4{%
+\begingroup
+\gdef\tkz@LastList{#4}
+\foreach\PT in {#3}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \def\tkz@pointtsf{\PT '}
+ \else
+ \def\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \tkz@VecCoLinear(#1,#2,\PT)
+ \pgfnodealias{\tkz@pointtsf}{tkzPointResult}
+ }
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzUTranslation(#1,#2)(#3){%
+\begingroup
+ \tkz@VecCoLinear(#1,#2,#3)%
+\endgroup
+}
+
+%<--------------------------------------------------------------------------–>
+% Symétrie par rapport à un point Homo with (-1)
+% #2 le centre #3 l'antécédent
+%<--------------------------------------------------------------------------–>
+\def\tkzCSym(#1)(#2)#3{%
+\begingroup
+\gdef\tkz@LastList{#3}
+ \foreach\PointCS in {#2}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \xdef\tkz@pointtsf{\PointCS '}
+ \else
+ \xdef\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{\PointCS}{center}}%
+ \tkz@ax=\pgf@x%
+ \tkz@ay=\pgf@y%
+ \pgfinterruptboundingbox
+ \path(#1)--++(-\tkz@ax,-\tkz@ay)coordinate (\tkz@pointtsf);
+ \endpgfinterruptboundingbox
+}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzUCSym(#1)(#2){%
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#2}{center}}%
+ \tkz@ax=\pgf@x%
+ \tkz@ay=\pgf@y%
+ \path(#1)--++(-\tkz@ax,-\tkz@ay)coordinate (tkzPointResult);
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Symétrie orthogonale par rapport à une droite
+%<--------------------------------------------------------------------------–>
+\def\tkzSymOrth(#1,#2)(#3)#4{%
+\begingroup
+\gdef\tkz@LastList{#4}
+ \foreach\PointSO in {#3}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \def\tkz@pointtsf{\PointSO '}
+ \else
+ \def\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \tkzUSymOrth(#1,#2)(\PointSO)
+ \pgfnodealias{\tkz@pointtsf}{tkzPointResult}
+ }
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzUSymOrth(#1,#2)(#3){%
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#2}{center}}%
+ \tkz@ax =\pgf@y%
+ \tkz@ay =\pgf@x%
+ \pgfinterruptboundingbox
+ \path[coordinate] (#3)--++(-\tkz@ax,\tkz@ay) coordinate (tkz@point);
+ \endpgfinterruptboundingbox
+ \tkzInterLL(#1,#2)(#3,tkz@point)
+ \pgfnodealias{tkzPointofSym}{tkzPointResult}
+ \tkz@VecK[2](#3,tkzPointofSym)
+\endgroup
+}
+
+%<--------------------------------------------------------------------------–>
+% Projection orthogonale sur une droite
+%<--------------------------------------------------------------------------–>
+\def\tkzProjection(#1,#2)(#3)#4{%
+\begingroup
+\gdef\tkz@LastList{#4}
+ \foreach\PointPJ in {#3}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \def\tkz@pointtsf{\PointPJ '}
+ \else
+ \def\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \tkzUProjection(#1,#2)(\PointPJ)
+ \pgfnodealias{\tkz@pointtsf}{tkzPointResult}
+ }
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzUProjection(#1,#2)(#3){%
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#2}{center}}%
+ \tkz@ax =\pgf@y%
+ \tkz@ay =\pgf@x%
+ \pgfinterruptboundingbox
+ \path[coordinate](#3)--++(-\tkz@ax,\tkz@ay) coordinate (tkz@point);
+ \tkzInterLL(#1,#2)(#3,tkz@point)% définit tkzPointResult
+ \endpgfinterruptboundingbox
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkz@Projection(#1,#2)(#3)#4{%
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#2}{center}}%
+ \tkz@ax =\pgf@y%
+ \tkz@ay =\pgf@x%
+ \pgfinterruptboundingbox
+ \path[coordinate](#3)--++(-\tkz@ax,\tkz@ay) coordinate (tkz@point);
+ \endpgfinterruptboundingbox
+ \tkz@InterLL(#1,#2)(#3,tkz@point){#4}% définit tkzPointResult
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Homothétie par rapport à un point
+%<--------------------------------------------------------------------------–>
+\def\tkzHomo(#1,#2)(#3)#4{%
+\begingroup
+\gdef\tkz@LastList{#4}
+\foreach\PointHO in {#3}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \xdef\tkz@pointtsf{\PointHO '}
+ \else
+ \xdef\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{\PointHO}{center}}%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgfmathparse{#2}
+ \edef\tkz@coeff{\pgfmathresult}%
+ \pgfinterruptboundingbox
+ \path[coordinate](#1)--++(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya)%
+ coordinate(\tkz@pointtsf);
+ \endpgfinterruptboundingbox
+ }
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzUHomo(#1,#2)(#3){%
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#3}{center}}%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgfmathparse{#2}
+ \edef\tkz@coeff{\pgfmathresult}%
+ \pgfinterruptboundingbox
+ \path[coordinate](#1)--++(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya)%
+ coordinate(tkzPointResult);
+ \endpgfinterruptboundingbox
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% rotation en degré
+%<--------------------------------------------------------------------------–>
+\def\tkzRotateAngle(#1,#2)(#3)#4{%
+\begingroup
+\gdef\tkz@LastList{#4}
+\foreach\PointRot in {#3}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \def\tkz@pointtsf{\PointRot '}
+ \else
+ \def\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \tkz@@extractxy{\PointRot}
+ \tkz@ax\pgf@x%
+ \tkz@ay\pgf@y%
+ \tkz@@extractxy{#1}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {\pgfpoint{\tkz@bx}{\tkz@by}}%
+ {#2}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \pgfinterruptboundingbox
+ \path[coordinate](\tkz@bx,\tkz@by)coordinate(\tkz@pointtsf);%
+ \endpgfinterruptboundingbox
+}
+ \endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzURotateAngle(#1,#2)(#3){%
+\begingroup
+ \pgf@process{\pgfpointanchor{#3}{center}}%
+ \tkz@ax\pgf@x%
+ \tkz@ay\pgf@y%
+ \pgf@process{\pgfpointanchor{#1}{center}}%
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {\pgfpoint{\tkz@bx}{\tkz@by}}%
+ {#2}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \pgfinterruptboundingbox
+ \path (\tkz@bx,\tkz@by) coordinate (tkzPointResult);%
+ \endpgfinterruptboundingbox
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% % rotation en radian
+% %<--------------------------------------------------------------------------–>
+\def\tkzRotateInRad(#1,#2)(#3)#4{%
+\begingroup
+\gdef\tkz@LastList{#4}
+ \foreach\PointRot in {#3}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \xdef\tkz@pointtsf{\PointRot '}
+ \else
+ \xdef\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \pgfmathparse{#2 r}
+ \let\tkz@Angle\pgfmathresult
+ \tkz@@extractxy{\PointRot}
+ \tkz@ax\pgf@x%
+ \tkz@ay\pgf@y%
+ \tkz@@extractxy{#1}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {\pgfpoint{\tkz@bx}{\tkz@by}}%
+ {\tkz@Angle}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \pgfinterruptboundingbox
+ \path[coordinate](\tkz@bx,\tkz@by)coordinate(\tkz@pointtsf);
+ \endpgfinterruptboundingbox
+}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzURotateInRad(#1,#2)(#3){%
+\begingroup
+ \pgfmathparse{#2 r}
+ \let\tkz@Angle\pgfmathresult
+ \tkz@@extractxy{#3}
+ \tkz@ax\pgf@x%
+ \tkz@ay\pgf@y%
+ \tkz@@extractxy{#1}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {\pgfpoint{\tkz@bx}{\tkz@by}}%
+ {\tkz@Angle}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \pgfinterruptboundingbox
+ \path[coordinate](\tkz@bx,\tkz@by)coordinate(tkzPointResult);
+ \endpgfinterruptboundingbox
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Inverse of a point
+%<--------------------------------------------------------------------------–>
+\def\tkzInversePoint(#1,#2)(#3)#4{%
+\begingroup
+\gdef\tkz@LastList{#4}
+ \foreach\PointIP in {#3}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \xdef\tkz@pointtsf{\PointIP '}
+ \else
+ \xdef\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \tkz@@CalcLengthcm(#1,#2){tkz@lna}
+ \tkz@@CalcLengthcm(#1,\PointIP){tkz@lnb}
+ \edef\tkz@lnc{\fpeval{\tkz@lna/\tkz@lnb*\tkz@lna}}
+ \tkzVecKNorm[\tkz@lnc](#1,\PointIP)
+ \pgfnodealias{\tkz@pointtsf}{tkzPointResult}
+ }
+\endgroup
+}
+\def\tkzUInversePoint(#1,#2)(#3){%
+\begingroup
+ \tkz@@CalcLengthcm(#1,#2){tkz@lna}%
+ \tkz@@CalcLengthcm(#1,#3){tkz@lnb}%
+ \edef\tkz@lnc{\fpeval{\tkz@lna/\tkz@lnb*\tkz@lna}}
+ \tkzVecKNorm[\tkz@lnc](#1,#3)
+\endgroup
+}
+% possible
+% \tkzDefLine[tangent from =#3](#1,#2)
+% \tkzTgtFromP(#1,#2)(#3)
+% \tkzInterLL(tkzFirstPointResult,tkzSecondPointResult)(#1,#2)
+%<--------------------------------------------------------------------------–>
+% Inverse negative of a point
+%<--------------------------------------------------------------------------–>
+\def\tkzInverseNegativePoint(#1,#2)(#3)#4{%
+\begingroup
+\gdef\tkz@LastList{#4}
+ \foreach\PointIP in {#3}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \xdef\tkz@pointtsf{\PointIP '}
+ \else
+ \xdef\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \tkz@@CalcLengthcm(#1,#2){tkz@lna}
+ \tkz@@CalcLengthcm(#1,\PointIP){tkz@lnb}
+ \edef\tkz@lnc{\fpeval{\tkz@lna/\tkz@lnb*\tkz@lna}}
+ \tkzVecKNorm[\tkz@lnc](#1,\PointIP)
+ \tkzUCSym(#1)(tkzPointResult)
+ \pgfnodealias{\tkz@pointtsf}{tkzPointResult}
+ }
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzUInverseNegativePoint(#1,#2)(#3){%
+\begingroup
+ \tkz@@CalcLengthcm(#1,#2){tkz@lna}%
+ \tkz@@CalcLengthcm(#1,#3){tkz@lnb}%
+ \edef\tkz@lnc{\fpeval{\tkz@lna/\tkz@lnb*\tkz@lna}}
+ \tkzVecKNorm[\tkz@lnc](#1,#3)
+ \tkzUCSym(#1)(tkzPointResult)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+%<--------------- rotate with nodes ------------------------–>
+%<--------------------------------------------------------------------------–>
+\def\tkzRotateWithNodes(#1,#2,#3)(#4)#5{%
+\begingroup
+\gdef\tkz@LastList{#5}
+ \foreach\PointRotWN in {#4}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \def\tkz@pointtsf{\PointRotWN '}
+ \else
+ \def\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \tkzFindAngle(#2,#1,#3)
+ \tkz@@extractxy{\PointRotWN}
+ \tkz@ax\pgf@x%
+ \tkz@ay\pgf@y%
+ \tkz@@extractxy{#1}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {\pgfpoint{\tkz@bx}{\tkz@by}}%
+ {\tkzAngleResult}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \pgfinterruptboundingbox
+ \path[coordinate](\tkz@bx,\tkz@by) coordinate (\tkz@pointtsf);%
+ \endpgfinterruptboundingbox
+}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzURotateWithNodes(#1,#2,#3)(#4){%
+\begingroup
+ \tkzFindAngle(#2,#1,#3)
+ \pgf@process{\pgfpointanchor{#4}{center}}%
+ \tkz@ax\pgf@x%
+ \tkz@ay\pgf@y%
+ \pgf@process{\pgfpointanchor{#1}{center}}%
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {\pgfpoint{\tkz@bx}{\tkz@by}}%
+ {\tkzAngleResult}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \pgfinterruptboundingbox
+ \path (\tkz@bx,\tkz@by) coordinate (tkzPointResult);%
+ \endpgfinterruptboundingbox
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Fin des transformations
+%<--------------------------------------------------------------------------–>
+\makeatother
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-spc.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-spc.tex
index 0ce48fcda5..9ed94b26e0 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-spc.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-spc.tex
@@ -1,5 +1,5 @@
-% tkz-obj-eu-points.tex
-% Copyright 2022 Alain Matthes
+% tkz-obj-lua-points.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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-points.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-lua-points.tex}
\makeatletter
%add ExCenter
%<--------------------------------------------------------------------------–>
@@ -27,21 +27,41 @@
}
\let\tkzDefBCPoint\tkzDefBarycentricPoint
-\def\tkzDefCentroid(#1){%
+\def\tkzDefBarycentricPointTwo(#1,#2,#3,#4){%
\begingroup
- \xdef\tkz@arg{}
- \foreach \X in {#1}
- {%
- \ifx\tkzutil@empty\tkz@arg%
- \xdef\tkz@arg{\X=1}
- \else
- \xdef\tkz@arg{\tkz@arg,\X=1}
- \fi
- }
- \path[coordinate] (barycentric cs:\tkz@arg) coordinate (tkzPointResult);
+\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}
+\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}
+\tkz@ax\pgf@x %
+\tkz@ay\pgf@y %
+\edef\tkzcax{\strip@pt\tkz@ax}%
+\edef\tkzcay{\strip@pt\tkz@ay}%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#3}{center}}
+\pgfextracty{\pgf@y}{\pgfpointanchor{#4}{center}}
+\tkz@bx\pgf@x %
+\tkz@by\pgf@y %
+\edef\tkzcbx{\strip@pt\tkz@bx}%
+\edef\tkzcby{\strip@pt\tkz@by}%
+\edef\tkztpmx{\tkz@Dec{(\tkzcax*(#2) + \tkzcbx*(#4))/(#2 + #4 )}}
+\edef\tkztpmy{\tkz@Dec{(\tkzcay*(#2) + \tkzcby*(#2))/(#2 + #4 )}}
+\pgfcoordinate{tkzPointResult}{\pgfqpoint{\tkztpmx pt}{\tkztpmy pt}}
\endgroup
}
+% \def\tkzDefCentroid(#1){%
+% \begingroup
+% \xdef\tkz@arg{}
+% \foreach \X in {#1}
+% {%
+% \ifx\tkzutil@empty\tkz@arg%
+% \xdef\tkz@arg{\X=1}
+% \else
+% \xdef\tkz@arg{\tkz@arg,\X=1}
+% \fi
+% }
+% \path[coordinate] (barycentric cs:\tkz@arg) coordinate (tkzPointResult);
+% \endgroup
+% }
+
%<--------------------------------------------------------------------------–>
% milieu de deux points
%<--------------------------------------------------------------------------–>
@@ -127,28 +147,57 @@
\def\tkz@rf{#5}%
\fi
\pgfinterruptboundingbox
- \path[coordinate](barycentric cs:#2=\tkz@rf,#4=\tkz@rt)coordinate (tkzPointResult);
- \endpgfinterruptboundingbox
+\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}
+\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}}
+\tkz@ax\pgf@x %
+\tkz@ay\pgf@y %
+\edef\tkzcax{\strip@pt\tkz@ax}%
+\edef\tkzcay{\strip@pt\tkz@ay}%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#4}{center}}
+\pgfextracty{\pgf@y}{\pgfpointanchor{#4}{center}}
+\tkz@bx\pgf@x %
+\tkz@by\pgf@y %
+\edef\tkzcbx{\strip@pt\tkz@bx}%
+\edef\tkzcby{\strip@pt\tkz@by}%
+\edef\tkztpmx{\tkz@Dec{(\tkzcax*\tkz@rf + \tkzcbx*\tkz@rt)/(\tkz@rf + \tkz@rt )}}
+\edef\tkztpmy{\tkz@Dec{(\tkzcay*\tkz@rf + \tkzcby*\tkz@rt)/(\tkz@rf + \tkz@rt )}}
+ \pgfcoordinate{tkzPointResult}{\pgfqpoint{\tkztpmx pt}{\tkztpmy pt}}
+\endpgfinterruptboundingbox
\endgroup
}
\let\tkzDefIntHomotheticCenter\tkzDefIntSimilitudeCenter
%<--------------------------------------------------------------------------–>
% External Similitude center
%<--------------------------------------------------------------------------–>
-\def\tkzDefExtSimilitudeCenter{\pgfutil@ifnextchar[{\tkz@DefExtSimilitudeCenter}{\tkz@DefExtSimilitudeCenter[]}}
+\def\tkzDefExtSimilitudeCenter{\pgfutil@ifnextchar[{\tkz@DefExtSimilitudeCenter}{%
+\tkz@DefExtSimilitudeCenter[]}}
\def\tkz@DefExtSimilitudeCenter[#1](#2,#3)(#4,#5){%
\begingroup
\pgfqkeys{/tkzSimilitudeCenter}{#1}
\ifcase\tkz@numhomo%
- \tkz@@CalcLengthcm(#2,#3){tkz@rt}%
- \tkz@@CalcLengthcm(#4,#5){tkz@rf}%
- \or% 1
- \def\tkz@rt{#3}%
- \def\tkz@rf{#5}%
+ \tkz@@CalcLengthcm(#2,#3){tkz@rt}%
+ \tkz@@CalcLengthcm(#4,#5){tkz@rf}%
+ \or% 1
+ \def\tkz@rt{#3}%
+ \def\tkz@rf{#5}%
\fi
- \pgfinterruptboundingbox
- \path[coordinate](barycentric cs:#2=-\tkz@rf,#4=\tkz@rt) coordinate(tkzPointResult);
+\pgfinterruptboundingbox
+\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}
+\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}}
+\tkz@ax\pgf@x %
+\tkz@ay\pgf@y %
+\edef\tkzcax{\strip@pt\tkz@ax}%
+\edef\tkzcay{\strip@pt\tkz@ay}%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#4}{center}}
+\pgfextracty{\pgf@y}{\pgfpointanchor{#4}{center}}
+\tkz@bx\pgf@x %
+\tkz@by\pgf@y %
+\edef\tkzcbx{\strip@pt\tkz@bx}%
+\edef\tkzcby{\strip@pt\tkz@by}%
+\edef\tkztpmx{\tkz@Dec{(\tkzcax*(-\tkz@rf) + \tkzcbx*\tkz@rt)/(\tkz@rt - (\tkz@rf))}}
+\edef\tkztpmy{\tkz@Dec{(\tkzcay*(-\tkz@rf) + \tkzcby*\tkz@rt)/(\tkz@rt - (\tkz@rf))}}
+ \pgfcoordinate{tkzPointResult}{\pgfqpoint{\tkztpmx pt}{\tkztpmy pt}}
\endpgfinterruptboundingbox
\endgroup
}
@@ -306,14 +355,16 @@
\pgf@process{\pgfpointanchor{#3}{center}}%
\tkz@cx\pgf@x%
\tkz@cy\pgf@y%
- \advance\tkz@cx by\tkz@ax\relax%
- \advance\tkz@cy by\tkz@ay\relax%
- \advance\tkz@cx by\tkz@bx\relax%
- \advance\tkz@cy by\tkz@by\relax%
- \divide\tkz@cx by3\relax%
- \divide\tkz@cy by3\relax
+ \edef\tkzcax{\strip@pt\tkz@ax}%
+ \edef\tkzcay{\strip@pt\tkz@ay}%
+ \edef\tkzcbx{\strip@pt\tkz@bx}%
+ \edef\tkzcby{\strip@pt\tkz@by}%
+ \edef\tkzccx{\strip@pt\tkz@cx}%
+ \edef\tkzccy{\strip@pt\tkz@cy}%
+ \edef\tkztpmx{\tkz@Dec{(\tkzcax + \tkzcbx + \tkzccx)/3}}
+ \edef\tkztpmy{\tkz@Dec{(\tkzcay + \tkzcby + \tkzccy)/3}}
\pgfinterruptboundingbox
- \pgfcoordinate{tkzPointResult}{\pgfqpoint{\tkz@cx}{\tkz@cy}}
+ \pgfcoordinate{tkzPointResult}{\pgfqpoint{\tkztpmx pt}{\tkztpmy pt}}
\endpgfinterruptboundingbox
\endgroup
}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-with.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-with.tex
new file mode 100644
index 0000000000..73a3d9799f
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-with.tex
@@ -0,0 +1,269 @@
+% tkz-obj-lua-points-with.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-obj-lua-points-with.tex}
+\makeatletter
+%<--------------------------------------------------------------------------–>
+% Vectors
+%<--------------------------------------------------------------------------–>
+% Objet : outils mathématiques pour la géométrie euclideienne avec pgf/tikz
+% utilisable de préférence avec un repère orthonormé et le cm comme unité
+% utile pour la compatibilité avec pgf 2
+%<--------------------------------------------------------------------------–>
+% Duplicate Length à revoir pas de pt pas de global
+% ||v(CN)||= ||v(AB)|| et v(CN) colineaire à v(CD)
+% A-->#1 B-->#2 C-->#3 D-->#4 N-->#5 ?????
+%<--------------------------------------------------------------------------–>
+%<--------------------------------------------------------------------------–>
+% Outils pour les vecteurs
+%<--------------------------------------------------------------------------–>
+% ce sont des outils élémentaires qui à partir de deux points en définissent
+% un troisième
+% #1 si c'est une option alors c'est un nombre réel
+% #2 et #3 sont deux points
+% #4 est le nom du point qui résulte de la transformation
+% exemple : \tkzVecKNorm (A,B){C} définit un point C tel que AC = 1 et C est % % un point de la droite (AC). #1 peut être négatif
+
+\def\tkzDuplicateSegment(#1,#2)(#3,#4){%
+\begingroup
+ \tkz@@CalcLength(#1,#2){tkz@firstlen}%
+ \tkz@@CalcLength(#3,#4){tkz@secondlen}%
+ \edef\tkz@ratio{\tkz@Dec{\tkz@firstlen/\tkz@secondlen}}
+ \tkz@VecKCoLinear[\tkz@ratio](#3,#4,#3)%
+\endgroup
+}
+\let\tkzDuplicateLength\tkzDuplicateSegment
+%<--------------------------------------------------------------------------–>
+% Coordonnées d'un vecteur (couple de points)
+% Deux points A et B donc un vecteur on récupère les coordonnées de v(AB)
+% en cm
+% tkzGetVecCoord en cm ou en pt ???
+%<--------------------------------------------------------------------------–>
+%result in #3x et #3y #1 et #2 sont les points
+% passage en cm avec fp ?
+% 28.45274 =1 cm
+\def\tkzGetVectxy(#1,#2)#3{%
+\begingroup
+\pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#2}{center}}%
+\pgfmathparse{\pgf@sys@tonumber{\pgf@x}/1cm}%
+\let\tkzresultx\pgfmathresult
+\pgfmathparse{\pgf@sys@tonumber{\pgf@y}/1cm}%
+\let\tkzresulty\pgfmathresult
+\global\expandafter\edef\csname #3x\endcsname{\tkzresultx}%
+\global\expandafter\edef\csname #3y\endcsname{\tkzresulty}%
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% options #1 two points #2,#3 result in #4
+%
+%<--------------------------------------------------------------------------–>
+%<--------------------------------------------------------------------------–>
+% tkzDefPointWith
+%<--------------------------------------------------------------------------–>
+\def\tkz@numv{0}
+\pgfkeys{/@pointwith/.cd,
+ colinear/.code args = {at #1}{\def\tkz@numv{0}\def\tkz@frompoint{#1}},
+ orthogonal/.code = {\def\tkz@numv{1}},
+ linear/.code = {\def\tkz@numv{2}},
+ orthogonal normed/.code = {\def\tkz@numv{3}},
+ linear normed/.code = {\def\tkz@numv{4}},
+ colinear normed/.code args = {at #1}{\def\tkz@numv{5}\def\tkz@frompoint{#1}},
+ K/.code = {\edef\tkz@coeff{\fpeval{#1}}},
+ K = 1,
+ normed/.is if = tkz@line@normed,
+ normed/.default = true,
+ normed = false,
+ orthogonal
+}
+\def\tkzDefPointWith{\pgfutil@ifnextchar[{\tkz@DefPointWith}{\tkz@DefPointWith[]}}
+
+\def\tkz@DefPointWith[#1](#2,#3){%
+\begingroup
+\pgfkeys{/@pointwith/.cd,K=1}
+\pgfqkeys{/@pointwith}{#1}
+\ifcase\tkz@numv%
+ % first case 0
+ \tkz@DefVectorColinearat[\tkz@coeff](#2,#3)
+ \or% 1
+ \tkz@VecKOrth[\tkz@coeff](#2,#3)
+ \or% 2
+ \tkz@VecK[\tkz@coeff](#2,#3)
+ \or% 3
+ \tkz@VecKOrthNorm[\tkz@coeff](#2,#3)
+ \or% 4
+ \tkz@VecKNorm[\tkz@coeff](#2,#3)
+ \or% 5
+ \tkz@VecKColinearNorm[\tkz@coeff](#2,#3)
+ \fi
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% tkzDefVectorfrom
+%<--------------------------------------------------------------------------–>
+% tkz@numv 0
+\def\tkz@DefVectorColinearat[#1](#2,#3){%
+\iftkz@line@normed
+ \tkz@VecKColinearNorm[#1](#2,#3)
+\else
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#2}{center}}{\pgfpointanchor{#3}{center}}%
+ \pgf@xa=\pgf@x\relax%
+ \pgf@ya=\pgf@y\relax%
+ \pgfinterruptboundingbox
+ \path (\tkz@frompoint)--++(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya) coordinate (tkzPointResult);
+ \endpgfinterruptboundingbox
+\endgroup
+\fi
+}
+%<--------------------------------------------------------------------------–>
+% tkzVector K Orth coeff dans #1
+% v(AN) perp v(AB) (v(AB) , v(AN) ) sens direct cercle trigo
+% ||v(AN)||=||v(AB)||
+%<--------------------------------------------------------------------------–>
+% tkz@numv 1
+\def\tkzVecKOrth{\pgfutil@ifnextchar[{\tkz@VecKOrth}{\tkz@VecKOrth[1]}}
+\def\tkz@VecKOrth[#1](#2,#3){%
+\iftkz@line@normed
+ \tkz@VecKOrthNorm[#1](#2,#3)
+\else
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#2}{center}}{\pgfpointanchor{#3}{center}}%
+ \pgf@xa=-\pgf@y%
+ \pgf@ya=\pgf@x%
+ \pgfinterruptboundingbox
+ \path (#2)--++(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya) coordinate (tkzPointResult);
+ \endpgfinterruptboundingbox
+\endgroup
+\fi
+}%
+
+%<--------------------------------------------------------------------------–>
+% v(AN)=#1 x v(AB)
+% #1 le coeff; #2--> A #3--> B #4-->N tq #4-#2 = #1*(#3-#2)
+%<--------------------------------------------------------------------------–>
+% tkz@numv 2
+\def\tkzVecK{\pgfutil@ifnextchar[{\tkz@VecK}{\tkz@VecK[1]}}
+\def\tkz@VecK[#1](#2,#3){%
+\iftkz@line@normed
+ \tkz@VecKNorm[#1](#2,#3)
+\else
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#2}{center}}%
+ {\pgfpointanchor{#3}{center}}%
+ \pgf@xa=\pgf@x\relax%
+ \pgf@ya=\pgf@y\relax%
+ \pgfmathparse{#1}
+ \let\tkz@coeff\pgfmathresult
+ \pgfinterruptboundingbox
+ \path (#2)--++(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya) coordinate (tkzPointResult);
+ \endpgfinterruptboundingbox
+\endgroup
+\fi
+}%
+%<--------------------------------------------------------------------------–>
+% tkzVecKOrthNorm coeff dans #1
+% v(AN) perp v(AB) v(AB) v(AN) sens direct cercle trigo
+% ||v(AN||=1 si #1 est vide ou =1 sinon ||v(AN||=K
+%<--------------------------------------------------------------------------–>
+% tkz@numv 3
+\def\tkzVecKOrthNorm{\pgfutil@ifnextchar[{\tkz@VecKOrthNorm}%
+ {\tkz@VecKOrthNorm[1]}}
+\def\tkz@VecKOrthNorm[#1](#2,#3){%
+\begingroup
+ \tkzpointnormalised{\pgfpointdiff{\pgfpointanchor{#2}{center}}%
+ {\pgfpointanchor{#3}{center}}}
+ \pgf@xa=-\pgf@y\relax%
+ \pgf@ya=\pgf@x\relax%
+ \pgfmathparse{#1}
+ \let\tkz@tmp\pgfmathresult
+ \edef\tkz@x{\tkz@Dec{28.45274*\tkz@tmp*\strip@pt\pgf@xa}}
+ \edef\tkz@y{\tkz@Dec{28.45274*\tkz@tmp*\strip@pt\pgf@ya}}
+ \pgfinterruptboundingbox
+ \path (#2)--++(\tkz@x pt,\tkz@y pt) coordinate (tkzPointResult);
+ \endpgfinterruptboundingbox
+\endgroup
+}%
+%<--------------------------------------------------------------------------–>
+% VectorNormalised ou K*VectorNormalised
+% A-->#2 B-->#3 N-->#4 v(AB) devient v(AN) tq ||v(AN)||=1 si #1=1
+% sinon ||v(AN)||=#1
+%<--------------------------------------------------------------------------–>
+% tkz@numv 4
+\def\tkzVecKNorm{\pgfutil@ifnextchar[{\tkz@VecKNorm}{\tkz@VecKNorm[1]}}
+\def\tkz@VecKNorm[#1](#2,#3){%
+\begingroup
+ \tkzpointnormalised{%
+ \pgfpointdiff{\pgfpointanchor{#2}{center}}
+ {\pgfpointanchor{#3}{center}}}
+ \pgf@xa=\pgf@x\relax%
+ \pgf@ya=\pgf@y\relax%
+ \pgfmathparse{#1}
+ \let\tkz@tmp\pgfmathresult
+ \edef\tkz@x{\tkz@Dec{28.45274*\tkz@tmp*\strip@pt\pgf@xa}}
+ \edef\tkz@y{\tkz@Dec{28.45274*\tkz@tmp*\strip@pt\pgf@ya}}
+ \pgfinterruptboundingbox
+ \path (#2)--++(\tkz@x pt,\tkz@y pt) coordinate (tkzPointResult);
+ \endpgfinterruptboundingbox
+\endgroup
+}%
+%<--------------------------------------------------------------------------–>
+% \tkz@VecKColinearNorm
+%<--------------------------------------------------------------------------–>
+%% tkz@numv 5
+\def\tkz@VecKColinearNorm[#1](#2,#3){%
+\begingroup
+ \tkzpointnormalised{%
+ \pgfpointdiff{\pgfpointanchor{#2}{center}}
+ {\pgfpointanchor{#3}{center}}}
+ \pgf@xa=\pgf@x\relax%
+ \pgf@ya=\pgf@y\relax%
+ \edef\tkz@x{\tkz@Dec{28.45274*(\tkz@coeff)*\strip@pt\pgf@xa}}
+ \edef\tkz@y{\tkz@Dec{28.45274*(\tkz@coeff)*\strip@pt\pgf@ya}}
+ \pgfinterruptboundingbox
+ \path (\tkz@frompoint)--++(\tkz@x pt,\tkz@y pt) coordinate (tkzPointResult);
+ \endpgfinterruptboundingbox
+\endgroup
+}%
+%<--------------------------------------------------------------------------–>
+% VecKCoLinear CN = K x AB #1 pt #2 pt #3 pt #4 nb #5 pt result
+% il faut modifier cette macro : on supprime #3 pour la colinéarité
+% Il suffit d'utiliser Replicate ou Duplicate coeff dans #1
+% v(CD)=#1 x v(AB) #1 le coeff; #2-->A #3-->B #4-->C
+%<--------------------------------------------------------------------------–>
+\def\tkz@VecKCoLinear[#1](#2,#3,#4){%
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#2}{center}}%
+ {\pgfpointanchor{#3}{center}}%
+ \pgf@xa=\pgf@x\relax%
+ \pgf@ya=\pgf@y\relax%
+ \edef\tkz@coeff{\fpeval{#1}}
+ \pgfinterruptboundingbox
+ \path (#4)--+(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya) coordinate (tkzPointResult);
+ \endpgfinterruptboundingbox
+\endgroup
+}%
+\def\tkz@VecCoLinear(#1,#2,#3){%
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#2}{center}}%
+ \pgf@xa=\pgf@x\relax%
+ \pgf@ya=\pgf@y\relax%
+ \pgfinterruptboundingbox
+ \path (#3)--+(\pgf@xa,\pgf@ya) coordinate (tkzPointResult);
+ \endpgfinterruptboundingbox
+\endgroup
+}%
+\makeatother
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points.tex
new file mode 100644
index 0000000000..4a81392c5d
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points.tex
@@ -0,0 +1,169 @@
+ % tkz-obj-lua-points.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-obj-lua-points.tex}
+\makeatletter
+%<--------------------------------------------------------------------------->
+% init def point
+%<--------------------------------------------------------------------------->
+% tkzDefPoint
+%<--------------------------------------------------------------------------->
+% macros complémentaires pour def point
+%<--------------------------------------------------------------------------->
+\def\tkz@parsecoordinate#1{%
+\tkz@getseparator#1,\@nil
+\iftkz@polar
+ \tkz@getfrompolar#1\@nil
+\else
+ \tkz@getfromcart#1\@nil
+\fi
+}
+\def\tkz@getseparator#1,#2\@nil{%
+\ifx\tkzempty#2\tkzempty%
+ \tkz@polartrue
+\else
+ \tkz@polarfalse
+\fi
+}
+\def\tkz@getfrompolar#1:#2\@nil{%
+\edef\tkz@a{\fpeval{#1}}
+\edef\tkz@r{\fpeval{#2}}
+\xdef\tkz@polarrad{\tkz@r}
+\xdef\tkz@polarangle{\tkz@a}
+}
+\def\tkz@getfromcart#1,#2\@nil{%
+\edef\tkz@x{\fpeval{#1}}
+\edef\tkz@y{\fpeval{#2}}
+\xdef\tkz@absc{\tkz@x}
+\xdef\tkz@ord{\tkz@y}
+}
+%<--------------------------------------------------------------------------->
+% options pour point definition
+%<--------------------------------------------------------------------------->
+\pgfkeys{/tkzPt/.cd,
+ polar/.is if = tkz@pt@polar,
+ polar/.default = true,
+ polar = false
+}
+%<--------------------------------------------------------------------------->
+% tkz@ptStar
+%<--------------------------------------------------------------------------->
+\def\tkz@ptStar[#1](#2,#3)#{%
+\pgfkeys{/tkzPt/.cd, polar = false}
+\pgfqkeys{/tkzPt}{#1}
+\iftkz@pt@polar%
+ \edef\tkz@x{\fpeval{#3*cosd(#2)}}
+ \edef\tkz@y{\fpeval{#3*sind(#2)}}
+\else
+ \edef\tkz@x{\fpeval{#2}}
+ \edef\tkz@y{\fpeval{#3}}
+\fi
+\edef\tkzpt@xa{\tkz@Dec{(\tkz@x-(\tkz@init@xorigine))/\tkz@init@xstep}}
+\edef\tkzpt@ya{\tkz@Dec{(\tkz@y-(\tkz@init@yorigine))/\tkz@init@ystep}}
+\tkz@node
+}
+%<--------------------------------------------------------------------------->
+% la macro defpoint les coordonnées cartésiennes ou polaires sont traitées
+% afin de pouvoir être adaptées avec les unités choisies
+%<--------------------------------------------------------------------------->
+\def\tkzDefPoint{\pgfutil@ifnextchar[{\tkz@DefPoint}{\tkz@DefPoint[]}}
+
+\def\tkz@DefPoint[#1](#2)#{%
+\tkz@parsecoordinate{#2}
+\iftkz@polar
+ \tkz@ptStar[polar](\tkz@polarangle,\tkz@polarrad){tkz@coord@temp}
+\else
+ \tkz@ptStar[](#2){tkz@coord@temp}
+\fi
+\tkz@DefPointEnd[#1]
+}%
+\def\tkz@DefPointEnd[#1]#2{\coordinate[#1] (#2) at (tkz@coord@temp);}
+%<--------------------------------------------------------------------------->
+% tkzDefPoints
+%<--------------------------------------------------------------------------->
+\def\tkzDefPoints{\pgfutil@ifnextchar[{\tkz@DefPoints}{\tkz@DefPoints[]}}
+\def\tkz@DefPoints[#1]#2{%
+ \begingroup
+ \def\tkz@parenthesis@for@err{(}%
+ \def\tkz@maybe@parenthesis{#2}%
+ \ifx\tkz@maybe@parenthesis\tkz@parenthesis@for@err
+ \PackageError{tkz-base}{Syntax error use {} instead of ()}{You need to use {} instead of ()}%
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {\tkz@absorb@bad@arg}%
+ {\foreach \ptx/\pty/\name in {#2}{\tkzDefPoint[#1](\ptx,\pty){\name}}%
+ \endgroup}%
+}
+\def\tkz@absorb@bad@arg#1){\endgroup}
+%<--------------------------------------------------------------------------->
+\def\tkz@node#1{ \pgfinterruptboundingbox
+\path[coordinate](\tkzpt@xa,\tkzpt@ya) coordinate(#1);
+ \endpgfinterruptboundingbox}
+%<--------------------------------------------------------------------------->
+\def\tkzRenamePoint(#1)#2{\coordinate (#2) at (#1);}
+\def\tkz@RenamePointEnd[#1]#2{\coordinate[#1] (#2) at (\tkz@ax,\tkz@ay);}
+\def\tkzGetPoint#1{\coordinate (#1) at (tkzPointResult);}
+\def\tkzGetPoints#1#2{\coordinate (#1) at (tkzFirstPointResult);
+ \coordinate (#2) at (tkzSecondPointResult);}
+\def\tkzGetFirstPoint#1{\coordinate (#1) at (tkzFirstPointResult);}
+\def\tkzGetSecondPoint#1{\coordinate (#1) at (tkzSecondPointResult);}
+\def\tkzGetThirdPoint#1{\coordinate (#1) at (tkzThirdPointResult);}
+\def\tkzDefShiftPointCoord[#1](#2)#3{%
+ \begin{scope}[shift={(#1)}]
+ \coordinate (#3) at (#2);
+ \end{scope}
+ }%
+%<--------------------------------------------------------------------------–>
+%<--------------------------------------------------------------------------–>
+%<--------------------------------------------------------------------------–>
+
+%<--------------------------------------------------------------------------->
+% tkzDefShiftPoint
+%<--------------------------------------------------------------------------->
+\def\tkzDefShiftPoint[#1](#2)#3{%
+ \tkz@@extractxy{#1}
+ \tkz@ax\pgf@x %
+ \tkz@ay\pgf@y %
+\begin{scope}[shift={(\tkz@ax,\tkz@ay)}]
+ \coordinate (#3) at (#2);
+\end{scope}
+}
+%<--------------------------------------------------------------------------->
+% Coordonnées d'un point
+% result in #2x et #2y #1 est le point et on récupère ses coordonnées
+% usage soit A un point \tkzGetPointCoord(A){V} alors \Vx = xA et \Vy = yA
+% en cm
+% tkzGetPointCoord avec [#1] cm ou bien pt ?? todo
+%<--------------------------------------------------------------------------->
+\def\tkzGetPointCoord(#1)#2{%
+\begingroup
+ \pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}
+ \pgfmathparse{\pgf@sys@tonumber{\pgf@x}/28.45274}
+ \global\let\tkzresultx\pgfmathresult
+ \global\expandafter\edef\csname #2x\endcsname{\tkzresultx}%
+ \pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}
+ \pgfmathparse{\pgf@sys@tonumber{\pgf@y}/28.45274}
+ \global\let\tkzresulty\pgfmathresult
+ \global\expandafter\edef\csname #2y\endcsname{\tkzresulty}
+\endgroup
+}
+\def\tkz@@extractxy#1{%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}
+\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}
+}
+\let\tkzGetPointxy\tkzGetPointCoord
+\makeatother
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-axesmin.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-axesmin.tex
index ab81c6d3ec..3d2fedacc2 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-axesmin.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-axesmin.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-axesmin.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-axesmin}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-axesmin}
\makeatletter
\def\removedot#1.{#1}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-circles-by.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles-by.tex
index 03f81e35f8..b4f7f8ebaf 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-circles-by.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles-by.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-circles.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-circles.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-circles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% tkzCircle center and one point
@@ -118,10 +118,9 @@
\tkz@@CalcLengthcm(#1,#2){tkz@lna}%
\tkz@@CalcLengthcm(#1,#3){tkz@lnb}%
\gdef\tkzMathResult{\fpeval{round(abs(\tkz@lnb - \tkz@lna),6)}}
- \ifdim\tkzMathResult pt < 1 pt\relax%
+ \ifdim\tkzMathResult pt < 1 pt\relax%
\tkzURotateAngle(#1,-90)(#2)
\pgfnodealias{tkz@a}{tkzPointResult}
-
\tkzUInversePoint(#3,#4)(tkz@a)
\pgfnodealias{tkzFirstPointResult}{tkzPointResult}
\tkzUInversePoint(#3,#4)(#2)
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-circles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles.tex
index 487ef547cd..4428f407f5 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-circles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-circles.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-circles.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-circles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% tkzCircle center and one point
@@ -80,16 +80,6 @@
\tkzRenamePoint(tkzSecondPointResult){tkzPointResult}
\endgroup
}
-%<--------------------------------------------------------------------------–>
-% Through Circle center and point
-%<--------------------------------------------------------------------------–>
-\def\tkzDefCircleThrough(#1,#2){%
-\begingroup
- \tkz@@CalcLengthcm(#1,#2){tkzLengthResult}
- \node [draw,circle through=(#2)] at (#1) {};
- \tkzRenamePoint(#1){tkzPointResult}
-\endgroup
-}
%<--------------------------------------------------------------------------–>
% Diameter Circle
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-grids.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-grids.tex
index 14d476fede..c6c1be300d 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-grids.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-grids.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-grids.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-grids.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-grids.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Setup Grid
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-lines.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex
index 3a2875c829..5d5e2934fe 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-lines.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-lines.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-lines.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-lines.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% les lignes
@@ -162,7 +162,7 @@
%<--------------------------------------------------------------------------–>
\def\tkzDefBisectorOutLine(#1,#2,#3){%
\begingroup
- \pgfinterruptboundingbox
+\pgfinterruptboundingbox
\tkzDuplicateLength(#2,#1)(#2,#3)
\pgfnodealias{out@tmp}{tkzPointResult}
\tkzDefMidPoint(#1,out@tmp)
@@ -175,7 +175,7 @@
\iftkz@line@normed
\tkzVecKNorm[\tkz@koeff](#2,tkzPointResult)
\fi
- \endpgfinterruptboundingbox
+\endpgfinterruptboundingbox
\endgroup
}
%<--------------------------------------------------------------------------–>
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-by.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-by.tex
index fc8b53160c..2af038e957 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-by.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-by.tex
@@ -1,5 +1,5 @@
% tkz-tools-eu-points-by.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-tools-eu-points-by.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tools-eu-points-by.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Transformations Géométriques
@@ -130,7 +130,7 @@
\ifx\tkz@FirstPoint\tkzutil@empty
\def\tkz@pointtsf{\PT '}
\else
- \def\tkz@pointtsf{\tkz@FirstPoint}
+ \def\tkz@pointtsf{\tkz@FirstPoint}
\fi
\tkz@VecCoLinear(#1,#2,\PT)
\pgfnodealias{\tkz@pointtsf}{tkzPointResult}
@@ -328,21 +328,21 @@
%<--------------------------------------------------------------------------–>
\def\tkzURotateAngle(#1,#2)(#3){%
\begingroup
- \pgf@process{\pgfpointanchor{#3}{center}}%
- \tkz@ax\pgf@x%
- \tkz@ay\pgf@y%
- \pgf@process{\pgfpointanchor{#1}{center}}%
- \tkz@bx\pgf@x%
- \tkz@by\pgf@y%
- \pgfmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}%
- {\pgfpoint{\tkz@bx}{\tkz@by}}%
- {#2}
- \tkz@bx\pgf@x%
- \tkz@by\pgf@y%
- \pgfinterruptboundingbox
- \path (\tkz@bx,\tkz@by) coordinate (tkzPointResult);%
- \endpgfinterruptboundingbox
- \endgroup
+ \pgf@process{\pgfpointanchor{#3}{center}}%
+ \tkz@ax\pgf@x%
+ \tkz@ay\pgf@y%
+ \pgf@process{\pgfpointanchor{#1}{center}}%
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \pgfmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {\pgfpoint{\tkz@bx}{\tkz@by}}%
+ {#2}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \pgfinterruptboundingbox
+ \path (\tkz@bx,\tkz@by) coordinate (tkzPointResult);%
+ \endpgfinterruptboundingbox
+\endgroup
}
%<--------------------------------------------------------------------------–>
% % rotation en radian
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-rnd.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex
index 8d604321ed..a5aa32776a 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-rnd.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-points-rnd.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-points-rnd.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-points-rnd.tex}
%<--------------------------------------------------------------------------–>
\makeatletter
%<-------------------------------------------------------------------------–>
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-with.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-with.tex
index e530dd5dfd..b650e32727 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-with.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-with.tex
@@ -1,5 +1,5 @@
% tkz-obj-el-points-with.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-points-with.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-points-with.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Vectors
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points.tex
index e3dbc6e7cf..5a247848dd 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-points.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-points.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-points.tex}
\makeatletter
%<--------------------------------------------------------------------------->
% init def point
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-polygons.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-polygons.tex
index 79fd6e561a..4c79826734 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-polygons.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-polygons.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-polygons.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-polygons.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-polygons.tex}
% bug in regular polygon side 2020/03/09
\makeatletter
%<--------------------------------------------------------------------------–>
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-triangles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-triangles.tex
index 9879bd6768..738221b1b6 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-triangles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-triangles.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-triangles.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-triangles.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-triangles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Triangle Equilateral
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg
index 4d7415232e..a67e46e31a 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg
@@ -1,5 +1,5 @@
% tkz-euclide.cfg
-% Copyright 2022 Alain Matthes
+% 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.
@@ -16,9 +16,9 @@
% and save the file in a directory part of your TEXINPUTS environment
% variable.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-euclide.cfg}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-euclide.cfg}
%<------ colors ---------------------------------------–>
\def\tkz@backgroundcolor{white}
\def\tkz@textcolor{black}
@@ -134,7 +134,7 @@ arc style/.style={%
\def\tkz@mk@fill{\tkz@otherlinecolor}
%<--------------------------------------------------------------------------–>
%<------------------------------ styles ---------------------------------–>
-\def\tkzSetUpStyle[#1]#2{\tikzset{#2/.style={#1}}}% add 2022
+\def\tkzSetUpStyle[#1]#2{\tikzset{#2/.style={#1}}}% add 2023
\tikzset{xlabel style/.style = {below = 3 pt,
inner sep = 1pt,
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty
index d0eb08def5..3b2c9f4365 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty
@@ -1,5 +1,5 @@
% tkz-euclide.sty
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,11 +10,16 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
%-------------------------------------------------------------------------------
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-euclide.sty}
+\def\fileversion{5.00c}
+\def\filedate{2023/11/03}
+\typeout{2023/11/03 5.00c tkz-euclide.sty}
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{tkz-euclide}[ 2022/09/23 4.25c for pure Euclidean Geometry ]
+\ProvidesPackage{tkz-euclide}[ 2023/11/03 5.00c for pure Euclidean Geometry ]
+\newif\if@tkzlua
+\@tkzluafalse
+\DeclareOption{lua}{\@tkzluatrue}
+\ProcessOptions\relax
+
\@ifpackageloaded{tkz-base}{
\newdimen\tkzRadius
\newdimen\tkzLength
@@ -148,45 +153,66 @@
\def\tkz@tmp@ya{-5}
\def\tkz@tmp@yb{+5}
%-------------------------------------------------------------------------------
-\DeclareOption*{}
-\ProcessOptions
+% \DeclareOption*{}
+% \ProcessOptions
%<---------------------------------------------------------->
% Initialisation
%<---------------------------------------------------------->
+\if@tkzlua
+\RequirePackage{luacode}
+\fi
+
+
\@ifpackageloaded{tkz-base}{}{%
-% from base
+% from base
+\input{tkz-lib-eu-marks.tex}
+\input{tkz-lib-eu-shape.tex}
\input{tkz-tools-eu-base.tex}
\input{tkz-tools-eu-utilities.tex}
\input{tkz-tools-eu-BB.tex}
-\input{tkz-obj-eu-grids.tex}
-\input{tkz-lib-eu-marks.tex}
+\input{tkz-tools-eu-colors.tex}
\input{tkz-tools-eu-text.tex}
-\input{tkz-lib-eu-shape.tex}
+\input{tkz-obj-eu-grids.tex}
\input{tkz-obj-eu-axesmin.tex}
-\input{tkz-tools-eu-colors.tex}
\input{tkz-obj-eu-points.tex}
-\input{tkz-obj-eu-draw-points.tex}
+\input{tkz-draw-eu-points.tex}
}
-% next from euclide
-\input{tkz-tools-eu-angles}
-\input{tkz-tools-eu-intersections}
+% % next from euclide
+\makeatletter
+\if@tkzlua
+\input{tkz-tools-lua-base.tex}
+\input{tkz-obj-lua-points.tex}
+\input{tkz-tools-lua-math.tex}
+\input{tkz-tools-lua-intersections.tex}
+\input{tkz-obj-lua-points-by.tex}
+\input{tkz-obj-lua-points-with.tex}
+\input{tkz-obj-lua-points-spc.tex}
+\input{tkz-tools-lua-angles.tex}
+\else
+\input{tkz-obj-eu-points.tex}
+\input{tkz-obj-eu-points-by.tex}
\input{tkz-tools-eu-math.tex}
-\input{tkz-obj-eu-compass.tex}
+\input{tkz-tools-eu-intersections.tex}
+\input{tkz-obj-eu-points-with.tex}
+\input{tkz-obj-eu-points-spc.tex}
+\input{tkz-tools-eu-angles.tex}
+ \fi
+
+\input{tkz-obj-eu-points-rnd.tex}
\input{tkz-obj-eu-circles.tex}
\input{tkz-obj-eu-circles-by.tex}
-\input{tkz-obj-eu-draw-angles.tex}
-\input{tkz-obj-eu-draw-circles.tex}
-\input{tkz-obj-eu-draw-lines.tex}
-\input{tkz-obj-eu-draw-polygons.tex}
\input{tkz-obj-eu-lines.tex}
-\input{tkz-obj-eu-points-by.tex}
-\input{tkz-obj-eu-points-rnd.tex}
-\input{tkz-obj-eu-points-spc.tex}
-\input{tkz-obj-eu-points-with.tex}
\input{tkz-obj-eu-polygons.tex}
-\input{tkz-obj-eu-protractor.tex}
-\input{tkz-obj-eu-sectors.tex}
-\input{tkz-obj-eu-show.tex}
\input{tkz-obj-eu-triangles}
+% drawings
+\input{tkz-draw-eu-lines.tex}
+\input{tkz-draw-eu-circles.tex}
+\input{tkz-draw-eu-polygons.tex}
+\input{tkz-draw-eu-angles.tex}
+\input{tkz-draw-eu-sectors.tex}
+\input{tkz-draw-eu-compass.tex}
+\input{tkz-draw-eu-show.tex}
+\input{tkz-draw-eu-protractor.tex}
+
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-angles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-angles.tex
new file mode 100644
index 0000000000..69fd1110ab
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-angles.tex
@@ -0,0 +1,102 @@
+% tkz-tools-lua-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-tools-lua-angles.tex}
+\makeatletter
+\def\tkzmathrotatepointaround#1#2#3{%
+ \pgf@process{%
+ \pgf@process{#1}%
+ \pgf@xc=\pgf@x%
+ \pgf@yc=\pgf@y%
+ \pgf@process{#2}%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \pgf@xb\pgf@x%
+ \pgf@yb\pgf@y%
+ \pgf@x=\pgf@xc%
+ \pgf@y=\pgf@yc%
+ \advance\pgf@x-\pgf@xa%
+ \advance\pgf@y-\pgf@ya%
+ \pgfmathsetmacro\angle{#3}%
+ \edef\sineangle{\tkz@Dec{\tkz@Sin{\tkz@Rad{\angle}}}}%
+ \edef\cosineangle{\tkz@Dec{\tkz@Cos{\tkz@Rad{\angle}}}}%
+ \pgf@xa\cosineangle\pgf@x%
+ \advance\pgf@xa-\sineangle\pgf@y%
+ \pgf@ya\sineangle\pgf@x%
+ \advance\pgf@ya\cosineangle\pgf@y%
+ \pgf@x\pgf@xb%
+ \pgf@y\pgf@yb%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ }%
+}
+
+%<-------------------------------------------------------------------------->
+% Angles
+%<-------------------------------------------------------------------------->
+\def\tkzmathanglebetweenpoints#1#2{
+\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}%
+\edef\tkzax{\strip@pt\pgf@x}%
+\edef\tkzay{\strip@pt\pgf@y}%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}}%
+\edef\tkzbx{\strip@pt\pgf@x}%
+\edef\tkzby{\strip@pt\pgf@y}%
+\edef\tkz@tmp{\tkz@Angle{\tkzax}{\tkzay}{\tkzbx}{\tkzby}}
+\edef\pgfmathresult{\tkz@Dec{\tkz@Round{\tkz@tmp}{2}}}
+}
+%<--------------------------------------------------------------------------–>
+%<--------------------------------------------------------------------------–>
+% thanks karu : http://tex.stackexchange.com/questions/151667/tkzgetangle-strange-behavior/196224#196224
+% \tkzGetAngle strange behavior
+% defines \tkz@FirstAngle and \tkz@SecondAngle sens trigo
+%<--------------------------------------------------------------------------–>
+
+\def\tkzNormalizeAngle(#1,#2){%
+\directlua{angleA, angleB = normalize(#1,#2)
+token.set_macro("tkz@FirstAngle", angleA)
+token.set_macro("tkz@SecondAngle", angleB)
+}}
+%<--------------------------------------------------------------------------–>
+% Angle
+% Recherche l'angle formé par #1 et #2 par rapport à l'horizontale
+%<--------------------------------------------------------------------------–>
+\def\tkzFindSlopeAngle(#1,#2){%
+\begingroup
+ \tkzmathanglebetweenpoints{#1}{#2}
+ \global\let\tkzAngleResult\pgfmathresult
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Angle avec trois nodes
+%<--------------------------------------------------------------------------–>
+\def\tkzFindAngle(#1,#2,#3){% new code 2016
+\begingroup
+ \tkzFindSlopeAngle(#2,#1)\tkzGetAngle{tkz@FirstAngle}
+ \tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@SecondAngle}
+ \tkzNormalizeAngle(\tkz@FirstAngle,\tkz@SecondAngle)
+ \edef\tkz@Angle{\fpeval{\tkz@SecondAngle-\tkz@FirstAngle}}
+ \global\let\tkzAngleResult\tkz@Angle
+\endgroup
+}
+
+%<--------------------------------------------------------------------------–>
+% Find angle
+%<--------------------------------------------------------------------------–>
+\def\tkzGetAngle#1{%
+ \global\expandafter\edef\csname #1\endcsname{\tkzAngleResult}
+}
+\makeatother
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-base.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-base.tex
new file mode 100644
index 0000000000..c31c925187
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-base.tex
@@ -0,0 +1,89 @@
+% tkz-tools-lua-base.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-tools-lua-base.tex}
+\makeatletter
+%<--------------------------------------------------------------------------–>
+\global\let\tkz@tmp@xa\tkz@init@xmin% modif 2016
+\global\let\tkz@tmp@xb\tkz@init@xmax% modif 2016
+\global\let\tkz@tmp@ya\tkz@init@ymin% modif 2016
+\global\let\tkz@tmp@yb\tkz@init@ymax% modif 2016
+%<--------------------------------------------------------------------------–>
+\pgfkeys{
+ /tkzInit/.cd,
+ xmin/.store in = \tkz@init@xmin,
+ xmax/.store in = \tkz@init@xmax,
+ xstep/.store in = \tkz@init@xstep,
+ ymin/.store in = \tkz@init@ymin,
+ ymax/.store in = \tkz@init@ymax,
+ ystep/.store in = \tkz@init@ystep,
+ NO/.is if = tkz@init@NO,
+ NO/.default = true,
+ xmin = 0,
+ xmax = 10,
+ xstep = 1,
+ ymin = 0,
+ ymax = 10,
+ ystep = 1,
+ NO = false
+ }
+
+\def\tkzInit{\pgfutil@ifnextchar[{\tkz@Init}{\tkz@Init[]}}
+\def\tkz@Init[#1]{%
+ \pgfqkeys{/tkzInit}{#1}
+ \ifx\tkzfctloaded\undefined
+ \else
+ \tkz@tkzf@fct=0 % only if tkz-fct loaded
+ \fi
+ \xdef\tkz@init@xorigine{0}
+ \xdef\tkz@init@yorigine{0}
+ \edef\@xsgmin{\fpeval{sign(\tkz@init@xmin)}}
+ \edef\@xsgmax{\fpeval{sign(\tkz@init@xmax)}}
+ \edef\@ysgmin{\fpeval{sign(\tkz@init@ymin)}}
+ \edef\@ysgmax{\fpeval{sign(\tkz@init@ymax)}}
+ \let\tkz@tmp@xa\tkz@init@xmin %modif 2016
+ \let\tkz@tmp@xb\tkz@init@xmax %modif 2016
+ \let\tkz@tmp@ya\tkz@init@ymin %modif 2016
+ \let\tkz@tmp@yb\tkz@init@ymax %modif 2016
+ \tkz@init@NOfalse
+ \ifx\@xsgmin\@xsgmax \tkz@init@NOtrue \fi
+ \ifx\@ysgmin\@ysgmax \tkz@init@NOtrue \fi
+ \iftkz@init@NO%
+ \ifx\@xsgmin\@xsgmax
+ \edef\tkz@init@xmax{\tkz@Dec{\tkz@init@xmax-(\tkz@init@xmin)}}
+ \edef\tkz@init@xorigine{\tkz@init@xmin}
+ \edef\tkz@init@xmin{0}
+ \fi
+ \ifx\@ysgmin\@ysgmax
+ \edef\tkz@init@ymax{\tkz@Dec{\tkz@init@ymax-(\tkz@init@ymin)}}
+ \edef\tkz@init@yorigine{\tkz@init@ymin}
+ \edef\tkz@init@ymin{0}
+ \fi
+ \fi
+ \edef\tkz@xa{\tkz@Dec{\tkz@init@xmin/\tkz@init@xstep}}
+ \edef\tkz@xb{\tkz@Dec{\tkz@init@xmax/\tkz@init@xstep}}
+ \edef\tkz@ya{\tkz@Dec{\tkz@init@ymin/\tkz@init@ystep}}
+ \edef\tkz@yb{\tkz@Dec{\tkz@init@ymax/\tkz@init@ystep}}
+ \tkz@getdecimal{\tkz@init@xstep} % amélioration nb dec et integer
+ \xdef\tkz@init@xdec{\number\c@pgfmath@countb}
+ \tkz@getdecimal{\tkz@init@ystep}
+ \xdef\tkz@init@ydec{\number\c@pgfmath@countb}
+}%
+\def\tkzAddName{\pgfutil@ifnextchar[{\tkz@AddName}{\tkz@AddName[]}}
+\def\tkz@AddName[#1]#2{%
+\node[above left,#1] at (\pgf@path@lastx,\pgf@path@lasty){#2};
+}%
+%<--------------------------------------------------------------------------–>
+\makeatother
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-intersections.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-intersections.tex
new file mode 100644
index 0000000000..050697a1bb
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-intersections.tex
@@ -0,0 +1,525 @@
+% tkz-tools-lua-intersections.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.
+% utf8 encoding
+
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tools-lua-intersections.tex}
+\makeatletter
+%<--------------------------------------------------------------------------–>
+% intersection de deux lignes
+%<--------------------------------------------------------------------------–>
+\def\tkzInterLL(#1,#2)(#3,#4){% méthode avec xfp
+\tkz@InterLL(#1,#2)(#3,#4){tkzPointResult}
+}
+
+\def\tkz@InterLL(#1,#2)(#3,#4)#5{%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}%
+\tkz@ax\pgf@x%
+\tkz@ay\pgf@y%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}}
+\tkz@bx\pgf@x%
+\tkz@by\pgf@y%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#3}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}}%
+\tkz@cx\pgf@x%
+\tkz@cy\pgf@y%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#4}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#4}{center}}%
+\tkz@dx\pgf@x%
+\tkz@dy\pgf@y%
+\edef\tkzax{\strip@pt\tkz@ax}%
+\edef\tkzay{\strip@pt\tkz@ay}%
+\edef\tkzbx{\strip@pt\tkz@bx}%
+\edef\tkzby{\strip@pt\tkz@by}%
+\edef\tkzcx{\strip@pt\tkz@cx}%
+\edef\tkzcy{\strip@pt\tkz@cy}%
+\edef\tkzdx{\strip@pt\tkz@dx}%
+\edef\tkzdy{\strip@pt\tkz@dy}%
+\edef\tkz@deltax{\tkz@Dec{(\tkzax-(\tkzbx))/(28.45274)}}
+\edef\tkz@deltaxx{\tkz@Dec{(\tkzcx-(\tkzdx))/(28.45274)}}
+\edef\tkz@deltay{\tkz@Dec{(\tkzay-(\tkzby))/(28.45274)}}
+\edef\tkz@deltayy{\tkz@Dec{(\tkzcy-(\tkzdy))/(28.45274)}}
+\edef\tkz@deltaxy{\tkz@Dec{((\tkzax*\tkzby)-(\tkzay*\tkzbx))/(809.55841)}}
+\edef\tkz@deltaxxyy{\tkz@Dec{((\tkzcx*\tkzdy)-(\tkzcy*\tkzdx))/(809.55841)}}
+\edef\tkz@div{\tkz@Dec{(\tkz@deltax*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxx)}}
+\edef\tkz@numx{\tkz@Dec{(\tkz@deltaxy*\tkz@deltaxx)-(\tkz@deltax*\tkz@deltaxxyy)}}
+\edef\tkz@numy{\tkz@Dec{(\tkz@deltaxy*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxxyy)}}
+\edef\tkz@xs{\tkz@Dec{\tkz@numx/\tkz@div}}
+\edef\tkz@ys{\tkz@Dec{\tkz@numy/\tkz@div}}
+\edef\tkz@xs{\tkz@Round{\tkz@xs}{5}}
+\edef\tkz@ys{\tkz@Round{\tkz@ys}{5}}
+\path[coordinate](\tkz@xs,\tkz@ys) coordinate (#5);
+}
+
+
+% méthode with coordinates
+\def\tkzInterLLxy(#1,#2,#3,#4)(#5,#6,#7,#8){%
+%\path (intersection of #1--#2 and #3--#4) coordinate(#5);%
+\tkz@ax#1%
+\tkz@ay#2%
+\tkz@bx#3%
+\tkz@by#4%
+\tkz@cx#5%
+\tkz@cy#6%
+\tkz@dx#7%
+\tkz@dy#8%
+\edef\tkzax{\strip@pt\tkz@ax}%
+\edef\tkzay{\strip@pt\tkz@ay}%
+\edef\tkzbx{\strip@pt\tkz@bx}%
+\edef\tkzby{\strip@pt\tkz@by}%
+\edef\tkzcx{\strip@pt\tkz@cx}%
+\edef\tkzcy{\strip@pt\tkz@cy}%
+\edef\tkzdx{\strip@pt\tkz@dx}%
+\edef\tkzdy{\strip@pt\tkz@dy}%
+\edef\tkz@deltax{\tkz@Dec{(\tkzax-(\tkzbx))/(28.45274)}}
+\edef\tkz@deltaxx{\tkz@Dec{(\tkzcx-(\tkzdx))/(28.45274)}}
+\edef\tkz@deltay{\tkz@Dec{(\tkzay-(\tkzby))/(28.45274)}}
+\edef\tkz@deltayy{\tkz@Dec{(\tkzcy-(\tkzdy))/(28.45274)}}
+\edef\tkz@deltaxy{\tkz@Dec{((\tkzax*\tkzby)-(\tkzay*\tkzbx))/(809.55841)}}
+\edef\tkz@deltaxxyy{\tkz@Dec{((\tkzcx*\tkzdy)-(\tkzcy*\tkzdx))/(809.55841)}}
+\edef\tkz@div{\tkz@Dec{(\tkz@deltax*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxx)}}
+\edef\tkz@numx{\tkz@Dec{(\tkz@deltaxy*\tkz@deltaxx)-(\tkz@deltax*\tkz@deltaxxyy)}}
+\edef\tkz@numy{\tkz@Dec{(\tkz@deltaxy*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxxyy)}}
+\edef\tkz@xs{\tkz@Dec{\tkz@numx/\tkz@div}}
+\edef\tkz@ys{\tkz@Dec{\tkz@numy/\tkz@div}}
+\edef\tkz@xs{\tkz@Round{\tkz@xs}{5}}
+\edef\tkz@ys{\tkz@Round{\tkz@ys}{5}}
+\path[coordinate](\tkz@xs,\tkz@ys) coordinate (tkzPointResult);
+}
+
+%<--------------------------------------------------------------------------–>
+% intersection de Ligne Cercle rayon connu
+%<--------------------------------------------------------------------------–>
+% /*
+% Calculate the intersection of a ray and a sphere
+% The line segment is defined from p1 to p2
+% The sphere is of radius r and centered at sc
+% There are potentially two points of intersection given by
+% p = p1 + mu1 (p2 - p1)
+% p = p1 + mu2 (p2 - p1)
+% Return FALSE if the ray doesn't intersect the sphere.
+% */
+% int RaySphere(XYZ p1,XYZ p2,XYZ sc,double r,double *mu1,double *mu2)
+% {
+% double a,b,c;
+% double bb4ac;
+% XYZ dp;
+%
+% dp.x = p2.x - p1.x;
+% dp.y = p2.y - p1.y;
+% dp.z = p2.z - p1.z;
+% a = dp.x * dp.x + dp.y * dp.y + dp.z * dp.z;
+% b = 2 * (dp.x * (p1.x - sc.x) + dp.y * (p1.y - sc.y) + dp.z * (p1.z - sc.z));
+% c = sc.x * sc.x + sc.y * sc.y + sc.z * sc.z;
+% c += p1.x * p1.x + p1.y * p1.y + p1.z * p1.z;
+% c -= 2 * (sc.x * p1.x + sc.y * p1.y + sc.z * p1.z);
+% c -= r * r;
+% bb4ac = b * b - 4 * a * c;
+% if (ABS(a) < EPS || bb4ac < 0) {
+% *mu1 = 0;
+% *mu2 = 0;
+% return(FALSE);
+% }
+%
+% *mu1 = (-b + sqrt(bb4ac)) / (2 * a);
+% *mu2 = (-b - sqrt(bb4ac)) / (2 * a);
+%
+% return(TRUE);
+% }
+%<---------- test ------------------------------------------------------–>
+\def\tkzTestInterLC(#1,#2)(#3,#4){%
+\begingroup
+\tkz@Projection(#1,#2)(#3){tkz@pth}% distance centre à la ligne
+\tkz@@CalcLength(#3,tkz@pth){tkz@mathLen}%
+\tkz@@CalcLength(#3,#4){tkzLengthResult}%calcul du rayon
+\ifdim\tkz@mathLen pt>\tkzLengthResult pt\relax%
+\global\tkzFlagLCfalse
+\else
+\global\tkzFlagLCtrue
+\fi
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkz@numlc{0}
+\pgfkeys{/linecircle/.cd,
+ node/.code = \def\tkz@numlc{0},
+ R/.code = \def\tkz@numlc{1},
+ with nodes/.code = \def\tkz@numlc{2},
+ common/.store in = \tkz@common,
+ common = {},
+ near/.is if = tkz@near,
+ near/.default = true,
+ near = false,
+ next to/.store in = \tkz@nextto,
+ next to/.initial = {},
+ next/.default = {},
+ next to = {},
+ next to/.value required,
+ node
+ }
+%<--------------------------------------------------------------------------–>
+\def\tkzInterLC{\pgfutil@ifnextchar[{\tkz@InterLC}{\tkz@InterLC[]}}
+\def\tkz@InterLC[#1](#2,#3)(#4,#5){%
+\begingroup
+\pgfqkeys{/linecircle}{#1}
+ \pgfinterruptboundingbox
+\ifcase\tkz@numlc%
+ % first case 0
+ \tkz@@CalcLength(#4,#5){tkzLengthResult}
+ \tkzInterLCR(#2,#3)(#4,\tkzLengthResult pt){tkzFirstPointResult}%
+ {tkzSecondPointResult}
+\or% 1
+ \tkzInterLCR(#2,#3)(#4,#5 cm){tkzFirstPointResult}
+ {tkzSecondPointResult}%
+\or% 2
+ \tkzInterLCWithNodes(#2,#3)(#4,#5){tkzFirstPointResult}%
+ {tkzSecondPointResult}%
+\fi
+\iftkz@near
+ \tkz@@CalcLength(#2,tkzFirstPointResult){tkzLengthFirst}
+ \tkz@@CalcLength(#2,tkzSecondPointResult){tkzLengthSecond}
+ \ifdim \tkzLengthFirst pt < \tkzLengthSecond pt\relax%
+ \else
+ \pgfnodealias{tkzPointTmp}{tkzSecondPointResult}
+ \pgfnodealias{tkzSecondPointResult}{tkzFirstPointResult}
+ \pgfnodealias{tkzFirstPointResult}{tkzPointTmp}
+ \fi
+\else
+ \ifx\tkz@common\tkzutil@empty
+ \ifx\tkz@nextto\tkzutil@empty
+ \tkzFindAngle(tkzSecondPointResult,tkzFirstPointResult,#4)
+ \tkzGetAngle{tkz@an}
+ \ifdim\tkz@an pt<180 pt\relax%
+ \else
+ \pgfnodealias{tkzPointTmp}{tkzSecondPointResult}
+ \pgfnodealias{tkzSecondPointResult}{tkzFirstPointResult}
+ \pgfnodealias{tkzFirstPointResult}{tkzPointTmp}
+ \fi
+ \else
+ \tkz@@CalcLength(\tkz@nextto,tkzFirstPointResult){tkzLengthFirst}
+ \tkz@@CalcLength(\tkz@nextto,tkzSecondPointResult){tkzLengthSecond}
+ \ifdim \tkzLengthFirst pt < \tkzLengthSecond pt\relax%
+ \else
+ \pgfnodealias{tkzPointTmp}{tkzSecondPointResult}
+ \pgfnodealias{tkzSecondPointResult}{tkzFirstPointResult}
+ \pgfnodealias{tkzFirstPointResult}{tkzPointTmp}
+ \fi
+ \fi
+ \else
+ \tkz@@CalcLength(\tkz@common,tkzSecondPointResult){tkz@mathLen}
+ \ifdim\tkz@mathLen pt<1pt\relax%
+ \else
+ \pgfnodealias{tkzPointTmp}{tkzSecondPointResult}
+ \pgfnodealias{tkzSecondPointResult}{tkzFirstPointResult}
+ \pgfnodealias{tkzFirstPointResult}{tkzPointTmp}
+ \fi
+ \fi
+\fi%near
+\endpgfinterruptboundingbox
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+%<--------------------------------------------------------------------------–>
+\def\tkzInterLCR(#1,#2)(#3,#4)#5#6{%
+\begingroup
+\tkz@radi=#4%
+\tkz@@extractxy{#3}
+\tkz@bx =\pgf@x\relax%
+\tkz@by =\pgf@y\relax%
+\tkz@Projection(#1,#2)(#3){tkz@pth}
+\tkz@@CalcLength(#3,tkz@pth){tkz@mathLen}
+ \ifdim\tkz@mathLen pt<0.05pt\relax%
+ \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#2}{center}}%
+ \tkz@ax=\pgf@x%
+ \tkz@ay=\pgf@y%
+ \pgfpointborderellipse{\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {\pgfpoint{\tkz@radi}{\tkz@radi}}
+ \tkz@ax=\pgf@x\relax%
+ \tkz@ay=\pgf@y\relax%
+ \advance\tkz@bx by\tkz@ax\relax%
+ \advance\tkz@by by\tkz@ay\relax%
+ \pgfcoordinate{#6}{\pgfqpoint{\tkz@bx}{\tkz@by}}
+ \tkzCSym(#3)(#6){#5}
+ \else
+ \edef\pgfmathresult{\fpeval{\tkz@mathLen/\tkz@radi}}
+ % \edef\tkz@angle{\fpeval{acosd(\pgfmathresult)}}
+ \pgfmathacos@{\pgfmathresult}%
+ \let\tkz@angle\pgfmathresult%
+ \pgfpointdiff{\pgfpointanchor{#3}{center}}%
+ {\pgfpointanchor{tkz@pth}{center}}%
+ \tkz@ax=\pgf@x%
+ \tkz@ay=\pgf@y%
+ \pgfpointborderellipse{\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {\pgfpoint{\tkz@radi}{\tkz@radi}}
+ \tkz@ax =\pgf@x\relax%
+ \tkz@ay =\pgf@y\relax%
+ \advance\tkz@bx by\tkz@ax\relax%
+ \advance\tkz@by by\tkz@ay\relax%
+ \tkz@@extractxy{#3}
+ \tkz@ax =\pgf@x\relax%
+ \tkz@ay =\pgf@y\relax%
+ \tkz@@extractxy{tkz@pth}
+ \pgfmathrotatepointaround{\pgfpoint{\tkz@bx}{\tkz@by}}%
+ {\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {\tkz@angle}
+ \pgfcoordinate{#5}{\pgfqpoint{\pgf@x}{\pgf@y}}
+ \pgfmathrotatepointaround{\pgfpoint{\tkz@bx}{\tkz@by}}%
+ {\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {-\tkz@angle}
+ \pgfcoordinate{#6}{\pgfqpoint{\pgf@x}{\pgf@y}}
+
+\fi
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% intersection de Ligne Cercle
+% #4 center #5 point sur le cercle
+%<--------------------------------------------------------------------------–>
+% \def\tkzInterLC(#1,#2)(#3,#4)#5#6{%
+% \begingroup
+% \tkz@@CalcLength(#3,#4){tkz@rad}
+% \tkzInterLCR(#1,#2)(#3,\tkz@rad pt){#5}{#6}
+% \endgroup
+% }
+%<--------------------------------------------------------------------------–>
+% intersection de Ligne Cercle rayon inconnu
+%<--------------------------------------------------------------------------–>
+\def\tkzInterLCWithNodes(#1,#2)(#3,#4,#5)#6#7{%
+\begingroup
+ \tkz@@CalcLength(#4,#5){tkz@radius}
+ \tkzInterLCR(#1,#2)(#3,\tkz@radius pt){#6}{#7}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Intersection of 2 circles
+%<--------------------------------------------------------------------------–>
+%<--------------------------------------------------------------------------–>
+% méthode
+% /* circle_circle_intersection() *
+% * Determine the points where 2 circles in a common plane intersect.
+% *
+% * int circle_circle_intersection(
+% * // center and radius of 1st circle
+% * double x0, double y0, double r0,
+% * // center and radius of 2nd circle
+% * double x1, double y1, double r1,
+% * // 1st intersection point
+% * // 2nd intersection point
+% *
+% * This is a public domain work. 3/26/2005 Tim Voght
+% *
+% int circle_circle_intersection(double x0, double y0, double r0,
+% double x1, double y1, double r1,
+% double *xi, double *yi,
+% double *xi_prime, double *yi_prime)
+% {
+% double a, dx, dy, d, h, rx, ry;
+% double x2, y2;
+%
+% /* dx and dy are the vertical and horizontal distances between
+% * the circle centers.
+% */
+% dx = x1 - x0;
+% dy = y1 - y0;
+%
+% /* Determine the straight-line distance between the centers. */
+% //d = sqrt((dy*dy) + (dx*dx));
+% d = hypot(dx,dy); // Suggested by Keith Briggs
+%
+% /* Check for solvability. */
+% if (d > (r0 + r1))
+% {
+% /* no solution. circles do not intersect. */
+% return 0;
+% }
+% if (d < fabs(r0 - r1))
+% {
+% /* no solution. one circle is contained in the other */
+% return 0;
+% }
+%
+% /* 'point 2' is the point where the line through the circle
+% * intersection points crosses the line between the circle
+% * centers.
+% */
+%
+% /* Determine the distance from point 0 to point 2. */
+% a = ((r0*r0) - (r1*r1) + (d*d)) / (2.0 * d) ;
+%
+% /* Determine the coordinates of point 2. */
+% x2 = x0 + (dx * a/d);
+% y2 = y0 + (dy * a/d);
+%
+% /* Determine the distance from point 2 to either of the
+% * intersection points.
+% */
+% h = sqrt((r0*r0) - (a*a));
+%
+% /* Now determine the offsets of the intersection points from
+% * point 2.
+% */
+% rx = -dy * (h/d);
+% ry = dx * (h/d);
+%
+% /* Determine the absolute intersection points. */
+% *xi = x2 + rx;
+% *xi_prime = x2 - rx;
+% *yi = y2 + ry;
+% *yi_prime = y2 - ry;
+%
+% return 1;
+% }
+%<--------------------------------------------------------------------------–>
+% Intersection de deux cercles
+%<--------------------------------------------------------------------------–>
+%<---------- test ------------------------------------------------------–>
+% test avec des nodes R-r <= d <= R+r
+\def\tkzTestInterCC(#1,#2)(#3,#4){%
+\begingroup
+\tkz@@CalcLength(#1,#3){tkz@mathLen}% distance entre les centres
+\tkz@@CalcLength(#2,#1){tkz@rA}%calcul du rayon
+\tkz@@CalcLength(#4,#3){tkz@rB}%calcul du rayon
+% test if d <= rA + rB ?
+\edef\tkz@rS{\fpeval{\tkz@rA+\tkz@rB}}
+\ifdim\tkz@mathLen pt > \tkz@rS pt\relax%
+\global\tkzFlagCCfalse
+\else
+% now test if d>= rA - rB or rB-rA
+ \ifdim \tkz@rA pt > \tkz@rB pt\relax%
+ \edef\tkz@rD{\fpeval{\tkz@rA-\tkz@rB}}
+ \else
+ \edef\tkz@rD{\fpeval{\tkz@rB-\tkz@rA}}
+ \fi
+\ifdim \tkz@rD pt > \tkz@mathLen pt\relax%
+ \global\tkzFlagCCfalse
+\else
+\global\tkzFlagCCtrue
+\fi
+\fi
+\endgroup
+}
+
+\def\tkz@numcc{0}
+\pgfkeys{
+/circlecircle/.cd,
+ node/.code = \def\tkz@numcc{0},
+ R/.code = \def\tkz@numcc{1},
+ with nodes/.code = \def\tkz@numcc{2},
+ common/.store in = \tkz@common,
+ common = {},
+ node
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzInterCC{\pgfutil@ifnextchar[{\tkz@InterCC}{\tkz@InterCC[]}}
+\def\tkz@InterCC[#1](#2,#3)(#4,#5){%
+\begingroup
+\pgfqkeys{/circlecircle}{#1}
+\ifcase\tkz@numcc%
+ % first case 0
+ \tkz@save@length
+ \tkz@@CalcLengthcm(#2,#3){tkz@rayA}
+ \tkz@@CalcLengthcm(#4,#5){tkz@rayB}
+ \tkz@restore@length
+\tkzInterCCR(#2,\tkz@rayA)(#4,\tkz@rayB){tkzFirstPointResult}{tkzSecondPointResult}
+ \or% 1
+ \tkzInterCCR(#2,#3)(#4,#5){tkzFirstPointResult}{tkzSecondPointResult}%
+ \or%2
+ \tkzInterCCWithNodes(#2,#3)(#4,#5){tkzFirstPointResult}{tkzSecondPointResult}
+\fi
+ \ifx\tkz@common\tkzutil@empty
+ \tkzFindAngle(#2,tkzFirstPointResult,#4) \tkzGetAngle{tkz@an}
+ \ifdim\tkz@an pt<180 pt\relax%
+ \else
+ \pgfnodealias{tkzPointTmp}{tkzSecondPointResult}
+ \pgfnodealias{tkzSecondPointResult}{tkzFirstPointResult}
+ \pgfnodealias{tkzFirstPointResult}{tkzPointTmp}
+ \fi
+ \else
+\tkz@@CalcLength(\tkz@common,tkzSecondPointResult){tkz@mathLen}
+ \ifdim\tkz@mathLen pt<0.05pt\relax%
+ \else
+ \pgfnodealias{tkzPointTmp}{tkzSecondPointResult}
+ \pgfnodealias{tkzSecondPointResult}{tkzFirstPointResult}
+ \pgfnodealias{tkzFirstPointResult}{tkzPointTmp}
+ \fi
+ \fi
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+
+\def\tkzInterCCR(#1,#2)(#3,#4)#5#6{%
+\begingroup
+\pgfinterruptboundingbox
+\tkz@save@length
+\tkz@@CalcLength(#1,#3){tkz@dd}
+\tkz@restore@length
+\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}
+\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}
+\tkz@ax\pgf@x %
+\tkz@ay\pgf@y %
+\edef\tkzcax{\strip@pt\tkz@ax}%
+\edef\tkzcay{\strip@pt\tkz@ay}%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#3}{center}}
+\pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}}
+\tkz@bx\pgf@x %
+\tkz@by\pgf@y %
+\edef\tkzcbx{\strip@pt\tkz@bx}%
+\edef\tkzcby{\strip@pt\tkz@by}%
+\tkz@cx#2cm %
+\tkz@cy#4cm %
+\edef\tkzccx{\strip@pt\tkz@cx}%
+\edef\tkzccy{\strip@pt\tkz@cy}%
+\edef\tkz@aa{\tkz@Dec{((\tkzccx+\tkzccy)/(2*\tkz@dd))*(\tkzccx-(\tkzccy))+\tkz@dd/2}}
+\edef\tkz@xx{\tkz@Dec{\tkzcax+\tkz@aa/\tkz@dd*(\tkzcbx - (\tkzcax))}}
+\edef\tkz@yy{\tkz@Dec{\tkzcay+\tkz@aa/\tkz@dd*(\tkzcby - (\tkzcay))}}
+\path[coordinate](\tkz@xx pt,\tkz@yy pt) coordinate (tkzRadialCenter);
+\edef\tkz@hh{\tkz@Abs{(\tkzccx+\tkz@aa)*(\tkzccx-(\tkz@aa))}}
+\edef\tkz@hh{\tkz@Dec{\tkz@Sqrt{\tkz@hh}}}
+ \edef\tkz@rx{\tkz@Dec{\tkz@hh / \tkz@dd * (\tkzcay - (\tkzcby))}}
+\edef\tkz@ry{\tkz@Dec{\tkz@hh / \tkz@dd * (\tkzcbx - (\tkzcax))}}
+\edef\tkz@xs{\tkz@Dec{\tkz@xx + \tkz@rx}}
+\edef\tkz@ys{\tkz@Dec{\tkz@yy + \tkz@ry}}
+\path[coordinate](\tkz@xs pt,\tkz@ys pt) coordinate (#5);
+\edef\tkz@xss{\tkz@Dec{\tkz@xx - \tkz@rx}}
+\edef\tkz@yss{\tkz@Dec{\tkz@yy - \tkz@ry}}
+\path[coordinate](\tkz@xss pt,\tkz@yss pt) coordinate (#6);
+\endpgfinterruptboundingbox
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% #2 node #3 node #4 node #5 node
+% \def\tkzInterCC(#1,#2)(#3,#4)#5#6{%
+% \begingroup
+% \tkz@@CalcLength(#1,#2){tkz@rayA}
+% \tkz@@CalcLength(#3,#4){tkz@rayB}
+% \tkzInterCCR(#1,\tkz@rayA pt)(#3,\tkz@rayB pt){#5}{#6}
+% \endgroup
+% }
+%<--------------------------------------------------------------------------–>
+% Intersection de deux cercles Avec deux points
+%<--------------------------------------------------------------------------–>
+% la première variante devrait être #2 #3 avec #4 #5
+\def\tkzInterCCWithNodes(#1,#2,#3)(#4,#5,#6)#7#8{%
+\begingroup
+ \tkz@@CalcLengthcm(#2,#3){tkz@rayA}
+ \tkz@@CalcLengthcm(#5,#6){tkz@rayB}
+ \tkzInterCCR(#1,\tkz@rayA)(#4,\tkz@rayB){#7}{#8}
+\endgroup
+}
+\makeatother
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-math.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-math.tex
new file mode 100644
index 0000000000..1a0491d599
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-math.tex
@@ -0,0 +1,417 @@
+% tkz-tools-lua-math.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-tools-lua-math.tex}
+\makeatletter
+%<-------------------------------------------------------------------------->
+%<-------------------------------------------------------------------------->
+% Lengths
+%<-------------------------------------------------------------------------->
+%<-------------------------------------------------------------------------->
+\begin{luacode*}
+complex = {} -- global complex numbers registry
+M = {} -- the module
+local mt = {} --metatable for complex numbers
+setmetatable(_ENV, {__index = complex})
+ function new (r, i)
+ local cp = {}
+ cp = {r=r, i=i}
+ return setmetatable(cp,mt)
+ end
+ M.new = new -- add 'new' to the module
+ -- create constant 'i'
+ M.i = new(0, 1)
+
+ function M.add (c1, c2)
+ return new(c1.r + c2.r, c1.i + c2.i)
+ end
+
+ function M.sub (c1, c2)
+ return new(c1.r - c2.r, c1.i - c2.i)
+ end
+
+ function M.mul (c1, c2)
+ return new(c1.r*c2.r - c1.i*c2.i, c1.r*c2.i + c1.i*c2.r)
+ end
+
+ function M.inv (c)
+ local n = c.r^2 + c.i^2
+ return new(c.r/n, -c.i/n)
+ end
+
+ function M.div (c1, c2)
+ return M.mul(c1, M.inv(c2))
+ end
+
+ function M.re (c)
+ return new(c.r,0)
+ end
+
+ function M.im (c)
+ return new(c.i,0)
+ end
+
+ function M.mod (c)
+ local n = c.r^2 + c.i^2
+ return new(n,0)
+ end
+
+ function M.prinarg(c)
+ local arg
+ if c.r > 0 then
+ arg = math.atan(c.i/c.r)
+ elseif c.r < 0 and c.i >= 0 then
+ arg = math.atan(c.i/c.r) + math.pi
+ elseif c.r < 0 and c.i < 0 then
+ arg = math.atan(c.i/c.r) - math.pi
+ elseif c.r == 0 and c.i > 0 then
+ arg = math.pi / 2
+ elseif c.r == 0 and c.i < 0 then
+ arg = - math.pi / 2
+ else
+ error("Principal argument not defined.")
+ end
+ return arg
+ end
+
+ function M.op (...)
+ return ...
+ end
+
+ function M.tostring (c)
+ if c.i ==0 then
+ return string.format("%g", c.r)
+ elseif c.i> 0 and c.i==1 then
+ return string.format("%g+i", c.r)
+ elseif c.i> 0 and c.i~=1 then
+ return string.format("%g+%gi", c.r, c.i)
+ else
+ return string.format("%g%gi", c.r, c.i) --to avoid +-
+ end
+ end
+
+ --Setting Metatable operations.
+ mt.__add = M.add
+ mt.__mul = M.mul
+ mt.__sub = M.sub
+ mt.__tostring = M.tostring
+\end{luacode*}
+
+
+
+\begin{luacode*}
+ function normalize(angleA,angleB)
+ if angleA > 0 then
+ if angleA > angleB then
+ angleA = angleA - 360
+ end
+ else
+ if angleA > angleB then
+ angleB = angleB + 360
+ end
+ end
+ return angleA, angleB
+ end
+
+ function math.angle(x1, y1, x2, y2)
+ local a = math.deg(math.atan(y2 - y1, x2 - x1))
+ if a < 0 then
+ return a + 360
+ else
+ return a
+ end
+ end
+
+ function tkzop(...)
+ inf = math.huge
+ return ...
+end
+
+function tkzround(nb, ND)
+ local p = 10^(ND or 0)
+ return math.floor(nb * p + 0.5) / p
+end
+\end{luacode*}
+
+\newcommand\cpxNew[2]{%
+\directlua{complex[\luastringN{#1}] = M.new(#2)}}
+\newcommand\cpxPrint[1]{%
+\directlua{tex.sprint(tostring(complex[\luastringN{#1}]))}}
+\newcommand\cpxAdd[3]{%
+\directlua{complex[\luastringN{#1}]%
+ =M.add(complex[\luastringN{#2}],complex[\luastringN{#3}])}}
+
+
+\def\tkz@Dec#1{%
+ \directlua{tex.print(string.format('\@percentchar.6f',#1))}
+ }
+\def\tkz@Op#1{\directlua{tex.sprint(tostring(tkzop(#1)))}}
+\def\tkz@Log#1{\directlua{tex.sprint(math.log(#1))}}
+\def\tkz@Exp#1{\directlua{tex.sprint(math.exp(#1))}}
+\def\tkz@Sqrt#1{\directlua{tex.sprint(math.sqrt(#1))}}
+\def\tkz@Abs#1{\directlua{tex.sprint(math.abs(#1))}}
+\def\tkz@Pi{\directlua{tex.sprint(math.pi)}}
+\def\tkz@Cos#1{\directlua{tex.sprint(math.cos(#1))}}
+\def\tkz@Sin#1{\directlua{tex.sprint(tostring(math.sin(#1)))}}
+\def\tkz@Tan#1{\directlua{tex.sprint(math.tan(#1))}}
+\def\tkz@Rad#1{\directlua{tex.sprint(math.rad(#1))}}
+\def\tkz@Acos#1{\directlua{tex.sprint(math.acos(#1))}}
+\def\tkz@Asin#1{\directlua{tex.sprint(math.asin(#1))}}
+\def\tkz@Atan#1{\directlua{tex.sprint(math.atan(#1))}}
+\def\tkz@Round#1#2{\directlua{tex.sprint(tostring(tkzround(#1,#2)))}}
+\def\tkz@Angle#1#2#3#4{\directlua{tex.sprint(math.angle(#1,#2,#3,#4))}}
+\def\tkz@Ceil#1{\directlua{tex.sprint(math.ceil(#1))}}
+\def\tkz@Floor#1{\directlua{tex.sprint(math.floor(#1))}}
+\def\tkz@Huge{\directlua{tex.sprint(math.huge)}}
+\def\tkz@Max#1{\directlua{tex.sprint(math.max(#1))}}
+\def\tkz@Min#1{\directlua{tex.sprint(math.min(#1))}}
+\def\tkz@Random#1{\directlua{tex.sprint(math.random(#1))}}
+\def\tkz@veclen#1#2{%
+ \directlua{%
+ tex.print(string.format('\@percentchar.6f',math.sqrt((#1)^2+(#2)^2)))%
+ }%
+}
+\let\tkzSqrt\tkz@Sqrt
+\let\tkzPi\tkz@Pi
+\let\tkzExp\tkz@Exp
+\let\tkzLog\tkz@Log
+\let\tkzSin\tkz@Sin
+\let\tkzCos\tkz@Cos
+% \tkzpointnormalised#
+% tkzCalcLength
+% \tkzGetLength
+% \tkzpttocm
+% \tkzcmtopt
+% \tkzFindSlope
+% option xfp
+
+% \tkzpointnormalised normalise un point A-->A' tq ||v(OA')=1||
+% équivalent de \pgfpointnormalised avec fp
+% example
+% \tkzpointnormalised{%
+% \pgfpointdiff{\pgfpointanchor{A}{center}}
+% {\pgfpointanchor{B}{center}}}
+
+% or
+% \pgf@x=1 cm
+% \pgf@y=12 cm
+% \tkzpointnormalised{}
+%<--------------------------------------------------------------------------
+\def\tkzpointnormalised#1{%
+\pgf@process{#1}%
+\pgf@xa=\pgf@x%
+\pgf@ya=\pgf@y%
+\edef\tkz@temp@xa{\strip@pt\pgf@xa}%
+\edef\tkz@temp@ya{\strip@pt\pgf@ya}%
+\edef\tkz@den{\tkz@veclen{\tkz@temp@xa}{\tkz@temp@ya}}
+\edef\tkz@coordx{\tkz@Op{\tkz@temp@xa/\tkz@den}}
+\edef\tkz@coordx{\tkz@Dec{\tkz@Round{\tkz@coordx}{5}}}
+\edef\tkz@coordy{\tkz@Op{\tkz@temp@ya/\tkz@den}}
+\edef\tkz@coordy{\tkz@Dec{\tkz@Round{\tkz@coordy}{5}}}
+\pgf@x = \tkz@coordx pt
+\pgf@y = \tkz@coordy pt
+}
+%\def\tkz@Dec#1{\directlua{tex.print(string.format('\@percentchar.12f',#1))}}
+%<-------------------------------------------------------------------------->
+% restaure and save length
+\def\tkz@save@length{\global\let\tkz@temp@length\tkzLengthResult}%
+\def\tkz@restore@length{\global\let\tkzLengthResult\tkz@temp@length }%
+%<-------------------------------------------------------------------------->
+% \tkzCalcLength Distance entre deux points en pt ou en cm avec xfp
+% \veclen mais avec fp
+% option cm le résultat est en cm sinon en pt with cm=false
+%<-------------------------------------------------------------------------->
+\pgfkeys{tkzcalclen/.cd,
+ cm/.is if = tkzLengthIncm,
+ cm/.default = true,
+ cm = true}
+
+\def\tkzCalcLength{\pgfutil@ifnextchar[{\tkz@CalcLength}{\tkz@CalcLength[]}}
+\def\tkz@CalcLength[#1](#2,#3){%
+\pgfqkeys{/tkzcalclen}{#1}%
+\begingroup
+\tkz@@CalcLength(#2,#3){tkzLengthResult}
+\iftkzLengthIncm
+ \edef\tkz@xfpMathLen{\tkz@Dec{\tkz@Round{\tkzLengthResult/28.45274}{6}}}
+ \global\let\tkzLengthResult\tkz@xfpMathLen
+\fi
+\endgroup
+}%
+
+\def\tkz@@CalcLength(#1,#2)#3{%
+\pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#2}{center}}%
+\edef\tkz@xa{\strip@pt\pgf@x}%
+\edef\tkz@ya{\strip@pt\pgf@y}%
+\edef\tkz@xfpMathLen{\tkz@veclen{\tkz@xa}{\tkz@ya}}
+\global\expandafter\edef\csname #3\endcsname{\tkz@xfpMathLen}
+}
+
+\def\tkz@@CalcLengthcm(#1,#2)#3{%
+\pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#2}{center}}%
+\edef\tkz@xa{\strip@pt\pgf@x}%
+\edef\tkz@ya{\strip@pt\pgf@y}%
+\edef\tkz@xfpMathLen{\tkz@veclen{\tkz@xa}{\tkz@ya}}
+\edef\tkz@xfpMathLen{\tkz@Dec{\tkz@Round{\tkz@xfpMathLen/28.45274}{6}}}
+\global\expandafter\edef\csname #3\endcsname{\tkz@xfpMathLen}
+}
+\def\tkz@@CalcLengthb(#1,#2)#3{%
+\pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#2}{center}}%
+\edef\tkz@xfpMathLen{\fpeval{sqrt((\pgf@x)^2+(\pgf@y)^2)}}
+\edef\tkz@xfpMathLen{\fpeval{round(\tkz@xfpMathLen,6)}}
+\global\expandafter\edef\csname #3\endcsname{\tkz@xfpMathLen}
+}
+%<-------------------------------------------------------------------------->
+\def\tkzGetLength#1{%
+\global\expandafter\edef\csname #1\endcsname{\tkzLengthResult}}
+%<-------------------------------------------------------------------------->
+% \tkzpttocm passage de pt   cm div par 28.45274
+%<-------------------------------------------------------------------------->
+\def\tkzpttocm(#1)#2{%
+\begingroup
+ \edef\tkz@mathresult{\tkz@Round{#1/28.45274}{6}}
+ \global\expandafter\edef\csname #2\endcsname{\tkz@mathresult}%
+\endgroup
+}%
+%<-------------------------------------------------------------------------->
+% \tkzcmtopt passage de cm   pt mul par 28.45274
+%<--------------------------------------------------------------------------
+\def\tkzcmtopt(#1)#2{%
+\begingroup
+ \edef\tkz@mathresult{\tkz@Round{#1*28.45274}{6}}
+ \global\expandafter\edef\csname #2\endcsname{\tkz@mathresult}%
+\endgroup
+}%
+%<---------------------------------------------------------–>
+ \def\tkzGetResult#1{%
+ \global\expandafter\edef\csname #1\endcsname{\tkzMathResult}}
+%<---------------------------------------------------------–>
+% Schrodinger's cat idea 03/01/20
+\tikzset{veclen/.code={%
+\pgfmathdeclarefunction*{veclen}{2}{%
+\begingroup%
+ \pgfmath@x##1pt\relax%
+ \pgfmath@y##2pt\relax%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \edef\tkz@temp@xa{\strip@pt\pgf@xa}%
+ \edef\tkz@temp@ya{\strip@pt\pgf@ya}%
+ \edef\tkz@xfpMathLen{\tkz@veclen{\tkz@temp@xa}{\tkz@temp@ya}}%
+ \pgfmath@returnone\tkz@xfpMathLen pt%
+\endgroup%
+}}}%
+%<---------------------------------------------------------–>
+\def\tkzSwapPoints(#1,#2){
+ \pgfnodealias{tkzPointTmp}{#2}
+ \pgfnodealias{#2}{#1}
+ \pgfnodealias{#1}{tkzPointTmp}}
+%<---------------------------------------------------------–>
+\def\tkzPermute(#1,#2,#3){
+ \tkzURotateWithNodes(#1,#3,#2)(#3) \tkzGetPoint{tkzpt}
+ \tkzURotateWithNodes(#1,#2,#3)(#2) \tkzGetPoint{#2}
+ \tkzSwapPoints(tkzpt,#3)
+}
+%<---------------------------------------------------------–>
+\def\tkzDotProduct(#1,#2,#3){%
+\begingroup
+\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}%
+\edef\tkzax{\strip@pt\pgf@x}%
+\edef\tkzay{\strip@pt\pgf@y}%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}}%
+\edef\tkzbx{\strip@pt\pgf@x}%
+\edef\tkzby{\strip@pt\pgf@y}%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#3}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}}%
+\edef\tkzcx{\strip@pt\pgf@x}%
+\edef\tkzcy{\strip@pt\pgf@y}%
+\edef\tkz@tmp{\tkz@Dec{\tkz@Round{((\tkzbx-(\tkzax))*(\tkzcx-(\tkzax))+(\tkzby-(\tkzay))*(\tkzcy-(\tkzay)))/809.55841}{6}}}
+\global\let\tkzMathResult\tkz@tmp
+\endgroup
+}
+
+% #1,#2 and #3 aligned
+\def\tkzIsLinear(#1,#2,#3){%
+\begingroup
+\tkz@@CalcLengthcm(#1,#2){tkz@la}
+\tkz@@CalcLengthcm(#1,#3){tkz@lb}
+\tkzDotProduct(#1,#2,#3)
+\edef\tkzResult{\tkz@Dec{\tkz@Abs{\tkzMathResult}-(\tkz@la)*(\tkz@lb)}}
+\ifdim \tkzResult pt < 0.01 pt\relax%
+\global\tkzLineartrue
+\else
+\global\tkzLinearfalse
+\fi
+\endgroup
+}
+%<---------------------------------------------------------–>
+% syntax : vec(#2,#1) ortho vec(#3,#1)
+\def\tkzIsOrtho(#1,#2,#3){%
+\begingroup
+\tkzDotProduct(#1,#2,#3)
+\edef\tkzResult{\tkz@Dec{\tkz@Abs{\tkzMathResult}}}
+\ifdim \tkzResult pt < 1 pt\relax%
+\global\tkzOrthotrue
+\else
+\global\tkzOrthofalse
+\fi
+\endgroup
+}
+%<---------------------------------------------------------–>
+% \tkzPowerCircle(M)(O,A) --> OM^2-OA^2
+\def\tkzPowerCircle(#1)(#2,#3){%
+\begingroup
+\tkz@@CalcLengthcm(#2,#3){tkz@ra}
+\tkz@@CalcLengthcm(#1,#2){tkz@om}
+\gdef\tkzMathResult{\tkz@Dec{(\tkz@om)^2-(\tkz@ra)^2}}
+\endgroup
+}
+%<---------------------------------------------------------–>
+\def\tkzDefRadicalAxis(#1,#2)(#3,#4){%
+\begingroup
+\tkz@@CalcLengthcm(#1,#3){tkz@d}
+\tkz@@CalcLengthcm(#1,#2){tkz@ra}
+\tkz@@CalcLengthcm(#3,#4){tkz@rb}
+\edef\tkzMathResult{\tkz@Dec{\tkz@d-(\tkz@ra+\tkz@rb)}}
+\edef\tkzMathResultb{\tkz@Dec{\tkz@Abs{(\tkz@d-(\tkz@ra+\tkz@rb))}}}
+\edef\tkzMathResultc{\tkz@Dec{\tkz@Abs{\tkz@d-\tkz@Abs{(\tkz@ra-(\tkz@rb))}}}}
+\ifdim \tkzMathResultc pt < 0.1 pt\relax%
+ \tkzURotateAngle(#2,90)(#3) \tkzGetPoint{tkzFirstPointResult}
+ \tkzURotateAngle(#2,-90)(#3) \tkzGetPoint{tkzSecondPointResult}
+\else
+\ifdim \tkzMathResultb pt < 0.1 pt\relax%
+ \tkzURotateAngle(#2,90)(#3) \tkzGetPoint{tkzFirstPointResult}
+ \tkzURotateAngle(#2,-90)(#3) \tkzGetPoint{tkzSecondPointResult}
+ \else
+\ifdim \tkzMathResult pt > 1 pt\relax%
+ \tkzURotateAngle(#1,60)(#3) \tkzGetPoint{tkz@aux}
+ \tkzInterCC(#1,#2)(tkz@aux,#1) \tkzGetPoints{tkz@pta}{tkz@ptb}
+ \tkzInterCC(#3,#4)(tkz@aux,#1) \tkzGetPoints{tkz@ptc}{tkz@ptd}
+ \tkzInterLL(tkz@pta,tkz@ptb)(tkz@ptc,tkz@ptd) \tkzGetPoint{tkz@pta}
+ \tkzUProjection(#1,#3)(tkz@pta) \tkzGetPoint{tkz@ptb}
+ \pgfnodealias{tkzSecondPointResult}{tkz@ptb}
+ \pgfnodealias{tkzFirstPointResult}{tkz@pta}
+\else
+\tkzInterCCR(#1,\tkz@ra)(#3,\tkz@rb){tkzFirstPointResult}{tkzSecondPointResult}
+\fi
+\fi
+\fi
+\endgroup
+}
+
+\makeatother
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-BB.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-BB.tex
index 4ac1e79ba9..2276dead1a 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-BB.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-BB.tex
@@ -1,5 +1,5 @@
% tkz-tools-eu-BB.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-BB.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-BB.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
\def\tkzShowBB{\pgfutil@ifnextchar[{\tkz@ShowBB}{\tkz@ShowBB[]}}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-angles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-angles.tex
index ddf83dc0fa..f8ec42d3e0 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-angles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-angles.tex
@@ -1,5 +1,5 @@
% tkz-tools-angles.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-tools-eu-angles.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tools-eu-angles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
%<--------------------------------------------------------------------------–>
@@ -20,24 +20,24 @@
% \tkzGetAngle strange behavior
% defines \tkz@FirstAngle and \tkz@SecondAngle sens trigo
%<--------------------------------------------------------------------------–>
- \def\tkzNormalizeAngle(#1,#2){%
- \begingroup
- \pgfmathparse{#1}\xdef\tkz@FirstAngle{\pgfmathresult}%
- \pgfmathparse{#2}\xdef\tkz@SecondAngle{\pgfmathresult}%
- \pgfmathgreaterthan{\tkz@FirstAngle}{0}
- \ifdim\pgfmathresult pt=1 pt\relax%
- \pgfmathgreaterthan{\tkz@FirstAngle}{\tkz@SecondAngle}
- \ifdim\pgfmathresult pt=1 pt\relax%
- \pgfmathsubtract{\tkz@FirstAngle}{360}
- \xdef\tkz@FirstAngle{\pgfmathresult}%
- \fi
- \else
- \pgfmathgreaterthan{\tkz@FirstAngle}{\tkz@SecondAngle}
- \ifdim\pgfmathresult pt=1 pt\relax%
- \pgfmathadd{\tkz@SecondAngle}{360}
- \xdef\tkz@SecondAngle{\pgfmathresult}%
- \fi
- \fi
+\def\tkzNormalizeAngle(#1,#2){%
+\begingroup
+\pgfmathparse{#1}\xdef\tkz@FirstAngle{\pgfmathresult}%
+\pgfmathparse{#2}\xdef\tkz@SecondAngle{\pgfmathresult}%
+\pgfmathgreaterthan{\tkz@FirstAngle}{0}
+\ifdim\pgfmathresult pt=1 pt\relax%
+ \pgfmathgreaterthan{\tkz@FirstAngle}{\tkz@SecondAngle}
+ \ifdim\pgfmathresult pt=1 pt\relax%
+ \pgfmathsubtract{\tkz@FirstAngle}{360}
+ \xdef\tkz@FirstAngle{\pgfmathresult}%
+ \fi
+\else
+ \pgfmathgreaterthan{\tkz@FirstAngle}{\tkz@SecondAngle}
+ \ifdim\pgfmathresult pt=1 pt\relax%
+ \pgfmathadd{\tkz@SecondAngle}{360}
+ \xdef\tkz@SecondAngle{\pgfmathresult}%
+ \fi
+\fi
\endgroup
}
%<--------------------------------------------------------------------------–>
@@ -47,7 +47,7 @@
\def\tkzFindSlopeAngle(#1,#2){%
\begingroup
\pgfmathanglebetweenpoints{\pgfpointanchor{#1}{center}}{%
- \pgfpointanchor{#2}{center}}
+ \pgfpointanchor{#2}{center}}
\global\let\tkzAngleResult\pgfmathresult
\endgroup
}
@@ -59,10 +59,11 @@
\tkzFindSlopeAngle(#2,#1)\tkzGetAngle{tkz@FirstAngle}
\tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@SecondAngle}
\tkzNormalizeAngle(\tkz@FirstAngle,\tkz@SecondAngle)
- \edef\tkz@Angle{\fpeval{\tkz@SecondAngle-\tkz@FirstAngle}}
+ \edef\tkz@Angle{\fpeval{\tkz@SecondAngle-\tkz@FirstAngle}}
\global\let\tkzAngleResult\tkz@Angle
\endgroup
}
+
%<--------------------------------------------------------------------------–>
% Find angle
%<--------------------------------------------------------------------------–>
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-base.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-base.tex
index 4bc2e5d072..2311703363 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-base.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-base.tex
@@ -1,5 +1,5 @@
% tkz-tools-eu-base.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-tools-eu-base.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tools-eu-base.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
\global\let\tkz@tmp@xa\tkz@init@xmin% modif 2016
@@ -48,7 +48,7 @@
\fi
\xdef\tkz@init@xorigine{0}
\xdef\tkz@init@yorigine{0}
- \edef\@xsgmin{\fpeval{sign(\tkz@init@xmin)}}
+ \edef\@xsgmin{\fpeval{sign(\tkz@init@xmin)}} % -> -1 or 1
\edef\@xsgmax{\fpeval{sign(\tkz@init@xmax)}}
\edef\@ysgmin{\fpeval{sign(\tkz@init@ymin)}}
\edef\@ysgmax{\fpeval{sign(\tkz@init@ymax)}}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-colors.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-colors.tex
index d0a921c993..94995906f9 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-colors.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-colors.tex
@@ -1,5 +1,5 @@
% tkz-tools-eu-colors
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-tools-eu-colors}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tools-eu-colors}
\makeatletter
%<------ Initialisation of the colors with tkzSetUpColors ----------------->
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-intersections.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-intersections.tex
index 4c05e5a3dc..bb741fc59e 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-intersections.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-intersections.tex
@@ -1,5 +1,5 @@
% tkz-tools-intersections.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -13,9 +13,9 @@
% The Current Maintainer of this work is Alain Matthes.
% utf8 encoding
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-tools-eu-intersections.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tools-eu-intersections.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% intersection de deux lignes
@@ -25,37 +25,34 @@
}
\def\tkz@InterLL(#1,#2)(#3,#4)#5{%
-\path (intersection of #1--#2 and #3--#4) coordinate(#5);
-% méthode with tikz
-% \pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}%
-% \pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}%
-% \tkz@ax\pgf@x%
-% \tkz@ay\pgf@y%
-% \pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}%
-% \pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}}
-% \tkz@bx\pgf@x%
-% \tkz@by\pgf@y%
-% \pgfextractx{\pgf@x}{\pgfpointanchor{#3}{center}}%
-% \pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}}%
-% \tkz@cx\pgf@x%
-% \tkz@cy\pgf@y%
-% \pgfextractx{\pgf@x}{\pgfpointanchor{#4}{center}}%
-% \pgfextracty{\pgf@y}{\pgfpointanchor{#4}{center}}%
-% \tkz@dx\pgf@x%
-% \tkz@dy\pgf@y%
-%
-% \edef\tkz@deltax{\fpeval{(\tkz@ax-\tkz@bx)/(28.45274)}}
-% \edef\tkz@deltaxx{\fpeval{(\tkz@cx-\tkz@dx)/(28.45274)}}
-% \edef\tkz@deltay{\fpeval{(\tkz@ay-\tkz@by)/(28.45274)}}
-% \edef\tkz@deltayy{\fpeval{(\tkz@cy-\tkz@dy)/(28.45274)}}
-% \edef\tkz@deltaxy{\fpeval{((\tkz@ax*\tkz@by)-(\tkz@ay*\tkz@bx))/(809.55841)}}
-% \edef\tkz@deltaxxyy{\fpeval{((\tkz@cx*\tkz@dy)-(\tkz@cy*\tkz@dx))/(809.55841)}}
-% \edef\tkz@div{\fpeval{(\tkz@deltax*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxx)}}
-% \edef\tkz@numx{\fpeval{(\tkz@deltaxy*\tkz@deltaxx)-(\tkz@deltax*\tkz@deltaxxyy)}}
-% \edef\tkz@numy{\fpeval{(\tkz@deltaxy*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxxyy)}}
-% \edef\tkz@xs{\fpeval{round(\tkz@numx/\tkz@div,5)}}
-% \edef\tkz@ys{\fpeval{round(\tkz@numy/\tkz@div,5)}}
-% \path[coordinate](\tkz@xs,\tkz@ys) coordinate (#5);
+\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}%
+\tkz@ax\pgf@x%
+\tkz@ay\pgf@y%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}}
+\tkz@bx\pgf@x%
+\tkz@by\pgf@y%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#3}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}}%
+\tkz@cx\pgf@x%
+\tkz@cy\pgf@y%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#4}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#4}{center}}%
+\tkz@dx\pgf@x%
+\tkz@dy\pgf@y%
+\edef\tkz@deltax{\fpeval{(\tkz@ax-\tkz@bx)/(28.45274)}}
+\edef\tkz@deltaxx{\fpeval{(\tkz@cx-\tkz@dx)/(28.45274)}}
+\edef\tkz@deltay{\fpeval{(\tkz@ay-\tkz@by)/(28.45274)}}
+\edef\tkz@deltayy{\fpeval{(\tkz@cy-\tkz@dy)/(28.45274)}}
+\edef\tkz@deltaxy{\fpeval{((\tkz@ax*\tkz@by)-(\tkz@ay*\tkz@bx))/(809.55841)}}
+\edef\tkz@deltaxxyy{\fpeval{((\tkz@cx*\tkz@dy)-(\tkz@cy*\tkz@dx))/(809.55841)}}
+\edef\tkz@div{\fpeval{(\tkz@deltax*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxx)}}
+\edef\tkz@numx{\fpeval{(\tkz@deltaxy*\tkz@deltaxx)-(\tkz@deltax*\tkz@deltaxxyy)}}
+\edef\tkz@numy{\fpeval{(\tkz@deltaxy*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxxyy)}}
+\edef\tkz@xs{\fpeval{round(\tkz@numx/\tkz@div,5)}}
+\edef\tkz@ys{\fpeval{round(\tkz@numy/\tkz@div,5)}}
+\path[coordinate](\tkz@xs,\tkz@ys) coordinate (#5);
}
@@ -418,8 +415,7 @@
\tkz@@CalcLengthcm(#2,#3){tkz@rayA}
\tkz@@CalcLengthcm(#4,#5){tkz@rayB}
\tkz@restore@length
- \tkzInterCCR(#2,\tkz@rayA)(#4,\tkz@rayB){tkzFirstPointResult}{%
- tkzSecondPointResult}
+ \tkzInterCCR(#2,\tkz@rayA)(#4,\tkz@rayB){tkzFirstPointResult}{tkzSecondPointResult}
\or% 1
\tkzInterCCR(#2,#3)(#4,#5){tkzFirstPointResult}{tkzSecondPointResult}%
\or%2
@@ -463,10 +459,10 @@
\tkz@cx#2cm %
\tkz@cy#4cm %
\edef\tkz@aa{\fpeval{((\tkz@cx+\tkz@cy)/(2*\tkz@dd))*(\tkz@cx-\tkz@cy)+\tkz@dd/2}}
-\edef\tkz@xx{\fpeval{\tkz@ax+\tkz@aa/\tkz@dd*(\tkz@bx - \tkz@ax)}}
+ \edef\tkz@xx{\fpeval{\tkz@ax+\tkz@aa/\tkz@dd*(\tkz@bx - \tkz@ax)}}
\edef\tkz@yy{\fpeval{\tkz@ay+\tkz@aa/\tkz@dd*(\tkz@by - \tkz@ay)}}
\path[coordinate](\tkz@xx pt,\tkz@yy pt) coordinate (tkzRadialCenter);
-\edef\tkz@hh{\fpeval{sqrt(abs((\tkz@cx+\tkz@aa)*(\tkz@cx-\tkz@aa)))}}% abs !2022
+\edef\tkz@hh{\fpeval{sqrt(abs((\tkz@cx+\tkz@aa)*(\tkz@cx-\tkz@aa)))}}% abs !2023
\edef\tkz@rx{\fpeval{\tkz@hh / \tkz@dd * (\tkz@ay - \tkz@by)}}
\edef\tkz@ry{\fpeval{\tkz@hh / \tkz@dd * (\tkz@bx - \tkz@ax)}}
\edef\tkz@xs{\fpeval{\tkz@xx + \tkz@rx}}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-math.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-math.tex
index 7c11e8be03..9ec079f092 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-math.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-math.tex
@@ -1,5 +1,5 @@
% tkz-tools-eu-math.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-tools-eu-math.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tools-eu-math.tex}
\makeatletter
%<-------------------------------------------------------------------------->
% \tkzpointnormalised#
@@ -113,7 +113,7 @@
}%
% Schrodinger's cat idea 03/01/20
-\tikzset{xfp/.code={%
+\tikzset{veclen/.code={%
\pgfmathdeclarefunction*{veclen}{2}{%
\begingroup%
\pgfmath@x##1pt\relax%
@@ -147,7 +147,7 @@
\pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}}%
\tkz@cx\pgf@x%
\tkz@cy\pgf@y%
-\edef\tkz@@dotprod{\fpeval{round(abs((\tkz@bx-\tkz@ax)*(\tkz@cx-\tkz@ax)+(\tkz@by-\tkz@ay)*(\tkz@cy-\tkz@ay))/(28.45274*28.45274),5)}}
+\edef\tkz@@dotprod{\fpeval{round(((\tkz@bx-\tkz@ax)*(\tkz@cx-\tkz@ax)+(\tkz@by-\tkz@ay)*(\tkz@cy-\tkz@ay))/(809.55841),5)}}
\global\let\tkzMathResult\tkz@@dotprod
\endgroup}
%<---------------------------------------------------------–>
@@ -160,7 +160,7 @@
\tkz@@CalcLengthcm(#1,#2){tkz@la}
\tkz@@CalcLengthcm(#1,#3){tkz@lb}
\tkzDotProduct(#1,#2,#3)
-\edef\tkzResult{\fpeval{abs((\tkzMathResult)-(\tkz@la)*(\tkz@lb))}}
+\edef\tkzResult{\fpeval{abs(\tkzMathResult)-(\tkz@la)*(\tkz@lb)}}
\ifdim \tkzResult pt < 0.01 pt\relax%
\global\tkzLineartrue
\else
@@ -223,5 +223,34 @@
\fi
\endgroup
}
+\def\tkzmathrotatepointaround#1#2#3{%
+ \pgf@process{%
+ \pgf@process{#1}%
+ \pgf@xc=\pgf@x%
+ \pgf@yc=\pgf@y%
+ \pgf@process{#2}%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \pgf@xb\pgf@x%
+ \pgf@yb\pgf@y%
+ \pgf@x=\pgf@xc%
+ \pgf@y=\pgf@yc%
+ \advance\pgf@x-\pgf@xa%
+ \advance\pgf@y-\pgf@ya%
+ \pgfmathsetmacro\angle{#3}%
+ \mathSin{\mathRad{\angle}}%
+ \let\sineangle\pgfmathresult%
+ \mathCos{\mathRad{\angle}}%
+ \let\cosineangle\pgfmathresult%
+ \pgf@xa\cosineangle\pgf@x%
+ \advance\pgf@xa-\sineangle\pgf@y%
+ \pgf@ya\sineangle\pgf@x%
+ \advance\pgf@ya\cosineangle\pgf@y%
+ \pgf@x\pgf@xb%
+ \pgf@y\pgf@yb%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ }%
+}
\makeatother
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-modules.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-modules.tex
index 86c9f6947d..eb0dae14e6 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-modules.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-modules.tex
@@ -1,5 +1,5 @@
% tkz-tools-modules
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-tools-eu-utilities.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tools-eu-utilities.tex}
\makeatletter
%<------------- % chargement des modules ---------------------------------->
\def\tkz@obj@all{angles,arcs,compass,defcircles,deflines,defpoints,defpointsby,defpointsrnd,defpointswith,polygons,protractor,sectors,show,triangles}%
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-text.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-text.tex
index 8afaae338e..3f52c84c28 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-text.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-text.tex
@@ -1,5 +1,5 @@
% tkz-tools-eu-text.tex
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-tools-eu-text.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tools-eu-text.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% tkzText
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-utilities.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-utilities.tex
index 05649512dc..eb9c52317f 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-utilities.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-utilities.tex
@@ -1,5 +1,5 @@
% tkz-tools-eu-utilities
-% Copyright 2022 Alain Matthes
+% 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.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-tools-eu-utilities.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tools-eu-utilities.tex}
\makeatletter
\pgfkeys{/tkzClip/.cd,
space/.store in = {\tkz@CLI@space},
@@ -37,7 +37,6 @@ space = {}}
\def\extractxy#1{%
\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}
\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}
-\typeout{#1 \the\pgf@x,\the\pgf@y}
}
%<-------------- some tools ------------------------------------------------->
\def\tkzutil@empty{}
@@ -168,64 +167,7 @@ space = {}}
}
\def\EnabledNumprint{\let\numprint\tkz@numprint}
%<---------------------------------------------------------–>
-\def\tkzSwapPoints(#1,#2){
- \pgfnodealias{tkzPointTmp}{#2}
- \pgfnodealias{#2}{#1}
- \pgfnodealias{#1}{tkzPointTmp}}
-%<---------------------------------------------------------–>
-\def\tkzPermute(#1,#2,#3){
-\tkzURotateWithNodes(#1,#3,#2)(#3) \tkzGetPoint{tkzpt}
-\tkzURotateWithNodes(#1,#2,#3)(#2) \tkzGetPoint{#2}
-\tkzSwapPoints(tkzpt,#3)}
-%<---------------------------------------------------------–>
-\def\tkzDotProduct(#1,#2,#3){%
-\begingroup
-\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}%
-\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}%
-\tkz@ax\pgf@x%
-\tkz@ay\pgf@y%
-\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}%
-\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}}
-\tkz@bx\pgf@x%
-\tkz@by\pgf@y%
-\pgfextractx{\pgf@x}{\pgfpointanchor{#3}{center}}%
-\pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}}%
-\tkz@cx\pgf@x%
-\tkz@cy\pgf@y%
-\edef\tkz@dotprod{\fpeval{round(((\tkz@bx-\tkz@ax)*(\tkz@cx-\tkz@ax)+(\tkz@by-\tkz@ay)*(\tkz@cy-\tkz@ay))/(809.55841),5)}}
-\global\let\tkzMathResult\tkz@dotprod
-\endgroup}
-%<---------------------------------------------------------–>
- \def\tkzGetResult#1{%
- \global\expandafter\edef\csname #1\endcsname{\tkzMathResult}}
-%<---------------------------------------------------------–>
-% #1,#2 and #3 aligned
-\def\tkzIsLinear(#1,#2,#3){%
-\begingroup
-\tkz@@CalcLengthcm(#1,#2){tkz@la}
-\tkz@@CalcLengthcm(#1,#3){tkz@lb}
-\tkzDotProduct(#1,#2,#3)
-\edef\tkzMathResult{\fpeval{abs(abs(\tkzMathResult)-(\tkz@la)*(\tkz@lb))}}
-\ifdim \tkzMathResult pt < 0.0001 pt\relax%
-\global\tkzLineartrue
-\else
-\global\tkzLinearfalse
-\fi
-\endgroup
-}
-%<---------------------------------------------------------–>
-% syntax : vec(#2,#1) ortho vec(#3,#1)
-\def\tkzIsOrtho(#1,#2,#3){%
-\begingroup
-\tkzDotProduct(#1,#2,#3)
-\edef\tkzMathResult{\fpeval{abs(\tkzMathResult)}}
-\ifdim \tkzMathResult pt < 0.0001 pt\relax%
-\global\tkzOrthotrue
-\else
-\global\tkzOrthofalse
-\fi
-\endgroup
-}
+
%<---------------------------------------------------------–>
\def\tkzHelpGrid{%
\draw[help lines] (current bounding box.south west) grid