texlive[74457] Master/texmf-dist: tkz-elements (5mar25)

commits+karl at tug.org commits+karl at tug.org
Wed Mar 5 22:31:22 CET 2025


Revision: 74457
          https://tug.org/svn/texlive?view=revision&revision=74457
Author:   karl
Date:     2025-03-05 22:31:22 +0100 (Wed, 05 Mar 2025)
Log Message:
-----------
tkz-elements (5mar25)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/tkz-elements/README.md
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-circle.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-conic.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-ellipse.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-line.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-matrices.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-misc.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-occs.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-parallelogram.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-point.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-quadrilateral.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-rectangle.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-regular.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-square.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-triangle.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-vectors.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-examples.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-indepthstudy.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-intersection.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-main.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-news.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-organization.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-presentation.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-structure.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-theorems.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-transfers.tex
    trunk/Master/texmf-dist/doc/latex/tkz-elements/gold_preamble.lua
    trunk/Master/texmf-dist/doc/latex/tkz-elements/sangaku.lua
    trunk/Master/texmf-dist/doc/latex/tkz-elements/search_circle.lua
    trunk/Master/texmf-dist/doc/latex/tkz-elements/tkz-elements.pdf
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz-elements.sty
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_circle.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_class.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_conic.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_ellipse.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_circles.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_conics.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_intersections.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_lines.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_maths.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_matrices.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_points.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_regular.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_triangles.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_line.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_main.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_matrices.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_occs.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_parallelogram.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_point.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_quadrilateral.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_rectangle.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_regular.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_square.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_triangle.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_vector.lua

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/tkz-elements/preamble.lua
    trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_misc.lua

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/README.md	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/README.md	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,10 +1,10 @@
 # tkz-elements — for euclidean geometry
 
-Release 3.32c 2025/02/26
+Release 3.34 c 2025/03/04
 
 ## Description
 
-`tkz-elements v.3.32c` is the new version of a library written in lua, allowing to make all the necessary calculations to define the objects of a Euclidean geometry figure. You need to compile with `LuaLaTeX`. With `tkz-elements`, the definitions and calculations are only done with `Lua`. 
+`tkz-elements v.3.34c` is the new version of a library written in lua, allowing to make all the necessary calculations to define the objects of a Euclidean geometry figure. You need to compile with `LuaLaTeX`. With `tkz-elements`, the definitions and calculations are only done with `Lua`. 
 
  The main possibility of programmation  proposed is oriented "object programming" with object classes like point, line, triangle, circle and now, conic.  For the moment, once the calculations are done, it is `tkz-euclide` or `TikZ` which allows the drawings. You can use the option `mini` with `tkz-euclide` to load only the modules required for tracing.
 
@@ -64,6 +64,16 @@
 An important example  `Golden Arbelos` using the package is on the site. All the files of the documentation are on the site.
 
 ## History
+   - version 3.34c
+      - Package additions
+          - added functions for creating circles "through" and "diameter"
+          - adding centers with “kimberling” method X(55), X(56), X(371)
+          - added “kenmotu_circle” and “kenmotu_point” methods
+          - added start of error handling with "tex.error"
+      - Documentation
+          - Correction of some file headers (date and name) 
+          - start of documentation reformatting; classification of examples
+          - addition in the examples, circles of Yff, Adams, Van Lamoen, Kenmotu
    - version 3.32c
      - Modification of the class "occs". The first argument is the main axis
            through a focus and a vertex.

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-circle.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-circle.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-circle.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -16,19 +16,19 @@
 \captionof{table}{Circle attributes.}\label{circle:att}
 \begin{tabular}{lll}
 \toprule
-\textbf{Attributes}     & \textbf{Application} &\\
-\Iattr{circle}{center}  & |z.A = C.AB.center| &\\
-\Iattr{circle}{through} & |z.B = C.AB.through| &\\
-\Iattr{circle}{type}    &  |C.AB.type|   &  |C.OA.type = 'circle'|\\
-\Iattr{circle}{radius}  &  |C.AB.radius| &   |r = C.OA.radius | $r$ real number\\
-\Iattr{circle}{north}   &  |C.AB.north|  &   |z.N = C.OA.north|\\
-\Iattr{circle}{south}   &  |C.AB.south|  &    |z.S = C.OA.south| \\
-\Iattr{circle}{east}    &  |C.AB.east|   &   |z.E = C.OA.east| \\
-\Iattr{circle}{west}    &  |C.AB.west|   &   |z.W = C.OA.west| \\
-\Iattr{circle}{opp}     &  |z.Ap = C.AB.opp|   & [\ref{ssub:example_circle_attributes}]  \\
-\Iattr{circle}{ct}    &  |L = C.AB.ct|  [ \ref{ssub:example_circle_attributes} ]  \\
-\Iattr{circle}{perimeter}  & |p = C.AB.perimeter| [\ref{ssub:attributes_perimeter_and_area}]  \\
-\Iattr{circle}{area}  & |a = C.AB.area| [\ref{ssub:attributes_perimeter_and_area}]    \\
+\textbf{Attributes}       & \textbf{Application} &\\
+\Iattr{circle}{center}    & |z.A = C.AB.center| &\\
+\Iattr{circle}{through}   & |z.B = C.AB.through| &\\
+\Iattr{circle}{type}      &  |C.AB.type|   &  |C.OA.type = 'circle'|\\
+\Iattr{circle}{radius}    &  |C.AB.radius| &   |r = C.OA.radius | $r$ real number\\
+\Iattr{circle}{north}     &  |C.AB.north|  &   |z.N = C.OA.north|\\
+\Iattr{circle}{south}     &  |C.AB.south|  &    |z.S = C.OA.south| \\
+\Iattr{circle}{east}      &  |C.AB.east|   &   |z.E = C.OA.east| \\
+\Iattr{circle}{west}      &  |C.AB.west|   &   |z.W = C.OA.west| \\
+\Iattr{circle}{opp}       &  |z.Ap = C.AB.opp|   & [\ref{ssub:example_circle_attributes}]  \\
+\Iattr{circle}{ct}        &  |L = C.AB.ct|  [ \ref{ssub:example_circle_attributes} ]  \\
+\Iattr{circle}{perimeter} & |p = C.AB.perimeter| [\ref{ssub:attributes_perimeter_and_area}]  \\
+\Iattr{circle}{area}      & |a = C.AB.area| [\ref{ssub:attributes_perimeter_and_area}]    \\
 \bottomrule %
 \end{tabular}
 \egroup
@@ -41,15 +41,16 @@
 \begin{minipage}{0.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
-   z.a   = point: new (1, 1)
-   z.b   = point: new (5, 4)
-   C.ab  = circle : new (z.a,z.b)
-   z.s   = C.ab.south
-   z.w   = C.ab.west
-   r     = C.ab.radius
-   z.c   = C.ab.opp
-   z.r,z.t = get_points (C.ab.ct : ortho_from (z.b))
+ init_elements()
+ z.a = point:new(1, 1)
+ z.b = point:new(5, 4)
+ C.ab = circle:new(z.a, z.b)
+ z.s = C.ab.south
+ z.w = C.ab.west
+ r = C.ab.radius
+ z.c = C.ab.opp
+ z.r,
+ z.t = get_points(C.ab.ct:ortho_from(z.b))
 }
 \begin{tikzpicture}
 \tkzGetNodes
@@ -63,15 +64,16 @@
 \end{minipage}
 \begin{minipage}{0.5\textwidth}
 \directlua{%
-init_elements ()
-   z.a = point: new (1, 1)
-   z.b = point: new (5, 4)
-   C.ab = circle : new (z.a,z.b)
-   z.s = C.ab.south
-   z.w = C.ab.west
-   r   = C.ab.radius
-   z.c   = C.ab.opp
-   z.r,z.t = get_points (C.ab.ct : ortho_from (z.b))
+ init_elements()
+ z.a = point:new(1, 1)
+ z.b = point:new(5, 4)
+ C.ab = circle:new(z.a, z.b)
+ z.s = C.ab.south
+ z.w = C.ab.west
+ r = C.ab.radius
+ z.c = C.ab.opp
+ z.r,
+ z.t = get_points(C.ab.ct:ortho_from(z.b))
 }
 
 \hfill\begin{tikzpicture}[scale=.5]
@@ -96,8 +98,8 @@
 \begin{Verbatim}
   \directlua{
   z.A = point : new (1, 2)
-  z.B = point : new (4, 3)
-  C.AB =  circle : new (z.A,z.B)
+  z.B = point : new(4, 3)
+  C.AB =  circle : new(z.A,z.B)
   p = C.AB.perimeter
   a = C.AB.area
   }
@@ -104,15 +106,13 @@
 Let be two points $A$ and $B$. The circle of center $A$ passing 
 through $B$ has perimeter \pmpn{\tkzUseLua{p}} $cm$ 
 and area \pmpn{\tkzUseLua{a} }$cm^2$.
-
 \end{Verbatim}
-
 \end{mybox}
 
 \directlua{
-z.A = point : new (1, 2)
-z.B = point : new (4, 3)
-C.AB =  circle : new (z.A,z.B)
+z.A = point : new(1, 2)
+z.B = point : new(4, 3)
+C.AB =  circle : new(z.A,z.B)
 p = C.AB.perimeter
 a = C.AB.area
 }
@@ -119,7 +119,7 @@
 Let be two points $A$ and $B$. 
 The circle of center $A$ passing through $B$ has perimeter \pmpn{\tkzUseLua{p}} $cm$ and area \pmpn{\tkzUseLua{a} }$cm^2$.
 
-% subsubsection attributes_perimeter_and_area (end)
+% subsubsection attributes_perimeter_and_area(end)
 % subsection attributes_of_a_circle (end)
 
 \newpage
@@ -133,56 +133,73 @@
 \toprule
 \textbf{Methods} & \textbf{Comments}   & \\
 \midrule   \\
-\Igfct{circle}{new(O,A)} & |C.OA = circle : new (z.O,z.A)| & center $O$ through $A$; [\ref{ssub:method_imeth_circle_new}]\\
-\Igfct{circle}{radius(O,r)} & |C.OA = circle : radius (z.O,2)| & center $O$ radius =2 cm; [\ref{ssub:method_imeth_circle_radius}]\\
-\Igfct{circle}{diameter(A,B)} & |C.OA = circle :diameter(z.A,z.B)| & diameter $[AB]$; [\ref{ssub:method_imeth_circle_diameter}]  \\
+\Igfct{circle}{new(O,A)} & |C.OA = circle : new(z.O,z.A)| & center $O$ through $A$; [\ref{ssub:method_imeth_circle_new}]\\
+\Igfct{circle}{radius(O,r)} & |C.OA = circle : radius(z.O,2)| & depreciated; Refer to [\ref{ssub:method_imeth_circle_radius}]\\
+\Igfct{circle}{diameter(A,B)} & |C.OA = circle :diameter(z.A,z.B)| & depreciated; Refer to [\ref{ssub:method_imeth_circle_diameter}]  \\
 \midrule 
  \textbf{Reals} &&\\
 \midrule 
-\Imeth{circle}{power (pt)}     &| r = C.OA: power (z.M)| &  \ref{sub:apollonius_circle_v1_with_inversion} ] \\
+\Imeth{circle}{power(pt)}     &| r = C.OA: power(z.M)| &  \ref{sub:apollonius_circle_v1_with_inversion} ] \\
 \midrule 
  \textbf{Strings} &&\\
  \midrule
- \Imeth{circle}{circles\_position (C1)} & result = string & [\ref{ssub:circles_position}] \\
+ \Imeth{circle}{circles\_position(C1)} & result = string & [\ref{ssub:circles_position}] \\
  \midrule
  \textbf{Booleans} &&\\
 \midrule 
-\Imeth{circle}{in\_out (pt)} & |C.OA : in_out (z.M)| & [\ref{ssub:in_out_for_circle_and_disk}]  \\
-\Imeth{circle}{in\_out\_disk (pt)} & |C.OA : in_out_disk (z.M)| & [\ref{ssub:in_out_for_circle_and_disk}]  \\
-\Imeth{circle}{is\_tangent (L)} & |C.OA : is_tangent (L.CD)| & [\ref{ssub:method_imeth_circle_is__tangent}]  \\
+\Imeth{circle}{in\_out(pt)} & |C.OA : in_out(z.M)| & [\ref{ssub:in_out_for_circle_and_disk}]  \\
+\Imeth{circle}{in\_out\_disk(pt)} & |C.OA : in_out_disk(z.M)| & [\ref{ssub:in_out_for_circle_and_disk}]  \\
+\Imeth{circle}{is\_tangent(L)} & |C.OA : is_tangent(L.CD)| & [\ref{ssub:method_imeth_circle_is__tangent}]  \\
  \textbf{Points} &&\\
 \midrule 
-\Imeth{circle}{antipode (pt)} & |z.C = C.OA: antipode (z.B)| &    $[BC]$ = diameter;  [\ref{ssub:method_imeth_circle_antipode}]   \\
-\Imeth{circle}{midarc (pt,pt)} & |z.D = C.AB: midarc (z.B,z.C)|& $D$ is the midarc of $\widearc{BC}$; [\ref{ssub:method_imeth_circle_midarc}]\\
-\Imeth{circle}{point (r)} & |z.E = C.AB: point (0.25)|& |r| between 0 and 1;  [\ref{ssub:method_imeth_circle_point}]\\
+\Imeth{circle}{antipode(pt)} & |z.C = C.OA: antipode(z.B)| &    $[BC]$ = diameter;  [\ref{ssub:method_imeth_circle_antipode}]   \\
+\Imeth{circle}{midarc(pt,pt)} & |z.D = C.AB: midarc(z.B,z.C)|& $D$ is the midarc of $\widearc{BC}$; [\ref{ssub:method_imeth_circle_midarc}]\\
+\Imeth{circle}{point(r)} & |z.E = C.AB: point(0.25)|& |r| between 0 and 1;  [\ref{ssub:method_imeth_circle_point}]\\
 \Imeth{circle}{random\_pt(lower, upper)} & &\\
-\Imeth{circle}{inversion (obj)} & |z.Bp = C.AC: inversion (z.B)|& [\ref{ssub:inversion}]\\
-\Imeth{circle}{internal\_similitude (C)} & |z.I= C.one: internal_similitude(C.two)| &  [\ref{ssub:method_imeth_circle_internal__similitude}]\\
-\Imeth{circle}{external\_similitude (C)} & |z.J= C.one: external_similitude(C.two)| &  [\ref{ssub:method_imeth_circle_external__similitude}] \\ 
-\Imeth{circle}{radical\_center (C1<,C2>)} & or only (C1) & [\ref{ssub:radical_center} ]  \\
+\Imeth{circle}{inversion(obj)} & |z.Bp = C.AC: inversion(z.B)|& [\ref{ssub:inversion}]\\
+\Imeth{circle}{internal\_similitude(C)} & |z.I= C.one: internal_similitude(C.two)| &  [\ref{ssub:method_imeth_circle_internal__similitude}]\\
+\Imeth{circle}{external\_similitude(C)} & |z.J= C.one: external_similitude(C.two)| &  [\ref{ssub:method_imeth_circle_external__similitude}] \\ 
+\Imeth{circle}{radical\_center(C1<,C2>)} & or only(C1) & [\ref{ssub:radical_center} ]  \\
 \midrule 
  \textbf{Lines} & & \\
 \midrule 
-\Imeth{circle}{radical\_axis (C)} &   [ \ref{ssub:method_imeth_circle_radical__axis_c} ; \ref{sub:d_alembert_2} ] & \\
-\Imeth{circle}{tangent\_at (pt)} & |z.P=C.OA:tangent_at(z.M)| & [\ref{ssub:method_imeth_circle_tangent}] \\
-\Imeth{circle}{tangent\_from (pt)}& |z.M,z.N=C.OA: tangent_from (z.P)| & [\ref{ssub:method_imeth_circle_tangent} ] \\
-\Imeth{circle}{common\_tangent (C)}& |z.a,z.b = C.AC: common_tangent (C.EF)|&  [\ref{ssub:common_tangent} ; \ref{sub:common_tangent_orthogonality}] \\
-\Imeth{circle}{polar()} & |L.polar=C.OA:polar ()| & [\ref{ssub:method_imeth_circle_polar_pt}] \\
+\Imeth{circle}{radical\_axis(C)} &   [ \ref{ssub:method_imeth_circle_radical__axis_c} ; \ref{sub:d_alembert_2} ] & \\
+\Imeth{circle}{tangent\_at(pt)} & |z.P=C.OA:tangent_at(z.M)| & [\ref{ssub:method_imeth_circle_tangent}] \\
+\Imeth{circle}{tangent\_from(pt)}& |z.M,z.N=C.OA: tangent_from(z.P)| & [\ref{ssub:method_imeth_circle_tangent} ] \\
+\Imeth{circle}{common\_tangent(C)}& |z.a,z.b = C.AC: common_tangent(C.EF)|&  [\ref{ssub:common_tangent} ; \ref{sub:common_tangent_orthogonality}] \\
+\Imeth{circle}{polar()} & |L.polar=C.OA:polar()| & [\ref{ssub:method_imeth_circle_polar_pt}] \\
 \midrule 
  \textbf{Circles}& &\\
 \midrule 
-\Imeth{circle}{orthogonal\_from (pt)}  &|C=C.OA:orthogonal_from (z.P)|  & [\ref{ssub:method_imeth_circle_orthogonal_from_pt} ;\ref{sub:altshiller} ; \ref{sub:pencil_v1}]  \\
-\Imeth{circle}{orthogonal\_through(pta,ptb)}&|C=C.OA:orthogonal_through (z.z1,z.z2)| &  [\ref{ssub:method_imeth_circle_orthogonal_through}]\\
-\Imeth{circle}{midcircle (C)}  & |C.inv = C.OA: midcircle (C.EF)|  & [\ref{ssub:midcircle}] \\
-\Imeth{circle}{radical\_circle (C1<,C2>)} & or only (C1) &  [\ref{ssub:radical_circle}] \\
-\Imeth{circle}{c\_c\_pp(pt,pt)} &|C1,C2=C.A:c_cc_p (z.P,z.Q)| &  [\ref{ssub:method_c__c__pp}] \\
-\Imeth{circle}{c\_cc\_p(C,pt)} &|C1,C2=C.A:c_cc_p (C.B,z.P)| & [\ref{ssub:method_c_cc_p}]  \\
-\Imeth{circle}{c\_lc\_p(L,pt,<inside>)} &|C1,C2=C.A:c_cc_p (L.AB,z.P)| & [\ref{ssub:method_c_lc_p}]  \\
+\Imeth{circle}{orthogonal\_from(pt)}  &|C=C.OA:orthogonal_from(z.P)|  & [\ref{ssub:method_imeth_circle_orthogonal_from_pt} ;\ref{sub:altshiller} ; \ref{sub:pencil_v1}]  \\
+\Imeth{circle}{orthogonal\_through(pta,ptb)}&|C=C.OA:orthogonal_through(z.z1,z.z2)| &  [\ref{ssub:method_imeth_circle_orthogonal_through}]\\
+\Imeth{circle}{midcircle(C)}  & |C.inv = C.OA: midcircle(C.EF)|  & [\ref{ssub:midcircle}] \\
+\Imeth{circle}{radical\_circle(C1<,C2>)} & or only(C1) &  [\ref{ssub:radical_circle}] \\
+\Imeth{circle}{c\_c\_pp(pt,pt)} &|C1,C2=C.A:c_cc_p(z.P,z.Q)| &  [\ref{ssub:method_c__c__pp}] \\
+\Imeth{circle}{c\_cc\_p(C,pt)} &|C1,C2=C.A:c_cc_p(C.B,z.P)| & [\ref{ssub:method_c_cc_p}]  \\
+\Imeth{circle}{c\_lc\_p(L,pt,<inside>)} &|C1,C2=C.A:c_cc_p(L.AB,z.P)| & [\ref{ssub:method_c_lc_p}]  \\
 \bottomrule 
 \end{tabular}
 \egroup
 % subsection methods_circle (end)
 
+\bgroup
+\catcode`_=12 
+\small
+\captionof{table}{Circle functions.}\label{circle:func}
+\begin{tabular}{ll}
+\toprule
+\textbf{Functions} & \textbf{Reference}     \\
+\midrule
+
+\Igfct{circle}{radius(pt,r)} & |C = circle:new(through(z.O, 4)) |; Refer to [\ref{ssub:function_code_through_and_code_diameter}] \\
+
+\Igfct{circle}{diameter(pt,pt)}& |C = circle:new(diameter(z.A, z.B)) |; Refer to [\ref{ssub:function_code_through_and_code_diameter}] \\
+
+\bottomrule
+\end{tabular}
+\egroup
+
 \subsubsection{Method \Imeth{circle}{new}} % (fold)
 \label{ssub:method_imeth_circle_new}
 
@@ -192,10 +209,10 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
-z.O     = point:    new (0,0)
-z.A     = point:    new (2,1)
-C       = circle:   new (z.O , z.A)
+init_elements()
+z.O     = point:    new(0,0)
+z.A     = point:    new(2,1)
+C       = circle:   new(z.O, z.A)
 }
 \begin{tikzpicture}[gridded]
 \tkzGetNodes
@@ -207,10 +224,10 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
-z.O     = point:    new (0,0)
-z.A     = point:    new (2,1)
-C       = circle:   new (z.O , z.A)
+init_elements()
+z.O     = point:    new(0,0)
+z.A     = point:    new(2,1)
+C       = circle:   new(z.O, z.A)
 }
   \begin{center}
 \begin{tikzpicture}[gridded]
@@ -220,26 +237,80 @@
 \tkzLabelPoints[right](A,O)
 \end{tikzpicture}
   \end{center}
+\end{minipage}
+% subsubsection method_imeth_circle_new (end)
 
+\subsubsection{function \code{through} and \code{diameter}} % (fold)
+\label{ssub:function_code_through_and_code_diameter}
+
+I've added these two functions to handle the following two common cases: for the first, we construct a circle with a given circle and radius length; for the second, we construct a circle knowing two diametrically opposed points. These functions also allow you to choose the point through which the circle will pass. 
+
+In the first case, an optional third argument, the measure of an angle, is used to place the point \code{through} relative to the point \emph{east} of the center. By default, it's the point \emph{east}.
+
+For the second, an optional third argument, \code{swap}, lets you choose the first point for \code{through}, otherwise the default is the second.
+
+In both cases, the functions return the center and a point through which the circle passes.
+
+\vspace{6pt}
+\begin{minipage}{.5\textwidth}
+\begin{Verbatim}
+\directlua{
+z.A = point:new(0,0)
+z.B = point:new(2,1)
+C   = circle:new(through(z.A, math.sqrt(5), math.pi/2))
+C.a = circle:new(diameter(z.A, z.B))
+z.T = C.through 
+C.b = circle:new(diameter(z.A, z.T, swap))
+z.w = C.a.center
+z.t = C.a.through
+z.u = C.b.center
+z.v = C.b.through
+}
+\begin{tikzpicture}[gridded]
+\tkzGetNodes
+\tkzDrawCircles(A,T w,t u,v)
+\tkzDrawPoints(A,B,T)
+\tkzLabelPoints[right](A,B,T)
+\end{tikzpicture}
+\end{Verbatim}
 \end{minipage}
+\begin{minipage}{.5\textwidth}
+\directlua{
+z.A = point:new(0,0)
+z.B = point:new(2,1)
+C   = circle:new(through(z.A, math.sqrt(5), math.pi/2))
+C.a = circle:new(diameter(z.A, z.B))
+z.T = C.through 
+C.b = circle:new(diameter(z.A, z.T, swap))
+z.w = C.a.center
+z.t = C.a.through
+z.u = C.b.center
+z.v = C.b.through
+}
+\begin{tikzpicture}[gridded]
+\tkzGetNodes
+\tkzDrawCircles(A,T w,t u,v)
+\tkzDrawPoints(A,B,T)
+\tkzLabelPoints[right](A,B,T)
+\end{tikzpicture}
+\end{minipage}
+% subsubsection function_code_through_and_code_diameter (end)
 
-% subsubsection method_imeth_circle_new (end)
-
 \subsubsection{Method \Imeth{circle}{radius}} % (fold)
 \label{ssub:method_imeth_circle_radius}
 
 
-We define a circle with its centre and radius.
+We define a circle with its centre and radius. (depreciated see above [\ref{ssub:function_code_through_and_code_diameter}])
 
 \vspace{6pt}
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
-z.O     = point:    new (0,0)
-z.A     = point:    new (2,1)
-C       = circle:   radius (z.A , math.sqrt(5))
-z.T     = C.through 
+ init_elements()
+ z.O = point:new(0,0)
+ z.A = point:new(2,1)
+ C   = circle:radius(z.A, math.sqrt(5))
+ z.T = C.through 
 }
 \begin{tikzpicture}[gridded]
 \tkzGetNodes
@@ -251,11 +322,11 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
   \directlua{%
-init_elements ()
-  z.O     = point:    new (0,0)
-  z.A     = point:    new (2,1)
-  C       = circle:   radius (z.A , math.sqrt(5))
-  z.T     = C.through 
+init_elements()
+  z.O = point:new(0,0)
+  z.A = point:new(2,1)
+  C = circle:radius(z.A, math.sqrt(5))
+  z.T = C.through 
   }
   \begin{center}
     \begin{tikzpicture}[gridded]
@@ -271,16 +342,16 @@
 \subsubsection{Method \Imeth{circle}{diameter}} % (fold)
 \label{ssub:method_imeth_circle_diameter}
 
-A circle is defined by two points at the ends of one of its diameters.
+A circle is defined by two points at the ends of one of its diameters. (depreciated see above [\ref{ssub:function_code_through_and_code_diameter}])
 
 \vspace{6pt}
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
-z.A     = point:    new (0,0)
-z.B     = point:    new (2,1)
-C       = circle:   diameter (z.A , z.B)
+init_elements()
+z.A     = point:    new(0,0)
+z.B     = point:    new(2,1)
+C       = circle:   diameter(z.A, z.B)
 z.O     = C.center
 z.T     = C.through 
 }
@@ -294,10 +365,10 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
-z.A     = point:    new (0,0)
-z.B     = point:    new (2,1)
-C       = circle:   diameter (z.A , z.B)
+init_elements()
+z.A     = point:    new(0,0)
+z.B     = point:    new(2,1)
+C       = circle:   diameter(z.A, z.B)
 z.O     = C.center
 z.T     = C.through 
 }
@@ -318,13 +389,13 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{
- z.A  = point:  new (0,0)
- z.B  = point:  new (0,2)   
- C.AB = circle: new (z.A,z.B)
- z.C  = point:  new (2,-2)
- z.D  = point:  new (2,3)
- L.CD = line : new (z.C,z.D)
- if C.AB : is_tangent (L.CD) 
+ z.A  = point:  new(0,0)
+ z.B  = point:  new(0,2)   
+ C.AB = circle: new(z.A,z.B)
+ z.C  = point:  new(2,-2)
+ z.D  = point:  new(2,3)
+ L.CD = line : new(z.C,z.D)
+ if C.AB : is_tangent(L.CD) 
  then tex.print("L.CD tangent to C.AB") 
   else 
   tex.print("L.CD no tangent to C.AB")
@@ -342,13 +413,13 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
   \directlua{
-   z.A  = point:  new (0,0)
-   z.B  = point:  new (0,2)   
-   C.AB = circle: new (z.A,z.B)
-   z.C  = point:  new (2,-2)
-   z.D  = point:  new (2,3)
-   L.CD = line : new (z.C,z.D)
-   if C.AB : is_tangent (L.CD) then
+   z.A  = point:  new(0,0)
+   z.B  = point:  new(0,2)   
+   C.AB = circle: new(z.A,z.B)
+   z.C  = point:  new(2,-2)
+   z.D  = point:  new(2,3)
+   L.CD = line : new(z.C,z.D)
+   if C.AB : is_tangent(L.CD) then
     tex.print("L.CD tangent to C.AB") 
     else 
     tex.print("L.CD no tangent to C.AB") 
@@ -374,11 +445,11 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
-z.A     = point:    new (0,0)
-z.O     = point:    new (2,1)
-C       = circle:   new (z.O , z.A)
-z.B     = C : antipode (z.A)
+init_elements()
+z.A     = point:    new(0,0)
+z.O     = point:    new(2,1)
+C       = circle:   new(z.O, z.A)
+z.B     = C : antipode(z.A)
 }
 \begin{tikzpicture}[gridded]
 \tkzGetNodes
@@ -390,11 +461,11 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
-z.A     = point:    new (0,0)
-z.O     = point:    new (2,1)
-C       = circle:   new (z.O , z.A)
-z.B     = C : antipode (z.A)
+init_elements()
+z.A     = point:    new(0,0)
+z.O     = point:    new(2,1)
+C       = circle:   new(z.O, z.A)
+z.B     = C : antipode(z.A)
 }
   \begin{center}
 \begin{tikzpicture}[gridded]
@@ -420,12 +491,12 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
-z.A     = point:    new (0,0)
-z.O     = point:    new (2,1)
-C       = circle:   new (z.O , z.A)
-z.B     = C : point (0.25)
-z.M     = C : midarc (z.A,z.B)
+init_elements()
+z.A     = point:    new(0,0)
+z.O     = point:    new(2,1)
+C       = circle:   new(z.O, z.A)
+z.B     = C : point(0.25)
+z.M     = C : midarc(z.A,z.B)
 }
 \begin{tikzpicture}[gridded]
 \tkzGetNodes
@@ -437,12 +508,12 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
-z.A     = point:    new (0,0)
-z.O     = point:    new (2,1)
-C       = circle:   new (z.O , z.A)
-z.B     = C : point (0.25)
-z.M     = C : midarc (z.A,z.B)
+init_elements()
+z.A     = point:    new(0,0)
+z.O     = point:    new(2,1)
+C       = circle:   new(z.O, z.A)
+z.B     = C : point(0.25)
+z.M     = C : midarc(z.A,z.B)
 }
   \begin{center}
 \begin{tikzpicture}[gridded]
@@ -456,7 +527,7 @@
 
 % subsubsection method_imeth_circle_midarc (end)
 
-\subsubsection{Method \Imeth{circle}{point (r)}} % (fold)
+\subsubsection{Method \Imeth{circle}{point(r)}} % (fold)
 \label{ssub:method_imeth_circle_point}
 
 Let $C$ be a circle with centre $O$ and passing through $A$ such that |z.A = C.through|. This method defines a point $M$ on the circle from A such that the ratio of the length of $\widearc{AM}$ to the circumference of the circle is equal to $r$.
@@ -469,13 +540,13 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
  \directlua{%
-init_elements ()
-   z.O  = point:  new (0,0)
-   z.A  = point:  new (1,2)
-   C.OA = circle:  new (z.O,z.A)
-   z.B = C.OA: point (1/6)
-   z.C = C.OA: point (0.25)
-   z.D = C.OA: point (0.5)
+init_elements()
+   z.O  = point:  new(0,0)
+   z.A  = point:  new(1,2)
+   C.OA = circle:  new(z.O,z.A)
+   z.B = C.OA: point(1/6)
+   z.C = C.OA: point(0.25)
+   z.D = C.OA: point(0.5)
 }
 \begin{tikzpicture}
 \tkzGetNodes
@@ -487,13 +558,13 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
  \directlua{%
-init_elements ()
-   z.O  = point:  new (0,0)
-   z.A  = point:  new (1,2)
-   C.OA = circle:  new (z.O,z.A)
-   z.B = C.OA: point (1/6)
-   z.C = C.OA: point (0.25)
-   z.D = C.OA: point (0.5)
+init_elements()
+   z.O  = point:  new(0,0)
+   z.A  = point:  new(1,2)
+   C.OA = circle:  new(z.O,z.A)
+   z.B = C.OA: point(1/6)
+   z.C = C.OA: point(0.25)
+   z.D = C.OA: point(0.5)
 }
 \begin{center}
 \begin{tikzpicture}
@@ -509,12 +580,12 @@
 
 % subsubsection method_imeth_circle_point (end)
 
-\subsubsection{Method \Imeth{circle}{inversion (obj)}: point, line and circle} % (fold)
+\subsubsection{Method \Imeth{circle}{inversion(obj)}: point, line and circle} %(fold)
 \label{ssub:inversion}
 
 The \code{inversion} method can be used on a point, a line or a circle. Depending on the type of object, the function determines the correct algorithm to use.
 
-\paragraph{Inversion: point} % (fold)
+\paragraph{Inversion: point} %(fold)
 \label{par:inversion_point}
 
 The \code{inversion} method can be used on a point, a group of points, a line or a circle. Depending on the type of object, the function determines the correct algorithm to use.
@@ -522,13 +593,13 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
-   z.o   = point:    new (-1,2)
-   z.a   = point:    new (2,1)
-   C.oa  = circle:   new (z.o,z.a)
-   z.c   = point:    new (3,4)
-   z.d   = C.oa:     inversion (z.c)
-   p     = C.oa:     power (z.c)
+init_elements()
+   z.o   = point:    new(-1,2)
+   z.a   = point:    new(2,1)
+   C.oa  = circle:   new(z.o,z.a)
+   z.c   = point:    new(3,4)
+   z.d   = C.oa:     inversion(z.c)
+   p     = C.oa:     power(z.c)
 }
 \begin{tikzpicture}[scale =.75]
     \tkzGetNodes   
@@ -543,13 +614,13 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
-   z.o   = point:    new (-1,2)
-   z.a   = point:    new (2,1)
-   C.oa  = circle:   new (z.o,z.a)
-   z.c   = point:    new (3,4)
-   z.d   = C.oa:     inversion (z.c)
-   p     = C.oa:     power (z.c)
+init_elements()
+   z.o   = point:    new(-1,2)
+   z.a   = point:    new(2,1)
+   C.oa  = circle:   new(z.o,z.a)
+   z.c   = point:    new(3,4)
+   z.d   = C.oa:     inversion(z.c)
+   p     = C.oa:     power(z.c)
 }
 
 \begin{center}
@@ -574,14 +645,14 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
-   z.o      = point:    new (-1,1)
-   z.a      = point:    new (1,3)
-   C.oa     = circle:   new (z.o,z.a)
-   z.c      = point:    new (3,2)
-   z.d      = point:    new (0,4)
-   L.cd     = line:     new (z.c,z.d)
-   C.OH     = C.oa: inversion (L.cd)
+init_elements()
+   z.o      = point:    new(-1,1)
+   z.a      = point:    new(1,3)
+   C.oa     = circle:   new(z.o,z.a)
+   z.c      = point:    new(3,2)
+   z.d      = point:    new(0,4)
+   L.cd     = line:     new(z.c,z.d)
+   C.OH     = C.oa: inversion(L.cd)
    z.O,z.H  = get_points(C.OH)
 }
 \begin{tikzpicture}
@@ -595,14 +666,14 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
-   z.o      = point:    new (-1,1)
-   z.a      = point:    new (1,3)
-   C.oa     = circle:   new (z.o,z.a)
-   z.c      = point:    new (3,2)
-   z.d      = point:    new (0,4)
-   L.cd     = line:     new (z.c,z.d)
-   C.OH     = C.oa: inversion (L.cd)
+init_elements()
+   z.o      = point:    new(-1,1)
+   z.a      = point:    new(1,3)
+   C.oa     = circle:   new(z.o,z.a)
+   z.c      = point:    new(3,2)
+   z.d      = point:    new(0,4)
+   L.cd     = line:     new(z.c,z.d)
+   C.OH     = C.oa: inversion(L.cd)
    z.O,z.H  = get_points(C.OH)
 }
 
@@ -627,16 +698,16 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
-z.o   = point:  new (-1,3)
-z.a   = point:  new (2,3)
-z.c   = point:  new (-2,1)
-z.e,  = point:  new (-2,7)
-z.d   = point: new (-3,5)
-C.oa  = circle: new (z.o,z.a)
-C.ed  = circle: new (z.e,z.d)
-C.co  = circle: new (z.c,z.o)
-obj   = C.oa: inversion (C.co)
+init_elements()
+z.o   = point:  new(-1,3)
+z.a   = point:  new(2,3)
+z.c   = point:  new(-2,1)
+z.e,  = point:  new(-2,7)
+z.d   = point: new(-3,5)
+C.oa  = circle: new(z.o,z.a)
+C.ed  = circle: new(z.e,z.d)
+C.co  = circle: new(z.c,z.o)
+obj   = C.oa: inversion(C.co)
 if obj.type == "line"
   then z.p,z.q = get_points(obj)
   else z.f,z.b = get_points(obj) end
@@ -659,14 +730,14 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
  \directlua{%
-init_elements ()
-      z.o,z.a  = point:  new (-1,3),point:  new (2,3)
-      z.c      = point:  new (-2,1)
-      z.e,z.d  = point:  new (-2,7),point: new (-3,5)
-      C.oa     = circle: new (z.o,z.a)
-      C.ed     = circle: new (z.e,z.d)
-      C.co     = circle: new (z.c,z.o)
-      obj      = C.oa: inversion (C.co)
+init_elements()
+      z.o,z.a  = point:  new(-1,3),point:  new(2,3)
+      z.c      = point:  new(-2,1)
+      z.e,z.d  = point:  new(-2,7),point: new(-3,5)
+      C.oa     = circle: new(z.o,z.a)
+      C.ed     = circle: new(z.e,z.d)
+      C.co     = circle: new(z.c,z.o)
+      obj      = C.oa: inversion(C.co)
          if obj.type == "line"
          then z.p,z.q = get_points(obj)
          else z.f,z.b = get_points(obj) end
@@ -700,15 +771,15 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
-z.A  = point : new ( 0  , 0  )
-z.a  = point : new ( 2 ,  2 )
-z.B  = point : new ( 5  , 2  )
-z.b  = point : new ( 6  , 1  )
-C.Aa = circle : new (z.A,z.a)
-C.Bb = circle : new (z.B,z.b)
-z.I  = C.Aa : internal_similitude (C.Bb)
-L.TA1,L.TA2 = C.Aa : tangent_from (z.I)
+init_elements()
+z.A  = point : new(0 , 0 )
+z.a  = point : new(2,  2)
+z.B  = point : new(5 , 2 )
+z.b  = point : new(6 , 1 )
+C.Aa = circle : new(z.A,z.a)
+C.Bb = circle : new(z.B,z.b)
+z.I  = C.Aa : internal_similitude(C.Bb)
+L.TA1,L.TA2 = C.Aa : tangent_from(z.I)
 z.A1 = L.TA1.pb
 z.A2 = L.TA2.pb
 }
@@ -722,15 +793,15 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
-z.A  = point : new ( 0  , 0  )
-z.a  = point : new ( 2 ,  2 )
-z.B  = point : new ( 5  , 2  )
-z.b  = point : new ( 6  , 1  )
-C.Aa = circle : new (z.A,z.a)
-C.Bb = circle : new (z.B,z.b)
-z.I  = C.Aa : internal_similitude (C.Bb)
-L.TA1,L.TA2 = C.Aa : tangent_from (z.I)
+init_elements()
+z.A  = point : new(0 , 0 )
+z.a  = point : new(2,  2)
+z.B  = point : new(5 , 2 )
+z.b  = point : new(6 , 1 )
+C.Aa = circle : new(z.A,z.a)
+C.Bb = circle : new(z.B,z.b)
+z.I  = C.Aa : internal_similitude(C.Bb)
+L.TA1,L.TA2 = C.Aa : tangent_from(z.I)
 z.A1 = L.TA1.pb
 z.A2 = L.TA2.pb
 }
@@ -752,15 +823,15 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
-z.A  = point : new ( 0  , 0  )
-z.a  = point : new ( 2 ,  2 )
-z.B  = point : new ( 3  , 2  )
-z.b  = point : new ( 3.5  , 1  )
-C.Aa = circle : new (z.A,z.a)
-C.Bb = circle : new (z.B,z.b)
-z.I  = C.Aa : external_similitude (C.Bb)
-L.TA1,L.TA2 = C.Aa : tangent_from (z.I)
+init_elements()
+z.A  = point : new(0 , 0 )
+z.a  = point : new(2,  2)
+z.B  = point : new(3 , 2 )
+z.b  = point : new(3.5 , 1 )
+C.Aa = circle : new(z.A,z.a)
+C.Bb = circle : new(z.B,z.b)
+z.I  = C.Aa : external_similitude(C.Bb)
+L.TA1,L.TA2 = C.Aa : tangent_from(z.I)
 z.A1 = L.TA1.pb
 z.A2 = L.TA2.pb
 }
@@ -774,15 +845,15 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
-z.A  = point : new ( 0  , 0  )
-z.a  = point : new ( 2  , 2 )
-z.B  = point : new ( 3  , 2  )
-z.b  = point : new ( 3.5, 1  )
-C.Aa = circle : new (z.A,z.a)
-C.Bb = circle : new (z.B,z.b)
-z.I  = C.Aa : external_similitude (C.Bb)
-L.TA1,L.TA2 = C.Aa : tangent_from (z.I)
+init_elements()
+z.A  = point : new(0 , 0 )
+z.a  = point : new(2 , 2)
+z.B  = point : new(3 , 2 )
+z.b  = point : new(3.5, 1 )
+C.Aa = circle : new(z.A,z.a)
+C.Bb = circle : new(z.B,z.b)
+z.I  = C.Aa : external_similitude(C.Bb)
+L.TA1,L.TA2 = C.Aa : tangent_from(z.I)
 z.A1 = L.TA1.pb
 z.A2 = L.TA2.pb
 }
@@ -798,7 +869,7 @@
 % subsubsection method_imeth_circle_external__similitude (end)
 
 \newpage
-\subsubsection{Method \Imeth{circle}{radical\_center (C1,C2)}} % (fold)
+\subsubsection{Method \Imeth{circle}{radical\_center(C1,C2)}} % (fold)
 \label{ssub:radical_center}
 
 The radical lines of three circles are concurrent in a point known as the radical center (also called the power center). This theorem was originally demonstrated by Monge (Dörrie 1965, p. 153). [\href{https://mathworld.wolfram.com/RadicalCenter.html}{Weisstein, Eric W. "Radical Center." From MathWorld--A Wolfram Web Resource. }
@@ -810,24 +881,24 @@
 \begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
 \begin{Verbatim}
 \directlua{%
-init_elements ()
-   z.O      = point : new (0,0)
-   z.x      = point : new (1,0)
-   z.y      = point : new (4,0)
-   z.z      = point : new (2,0)
-   z.Op     = point : new (4,2)
-   z.P      = point : new (2,2.5)
-   C.Ox     = circle :    new (z.O,z.x)
-   C.Pz     = circle :    new (z.P,z.z)
-   C.Opy    = circle :    new (z.Op,z.y)
-   z.ap,z.a = intersection (C.Ox,C.Pz)
-   z.bp,z.b = intersection (C.Opy,C.Pz)
-   L.aap    = line : new (z.a,z.ap)
-   L.bbp    = line : new (z.b,z.bp)
-   %  z.X      = intersection (L.aap,L.bbp)
+init_elements()
+   z.O      = point : new(0,0)
+   z.x      = point : new(1,0)
+   z.y      = point : new(4,0)
+   z.z      = point : new(2,0)
+   z.Op     = point : new(4,2)
+   z.P      = point : new(2,2.5)
+   C.Ox     = circle :    new(z.O,z.x)
+   C.Pz     = circle :    new(z.P,z.z)
+   C.Opy    = circle :    new(z.Op,z.y)
+   z.ap,z.a = intersection(C.Ox,C.Pz)
+   z.bp,z.b = intersection(C.Opy,C.Pz)
+   L.aap    = line : new(z.a,z.ap)
+   L.bbp    = line : new(z.b,z.bp)
+   %  z.X      = intersection(L.aap,L.bbp)
    z.X      = C.Ox : radical_center(C.Pz,C.Opy)
-   %   L.OOp    = line : new (z.O,z.Op)
-   %   z.H      = L.OOp : projection (z.X)
+   %   L.OOp    = line : new(z.O,z.Op)
+   %   z.H      = L.OOp : projection(z.X)
    z.H = C.Ox : radical_center(C.Opy)
 }
 \begin{tikzpicture}[scale    = .75]
@@ -841,23 +912,23 @@
 \end{minipage}
 \begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
 \directlua{%
-init_elements ()
-z.O         = point : new (0,0)
-z.x         = point : new (1,0)
-z.y         = point : new (4,0)
-z.z         = point : new (2,0)
-z.Op        = point : new (4,2)
-z.P         = point : new (2,2.5)
-C.Ox        = circle :    new (z.O,z.x)
-C.Pz        = circle :    new (z.P,z.z)
-C.Opy       = circle :    new (z.Op,z.y)
-z.ap,z.a    = intersection (C.Ox,C.Pz)
-z.bp,z.b    = intersection (C.Opy,C.Pz)
-L.aap       = line : new (z.a,z.ap)
-L.bbp       = line : new (z.b,z.bp)
-z.X         = intersection (L.aap,L.bbp)
-L.OOp       = line : new (z.O,z.Op)
-z.H         = L.OOp : projection (z.X)
+init_elements()
+z.O         = point : new(0,0)
+z.x         = point : new(1,0)
+z.y         = point : new(4,0)
+z.z         = point : new(2,0)
+z.Op        = point : new(4,2)
+z.P         = point : new(2,2.5)
+C.Ox        = circle :    new(z.O,z.x)
+C.Pz        = circle :    new(z.P,z.z)
+C.Opy       = circle :    new(z.Op,z.y)
+z.ap,z.a    = intersection(C.Ox,C.Pz)
+z.bp,z.b    = intersection(C.Opy,C.Pz)
+L.aap       = line : new(z.a,z.ap)
+L.bbp       = line : new(z.b,z.bp)
+z.X         = intersection(L.aap,L.bbp)
+L.OOp       = line : new(z.O,z.Op)
+z.H         = L.OOp : projection(z.X)
 }
 
 \begin{center}
@@ -889,24 +960,24 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
-z.X    = point: new (0,0)
-z.B    = point: new (2,2)
-z.Y    = point: new (7,1)
-z.Ap   = point: new (8,-1)
-L.XY   = line :    new (z.X,z.Y)
-C.XB   = circle : new (z.X,z.B)
-C.YAp  = circle : new (z.Y,z.Ap)
+init_elements()
+z.X    = point: new(0,0)
+z.B    = point: new(2,2)
+z.Y    = point: new(7,1)
+z.Ap   = point: new(8,-1)
+L.XY   = line :    new(z.X,z.Y)
+C.XB   = circle : new(z.X,z.B)
+C.YAp  = circle : new(z.Y,z.Ap)
 z.E,z.F= get_points(C.XB:radical_axis(C.YAp))
-z.A    = C.XB : point (0.4)
-T.ABAp = triangle: new (z.A,z.B,z.Ap)
+z.A    = C.XB : point(0.4)
+T.ABAp = triangle: new(z.A,z.B,z.Ap)
 z.O    = T.ABAp.circumcenter
-C.OAp  = circle : new (z.O,z.Ap)
-_,z.Bp = intersection (C.OAp,C.YAp)
-L.AB   = line : new (z.A,z.B)
-L.ApBp = line : new (z.Ap,z.Bp)
-z.M    = intersection (L.AB,L.ApBp)
-z.H    = L.XY : projection (z.M)
+C.OAp  = circle : new(z.O,z.Ap)
+_,z.Bp = intersection(C.OAp,C.YAp)
+L.AB   = line : new(z.A,z.B)
+L.ApBp = line : new(z.Ap,z.Bp)
+z.M    = intersection(L.AB,L.ApBp)
+z.H    = L.XY : projection(z.M)
 }
 \end{Verbatim}
 \end{minipage}
@@ -923,24 +994,24 @@
 \end{Verbatim}
    
  \directlua{%
- init_elements ()
- z.X      = point : new (0,0)
- z.B      = point : new (2,2)
- z.Y      = point : new (7,1)
- z.Ap     = point : new (8,-1)
- L.XY     = line :    new (z.X,z.Y)
- C.XB     = circle : new (z.X,z.B)
- C.YAp    = circle : new (z.Y,z.Ap)
- z.E,z.F  = get_points (C.XB : radical_axis (C.YAp))
- z.A      = C.XB : point (0.4)
- T.ABAp   = triangle: new (z.A,z.B,z.Ap)
+ init_elements()
+ z.X      = point : new(0,0)
+ z.B      = point : new(2,2)
+ z.Y      = point : new(7,1)
+ z.Ap     = point : new(8,-1)
+ L.XY     = line :    new(z.X,z.Y)
+ C.XB     = circle : new(z.X,z.B)
+ C.YAp    = circle : new(z.Y,z.Ap)
+ z.E,z.F  = get_points(C.XB : radical_axis(C.YAp))
+ z.A      = C.XB : point(0.4)
+ T.ABAp   = triangle: new(z.A,z.B,z.Ap)
  z.O      = T.ABAp.circumcenter
- C.OAp    = circle : new (z.O,z.Ap)
- _,z.Bp   = intersection (C.OAp,C.YAp)
- L.AB     = line : new (z.A,z.B)
- L.ApBp   = line : new (z.Ap,z.Bp)
- z.M      = intersection (L.AB,L.ApBp)
- z.H      = L.XY : projection (z.M)
+ C.OAp    = circle : new(z.O,z.Ap)
+ _,z.Bp   = intersection(C.OAp,C.YAp)
+ L.AB     = line : new(z.A,z.B)
+ L.ApBp   = line : new(z.Ap,z.Bp)
+ z.M      = intersection(L.AB,L.ApBp)
+ z.H      = L.XY : projection(z.M)
  }
  \begin{center}
    \begin{tikzpicture}[scale  = .5]
@@ -962,22 +1033,22 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
-z.O         = point : new (-1,0)
-z.Op        = point : new (4,-1)
-z.B         = point : new (0,2)
-z.D         = point : new (4,0)
-C.OB        = circle :    new (z.O,z.B)
-C.OpD       = circle :    new (z.Op,z.D)
-L.EF        = C.OB : radical_axis (C.OpD)
-z.E,z.F     = get_points (L.EF)
-z.M         = L.EF : point (.75)
-L.MT,L.MTp  = C.OB : tangent_from (z.M)
-_,z.T       = get_points (L.MT)
-_,z.Tp      = get_points (L.MTp)
-L.MK,L.MKp  = C.OpD : tangent_from (z.M)
-_,z.K       = get_points (L.MK)
-_,z.Kp      = get_points (L.MKp)
+init_elements()
+z.O         = point : new(-1,0)
+z.Op        = point : new(4,-1)
+z.B         = point : new(0,2)
+z.D         = point : new(4,0)
+C.OB        = circle :    new(z.O,z.B)
+C.OpD       = circle :    new(z.Op,z.D)
+L.EF        = C.OB : radical_axis(C.OpD)
+z.E,z.F     = get_points(L.EF)
+z.M         = L.EF : point(.75)
+L.MT,L.MTp  = C.OB : tangent_from(z.M)
+_,z.T       = get_points(L.MT)
+_,z.Tp      = get_points(L.MTp)
+L.MK,L.MKp  = C.OpD : tangent_from(z.M)
+_,z.K       = get_points(L.MK)
+_,z.Kp      = get_points(L.MKp)
 }
 \end{Verbatim}
 \end{minipage}
@@ -997,22 +1068,22 @@
 \end{Verbatim}
   
   \directlua{%
-  init_elements ()
-  z.O     = point : new (-1,0)
-  z.Op    = point : new (4,-1)
-  z.B     = point : new (0,2)
-  z.D     = point : new (4,0)
-  C.OB    = circle :    new (z.O,z.B)
-  C.OpD   = circle :    new (z.Op,z.D)
-  L.EF    = C.OB : radical_axis (C.OpD)
-  z.E,z.F = get_points (L.EF)
-  z.M     = L.EF : point (.75)
-  L.MT,L.MTp  = C.OB : tangent_from (z.M)
-  _,z.T = get_points (L.MT)
-  _,z.Tp = get_points (L.MTp)
-  L.MK,L.MKp  = C.OpD : tangent_from (z.M)
-  _,z.K = get_points (L.MK)
-  _,z.Kp = get_points (L.MKp)
+  init_elements()
+  z.O     = point : new(-1,0)
+  z.Op    = point : new(4,-1)
+  z.B     = point : new(0,2)
+  z.D     = point : new(4,0)
+  C.OB    = circle :    new(z.O,z.B)
+  C.OpD   = circle :    new(z.Op,z.D)
+  L.EF    = C.OB : radical_axis(C.OpD)
+  z.E,z.F = get_points(L.EF)
+  z.M     = L.EF : point(.75)
+  L.MT,L.MTp  = C.OB : tangent_from(z.M)
+  _,z.T = get_points(L.MT)
+  _,z.Tp = get_points(L.MTp)
+  L.MK,L.MKp  = C.OpD : tangent_from(z.M)
+  _,z.K = get_points(L.MK)
+  _,z.Kp = get_points(L.MKp)
   }
 \begin{center}
   \begin{tikzpicture}[scale  = .5]
@@ -1036,19 +1107,19 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
-z.O      = point : new (0,0)
-z.B      = point : new (4,0)
-z.Op     = point : new (6,0)
-C.OB     = circle :    new (z.O,z.B)
-C.OpB    = circle :    new (z.Op,z.B)
-L.EF     = C.OB : radical_axis (C.OpB)
+init_elements()
+z.O      = point : new(0,0)
+z.B      = point : new(4,0)
+z.Op     = point : new(6,0)
+C.OB     = circle :    new(z.O,z.B)
+C.OpB    = circle :    new(z.Op,z.B)
+L.EF     = C.OB : radical_axis(C.OpB)
 z.E,z.F  = get_points(L.EF)
-z.M      = L.EF : point (0.2)
-L        = C.OB : tangent_from (z.M)
-_,z.T    = get_points (L)
-L        = C.OpB : tangent_from (z.M)
-_,z.Tp   = get_points (L)
+z.M      = L.EF : point(0.2)
+L        = C.OB : tangent_from(z.M)
+_,z.T    = get_points(L)
+L        = C.OpB : tangent_from(z.M)
+_,z.Tp   = get_points(L)
 }
 \end{Verbatim}
 \end{minipage}
@@ -1066,19 +1137,19 @@
 \end{tikzpicture}
 \end{Verbatim}
 \directlua{%
-init_elements ()
-z.O      = point : new (0,0)
-z.B      = point : new (4,0)
-z.Op     = point : new (6,0)
-C.OB     = circle :    new (z.O,z.B)
-C.OpB    = circle :    new (z.Op,z.B)
-L.EF     = C.OB : radical_axis (C.OpB)
+init_elements()
+z.O      = point : new(0,0)
+z.B      = point : new(4,0)
+z.Op     = point : new(6,0)
+C.OB     = circle :    new(z.O,z.B)
+C.OpB    = circle :    new(z.Op,z.B)
+L.EF     = C.OB : radical_axis(C.OpB)
 z.E,z.F  = get_points(L.EF)
-z.M      = L.EF : point (0.2)
-L        = C.OB : tangent_from (z.M)
-_,z.T    = get_points (L)
-L        = C.OpB : tangent_from (z.M)
-_,z.Tp   = get_points (L)
+z.M      = L.EF : point(0.2)
+L        = C.OB : tangent_from(z.M)
+_,z.T    = get_points(L)
+L        = C.OpB : tangent_from(z.M)
+_,z.Tp   = get_points(L)
 }
 \begin{center}
   \begin{tikzpicture}[scale =.5]
@@ -1101,20 +1172,20 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
-z.O     = point : new (0,0)
-z.B     = point : new (5,0)
-z.Op    = point : new (3,0)
-C.OB    = circle :    new (z.O,z.B)
-C.OpB   = circle :    new (z.Op,z.B)
-L.EF    = C.OB : radical_axis (C.OpB)
+init_elements()
+z.O     = point : new(0,0)
+z.B     = point : new(5,0)
+z.Op    = point : new(3,0)
+C.OB    = circle :    new(z.O,z.B)
+C.OpB   = circle :    new(z.Op,z.B)
+L.EF    = C.OB : radical_axis(C.OpB)
 z.E,z.F = get_points(L.EF)
 z.H     = L.EF.mid
-z.M     = L.EF : point (.8)
-_,L     = C.OB : tangent_from (z.M)
-_,z.T   = get_points (L)
-_,L     = C.OpB : tangent_from (z.M)
-_,z.Tp  = get_points (L)}
+z.M     = L.EF : point(.8)
+_,L     = C.OB : tangent_from(z.M)
+_,z.T   = get_points(L)
+_,L     = C.OpB : tangent_from(z.M)
+_,z.Tp  = get_points(L)}
 \end{Verbatim}
 \end{minipage}
 \begin{minipage}{.5\textwidth}
@@ -1132,20 +1203,20 @@
 \end{Verbatim}
 
 \directlua{%
-init_elements ()
-   z.O     = point : new (0,0)
-   z.B     = point : new (5,0)
-   z.Op    = point : new (3,0)
-   C.OB    = circle :    new (z.O,z.B)
-   C.OpB   = circle :    new (z.Op,z.B)
-   L.EF    = C.OB : radical_axis (C.OpB)
+init_elements()
+   z.O     = point : new(0,0)
+   z.B     = point : new(5,0)
+   z.Op    = point : new(3,0)
+   C.OB    = circle :    new(z.O,z.B)
+   C.OpB   = circle :    new(z.Op,z.B)
+   L.EF    = C.OB : radical_axis(C.OpB)
    z.E,z.F = get_points(L.EF)
    z.H     = L.EF.mid
-   z.M     = L.EF : point (.8)
-   _,L     = C.OB : tangent_from (z.M)
-   _,z.T   = get_points (L)
-   _,L     = C.OpB : tangent_from (z.M)
-   _,z.Tp  = get_points (L)
+   z.M     = L.EF : point(.8)
+   _,L     = C.OB : tangent_from(z.M)
+   _,z.T   = get_points(L)
+   _,L     = C.OpB : tangent_from(z.M)
+   _,z.Tp  = get_points(L)
 }
 
 \begin{center}
@@ -1166,20 +1237,20 @@
 % subsubsection method_imeth_circle_radical__axis_c (end)
 
 
-\subsubsection{Methods \Imeth{circle}{tangent\_at (P)} and  \Imeth{circle}{tangent\_from (P)}} % (fold)
+\subsubsection{Methods \Imeth{circle}{tangent\_at(P)} and  \Imeth{circle}{tangent\_from(P)}} % (fold)
 \label{ssub:method_imeth_circle_tangent}
 
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
  \directlua{%
-init_elements ()
-   z.A  = point:  new (0,0)
-   z.B  = point:  new (1,2)   
-   C.AB = circle: new (z.A,z.B)
-   z.C  = point:  new (3,-2)
-   L.T  = C.AB : tangent_at (z.B)
+init_elements()
+   z.A  = point:  new(0,0)
+   z.B  = point:  new(1,2)   
+   C.AB = circle: new(z.A,z.B)
+   z.C  = point:  new(3,-2)
+   L.T  = C.AB : tangent_at(z.B)
    z.D  = L.T.pb
-   L.T1,L.T2 = C.AB : tangent_from (z.C)
+   L.T1,L.T2 = C.AB : tangent_from(z.C)
    z.T1 = L.T1.pb
    z.T2 = L.T2.pb
 }
@@ -1197,14 +1268,14 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
  \directlua{%
-init_elements ()
-   z.A  = point:  new (0,0)
-   z.B  = point:  new (1,2)   
-   C.AB = circle: new (z.A,z.B)
-   z.C  = point:  new (3,-2)
-   L.T  = C.AB : tangent_at (z.B)
+init_elements()
+   z.A  = point:  new(0,0)
+   z.B  = point:  new(1,2)   
+   C.AB = circle: new(z.A,z.B)
+   z.C  = point:  new(3,-2)
+   L.T  = C.AB : tangent_at(z.B)
    z.D  = L.T.pb
-   L.T1,L.T2 = C.AB : tangent_from (z.C)
+   L.T1,L.T2 = C.AB : tangent_from(z.C)
    z.T1 = L.T1.pb
    z.T2 = L.T2.pb
 }
@@ -1231,22 +1302,22 @@
 
 \begin{Verbatim}
 \directlua{%
-init_elements ()
- z.A   = point : new ( 0, 0)
- z.B   = point : new ( 5, 2)
- L.AB  = line : new ( z.A, z.B)
- z.C   = point : new ( 1, 2)
- C.AC  = circle : new (z.A,z.C)
- C.BC  = circle : new (z.B,z.C)
+init_elements()
+ z.A   = point : new(0, 0)
+ z.B   = point : new(5, 2)
+ L.AB  = line : new(z.A, z.B)
+ z.C   = point : new(1, 2)
+ C.AC  = circle : new(z.A,z.C)
+ C.BC  = circle : new(z.B,z.C)
  z.T,z.Tp = C.AC : common_tangent(C.BC)
- L.TTp = line : new (z.T,z.Tp)
- z.M   = C.AC : point (0.45)
- L.MC  =line : new (z.M,z.C)
- z.Mp  = intersection (L.MC, C.BC) 
- L.mm  = L.TTp : ll_from (z.C)
- _,z.M = intersection (L.mm, C.AC)
- z.Mp  = intersection (L.mm, C.BC)
- _,z.D = intersection (C.AC,C.BC)
+ L.TTp = line : new(z.T,z.Tp)
+ z.M   = C.AC : point(0.45)
+ L.MC  =line : new(z.M,z.C)
+ z.Mp  = intersection(L.MC, C.BC) 
+ L.mm  = L.TTp : ll_from(z.C)
+ _,z.M = intersection(L.mm, C.AC)
+ z.Mp  = intersection(L.mm, C.BC)
+ _,z.D = intersection(C.AC,C.BC)
 }         
 \begin{tikzpicture}
    \tkzGetNodes
@@ -1263,22 +1334,22 @@
 
 
 \directlua{%
-init_elements ()
-z.A   = point : new ( 0  , 0  )
-z.B   = point : new ( 5  , 2  )
-L.AB = line : new ( z.A , z.B )
-z.C   = point : new ( 1 , 2 )
-C.AC  = circle : new (z.A,z.C)
-C.BC  = circle : new (z.B,z.C)
-z.T,z.Tp = C.AC : common_tangent (C.BC)
-L.TTp = line : new (z.T,z.Tp)
-z.M   = C.AC : point (0.45)
-L.MC  =line : new (z.M,z.C)
-z.Mp  = intersection (L.MC, C.BC) 
-L.mm = L.TTp : ll_from (z.C)
-_,z.M = intersection (L.mm, C.AC)
-z.Mp = intersection (L.mm, C.BC)
-_,z.D = intersection (C.AC,C.BC)
+init_elements()
+z.A   = point : new(0 , 0 )
+z.B   = point : new(5 , 2 )
+L.AB = line : new(z.A, z.B)
+z.C   = point : new(1, 2)
+C.AC  = circle : new(z.A,z.C)
+C.BC  = circle : new(z.B,z.C)
+z.T,z.Tp = C.AC : common_tangent(C.BC)
+L.TTp = line : new(z.T,z.Tp)
+z.M   = C.AC : point(0.45)
+L.MC  =line : new(z.M,z.C)
+z.Mp  = intersection(L.MC, C.BC) 
+L.mm = L.TTp : ll_from(z.C)
+_,z.M = intersection(L.mm, C.AC)
+z.Mp = intersection(L.mm, C.BC)
+_,z.D = intersection(C.AC,C.BC)
 }
     
 \begin{center}
@@ -1309,22 +1380,22 @@
 
 \begin{Verbatim}
 \directlua{
-   z.o       = point:    new (-1,1)
-   z.t       = point:    new (1,3)
-   z.P       = point:    new (3.2,0)
-   C.o       = circle:   new (z.o,z.t)
-   L.P       = C.o: polar (z.P)
+   z.o       = point:    new(-1,1)
+   z.t       = point:    new(1,3)
+   z.P       = point:    new(3.2,0)
+   C.o       = circle:   new(z.o,z.t)
+   L.P       = C.o: polar(z.P)
    z.a,z.b   = get_points(L.P)
-   z.u,z.v   = intersection (C.o,L.P)
-   z.K       = L.P: projection (z.P)
-   L.K       = C.o: polar (z.K)
+   z.u,z.v   = intersection(C.o,L.P)
+   z.K       = L.P: projection(z.P)
+   L.K       = C.o: polar(z.K)
    z.ka,z.kb = get_points(L.K)
-   C.wH      = C.o: inversion (L.P)
+   C.wH      = C.o: inversion(L.P)
    z.w,z.H   = get_points(C.wH)
-   z.ap,z.bp = C.o: inversion (z.a,z.b)
-   L.oa      = line : new (z.o,z.a)
+   z.ap,z.bp = C.o: inversion(z.a,z.b)
+   L.oa      = line : new(z.o,z.a)
    z.cp      = intersection(L.K,L.oa)
-   z.c       = C.o: inversion (z.cp)}
+   z.c       = C.o: inversion(z.cp)}
 \begin{tikzpicture}
     \tkzGetNodes    
     \tkzDrawCircles[red,thick](o,t)
@@ -1344,22 +1415,22 @@
 \end{Verbatim}
 
 \directlua{
-   z.o       = point:    new (-1,1)
-   z.t       = point:    new (1,3)
-   z.P       = point:    new (3.2,0)
-   C.o       = circle:   new (z.o,z.t)
-   L.P       = C.o: polar (z.P)
+   z.o       = point:    new(-1,1)
+   z.t       = point:    new(1,3)
+   z.P       = point:    new(3.2,0)
+   C.o       = circle:   new(z.o,z.t)
+   L.P       = C.o: polar(z.P)
    z.a,z.b   = get_points(L.P)
-   z.u,z.v   = intersection (C.o,L.P)
-   z.K       = L.P: projection (z.P)
-   L.K       = C.o: polar (z.K)
+   z.u,z.v   = intersection(C.o,L.P)
+   z.K       = L.P: projection(z.P)
+   L.K       = C.o: polar(z.K)
    z.ka,z.kb = get_points(L.K)
-   C.wH      = C.o: inversion (L.P)
+   C.wH      = C.o: inversion(L.P)
    z.w,z.H   = get_points(C.wH)
-   z.ap,z.bp = C.o: inversion (z.a,z.b)
-   L.oa      = line : new (z.o,z.a)
+   z.ap,z.bp = C.o: inversion(z.a,z.b)
+   L.oa      = line : new(z.o,z.a)
    z.cp      = intersection(L.K,L.oa)
-   z.c       = C.o: inversion (z.cp)}
+   z.c       = C.o: inversion(z.cp)}
 \begin{center}
   \begin{tikzpicture}
       \tkzGetNodes    
@@ -1380,9 +1451,9 @@
 \end{center}
 
 
-% subsubsection method_imeth_circle_polar_pt (end)
+% subsubsection method_imeth_circle_polar_pt(end)
 
-\subsubsection{Method \Imeth{circle}{orthogonal\_from (pt)}} % (fold)
+\subsubsection{Method \Imeth{circle}{orthogonal\_from(pt)}} % (fold)
 \label{ssub:method_imeth_circle_orthogonal_from_pt}
 
 In geometry, two circles are said to be orthogonal if their respective tangent lines at the points of intersection are perpendicular (meet at a right angle). [wikipedia]
@@ -1393,12 +1464,12 @@
 
 \begin{Verbatim}
 \directlua{%
-init_elements ()
-   z.C_1    = point: new (0,0)
-   z.C_2    = point: new (8,0)
-   z.A      = point: new (5,0)
-   C        = circle: new (z.C_1,z.A)
-   z.S,z.T  = get_points (C: orthogonal_from (z.C_2))
+init_elements()
+   z.C_1    = point: new(0,0)
+   z.C_2    = point: new(8,0)
+   z.A      = point: new(5,0)
+   C        = circle: new(z.C_1,z.A)
+   z.S,z.T  = get_points(C: orthogonal_from(z.C_2))
 }
 \begin{tikzpicture}[ scale    = .6]
    \tkzGetNodes
@@ -1419,12 +1490,12 @@
 \end{Verbatim}
 
   \directlua{%
-  init_elements ()
-  z.C_1    = point: new (0,0)
-  z.C_2    = point: new (8,0)
-  z.A  = point: new (5,0)
-  C    = circle: new (z.C_1,z.A)
-  z.S,z.T  = get_points (C: orthogonal_from (z.C_2))
+  init_elements()
+  z.C_1    = point: new(0,0)
+  z.C_2    = point: new(8,0)
+  z.A  = point: new(5,0)
+  C    = circle: new(z.C_1,z.A)
+  z.S,z.T  = get_points(C: orthogonal_from(z.C_2))
   }
   \begin{center}
     \begin{tikzpicture}[scale = .5]
@@ -1453,12 +1524,12 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
- z.O  = point: new (0,1)
- z.A  = point: new (1,0)
- z.z1 = point: new (-1.5,-1.5)
- z.z2 = point: new (2.5,-1.25)
- C.OA = circle: new (z.O,z.A)
+init_elements()
+ z.O  = point: new(0,1)
+ z.A  = point: new(1,0)
+ z.z1 = point: new(-1.5,-1.5)
+ z.z2 = point: new(2.5,-1.25)
+ C.OA = circle: new(z.O,z.A)
  C    = C.OA: orthogonal_through(z.z1,z.z2)
  z.c  = C.center
 }
@@ -1473,13 +1544,13 @@
 \end{Verbatim}
 \end{minipage}
 \begin{minipage}{.5\textwidth}\directlua{%
-init_elements ()
-   z.O   = point: new (0,1)
-   z.A   = point: new (1,0)
-   z.z1  = point: new (-1.5,-1.5)
-   z.z2  = point: new (2.5,-1.25)
-   C.OA  = circle: new (z.O,z.A)
-   C = C.OA: orthogonal_through (z.z1,z.z2)
+init_elements()
+   z.O   = point: new(0,1)
+   z.A   = point: new(1,0)
+   z.z1  = point: new(-1.5,-1.5)
+   z.z2  = point: new(2.5,-1.25)
+   C.OA  = circle: new(z.O,z.A)
+   C = C.OA: orthogonal_through(z.z1,z.z2)
    z.c   = C.center
 }
 
@@ -1520,41 +1591,41 @@
 \begin{minipage}{.4\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
-z.A = point : new ( 1 , 0 )
-z.B = point : new ( 3 , 0 )
-z.O = point : new ( 2.1, 0 )
-z.P = point : new ( 1 ,0 )
-C.AO = circle : new (z.A,z.O)
-C.BP = circle : new (z.B,z.P)
+init_elements()
+z.A = point : new(1, 0)
+z.B = point : new(3, 0)
+z.O = point : new(2.1, 0)
+z.P = point : new(1,0)
+C.AO = circle : new(z.A,z.O)
+C.BP = circle : new(z.B,z.P)
 z.E = C.AO.south
 z.H = C.AO.north
 z.F = C.BP.north
 z.G = C.BP.south
-C.IT,C.JV = C.AO : midcircle (C.BP)
-z.I,z.T = get_points (C.IT)
-z.J,z.V = get_points (C.JV)
-z.X,z.Y = intersection (C.AO,C.BP)
+C.IT,C.JV = C.AO : midcircle(C.BP)
+z.I,z.T = get_points(C.IT)
+z.J,z.V = get_points(C.JV)
+z.X,z.Y = intersection(C.AO,C.BP)
 }
 \end{Verbatim}
 \end{minipage}
 \begin{minipage}{.5\textwidth}
    \directlua{%
-init_elements ()
-   z.A = point : new ( 1 , 0 )
-   z.B = point : new ( 3 , 0 )
-   z.O = point : new ( 2.1, 0 )
-   z.P = point : new ( 1 ,0 )
-   C.AO = circle : new (z.A,z.O)
-   C.BP = circle : new (z.B,z.P)
+init_elements()
+   z.A = point : new(1, 0)
+   z.B = point : new(3, 0)
+   z.O = point : new(2.1, 0)
+   z.P = point : new(1,0)
+   C.AO = circle : new(z.A,z.O)
+   C.BP = circle : new(z.B,z.P)
    z.E = C.AO.south
    z.H = C.AO.north
    z.F = C.BP.north
    z.G = C.BP.south
-   C.IT,C.JV = C.AO : midcircle (C.BP)
-   z.I,z.T = get_points (C.IT)
-   z.J,z.V = get_points (C.JV)
-   z.X,z.Y = intersection (C.AO,C.BP)
+   C.IT,C.JV = C.AO : midcircle(C.BP)
+   z.I,z.T = get_points(C.IT)
+   z.J,z.V = get_points(C.JV)
+   z.X,z.Y = intersection(C.AO,C.BP)
    }
    \begin{center}
      \begin{tikzpicture}[scale = .75]
@@ -1583,43 +1654,43 @@
 \begin{minipage}{.45\textwidth}
 \begin{Verbatim}
 \directlua{%
- init_elements ()
- z.A = point : new ( 3 , 0 )
- z.B = point : new ( 5 , 0 )
- z.O = point : new ( 2 , 0 )
- z.P = point : new ( 1 , 0 )
- L.AB = line :  new (z.A,z.B)
- C.AO = circle : new (z.A,z.O)
- C.BP = circle : new (z.B,z.P)
- z.R,z.S = intersection (L.AB,C.BP)
- z.U,z.V = intersection (L.AB,C.AO)
- C.SV = circle:  diameter (z.S,z.V)
- C.UR = circle:  diameter (z.U,z.R)
+ init_elements()
+ z.A = point : new(3, 0)
+ z.B = point : new(5, 0)
+ z.O = point : new(2, 0)
+ z.P = point : new(1, 0)
+ L.AB = line :  new(z.A,z.B)
+ C.AO = circle : new(z.A,z.O)
+ C.BP = circle : new(z.B,z.P)
+ z.R,z.S = intersection(L.AB,C.BP)
+ z.U,z.V = intersection(L.AB,C.AO)
+ C.SV = circle:  diameter(z.S,z.V)
+ C.UR = circle:  diameter(z.U,z.R)
  z.x = C.SV.center
  z.y = C.UR.center
- C.IT = C.AO : midcircle (C.BP)
- z.I,z.T = get_points (C.IT)
+ C.IT = C.AO : midcircle(C.BP)
+ z.I,z.T = get_points(C.IT)
 }
 \end{Verbatim}
 \end{minipage}
 \begin{minipage}{.45\textwidth}
 \directlua{%
-   init_elements ()
-   z.A = point : new ( 3 , 0 )
-   z.B = point : new ( 5 , 0 )
-   z.O = point : new ( 2 , 0 )
-   z.P = point : new ( 1 , 0 )
-   L.AB = line :  new (z.A,z.B)
-   C.AO = circle : new (z.A,z.O)
-   C.BP = circle : new (z.B,z.P)
-   z.R,z.S = intersection (L.AB,C.BP)
-   z.U,z.V = intersection (L.AB,C.AO)
-   C.SV = circle  :  diameter (z.S,z.V)
-   C.UR = circle  :  diameter (z.U,z.R)
+   init_elements()
+   z.A = point : new(3, 0)
+   z.B = point : new(5, 0)
+   z.O = point : new(2, 0)
+   z.P = point : new(1, 0)
+   L.AB = line :  new(z.A,z.B)
+   C.AO = circle : new(z.A,z.O)
+   C.BP = circle : new(z.B,z.P)
+   z.R,z.S = intersection(L.AB,C.BP)
+   z.U,z.V = intersection(L.AB,C.AO)
+   C.SV = circle  :  diameter(z.S,z.V)
+   C.UR = circle  :  diameter(z.U,z.R)
    z.x = C.SV.center
    z.y = C.UR.center
-   C.IT = C.AO : midcircle (C.BP)
-   z.I,z.T = get_points (C.IT)
+   C.IT = C.AO : midcircle(C.BP)
+   z.I,z.T = get_points(C.IT)
 }
 \begin{center}
   \begin{tikzpicture}[scale =.75]
@@ -1646,22 +1717,22 @@
 \begin{minipage}{.4\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
-z.A  = point: new (0 , 0)
-z.B  = point: new (4 , 0)
-z.a  = point: new (.5 , 0)
-z.b  = point: new (1 , 0)
-C.Aa = circle: new (z.A,z.a)
-C.Bb = circle: new (z.B,z.b)
-L.AB = line:  new (z.A,z.B)
+init_elements()
+z.A  = point: new(0, 0)
+z.B  = point: new(4, 0)
+z.a  = point: new(.5, 0)
+z.b  = point: new(1, 0)
+C.Aa = circle: new(z.A,z.a)
+C.Bb = circle: new(z.B,z.b)
+L.AB = line:  new(z.A,z.B)
 z.E  = C.Aa.north
 z.F  = C.Bb.north
-L.EF = line: new (z.E,z.F)
-C.IT =  C.Aa: midcircle (C.Bb)
-z.I,z.T = get_points (C.IT)
-L.TF = C.Bb: tangent_from (z.I)
-z.H  = intersection (L.TF,C.IT)
-z.E  = intersection (L.TF,C.Aa)
+L.EF = line: new(z.E,z.F)
+C.IT =  C.Aa: midcircle(C.Bb)
+z.I,z.T = get_points(C.IT)
+L.TF = C.Bb: tangent_from(z.I)
+z.H  = intersection(L.TF,C.IT)
+z.E  = intersection(L.TF,C.Aa)
 z.F  = L.TF.pb
 }
 \end{Verbatim}
@@ -1685,22 +1756,22 @@
 \end{minipage}
 
 \directlua{%
-init_elements ()
-z.A = point : new ( 0 , 0 )
-z.B = point : new ( 4 , 0 )
-z.a = point :  new ( .5 , 0)
-z.b = point :  new ( 1 , 0)
-C.Aa = circle  :  new (z.A,z.a)
-C.Bb = circle  :  new (z.B,z.b)
-L.AB = line :  new (z.A,z.B)
+init_elements()
+z.A = point : new(0, 0)
+z.B = point : new(4, 0)
+z.a = point :  new(.5, 0)
+z.b = point :  new(1, 0)
+C.Aa = circle  :  new(z.A,z.a)
+C.Bb = circle  :  new(z.B,z.b)
+L.AB = line :  new(z.A,z.B)
 z.E = C.Aa.north
 z.F = C.Bb.north
-L.EF = line :  new (z.E,z.F)
-C.IT =  C.Aa : midcircle (C.Bb)
-z.I,z.T = get_points (C.IT)
-L.TF = C.Bb : tangent_from (z.I)
-z.H = intersection (L.TF,C.IT)
-z.E = intersection (L.TF,C.Aa)
+L.EF = line :  new(z.E,z.F)
+C.IT =  C.Aa : midcircle(C.Bb)
+z.I,z.T = get_points(C.IT)
+L.TF = C.Bb : tangent_from(z.I)
+z.H = intersection(L.TF,C.IT)
+z.E = intersection(L.TF,C.Aa)
 z.F=L.TF.pb
 }
 \begin{center}
@@ -1728,45 +1799,45 @@
 
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 local a,b,c,d
-z.A = point : new ( 0 , 0 )
-z.B = point : new ( 4 , 0 )
-z.a = point :  new ( 1 , 0)
-z.b = point :  new ( 1 , 0)
-C.Aa = circle  :  new (z.A,z.a)
-C.Bb = circle  :  new (z.B,z.b)
-L.AB = line :  new (z.A,z.B)
+z.A = point : new(0, 0)
+z.B = point : new(4, 0)
+z.a = point :  new(1, 0)
+z.b = point :  new(1, 0)
+C.Aa = circle  :  new(z.A,z.a)
+C.Bb = circle  :  new(z.B,z.b)
+L.AB = line :  new(z.A,z.B)
 z.E = C.Aa.north
 z.F = C.Bb.north
-L.EF = line :  new (z.E,z.F)
-C.IT =  C.Aa : midcircle (C.Bb)
+L.EF = line :  new(z.E,z.F)
+C.IT =  C.Aa : midcircle(C.Bb)
 z.I,z.T = get_points(C.IT)
-L.TF = C.Bb : tangent_from (z.I)
-z.H = intersection (L.TF,C.IT)
-z.E = intersection (L.TF,C.Aa)
+L.TF = C.Bb : tangent_from(z.I)
+z.H = intersection(L.TF,C.IT)
+z.E = intersection(L.TF,C.Aa)
 z.F=L.TF.pb
 }
 \end{Verbatim}
 
 \directlua{%
-init_elements ()
+init_elements()
 local a,b,c,d
-z.A = point : new ( 0 , 0 )
-z.B = point : new ( 4 , 0 )
-z.a = point :  new ( 1 , 0)
-z.b = point :  new ( 1 , 0)
-C.Aa = circle  :  new (z.A,z.a)
-C.Bb = circle  :  new (z.B,z.b)
-L.AB = line :  new (z.A,z.B)
+z.A = point : new(0, 0)
+z.B = point : new(4, 0)
+z.a = point :  new(1, 0)
+z.b = point :  new(1, 0)
+C.Aa = circle  :  new(z.A,z.a)
+C.Bb = circle  :  new(z.B,z.b)
+L.AB = line :  new(z.A,z.B)
 z.E = C.Aa.north
 z.F = C.Bb.north
-L.EF = line :  new (z.E,z.F)
-C.IT =  C.Aa : midcircle (C.Bb)
-z.I,z.T = get_points (C.IT)
-L.TF = C.Bb : tangent_from (z.I)
-z.H = intersection (L.TF,C.IT)
-z.E = intersection (L.TF,C.Aa)
+L.EF = line :  new(z.E,z.F)
+C.IT =  C.Aa : midcircle(C.Bb)
+z.I,z.T = get_points(C.IT)
+L.TF = C.Bb : tangent_from(z.I)
+z.H = intersection(L.TF,C.IT)
+z.E = intersection(L.TF,C.Aa)
 z.F=L.TF.pb
 }
 \begin{tikzpicture}
@@ -1788,14 +1859,14 @@
 
 \begin{Verbatim}
 \directlua{%
-init_elements ()
-z.A  = point: new ( 2 , 0)
-z.B  = point: new ( 4 , 0)
-z.a  = point: new ( 1 , 0)
-z.b  = point: new ( 1 , 0)
-C.Aa = circle: new (z.A,z.a)
-C.Bb = circle: new (z.B,z.b)
-C.IT = C.Aa: midcircle (C.Bb)
+init_elements()
+z.A  = point: new(2, 0)
+z.B  = point: new(4, 0)
+z.a  = point: new(1, 0)
+z.b  = point: new(1, 0)
+C.Aa = circle: new(z.A,z.a)
+C.Bb = circle: new(z.B,z.b)
+C.IT = C.Aa: midcircle(C.Bb)
 z.I,
 z.T = get_points(C.IT)
 }
@@ -1803,15 +1874,15 @@
 
 
 \directlua{%
-init_elements ()
-z.A = point : new ( 2 , 0 )
-z.B = point : new ( 4 , 0 )
-z.a = point :  new ( 1 , 0)
-z.b = point :  new ( 1 , 0)
-C.Aa = circle  :  new (z.A,z.a)
-C.Bb = circle  :  new (z.B,z.b)
-C.IT =  C.Aa : midcircle (C.Bb)
-z.I,z.T = get_points (C.IT)
+init_elements()
+z.A = point : new(2, 0)
+z.B = point : new(4, 0)
+z.a = point :  new(1, 0)
+z.b = point :  new(1, 0)
+C.Aa = circle  :  new(z.A,z.a)
+C.Bb = circle  :  new(z.B,z.b)
+C.IT =  C.Aa : midcircle(C.Bb)
+z.I,z.T = get_points(C.IT)
 }
 
 \begin{tikzpicture}
@@ -1842,19 +1913,19 @@
 \begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
 \begin{Verbatim} 
 \directlua{%
-init_elements ()
- z.A         = point: new (0,0)
- z.B         = point: new (6,0)
- z.C         = point: new (0.8,4)
- T.ABC       = triangle : new ( z.A,z.B,z.C ) 
- C.exa       = T.ABC : ex_circle ()
- z.I_a,z.Xa  = get_points (C.exa)
- C.exb       = T.ABC : ex_circle (1)
- z.I_b,z.Xb  = get_points (C.exb)
- C.exc       = T.ABC : ex_circle (2)
- z.I_c,z.Xc  = get_points (C.exc)
- C.ortho     = C.exa : radical_circle (C.exb,C.exc)
- z.w,z.a     = get_points (C.ortho)
+init_elements()
+ z.A         = point: new(0,0)
+ z.B         = point: new(6,0)
+ z.C         = point: new(0.8,4)
+ T.ABC       = triangle : new(z.A,z.B,z.C) 
+ C.exa       = T.ABC : ex_circle()
+ z.I_a,z.Xa  = get_points(C.exa)
+ C.exb       = T.ABC : ex_circle(1)
+ z.I_b,z.Xb  = get_points(C.exb)
+ C.exc       = T.ABC : ex_circle(2)
+ z.I_c,z.Xc  = get_points(C.exc)
+ C.ortho     = C.exa : radical_circle(C.exb,C.exc)
+ z.w,z.a     = get_points(C.ortho)
 }
 \begin{tikzpicture}[scale = .5]
    \tkzGetNodes
@@ -1868,19 +1939,19 @@
 \end{minipage}
 
 \directlua{%
-init_elements ()
-   z.A         = point: new (0,0)
-   z.B         = point: new (6,0)
-   z.C         = point: new (0.8,4)
-   T.ABC       = triangle : new ( z.A,z.B,z.C ) 
-   C.exa       = T.ABC : ex_circle ()
-   z.I_a,z.Xa  = get_points (C.exa)
-   C.exb       = T.ABC : ex_circle (1)
-   z.I_b,z.Xb  = get_points (C.exb)
-   C.exc       = T.ABC : ex_circle (2)
-   z.I_c,z.Xc  = get_points (C.exc)
-   C.ortho     = C.exa : radical_circle (C.exb,C.exc)
-   z.w,z.a     = get_points (C.ortho)
+init_elements()
+   z.A         = point: new(0,0)
+   z.B         = point: new(6,0)
+   z.C         = point: new(0.8,4)
+   T.ABC       = triangle : new(z.A,z.B,z.C) 
+   C.exa       = T.ABC : ex_circle()
+   z.I_a,z.Xa  = get_points(C.exa)
+   C.exb       = T.ABC : ex_circle(1)
+   z.I_b,z.Xb  = get_points(C.exb)
+   C.exc       = T.ABC : ex_circle(2)
+   z.I_c,z.Xc  = get_points(C.exc)
+   C.ortho     = C.exa : radical_circle(C.exb,C.exc)
+   z.w,z.a     = get_points(C.ortho)
 }
 
 \begin{center}
@@ -1906,14 +1977,14 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
   \directlua{
-  init_elements ()
-  z.O = point: new (5,0)
-  z.A = point: new (0,0)
-  z.R = point: new (7,0)
-  C.OR = circle: new (z.O,z.R)
-  z.Q = C.OR: point ( 0.15)
-  L.AQ = line:new (z.A,z.Q)
-  _,z.P = intersection (C.OR,L.AQ)
+  init_elements()
+  z.O = point: new(5,0)
+  z.A = point: new(0,0)
+  z.R = point: new(7,0)
+  C.OR = circle: new(z.O,z.R)
+  z.Q = C.OR: point(0.15)
+  L.AQ = line:new(z.A,z.Q)
+  _,z.P = intersection(C.OR,L.AQ)
   L.T = C.OR : tangent_from(z.A)
   z.T = L.T.pb
   }
@@ -1931,14 +2002,14 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
   \directlua{
-  init_elements ()
-  z.O = point: new (5,0)
-  z.A = point: new (0,0)
-  z.R = point: new (7,0)
-  C.OR = circle: new (z.O,z.R)
-  z.Q = C.OR: point ( 0.15)
-  L.AQ = line:new (z.A,z.Q)
-  _,z.P = intersection (C.OR,L.AQ)
+  init_elements()
+  z.O = point: new(5,0)
+  z.A = point: new(0,0)
+  z.R = point: new(7,0)
+  C.OR = circle: new(z.O,z.R)
+  z.Q = C.OR: point(0.15)
+  L.AQ = line:new(z.A,z.Q)
+  _,z.P = intersection(C.OR,L.AQ)
   L.T = C.OR : tangent_from(z.A)
   z.T = L.T.pb
   }
@@ -1957,7 +2028,7 @@
 
 \end{minipage}
 
-% subsubsection method_imeth_circle_power_pt (end)
+% subsubsection method_imeth_circle_power_pt(end)
  
  \subsubsection{In\_out of a disk} % (fold)
  \label{ssub:in__out_of_a_disk}
@@ -1965,14 +2036,14 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{
- init_elements ()
- z.O = point: new (0,0)
- z.R = point: new (2,0)
- z.A = point: new (1,1)
- z.B = point: new (2,-1)
- C.OR = circle: new (z.O,z.R)
-  function position (pt)
- if C.OR : power (pt)>0 
+ init_elements()
+ z.O = point: new(0,0)
+ z.R = point: new(2,0)
+ z.A = point: new(1,1)
+ z.B = point: new(2,-1)
+ C.OR = circle: new(z.O,z.R)
+  function position(pt)
+ if C.OR : power(pt)>0 
  then
    return tex.print("out") 
   else 
@@ -1991,14 +2062,14 @@
  \end{minipage}
  \begin{minipage}{.5\textwidth}
  \directlua{
- init_elements ()
- z.O = point: new (0,0)
- z.R = point: new (2,0)
- z.A = point: new (1,1)
- z.B = point: new (2,-1)
- C.OR = circle: new (z.O,z.R)
-  function position (pt)
- if C.OR : power (pt)>0 
+ init_elements()
+ z.O = point: new(0,0)
+ z.R = point: new(2,0)
+ z.A = point: new(1,1)
+ z.B = point: new(2,-1)
+ C.OR = circle: new(z.O,z.R)
+  function position(pt)
+ if C.OR : power(pt)>0 
  then
  return tex.print("out") 
   else 
@@ -2017,7 +2088,7 @@
 \end{center}
 
 \end{minipage}
- % subsubsection in__out_of_a_disk (end)
+ % subsubsection in__out_of_a_disk(end)
 
 \subsubsection{Method \Imeth{circle}{in\_out} for circle and disk} % (fold)
 \label{ssub:in_out_for_circle_and_disk}
@@ -2025,36 +2096,36 @@
 \begin{minipage}{.5\textwidth}
   \begin{Verbatim}
 \directlua{%
-  init_elements ()
-  z.O = point : new (0,0)
-  z.A = point : new (1,2)
-  C.OA = circle : new (z.O,z.A)
-  z.N = point : new (-2,2)
-  z.M = point : new (1,0)
-  z.P = point : new (2,1)
-  BCm = C.OA : in_out (z.M)
-  BDm = C.OA : in_out_disk (z.M)
-  BCn = C.OA : in_out (z.N)
-  BDn = C.OA : in_out_disk (z.N)
-  BCp = C.OA : in_out (z.P)
-  BDp = C.OA : in_out_disk (z.P)
+  init_elements()
+  z.O = point : new(0,0)
+  z.A = point : new(1,2)
+  C.OA = circle : new(z.O,z.A)
+  z.N = point : new(-2,2)
+  z.M = point : new(1,0)
+  z.P = point : new(2,1)
+  BCm = C.OA : in_out(z.M)
+  BDm = C.OA : in_out_disk(z.M)
+  BCn = C.OA : in_out(z.N)
+  BDn = C.OA : in_out_disk(z.N)
+  BCp = C.OA : in_out(z.P)
+  BDp = C.OA : in_out_disk(z.P)
   }
 \end{Verbatim}
 \end{minipage}
 \begin{minipage}{.5\textwidth}\directlua{%
-init_elements ()
-z.O = point : new (0,0)
-z.A = point : new (1,2)
-C.OA = circle : new (z.O,z.A)
-z.N = point : new (-2,2)
-z.M = point : new (1,0)
-z.P = point : new (2,1)
-BCm = C.OA : in_out (z.M)
-BDm = C.OA : in_out_disk (z.M)
-BCn = C.OA : in_out (z.N)
-BDn = C.OA : in_out_disk (z.N)
-BCp = C.OA : in_out (z.P)
-BDp = C.OA : in_out_disk (z.P)
+init_elements()
+z.O = point : new(0,0)
+z.A = point : new(1,2)
+C.OA = circle : new(z.O,z.A)
+z.N = point : new(-2,2)
+z.M = point : new(1,0)
+z.P = point : new(2,1)
+BCm = C.OA : in_out(z.M)
+BDm = C.OA : in_out_disk(z.M)
+BCn = C.OA : in_out(z.N)
+BDn = C.OA : in_out_disk(z.N)
+BCp = C.OA : in_out(z.P)
+BDp = C.OA : in_out_disk(z.P)
 }
 \def\tkzPosPoint#1#2#3#4{%
 \tkzLabelPoints(O,M,N,P)
@@ -2100,7 +2171,7 @@
   \end{Verbatim}
 \end{minipage}
 
-% subsubsection in_out_for_circle_and_disk (end)
+% subsubsection in_out_for_circle_and_disk(end)
 
 \subsubsection{Method \Imeth{circle}{circles\_position}} % (fold)
 \label{ssub:circles_position}
@@ -2118,14 +2189,14 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
-   z.A      = point : new ( 0  , 0  )
-   z.a      = point : new ( 3  , 0  )
-   z.B      = point : new ( 2  , 0  )
-   z.b      = point : new ( 3  , 0  )
-   C.Aa     = circle: new (z.A,z.a)
-   C.Bb     = circle: new (z.B,z.b)
-   position = C.Aa : circles_position (C.Bb)
+init_elements()
+   z.A      = point : new(0 , 0 )
+   z.a      = point : new(3 , 0 )
+   z.B      = point : new(2 , 0 )
+   z.b      = point : new(3 , 0 )
+   C.Aa     = circle: new(z.A,z.a)
+   C.Bb     = circle: new(z.B,z.b)
+   position = C.Aa : circles_position(C.Bb)
    if position == "inside tangent" 
    then color = "orange" 
    else color = "blue" end
@@ -2139,14 +2210,14 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
-z.A = point : new ( 1  , 0  )
-z.a = point : new ( 3  , 0  )
-z.B = point : new ( 2  , 0  )
-z.b = point : new ( 3  , 0  )
-C.Aa = circle: new (z.A,z.a)
-C.Bb = circle: new (z.B,z.b)
-position = C.Aa : circles_position (C.Bb)
+init_elements()
+z.A = point : new(1 , 0 )
+z.a = point : new(3 , 0 )
+z.B = point : new(2 , 0 )
+z.b = point : new(3 , 0 )
+C.Aa = circle: new(z.A,z.a)
+C.Bb = circle: new(z.B,z.b)
+position = C.Aa : circles_position(C.Bb)
 if position == "inside tangent" then color = "orange" else color = "blue" end
 }
 
@@ -2171,14 +2242,14 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{
- init_elements ()
- z.A   = point: new (5,4)
- z.B   = point: new (3,0)
- z.O   = point: new (0,0)
- z.C   = point: new (1,0) 
- L.AB  = line: new ( z.A,z.B )
- C.OC  = circle: new (z.O,z.C)
- C1,C2 = C.OC: c_c_pp (z.A,z.B)
+ init_elements()
+ z.A   = point: new(5,4)
+ z.B   = point: new(3,0)
+ z.O   = point: new(0,0)
+ z.C   = point: new(1,0) 
+ L.AB  = line: new(z.A,z.B)
+ C.OC  = circle: new(z.O,z.C)
+ C1,C2 = C.OC: c_c_pp(z.A,z.B)
  z.O1  = C1.center
  z.T1  = C1.through
  z.O2  = C2.center
@@ -2198,14 +2269,14 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{
- init_elements ()
- z.A      = point: new (5,4)
- z.B      = point: new (3,0)
- z.O      = point: new (0,0)
- z.C      = point: new (1,0) 
- L.AB     = line: new ( z.A,z.B )
- C.OC     = circle: new (z.O,z.C)
- C1,C2    = C.OC: c_c_pp (z.A,z.B)
+ init_elements()
+ z.A      = point: new(5,4)
+ z.B      = point: new(3,0)
+ z.O      = point: new(0,0)
+ z.C      = point: new(1,0) 
+ L.AB     = line: new(z.A,z.B)
+ C.OC     = circle: new(z.O,z.C)
+ C1,C2    = C.OC: c_c_pp(z.A,z.B)
  z.O1     = C1.center
  z.T1     = C1.through
  z.O2     = C2.center
@@ -2226,14 +2297,14 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{
- init_elements ()
- z.A      = point: new (3,0)
- z.B      = point: new (0,-3)
- z.O      = point: new (0,0)
- z.C      = point: new (1,0) 
- L.AB     = line: new ( z.A,z.B )
- C.OC     = circle: new (z.O,z.C)
- C1,C2    = C.OC: c_c_pp (z.A,z.B)
+ init_elements()
+ z.A      = point: new(3,0)
+ z.B      = point: new(0,-3)
+ z.O      = point: new(0,0)
+ z.C      = point: new(1,0) 
+ L.AB     = line: new(z.A,z.B)
+ C.OC     = circle: new(z.O,z.C)
+ C1,C2    = C.OC: c_c_pp(z.A,z.B)
  z.O1     = C1.center
  z.T1     = C1.through
  z.O2     = C2.center
@@ -2253,14 +2324,14 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{
- init_elements ()
- z.A      = point: new (3,0)
- z.B      = point: new (0,-3)
- z.O      = point: new (0,0)
- z.C      = point: new (1,0) 
- L.AB     = line: new ( z.A,z.B )
- C.OC     = circle: new (z.O,z.C)
- C1,C2    = C.OC: c_c_pp (z.A,z.B)
+ init_elements()
+ z.A      = point: new(3,0)
+ z.B      = point: new(0,-3)
+ z.O      = point: new(0,0)
+ z.C      = point: new(1,0) 
+ L.AB     = line: new(z.A,z.B)
+ C.OC     = circle: new(z.O,z.C)
+ C1,C2    = C.OC: c_c_pp(z.A,z.B)
  z.O1     = C1.center
  z.T1     = C1.through
  z.O2     = C2.center
@@ -2283,14 +2354,14 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{
- init_elements ()
- z.A      = point: new (2,3)
- z.B      = point: new (2,-3)
- z.O      = point: new (0,0)
- z.C      = point: new (1,0) 
- L.AB     = line: new ( z.A,z.B )
- C.OC     = circle: new (z.O,z.C)
- C1,C2    = C.OC: c_c_pp (z.A,z.B)
+ init_elements()
+ z.A      = point: new(2,3)
+ z.B      = point: new(2,-3)
+ z.O      = point: new(0,0)
+ z.C      = point: new(1,0) 
+ L.AB     = line: new(z.A,z.B)
+ C.OC     = circle: new(z.O,z.C)
+ C1,C2    = C.OC: c_c_pp(z.A,z.B)
  z.O1     = C1.center
  z.T1     = C1.through
  z.O2     = C2.center
@@ -2299,14 +2370,14 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{
- init_elements ()
- z.A      = point: new (2,3)
- z.B      = point: new (2,-3)
- z.O      = point: new (0,0)
- z.C      = point: new (1,0) 
- L.AB     = line: new ( z.A,z.B )
- C.OC     = circle: new (z.O,z.C)
- C1,C2    = C.OC: c_c_pp (z.A,z.B)
+ init_elements()
+ z.A      = point: new(2,3)
+ z.B      = point: new(2,-3)
+ z.O      = point: new(0,0)
+ z.C      = point: new(1,0) 
+ L.AB     = line: new(z.A,z.B)
+ C.OC     = circle: new(z.O,z.C)
+ C1,C2    = C.OC: c_c_pp(z.A,z.B)
  z.O1     = C1.center
  z.T1     = C1.through
  z.O2     = C2.center
@@ -2327,14 +2398,14 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
   \directlua{
-   init_elements ()
-   z.A      = point: new (1,5)
-   z.B      = point: new (1,-3)
-   z.O      = point: new (0,0)
-   z.C      = point: new (1,0) 
-   L.AB     = line: new ( z.A,z.B )
-   C.OC     = circle: new (z.O,z.C)
-   C1,C2    = C.OC: c_c_pp (z.A,z.B)
+   init_elements()
+   z.A      = point: new(1,5)
+   z.B      = point: new(1,-3)
+   z.O      = point: new(0,0)
+   z.C      = point: new(1,0) 
+   L.AB     = line: new(z.A,z.B)
+   C.OC     = circle: new(z.O,z.C)
+   C1,C2    = C.OC: c_c_pp(z.A,z.B)
    z.O1     = C1.center
    z.T1     = C1.through
    z.O2     = C2.center
@@ -2344,14 +2415,14 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{
- init_elements ()
- z.A      = point: new (1,5)
- z.B      = point: new (1,-3)
- z.O      = point: new (0,0)
- z.C      = point: new (1,0) 
- L.AB     = line: new ( z.A,z.B )
- C.OC     = circle: new (z.O,z.C)
- C1,C2    = C.OC: c_c_pp (z.A,z.B)
+ init_elements()
+ z.A      = point: new(1,5)
+ z.B      = point: new(1,-3)
+ z.O      = point: new(0,0)
+ z.C      = point: new(1,0) 
+ L.AB     = line: new(z.A,z.B)
+ C.OC     = circle: new(z.O,z.C)
+ C1,C2    = C.OC: c_c_pp(z.A,z.B)
  z.O1     = C1.center
  z.T1     = C1.through
  z.O2     = C2.center
@@ -2372,14 +2443,14 @@
 \begin{minipage}{.5\textwidth}
   \begin{Verbatim}
   \directlua{
-   init_elements ()
-   z.A      = point: new (1,3)
-   z.B      = point: new (1,-3)
-   z.O      = point: new (0,0)
-   z.C      = point: new (1,0) 
-   L.AB     = line: new ( z.A,z.B )
-   C.OC     = circle: new (z.O,z.C)
-   C1,C2    = C.OC: c_c_pp (z.A,z.B)
+   init_elements()
+   z.A      = point: new(1,3)
+   z.B      = point: new(1,-3)
+   z.O      = point: new(0,0)
+   z.C      = point: new(1,0) 
+   L.AB     = line: new(z.A,z.B)
+   C.OC     = circle: new(z.O,z.C)
+   C1,C2    = C.OC: c_c_pp(z.A,z.B)
    z.O1     = C1.center
    z.T1     = C1.through
    z.O2     = C2.center
@@ -2389,14 +2460,14 @@
 \end{minipage}
 \begin{minipage}{0.5\textwidth}
   \directlua{
-   init_elements ()
-   z.A      = point: new (1,3)
-   z.B      = point: new (1,-3)
-   z.O      = point: new (0,0)
-   z.C      = point: new (1,0) 
-   L.AB     = line: new ( z.A,z.B )
-   C.OC     = circle: new (z.O,z.C)
-   C1,C2    = C.OC: c_c_pp (z.A,z.B)
+   init_elements()
+   z.A      = point: new(1,3)
+   z.B      = point: new(1,-3)
+   z.O      = point: new(0,0)
+   z.C      = point: new(1,0) 
+   L.AB     = line: new(z.A,z.B)
+   C.OC     = circle: new(z.O,z.C)
+   C1,C2    = C.OC: c_c_pp(z.A,z.B)
    z.O1     = C1.center
    z.T1     = C1.through
    z.O2     = C2.center
@@ -2412,7 +2483,7 @@
   \end{tikzpicture}
 \end{minipage}
 
-% subsubsection method_c__c__pp (end)
+% subsubsection method_c__c__pp(end)
 
 \subsubsection{Method \Imeth{circle}{c\_cc\_p}} % (fold)
 \label{ssub:method_c_cc_p}
@@ -2425,14 +2496,14 @@
 \begin{Verbatim}
 \directlua{
 init_elements()
-z.A  = point : new ( 0  , 0  )
-z.TA = point : new ( 3  , 0  )
-z.B  = point : new (  6 , 2  )
-z.TB = point : new (  6 , 1  )
-z.P  = point : new (  3 , 6  )
-C.A  = circle : new (z.A,z.TA)
-C.B  = circle : new (z.B,z.TB)
-C1,C2= C.A :  c_cc_p (C.B,z.P) 
+z.A  = point : new(0 , 0 )
+z.TA = point : new(3 , 0 )
+z.B  = point : new( 6, 2 )
+z.TB = point : new( 6, 1 )
+z.P  = point : new( 3, 6 )
+C.A  = circle : new(z.A,z.TA)
+C.B  = circle : new(z.B,z.TB)
+C1,C2= C.A :  c_cc_p(C.B,z.P) 
 z.O1 = C1.center
 z.O2 = C2.center
 z.T1 = C1.through
@@ -2452,14 +2523,14 @@
 \begin{minipage}{0.5\textwidth}
 \directlua{
 init_elements()
-z.A  = point : new ( 0  , 0  )
-z.TA = point : new ( 3  , 0  )
-z.B  = point : new (  6 , 2  )
-z.TB = point : new (  6 , 1  )
-z.P  = point : new (  3 , 6  )
-C.A  = circle : new (z.A,z.TA)
-C.B  = circle : new (z.B,z.TB)
-C1,C2= C.A :  c_cc_p (C.B,z.P) 
+z.A  = point : new(0 , 0 )
+z.TA = point : new(3 , 0 )
+z.B  = point : new( 6, 2 )
+z.TB = point : new( 6, 1 )
+z.P  = point : new( 3, 6 )
+C.A  = circle : new(z.A,z.TA)
+C.B  = circle : new(z.B,z.TB)
+C1,C2= C.A :  c_cc_p(C.B,z.P) 
 z.O1 = C1.center
 z.O2 = C2.center
 z.T1 = C1.through
@@ -2483,14 +2554,14 @@
 \begin{minipage}{0.5\textwidth}
 \begin{Verbatim}
 \directlua{
-z.A  = point : new ( 0  , 0  )
-z.TA = point : new ( 2  , 0  )
-z.B  = point : new (  3 , 0  )
-z.TB = point : new (  2 , 0  )
-z.P  = point : new (  3 , 4 )
-C.A  = circle : new (z.A,z.TA)
-C.B  = circle : new (z.B,z.TB)
-C1,C2 =  C.A :  c_cc_p (C.B,z.P)
+z.A  = point : new(0 , 0 )
+z.TA = point : new(2 , 0 )
+z.B  = point : new( 3, 0 )
+z.TB = point : new( 2, 0 )
+z.P  = point : new( 3, 4)
+C.A  = circle : new(z.A,z.TA)
+C.B  = circle : new(z.B,z.TB)
+C1,C2 =  C.A :  c_cc_p(C.B,z.P)
 z.O1 = C1.center
 z.O2 = C2.center
 z.T1 = C1.through
@@ -2500,14 +2571,14 @@
 \end{minipage}
 \begin{minipage}{0.5\textwidth}
 \directlua{
-z.A  = point : new ( 0  , 0  )
-z.TA = point : new ( 2  , 0  )
-z.B  = point : new (  3 , 0  )
-z.TB = point : new (  2 , 0  )
-z.P  = point : new (  3 , 4 )
-C.A  = circle : new (z.A,z.TA)
-C.B  = circle : new (z.B,z.TB)
-C1,C2 =  C.A :  c_cc_p (C.B,z.P)
+z.A  = point : new(0 , 0 )
+z.TA = point : new(2 , 0 )
+z.B  = point : new( 3, 0 )
+z.TB = point : new( 2, 0 )
+z.P  = point : new( 3, 4)
+C.A  = circle : new(z.A,z.TA)
+C.B  = circle : new(z.B,z.TB)
+C1,C2 =  C.A :  c_cc_p(C.B,z.P)
 z.O1 = C1.center
 z.O2 = C2.center
 z.T1 = C1.through
@@ -2532,20 +2603,20 @@
 \begin{minipage}{0.5\textwidth}
 \begin{Verbatim}
 \directlua{
-z.A       = point : new ( 0  , 0  )
-z.TA      = point : new ( 2  , 0  )
-z.B       = point : new (  3 , 0  )
-z.TB      = point : new (  2 , 0  )
-C.A       = circle : new (z.A,z.TA)
-C.B       = circle : new (z.B,z.TB)
-z.I       = C.A: external_similitude (C.B)
-z.t1,z.t2 = C.A : common_tangent (C.B)
+z.A       = point : new(0 , 0 )
+z.TA      = point : new(2 , 0 )
+z.B       = point : new( 3, 0 )
+z.TB      = point : new( 2, 0 )
+C.A       = circle : new(z.A,z.TA)
+C.B       = circle : new(z.B,z.TB)
+z.I       = C.A: external_similitude(C.B)
+z.t1,z.t2 = C.A : common_tangent(C.B)
 z.TD      = C.B : antipode(z.TB)
 z.TE      =  C.A : antipode(z.TA)
 z.O       = midpoint(z.TD,z.TE)
-C.O       = circle : new (z.O,z.TD)
-z.P       = C.O : tangent_from (z.I).pb
-C1,C2     = C.A :  c_cc_p (C.B,z.P)
+C.O       = circle : new(z.O,z.TD)
+z.P       = C.O : tangent_from(z.I).pb
+C1,C2     = C.A :  c_cc_p(C.B,z.P)
 z.O1      = C1.center
 z.O2      = C2.center
 z.T1      = C1.through
@@ -2555,20 +2626,20 @@
 \end{minipage}
 \begin{minipage}{0.5\textwidth}
 \directlua{
-z.A       = point : new ( 0  , 0  )
-z.TA      = point : new ( 2  , 0  )
-z.B       = point : new (  3 , 0  )
-z.TB      = point : new (  2 , 0  )
-C.A       = circle : new (z.A,z.TA)
-C.B       = circle : new (z.B,z.TB)
-z.I       = C.A: external_similitude (C.B)
-z.t1,z.t2 = C.A : common_tangent (C.B)
+z.A       = point : new(0 , 0 )
+z.TA      = point : new(2 , 0 )
+z.B       = point : new( 3, 0 )
+z.TB      = point : new( 2, 0 )
+C.A       = circle : new(z.A,z.TA)
+C.B       = circle : new(z.B,z.TB)
+z.I       = C.A: external_similitude(C.B)
+z.t1,z.t2 = C.A : common_tangent(C.B)
 z.TD      = C.B : antipode(z.TB)
 z.TE      =  C.A : antipode(z.TA)
 z.O       = midpoint(z.TD,z.TE)
-C.O       = circle : new (z.O,z.TD)
-z.P       = C.O : tangent_from (z.I).pb
-C1,C2     = C.A :  c_cc_p (C.B,z.P)
+C.O       = circle : new(z.O,z.TD)
+z.P       = C.O : tangent_from(z.I).pb
+C1,C2     = C.A :  c_cc_p(C.B,z.P)
 z.O1      = C1.center
 z.O2      = C2.center
 z.T1      = C1.through
@@ -2592,20 +2663,20 @@
 \begin{minipage}{0.5\textwidth}
 \begin{Verbatim}
 \directlua{
-z.A       = point : new ( 0  , 0  )
-z.TA      = point : new ( 2  , 0  )
-z.B       = point : new (  3 , 0  )
-z.TB      = point : new (  2 , 0  )
-C.A       = circle : new (z.A,z.TA)
-C.B       = circle : new (z.B,z.TB)
-z.I       = C.A: external_similitude (C.B)
-z.t1,z.t2 = C.A : common_tangent (C.B)
+z.A       = point : new(0 , 0 )
+z.TA      = point : new(2 , 0 )
+z.B       = point : new( 3, 0 )
+z.TB      = point : new( 2, 0 )
+C.A       = circle : new(z.A,z.TA)
+C.B       = circle : new(z.B,z.TB)
+z.I       = C.A: external_similitude(C.B)
+z.t1,z.t2 = C.A : common_tangent(C.B)
 z.TD      = C.B : antipode(z.TB)
 z.TE      =  C.A : antipode(z.TA)
 z.O       = midpoint(z.TD,z.TE)
-C.O       = circle : new (z.O,z.TD)
-z.P       = C.O : tangent_from (z.I).pb
-C1,C2     = C.A :  c_cc_p (C.B,z.P)
+C.O       = circle : new(z.O,z.TD)
+z.P       = C.O : tangent_from(z.I).pb
+C1,C2     = C.A :  c_cc_p(C.B,z.P)
 z.O1      = C1.center
 z.O2      = C2.center
 z.T1      = C1.through
@@ -2615,20 +2686,20 @@
 \end{minipage}
 \begin{minipage}{0.5\textwidth}
 \directlua{
-z.A       = point : new ( 0  , 0  )
-z.TA      = point : new ( 2  , 0  )
-z.B       = point : new (  3 , 0  )
-z.TB      = point : new (  2 , 0  )
-C.A       = circle : new (z.A,z.TA)
-C.B       = circle : new (z.B,z.TB)
-z.I       = C.A: external_similitude (C.B)
-z.t1,z.t2 = C.A : common_tangent (C.B)
+z.A       = point : new(0 , 0 )
+z.TA      = point : new(2 , 0 )
+z.B       = point : new( 3, 0 )
+z.TB      = point : new( 2, 0 )
+C.A       = circle : new(z.A,z.TA)
+C.B       = circle : new(z.B,z.TB)
+z.I       = C.A: external_similitude(C.B)
+z.t1,z.t2 = C.A : common_tangent(C.B)
 z.TD      = C.B : antipode(z.TB)
 z.TE      =  C.A : antipode(z.TA)
 z.O       = midpoint(z.TD,z.TE)
-C.O       = circle : new (z.O,z.TD)
-z.P       = C.O : tangent_from (z.I).pb
-C1,C2     = C.A :  c_cc_p (C.B,z.P)
+C.O       = circle : new(z.O,z.TD)
+z.P       = C.O : tangent_from(z.I).pb
+C1,C2     = C.A :  c_cc_p(C.B,z.P)
 z.O1      = C1.center
 z.O2      = C2.center
 z.T1      = C1.through
@@ -2659,17 +2730,17 @@
 \begin{minipage}{0.5\textwidth}
 \begin{Verbatim}
 \directlua{
-  z.A   = point : new (0 , 0)
-  z.B   = point : new (4 , 0 )
-  L.AB  = line  : new (z.A,z.B)
-  z.O   = point : new (3 , 3)
-  z.T   = point : new (3 , 2)
-  z.P   = point : new (2 , .25)
-  C.OT  = circle : new (z.O , z.T)
-  C1,C2 = C.OT : c_lc_p (L.AB , z.P)
+  z.A   = point : new(0, 0)
+  z.B   = point : new(4, 0)
+  L.AB  = line  : new(z.A,z.B)
+  z.O   = point : new(3, 3)
+  z.T   = point : new(3, 2)
+  z.P   = point : new(2, .25)
+  C.OT  = circle : new(z.O, z.T)
+  C1,C2 = C.OT : c_lc_p(L.AB, z.P)
   z.O1  = C1.center
   z.O2  = C2.center
-  C3,C4 = C.OT : c_lc_p (L.AB , z.P,inside)
+  C3,C4 = C.OT : c_lc_p(L.AB, z.P,inside)
   z.O3  = C3.center
   z.O4  = C4.center 
   }
@@ -2689,17 +2760,17 @@
 \begin{minipage}{0.5\textwidth}
   \directlua{
   init_elements()
-  z.A   = point : new (0 , 0)
-  z.B   = point : new (4 , 0 )
-  L.AB  = line  : new (z.A,z.B)
-  z.O   = point : new (3 , 3)
-  z.T   = point : new (3 , 2)
-  z.P   = point : new (2 , .25)
-  C.OT  = circle : new (z.O , z.T)
-  C1,C2 = C.OT : c_lc_p (L.AB , z.P)
+  z.A   = point : new(0, 0)
+  z.B   = point : new(4, 0)
+  L.AB  = line  : new(z.A,z.B)
+  z.O   = point : new(3, 3)
+  z.T   = point : new(3, 2)
+  z.P   = point : new(2, .25)
+  C.OT  = circle : new(z.O, z.T)
+  C1,C2 = C.OT : c_lc_p(L.AB, z.P)
   z.O1  = C1.center
   z.O2  = C2.center
-  C3,C4 = C.OT : c_lc_p (L.AB , z.P,inside)
+  C3,C4 = C.OT : c_lc_p(L.AB, z.P,inside)
   z.O3  = C3.center
   z.O4  = C4.center
   }
@@ -2715,7 +2786,7 @@
   \tkzLabelPoints[above](P)
 \end{tikzpicture}
 \end{minipage}
-% subsubsection method_c_lc_p (end)
+% subsubsection method_c_lc_p(end)
 % subsection methods_of_the_class_circle (end)
 % section class_circle (end)
 

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-conic.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-conic.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-conic.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -11,7 +11,7 @@
 The table that defines the circles is slightly more complex. It contains the centers and the tangency points between the circles and the given elements. These are sequences of four coordinates, stored in the table. Finally, the sequences are concatenated into a string using a comma (",") as the separator. Coordinates are read with the \tkzcname{foreach} macro, utilizing the |expand list| option.
 
 \directlua{
-init_elements ()
+init_elements()
 z.O = point : new (0,0)
 z.P = point : new (0,6)
 z.M = point : new (0,3)
@@ -156,7 +156,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{
- init_elements ()
+ init_elements()
  z.A = point : new ( 0 , 0 )
  z.B = point : new ( 4 , -2 )
  L.dir = line : new (z.A,z.B)
@@ -203,7 +203,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{
-init_elements ()
+init_elements()
 z.A = point : new ( 0 , 0 )
 z.B = point : new ( 4 , -2 )
 L.dir = line : new (z.A,z.B)
@@ -274,7 +274,7 @@
 The last two attributes are common to all conics. They are the axis passing through the focus $F$ and its projected line $K$ on the directrix. This line is obtained with \code{PA.major\_axis}. You can also use the angle between this axis and the horizontal with \code{PA.slope}. The main axis is oriented from $K$ to $F$.
  
 \directlua{
- init_elements ()
+ init_elements()
  z.A = point : new ( 0 , 0 )
  z.B = point : new ( 4 , -2 )
  L.dir = line : new (z.A,z.B)
@@ -322,7 +322,7 @@
 
 
 \directlua{
- init_elements ()
+ init_elements()
  z.A     = point : new ( 0 , 0)
  z.B     = point : new ( 4 , -2)
  L.dir   = line  : new (z.A,z.B)
@@ -387,7 +387,7 @@
 We find the same attributes as for the hyperbola. The relationships between the measures change: while for the hyperbola we have $c = \sqrt{a^2+b^2}$, for the ellipse $c = \sqrt{a^2-b^2}$.
 
 \directlua{
- init_elements ()
+ init_elements()
  z.A     = point : new ( 0 , 0)
  z.B     = point : new ( 4 , -2)
  L.dir   = line  : new (z.A,z.B)
@@ -477,20 +477,20 @@
  z.m = midpoint(z.H,z.F)
 } 
 \begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCoordinates[smooth](curve)
-\tkzDrawLines[add = .5 and .5](A,B M,T K,F)
-\tkzDrawSegments(M,H H,F F,M)
-\tkzDrawPoints(F,K,T,M,H)
-\tkzLabelPoints(F,K,T,M,H)
-\tkzMarkAngles[mark=|](H,M,T T,M,F)
-\tkzMarkSegments[mark=|](H,M M,F)
-\tkzMarkSegments[mark=|](H,m m,F)
+ \tkzGetNodes
+ \tkzDrawCoordinates[smooth](curve)
+ \tkzDrawLines[add = .5 and .5](A,B M,T K,F)
+ \tkzDrawSegments(M,H H,F F,M)
+ \tkzDrawPoints(F,K,T,M,H)
+ \tkzLabelPoints(F,K,T,M,H)
+ \tkzMarkAngles[mark=|](H,M,T T,M,F)
+ \tkzMarkSegments[mark=|](H,M M,F)
+ \tkzMarkSegments[mark=|](H,m m,F)
 \end{tikzpicture}
-  \end{Verbatim}
+\end{Verbatim}
 \end{minipage}
 \directlua{
-  init_elements ()
+  init_elements()
    z.A     = point : new ( 0 ,  1 )
    z.B     = point : new ( 4  ,  3 )
    z.F     = point : new ( 2  ,  6 )
@@ -527,7 +527,7 @@
 \label{sub:hyperbola_construction}
 
 \directlua{
-  init_elements ()
+  init_elements()
   z.A     = point : new (-2, -1)
   z.B     = point : new ( 4, 0)
   L.AB    = line : new (z.A,z.B)
@@ -612,7 +612,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{
-init_elements ()
+init_elements()
 z.Fb    = point: new ( 3 , 0 )
 z.Fa    = point: new ( -3 , 2 )
 local c = length(z.Fa,z.Fb)/2
@@ -652,7 +652,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{
-init_elements ()
+init_elements()
 z.Fb    = point: new ( 3 , 0 )
 z.Fa    = point: new ( -3 , 2 )
 local c = length(z.Fa,z.Fb)/2
@@ -724,13 +724,29 @@
 \midrule
 \Imeth{conic}{points (ta,tb,nb,sawp)}  &  swap to get the second part of hyperbola  \\
 \Imeth{conic}{point (t)}         & to get one point on the curve \\
-\Imeth{conic}{in\_out (pt)}      &  pt in/out of the conic  \\
-\Imeth{conic}{tangent\_at (pt)}  &  tangent at point on the curve \\
-\Imeth{conic}{tangent\_from (pt)}&    \\
-\Imeth{conic}{orthoptic\_curve()}&    \\
+\Imeth{conic}{in\_out (pt)}      & pt in/out of the conic  \\
+\Imeth{conic}{tangent\_at (pt)}  & tangent at point on the curve \\
+\Imeth{conic}{tangent\_from (pt)}&  \\
+\Imeth{conic}{orthoptic\_curve()}&  \\
 \bottomrule
 \end{tabular}
+\egroup
 
+\bgroup
+\catcode`_=12 
+\small
+\captionof{table}{Conic functions.}\label{conic:func}
+\begin{tabular}{ll}
+\toprule
+\textbf{Functions} & \textbf{Example}     \\
+\midrule 
+\Igfct{conic}{PA\_dir(pt,pt,pt)} & get directrix from  focus and two points for parabola; Refer to [\ref{ssub:pa_dir}] \\
+
+\Igfct{conic}{PA\_focus(L,pt,pt)}& get the focus from directrix and two points; Refer to [\ref{ssub:_igfct_math_pa__focus}] \\
+\Igfct{conic}{HY\_bifocal(pt,pt,pt or r)}& get the directrix and eccentricity from foci and  point  of hyperbola; Refer to [\ref{ssub:_igfct_math_hy__bifocal}] \\
+\Igfct{conic}{EL\_bifocal(pt,pt,pt or r)}& get the directrix and eccentricity from foci and  point  of ellipse; Refer to [\ref{ssub:_igfct_math_el__bifocal}] \\
+\bottomrule
+\end{tabular}
 \egroup
 
 \subsubsection{Method \Imeth{conic}{points}} % (fold)
@@ -762,7 +778,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{
-init_elements ()
+init_elements()
 z.A   = point : new (-2, -1)
 z.B   = point : new ( 4, 0)
 z.F   = point : new ( 1  ,  3 )
@@ -783,7 +799,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{
-init_elements ()
+init_elements()
 z.A   = point : new (-2, -1)
 z.B   = point : new ( 4, 0)
 z.F   = point : new ( 1  ,  3 )
@@ -811,7 +827,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{
-init_elements ()
+init_elements()
 z.A   = point : new (-2, -1)
 z.B   = point : new ( 4, 0)
 z.F   = point : new ( 1  ,  3 )
@@ -845,7 +861,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{
-init_elements ()
+init_elements()
 z.A   = point : new (-2, -1)
 z.B   = point : new ( 4, 0)
 z.F   = point : new ( 1  ,  3 )
@@ -914,7 +930,7 @@
   
 \begin{Verbatim}
 \directlua{
- init_elements ()
+ init_elements()
  z.A   = point: new(-2, -1)
  z.B   = point: new( 4, 0)
  L.AB  = line: new(z.A,z.B)
@@ -1009,7 +1025,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{
-  init_elements ()
+  init_elements()
   z.A       = point : new ( 0 , 0 )
   z.B       = point : new ( 4 , -2 )
   L.dir     = line  : new (z.A,z.B)
@@ -1046,7 +1062,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{
-init_elements ()
+init_elements()
 z.A = point : new ( 0 , 0 )
 z.B = point : new ( 4 , -2 )
 L.dir = line : new (z.A,z.B)
@@ -1090,7 +1106,7 @@
 
 \begin{Verbatim}
   \directlua{
-  init_elements ()
+  init_elements()
   z.A = point : new ( 0 , 0 )
   z.B = point : new ( 2 , -1 )
   L.dir = line : new (z.A,z.B)
@@ -1127,7 +1143,7 @@
 \end{Verbatim}
 
 \directlua{
-init_elements ()
+init_elements()
 z.A = point : new ( 0 , 0 )
 z.B = point : new ( 2 , -1 )
 L.dir = line : new (z.A,z.B)
@@ -1172,7 +1188,7 @@
 \begin{minipage}{.5\textwidth}
   \begin{Verbatim}
     \directlua{
-    init_elements ()
+    init_elements()
     z.F    = point: new ( 2 , 0 )
     z.A    = point: new ( 3 , 4 )
     L.FA   = line : new (z.A,z.F)
@@ -1198,7 +1214,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{
-  init_elements ()
+  init_elements()
   z.F    = point: new ( 2 , 0 )
   z.A    = point: new ( 3 , 4 )
   L.FA   = line : new (z.A,z.F)
@@ -1230,7 +1246,7 @@
 \label{ssub:ellipse_with_center_vertex_and_covertex}
 
 \directlua{
-init_elements ()
+init_elements()
 z.C      = point : new (  1 , -1)
 z.V      = point : new (  4 , 3)
 z.W      = (z.C-z.V) : orthogonal (3) : at (z.C)
@@ -1269,7 +1285,7 @@
 
   \begin{Verbatim}
 \directlua{
- init_elements ()
+ init_elements()
  z.C      = point : new (  1 , -1)
  z.V      = point : new (  4 , 3)
  z.W      = (z.C-z.V) : orthogonal (3) : at (z.C)
@@ -1313,7 +1329,7 @@
 The key point here is that the relationship $MF + MG = 2a$ can be used to determine $a$.
 
 \directlua{
-init_elements ()
+init_elements()
 z.F      = point : new (  1 , -1)
 z.G      = point : new (  4 , 3)
 z.M      = point : new (  2 , 3)
@@ -1351,7 +1367,7 @@
 
 \begin{Verbatim}
 \directlua{
-init_elements ()
+init_elements()
  z.F     = point : new (  1 , -1)
  z.G     = point : new (  4 , 3)
  z.M     = point : new (  2 , 3)
@@ -1397,7 +1413,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{
-  init_elements ()
+  init_elements()
   z.Fb    = point: new ( 3 , 0 )
   z.Fa    = point: new ( -3 , 2 )
   local c = length(z.Fa,z.Fb)/2
@@ -1436,7 +1452,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
   \directlua{
-  init_elements ()
+  init_elements()
   z.Fb    = point: new ( 3 , 0 )
   z.Fa    = point: new ( -3 , 2 )
   local c = length(z.Fa,z.Fb)/2
@@ -1484,7 +1500,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{
-init_elements ()
+init_elements()
   z.A    = point : new ( 0 , 0 )
   z.B    = point : new ( 4 , -2 )
   L.dir  = line : new (z.A,z.B)
@@ -1530,7 +1546,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{
-init_elements ()
+init_elements()
   z.A    = point : new ( 0 , 0 )
   z.B    = point : new ( 4 , -2 )
   L.dir  = line : new (z.A,z.B)
@@ -1586,7 +1602,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{
-  init_elements ()
+  init_elements()
    z.A     = point : new ( 0 ,  1 )
    z.B     = point : new ( 4  ,  3 )
    z.F     = point : new ( 2  ,  6 )
@@ -1624,7 +1640,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{
-init_elements ()
+init_elements()
  z.A     = point : new ( 0 ,  1 )
  z.B     = point : new ( 4  ,  3 )
  z.F     = point : new ( 2  ,  6 )
@@ -1677,7 +1693,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
   \directlua{
-  init_elements ()
+  init_elements()
   z.A         = point : new ( 0 , 0 )
   z.B         = point : new ( 4 , -2 )
   L.dir       = line  : new (z.A,z.B)
@@ -1711,7 +1727,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
   \directlua{
-  init_elements ()
+  init_elements()
   z.A         = point : new ( 0 , 0 )
   z.B         = point : new ( 4 , -2 )
   L.dir       = line  : new (z.A,z.B)
@@ -1763,7 +1779,7 @@
 \begin{minipage}{.5\textwidth}
   \begin{Verbatim}
 \directlua{
-init_elements ()
+   init_elements()
    z.A     = point: new (0 , 1)
    z.B     = point: new (5 , 2)
    z.F     = point: new (2 , -1)
@@ -1784,7 +1800,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{
-  init_elements ()
+  init_elements()
    z.A     = point: new (0 , 1)
    z.B     = point: new (5 , 2)
    z.F     = point: new (2 , -1)
@@ -1804,9 +1820,6 @@
 \end{tikzpicture}
   \end{center}
 \end{minipage}
-
-
-
 % subsubsection _igfct_math_pa__focus (end)
 
 \subsubsection{\Igfct{math}{PA\_focus }} % (fold)
@@ -1819,7 +1832,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
   \directlua{
-  init_elements ()
+  init_elements()
     z.A     = point: new ( 0 , 1)
     z.B     = point: new ( 4 , 2)
     z.u     = point: new ( 2 , -1)
@@ -1843,7 +1856,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{
-init_elements ()
+init_elements()
   z.A     = point: new ( 0 , 1)
   z.B     = point: new ( 4 , 2)
   z.u     = point: new ( 2 , -1)
@@ -1877,7 +1890,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{
-init_elements ()
+init_elements()
 z.F      = point : new (  1 , -1)
 z.G      = point : new (  4 , 3)
 z.M      = point : new (  6, 2)
@@ -1901,7 +1914,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
   \directlua{
-  init_elements ()
+  init_elements()
   z.F      = point : new (  1 , -1)
   z.G      = point : new (  4 , 3)
   z.M      = point : new (  6, 2)
@@ -1937,7 +1950,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{
-init_elements ()
+init_elements()
  z.F      = point : new (  1 , -1)
  z.G      = point : new (  4 , 3)
  z.M      = point : new (  2 , 4)
@@ -1963,7 +1976,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
   \directlua{
-  init_elements ()
+  init_elements()
    z.F      = point : new (  1 , -1)
    z.G      = point : new (  4 , 3)
    z.M      = point : new (  2 , 4)
@@ -2003,7 +2016,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{
-init_elements ()
+init_elements()
 z.C      = point : new (  1 , -1)
 z.V      = point : new (  4 , 3)
 z.W      = (z.C-z.V) : orthogonal (3) : at (z.C)
@@ -2041,7 +2054,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
   \directlua{
-  init_elements ()
+  init_elements()
   z.C      = point : new (  1 , -1)
   z.V      = point : new (  4 , 3)
   z.W      = (z.C-z.V) : orthogonal (3) : at (z.C)

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-ellipse.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-ellipse.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-ellipse.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -40,7 +40,7 @@
 \begin{minipage}{.45\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.C   = point: new (3 , 2)
    z.A   = point: new (5 , 1)
    L.CA  = line : new (z.C,z.A)
@@ -64,7 +64,7 @@
 \end{minipage}
 \begin{minipage}{.55\textwidth}
    \directlua{%
-init_elements ()
+init_elements()
    z.C  = point: new (3 , 2)
    z.A  = point: new (5 , 1)
    L.CA = line : new (z.C,z.A)
@@ -163,7 +163,7 @@
 \begin{minipage}{0.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.C      = point: new (3 , 2)
    z.A      = point: new (5 , 1)
    z.B      = z.C : homothety(0.5,
@@ -185,7 +185,7 @@
 \end{minipage}
 \begin{minipage}{0.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.C    = point: new (3 , 2)
 z.A    = point: new (5 , 1)
 z.B    = z.C : homothety(0.5,
@@ -216,7 +216,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.A      = point: new (0 , 0)
    z.B      = point: new (5 , 1)
    L.AB     = line : new (z.A,z.B)
@@ -243,7 +243,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
   \directlua{%
-init_elements ()
+init_elements()
      z.A   = point: new (0 , 0)
      z.B   = point: new (5 , 1)
      L.AB  = line : new (z.A,z.B)
@@ -316,11 +316,11 @@
 \begin{minipage}{0.6\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.C         = point: new (2 , 3)
    z.A         = point: new (-1 , -2)
-   a           = value(4)
-   b           = value(3)
+   a           = 4
+   b           = 3
    ang         = math.deg(-math.pi/4)
    E           = ellipse: radii (z.C,a,b,-math.pi/4)
    z.V         = E : point (0)
@@ -339,11 +339,11 @@
 \end{minipage}
 \begin{minipage}{0.4\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.C         = point: new (2 , 3)
 z.A         = point: new (-1 , -2)
-a           = value(4)
-b           = value(3)
+a           = 4
+b           = 3
 ang         = math.deg(-math.pi/4)
 E           = ellipse: radii (z.C,a,b,-math.pi/4)
 z.V         = E : point (0)

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-line.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-line.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-line.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -5,15 +5,17 @@
 \subsection{Attributes of a line} % (fold)
 \label{sub:attributes_of_a_line}
 
-Writing |L.AB = line: new (z.A,z.B)| creates an object of the class \tkzname{line} (the notation is arbitrary for the moment). Geometrically, it represents both the line passing through the points $A$ and $B$ as the segment $[AB]$. Thus, we can use the midpoint of |L.AB|, which is, of course, the midpoint of the segment $[AB]$. This medium is obtained with |L.AB.mid|. Note that |L.AB.pa = z.A| and |L.AB.pb = z.B|. Finally, if a line $L$ is the result of a method, you can obtain the points with |z.A,z.B = get_points (L)| or with the previous remark.
+Writing \code{L.AB = line:new(z.A,z.B)} creates an object of the class \tkzname{line} (the notation is arbitrary for the moment). Geometrically, it represents both the line passing through the points $A$ and $B$ as the segment $[AB]$. Thus, we can use the midpoint of \code{L.AB}, which is, of course, the midpoint of the segment $[AB]$. This medium is obtained with \code{L.AB.mid}. Note that \code{L.AB.pa = z.A} and \code{L.AB.pb = z.B}. Finally, if a line $L$ is the result of a method, you can obtain the points with \code{z.A, z.B = get\_points(L)} or with the previous remark.
 
 \begin{mybox}
-   Creation \\
-   |L.AB = line : new ( z.A , z.B ) |
+   \begin{SVerbatim}
+     Creation 
+     L.AB = line:new(z.A, z.B)
+   \end{SVerbatim}
 \end{mybox}
 
 
-The attributes are :
+The attributes are:
 
 \vspace{1em}
 \bgroup
@@ -22,7 +24,7 @@
 \captionof{table}{Line attributes.}\label{line:att}
 \begin{tabular}{lll}
 \toprule
-\textbf{Attributes} & \textbf{Application} & \\
+\textbf{Attributes} & \textbf{Reference} & \\
 \Iattr{line}{pa}  & First point of the segment & |z.A = L.AB.pa| \\
 \Iattr{line}{pb}  & Second point of the segment & \\
 \Iattr{line}{type} & Type is 'line'    &  |L.AB.type = 'line'| \\  
@@ -45,16 +47,16 @@
 
 \vspace{5pt}
 \directlua{%
-init_elements ()
-z.a = point: new (1, 1)
-z.b = point: new (5, 4)
-L.ab = line : new (z.a,z.b)
+init_elements()
+z.a = point:new(1, 1)
+z.b = point:new(5, 4)
+L.ab = line:new(z.a, z.b)
 z.m = L.ab.mid
 z.w = L.ab.west
 z.e = L.ab.east
 z.r = L.ab.north_pa
 z.s = L.ab.south_pb
-sl  = L.ab.slope
+sl = L.ab.slope
 len = L.ab.length
 }
 
@@ -75,19 +77,19 @@
 \end{center}
 
 
-\begin{Verbatim}
+\begin{SVerbatim}
 \directlua{%
-init_elements ()
-   z.a   = point: new (1, 1)
-   z.b   = point: new (5, 4)
-   L.ab  = line : new (z.a,z.b)
-   z.m   = L.ab.mid
-   z.w   = L.ab.west
-   z.e   = L.ab.east
-   z.r   = L.ab.north_pa
-   z.s   = L.ab.south_pb
-   sl    = L.ab.slope
-   len   = L.ab.length
+init_elements()
+z.a = point:new(1, 1)
+z.b = point:new(5, 4)
+L.ab = line:new(z.a, z.b)
+z.m = L.ab.mid
+z.w = L.ab.west
+z.e = L.ab.east
+z.r = L.ab.north_pa
+z.s = L.ab.south_pb
+sl = L.ab.slope
+len = L.ab.length
 }
 
 \begin{tikzpicture}[scale = .75 ]
@@ -99,7 +101,7 @@
    \tkzLabelSegment[sloped](a,b){ab = \tkzUseLua{len}}
    \tkzLabelSegment[above=12pt,sloped](a,b){slope of (ab) = \tkzUseLua{sl}}
 \end{tikzpicture}
-\end{Verbatim}
+\end{SVerbatim}
 
 
 % subsubsection example_class_line (end)
@@ -107,41 +109,21 @@
 \subsubsection{Method \Imeth{line}{new} and line attributes}
 \label{ssub:example_line_attributes}
 
-The notation can be |L| or |L.AB| or |L.euler|. The notation is actually free.
-|L.AB| can also represent the segment. 
+The notation can be \code{L} or \code{L.AB} or \code{L.euler}. The notation is actually free.
+\code{L.AB} can also represent the segment. 
 
-With | L.AB  = line : new (z.A,z.B)|, a line is defined.
+With  \code{L.AB  = line:new(z.A,z.B)}, a line is defined.
 
 
-\begin{minipage}{0.5\textwidth}
-\begin{Verbatim}
+\begin{tkzexample}[latex=7cm]
 \directlua{%
-init_elements ()
-   z.A   = point : new (1,1)
-   z.B   = point : new (3,2)
-   L.AB  = line : new (z.A,z.B)
-   z.C   = L.AB.north_pa
-   z.D   = L.AB.south_pa
+  init_elements()
+  z.A = point:new(1, 1)
+  z.B = point:new(3, 2)
+  L.AB = line:new(z.A, z.B)
+  z.C = L.AB.north_pa
+  z.D = L.AB.south_pa
 }
-\begin{tikzpicture}
-   \tkzGetNodes
-   \tkzDrawLines(A,B C,D)
-   \tkzDrawPoints(A,...,D)
-   \tkzLabelPoints(A,...,D)
-   \tkzMarkRightAngle(B,A,C)
-   \tkzMarkSegments(A,C A,B A,D)
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{0.5\textwidth}
-\directlua{%
-init_elements ()
-   z.A   = point : new (1,1)
-   z.B   = point : new (3,2)
-   L.AB  = line : new (z.A,z.B)
-   z.C   = L.AB.north_pa
-   z.D   = L.AB.south_pa
-}
 \begin{center}
   \begin{tikzpicture}
      \tkzGetNodes
@@ -152,8 +134,8 @@
      \tkzMarkSegments(A,C A,B A,D)
   \end{tikzpicture}
 \end{center}
+\end{tkzexample}
 
-\end{minipage}
 % subsubsection example_line_attributes (end)
 % subsection attributes_of_a_line (end)
 
@@ -167,79 +149,99 @@
 \catcode`_=12
 \small
 \captionof{table}{Methods of the class line.(part 1)}\label{line:methods1}
-\begin{tabular}{lll}
+\begin{tabular}{ll}
 \toprule
 
-\textbf{Methods} & \textbf{Comments} & \\
+\textbf{Methods} & \textbf{Reference}  \\
 \midrule 
-\Igfct{line}{new(pt, pt)}      & |L.AB = line : new(z.A,z.B)| & Create line $(AB)$ ;  [\ref{sub:altshiller}] \\
+\Igfct{line}{new(pt, pt)} & [\ref{ssub:method_imeth_line_new_pt_pt}; \ref{sub:altshiller}] \\
 \midrule 
 
-\textbf{Real} &&\\
+\textbf{Real} &\\
 \midrule 
-\Imeth{line}{distance (pt)}   & |d = L.AB : distance (z.C)|  &   [\ref{ssub:method_imeth_line_distance}; \ref{ssub:example_distance_and_projection}] \\
-\Imeth{line}{slope ()} &   |a = L.AB : slope()| & better is L.AB.slope; [\ref{ssub:example_class_line}]\\ 
+\Imeth{line}{distance (pt)}  &  [\ref{ssub:method_imeth_line_distance}; \ref{ssub:example_distance_and_projection}] \\
 
-
-\textbf{Boolean} &&\\
+\textbf{Boolean} &\\
 \midrule 
-\Imeth{line}{in\_out (pt)}  & |b = L.AB: in_out(z.C)|  & b=true if $C\in (AB)$ ;  [\ref{ssub:method_imeth};\ref{ssub:in_out_for_a_line}] \\
-\Imeth{line}{in\_out\_segment(pt)} &   |b = L.AB:in_out_segment(z.C)| & b=true if $C\in [AB$] [\ref{ssub:method_imeth_line_in__in__out__segment}] \\ 
-\Imeth{line}{is\_parallel(L)}  & &  \\
-\Imeth{line}{is\_orthogonal(L)}  & &  \\
-\Imeth{line}{is\_equidistant(pt)}  & &  \\\midrule 
+\Imeth{line}{in\_out (pt)}  & [\ref{ssub:method_in_out};\ref{ssub:in_out_for_a_line}] \\
+\Imeth{line}{in\_out\_segment(pt)} & [\ref{ssub:method_line_in_out_segment}] \\ 
+\Imeth{line}{is\_parallel(L)}  & [\ref{ssub:method_line_is_parallel}]  \\
+\Imeth{line}{is\_orthogonal(L)}  & [\ref{ssub:method_line_is_orthogonal}] \\
+\Imeth{line}{is\_equidistant(pt)}  & [\ref{ssub:method_line_is_equidistant}] \\
+\midrule 
 
-
-\textbf{Points} &&\\
+\textbf{Points} &\\
 \midrule 
 
-\Imeth{line}{gold\_ratio ()}  & |z.C=L.AB : gold_ratio()|   &  [\ref{sub:gold_ratio_with_segment} ; \ref{sub:the_figure_pappus_circle} ; \ref{sub:bankoff_circle} ]  \\
+\Imeth{line}{gold\_ratio ()}  &  [\ref{sub:gold_ratio_with_segment} ; \ref{sub:the_figure_pappus_circle} ; \ref{sub:bankoff_circle} ]  \\
 
-\Imeth{line}{normalize ()}  & |z.C=L.AB : normalize()| & AC =1 and $C\in (AB)$  [ \ref{ssub:normalize}]  \\
+\Imeth{line}{normalize ()}  &  [ \ref{ssub:normalize}]  \\
 
-\Imeth{line}{normalize\_inv ()}  & |z.C=L.AB : normalize_inv()|   & CB=1 and $C\in (AB)$  \\
+\Imeth{line}{normalize\_inv()}  & \\
 
-\Imeth{line}{barycenter (r,r)}    & |z.C=L.AB : barycenter (1,2)|  &   [\ref{ssub:barycenter_with_a_line}] \\
+\Imeth{line}{barycenter(r,r)}    &   [\ref{ssub:barycenter_with_a_line}] \\
 
-\Imeth{line}{point (r)} & |z.C=L.AB : point (2)|   & $\overrightarrow{AC} = 2\overrightarrow{AB}$  [\ref{sub:ellipse} ; \ref{ssub:method_point}] \\
+\Imeth{line}{point(r)}   &   [\ref{sub:ellipse} ; \ref{ssub:method_point}] \\
 
-\Imeth{line}{midpoint ()}    & |z.M=L.AB : midpoint ()| & better is |z.M = L.AB.mid|  \\
+\Imeth{line}{midpoint()}    &   \\
 
-\Imeth{line}{harmonic\_int (pt)}  & |z.D=L.AB : harmonic_int (z.C)| &  [ \ref{sub:bankoff_circle}] \\
+\Imeth{line}{harmonic\_int(pt)}   &  [ \ref{sub:bankoff_circle}] \\
 
-\Imeth{line}{harmonic\_ext (pt)}  & |z.D=L.AB : harmonic_ext (z.C)| & [ \ref{sub:bankoff_circle}] \\
+\Imeth{line}{harmonic\_ext(pt)}  & [ \ref{sub:bankoff_circle}] \\
 
-\Imeth{line}{harmonic\_both (r)}  & |z.C,z.D=L.AB : harmonic_both|($\varphi$) & [\ref{sub:harmonic_division_with_tkzphi}] \\
+\Imeth{line}{harmonic\_both(r)}  & [\ref{sub:harmonic_division_with_tkzphi}] \\
 
-\Imeth{line}{\_east(d)}    & |z.M=L.AB : _east(2)| & |BM = 2| $A,B,M$ aligned  \\
+\Imeth{line}{\_east(d)}   & \\
 
-\Imeth{line}{\_west(d)}    & |z.M=L.AB : _east(2)| & |BM = 2| $A,B,M$ aligned  \\
+\Imeth{line}{\_west(d)}    & \\
 
-\Imeth{line}{\_north\_pa(d)}  &|z.M=L.AB: _north_pa(2)| &|AM=2|; $AM\perp AB$ ;  \\
-...&$\overrightarrow{AB},\overrightarrow{AM}$ counterclockwise&  [\ref{ssub:new_line_from_a_defined_line}\\
+\Imeth{line}{\_north\_pa(d)}  &  [\ref{ssub:new_line_from_a_defined_line}\\
 
-\Imeth{line}{\_south\_pa(d)}  &|z.M=L.AB: _south_pa(2)| &|AM=2|; $AM\perp AB$ ; $\overrightarrow{AB},\overrightarrow{AM}$ clockwise   \\
+\Imeth{line}{\_south\_pa(d)}  &    \\
 
-\Imeth{line}{\_north\_pb(d)}  &|z.M=L.AB: _north_pb(2)| &|BM=2|; $BM\perp BA$ ; $\overrightarrow{BA},\overrightarrow{BM}$ clockwise   \\
+\Imeth{line}{\_north\_pb(d)}  &    \\
 
-\Imeth{line}{\_south\_pb(d)}  &|z.M=L.AB: _south_pb(2)| &|BM=2|; $BM\perp BA$ ;    \\
-...&$\overrightarrow{AB},\overrightarrow{AM}$ counterclockwise &  [\ref{ssub:new_line_from_a_defined_line}\\
+\Imeth{line}{\_south\_pb(d)}  &   [\ref{ssub:new_line_from_a_defined_line}\\
 
-\Imeth{line}{report(d,pt)}    &|z.M=L.AB: report(2,z.N)| &|MN=2|; $AB\parallel MN$ ;  [ex. \ref{ssub:method_report}]\\
+\Imeth{line}{report(d,pt)}    &[\ref{ssub:method_report}]\\
 
-\Imeth{line}{colinear\_at(pt,k)}    &|z.D=L.AB: colinear_at(z.C,2)| &|CD=2AB|; $AB\parallel CD$ ;  [ex. \ref{ssub:method_imeth_line_colinear__at}]\\
+\Imeth{line}{colinear\_at(pt,k)}  & [ex. \ref{ssub:method_imeth_line_colinear__at}]\\
 \midrule 
 
-\textbf{Lines} &&\\
+\textbf{Lines} &\\
 \midrule  
 
-\Imeth{line}{ll\_from ( pt )}  &|L.CD=L.AB: ll_from(z.C)| &$(CD) \parallel (AB)$;  [\ref{ssub:new_line_from_a_defined_line}] \\
+\Imeth{line}{ll\_from(pt)}  & [\ref{ssub:new_line_from_a_defined_line}] \\
 
-\Imeth{line}{ortho\_from ( pt )} &|L.CD=L.AB: ortho_from(z.C)|&$(CD) \perp (AB)$;  [\ref{ssub:newline_ortho_from}] \\
+\Imeth{line}{ortho\_from(pt)} & [\ref{ssub:newline_ortho_from}] \\
  
- \Imeth{line}{mediator ()} & |L.uv=L.AB: mediator()| & perpendicular bisector of $(A,B)$ \footnote{You can use |perpendicular_bisector| intead of \tkzname{mediator}.}; [\ref{ssub:method_imeth_line_mediator}]\\
+ \Imeth{line}{mediator()} & Note \footnote{You can use |perpendicular_bisector| intead of \tkzname{mediator}.}; [\ref{ssub:method_imeth_line_mediator}]\\
 
-\Imeth{line}{swap\_line ( )}  &|L.AB=L.AB: swap_line()| & [\ref{ssub:method_imeth_line_swap__line} ; \ref{ssub:intersection_line_parabola_explained}] \\
+\Imeth{line}{swap\_line()}  & [\ref{ssub:method_imeth_line_swap__line} ; \ref{ssub:intersection_line_parabola_explained}] \\
+\midrule 
+\textbf{Triangles}&\\
+\midrule  
+\Imeth{line}{equilateral (<swap>)}    & Note \footnote{Triangles are defined in the direct sense of rotation, unless the "swap" option is present.}; [\ref{ssub:object_rotation}]  \\
+
+\Imeth{line}{isosceles (an<,swap>)}& [\ref{ssub:method_imeth_line_isosceles}]\\
+
+\Imeth{line}{isosceles\_a (an<,swap>)} & \\
+
+\Imeth{line}{isosceles\_s (an<,swap>)}& \\
+
+\Imeth{line}{two\_angles (an,an)} &Note \footnote{The given side is between the two angles} [\ref{ssub:triangle_with_two__angles}] \\
+
+\Imeth{line}{school ()}   & \\
+
+\Imeth{line}{half(<swap>)}  & \\
+
+\Imeth{line}{sss(r,r<,swap>)}  &  [\ref{ssub:triangle_with_three_given_sides}] \\
+
+\Imeth{line}{sas(r,an<,swap>)}  &  [\ref{ssub:triangle_with_three_given_sides}]  \\
+
+\Imeth{line}{ssa(r,an<,swap>)}  &  [\ref{ssub:triangle_with_three_given_sides}]\\
+
+
 \bottomrule
 \end{tabular}
 \egroup
@@ -254,385 +256,255 @@
 \begin{tabular}{lll}
 \toprule
 \textbf{Methods} & \textbf{Comments} & \\
-\midrule 
-\textbf{Triangles}&&\\
-\midrule  
-\Imeth{line}{equilateral (<swap>)}  & |T.ABC=L.AB:equilateral()|   & $(\overrightarrow{AB},\overrightarrow{AC})>0$ or $<0$ with swap \footnote{Triangles are defined in the direct sense of rotation, unless the "swap" option is present.}; [\ref{ssub:object_rotation}]  \\
-\Imeth{line}{isosceles (an<,swap>)}&|T.ABC=L.AB:isosceles(math.pi/6)|& [\ref{ssub:method_imeth_line_isosceles}]\\
-\Imeth{line}{isosceles\_a (an<,swap>)}& same as |isosceles| & \\
-\Imeth{line}{isosceles\_s (an<,swap>)}&|T.ABC=L.AB:isosceles_s(4)| AC=BC& \\
-\Imeth{line}{two\_angles (an,an)} &|T.ABC=L.AB:two_angles(an,an)|&note \footnote{The given side is between the two angles} [\ref{ssub:triangle_with_two__angles}] \\
-\Imeth{line}{school ()}  & 30°,60°, 90°  & \\
-\Imeth{line}{half (<swap>)}  & T.ABC = L.AB:half() $\widehat{B}$ = 90° and 2BC = AB& \\
-\Imeth{line}{sss (r,r<,swap>)}  & $AC=r$ $BC=r$ & [\ref{ssub:triangle_with_three_given_sides}] \\
-\Imeth{line}{sas (r,an<,swap>)}  & $AC =r$ $\widehat{BAC} = an$ & [\ref{ssub:triangle_with_three_given_sides}]  \\
-\Imeth{line}{ssa (r,an<,swap>)}  & $AC =r$ $\widehat{ABC} = an$&  [\ref{ssub:triangle_with_three_given_sides}]\\
 \midrule
-\textbf{Squares}&&\\
+\textbf{Squares}&\\
 \midrule  
-\Imeth{line}{square ()} &|S.AB=L.AB : square () | &  create a square |S.AB|.\footnote{ |_,_,z.C,z.D = get_points(S.AB)|}; [\ref{ssub:object_rotation}] \\
+\Imeth{line}{square ()}  &  Note \footnote{ |_,_,z.C,z.D = get_points(S.AB)|}; [\ref{ssub:object_rotation}] \\
 \midrule 
-\textbf{Sacred triangles}&&\\
+\textbf{Sacred triangles}&\\
 \midrule  
-\Imeth{line}{gold (<swap>)}    &|T.ABC=L.AB:gold()| & right in $B$ and $AC = \varphi \times AB $; [\ref{line:met}] \\
-\Imeth{line}{euclide (<swap>)} &|T.ABC=L.AB:euclide()| &$AB=AC$ ; $(\overrightarrow{AB},\overrightarrow{AC}) = \pi/5$; [\ref{line:met}] \\
-\Imeth{line}{golden (<swap>)}  &|T.ABC=L.AB:golden()|   &
-    $(\overrightarrow{AB},\overrightarrow{AC}) = 2\times \pi/5$ ;  [\ref{line:met}] \\
-\Imeth{line}{sublime (<swap>)} & = golden & [\ref{line:met}] \\
-\Imeth{line}{divine (<swap>)}  & &   [\ref{line:met}] \\  
-\Imeth{line}{golden\_gnomon (<swap>)}  & = devine &   [\ref{line:met}] \\  
-\Imeth{line}{egyptian (<swap>)} & & [\ref{line:met}] \\
-\Imeth{line}{pythagoras (<swap>)} & = egyptian & [\ref{line:met}] \\
-\Imeth{line}{isis (<swap>)} & = egyptian & [\ref{line:met}] \\
-\Imeth{line}{cheops (<swap>)}  &  & [\ref{line:met}] \\
+\Imeth{line}{gold(<swap>)}     [\ref{line:met}] \\
+\Imeth{line}{euclide(<swap>)} & [\ref{line:met}] \\
+\Imeth{line}{golden(<swap>)}  &  [\ref{line:met}] \\
+\Imeth{line}{sublime(<swap>)}  & [\ref{line:met}] \\
+\Imeth{line}{divine(<swap>)}  &    [\ref{line:met}] \\  
+\Imeth{line}{golden\_gnomon(<swap>)}  &    [\ref{line:met}] \\  
+\Imeth{line}{egyptian(<swap>)} & [\ref{line:met}] \\
+\Imeth{line}{pythagoras(<swap>)} &  [\ref{line:met}] \\
+\Imeth{line}{isis(<swap>)} & [\ref{line:met}] \\
+\Imeth{line}{cheops(<swap>)}  &   [\ref{line:met}] \\
 \midrule 
-\textbf{Circles} &&\\
+\textbf{Circles} &\\
 \midrule 
-\Imeth{line}{circle ()}  & |C.AB = L.AB : circle ()| &  center pa through pb \\
-\Imeth{line}{apollonius (r)}  & |C.apo = L.AB : apollonius (2)|&  Set of points tq. |MA/MB = 2|; [\ref{ssub:apollonius_circle_ma_mb_k}] \\
-\Imeth{line}{c\_l\_pp (pt,pt)} & |C1,C2 = L.AB: c_l_pp(z.M,z.N)|&[\ref{ssub:c_l_pp}]  \\ 
-\Imeth{line}{c\_ll\_p (pt,pt)} & |C1,C2 = L.AB: c_ll_p(z.C,z.P)|&[\ref{ssub:method_c__ll__p}]  \\ 
+\Imeth{line}{circle ()}  &  \\
+\Imeth{line}{apollonius (r)}  &  [\ref{ssub:apollonius_circle_ma_mb_k}] \\
+\Imeth{line}{c\_l\_pp (pt,pt)} &[\ref{ssub:c_l_pp}]  \\ 
+\Imeth{line}{c\_ll\_p (pt,pt)} & [\ref{ssub:method_c__ll__p}]  \\ 
 \midrule 
-\textbf{Transformations} &&\\
+\textbf{Transformations} &\\
 \midrule 
-\Imeth{line}{reflection ( obj )}  & |new obj = L.AB : reflection (obj)|&  [\ref{ssub:reflection_of_object}] \\
-\Imeth{line}{translation ( obj )} & |new obj = L.AB : translation (obj)|& [\ref{ssub:example_translation}] \\
+\Imeth{line}{reflection (obj)}  &  [\ref{ssub:reflection_of_object}] \\
+\Imeth{line}{translation (obj)} & [\ref{ssub:example_translation}] \\
 
-\Imeth{line}{projection ( obj )}  & |z.H = L.AB : projection (z.C)| & $CH \perp (AB)$ and $H\in (AB)$; \\
-...  & &  [\ref{ssub:example_projection_of_several_points}; \ref{ssub:example_combination_of_methods}; \ref{ssub:example_projection_of_several_points}; \ref{ssub:example_combination_of_methods}]\\
+\Imeth{line}{projection (obj)}  &  [\ref{ssub:example_projection_of_several_points}; \ref{ssub:example_combination_of_methods}; \ref{ssub:example_projection_of_several_points}; \ref{ssub:example_combination_of_methods}]\\
 
-\Imeth{line}{projection\_ll(L,pts)}  & |z.Mp=L.AB:projection_ll(L.CD,z.M)|&  [\ref{ssub:method_imeth_line_projection__ll}] \\
+\Imeth{line}{projection\_ll(L,pts)}  & [\ref{ssub:method_imeth_line_projection__ll}] \\
 
-\Imeth{line}{affinity\_ll(L,k,pts)}  & |z.Mp=L.AB:affinity(L.CD,2,z.M)|&  [\ref{ssub:method_imeth_line_affinity}] \\
+\Imeth{line}{affinity\_ll(L,k,pts)}  &  [\ref{ssub:method_imeth_line_affinity}] \\
 \bottomrule
 \end{tabular}
 \egroup
 \end{minipage}
 
-\subsubsection{Method \Imeth{line}{distance}} % (fold)
-\label{ssub:method_imeth_line_distance}
+\subsubsection{Method \Imeth{line}{new(pt,pt)}} % (fold)
+\label{ssub:method_imeth_line_new_pt_pt}
 
-This method gives the distance from a point to a straight line.
+It is preferable to use syntax such as \code{L.xx}.
 
-\vspace{6pt}
-\begin{minipage}{.5\textwidth}
-\begin{Verbatim}
+\begin{tkzexample}[latex=7cm]
 \directlua{
-function calc_distance (L,p)
- if L : in_out (p) 
- then
-  return  point.abs(p-L.pa)/L.length
- else 
-   return 0
- end 
-end
-z.A     = point: new (0,0)
-z.B     = point: new (2,4)
-z.X     = point: new (3,6)
-z.Y     = point: new (2,0)
-L.AB    = line :  new (z.A,z.B)
-dx      = calc_distance (L.AB,z.X)
-dy      = calc_distance (L.AB,z.Y)
+  init_elements()
+  z.A = point:new(0, 0)
+  z.B = point:new(4, 3)
+  L.AB = line:new(z.A, z.B)
 }
-\tkzUseLua{k}
+\begin{center}
 \begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawLine(A,B)
- \tkzDrawPoints(A,B,X,Y)
- \tkzLabelPoints(A,B)
- \tkzLabelPoint(X){X : \tkzUseLua{dx}}
- \tkzLabelPoint(Y){Y : \tkzUseLua{dy}}
+  \tkzGetNodes
+  \tkzDrawLine(A,B)
+  \tkzDrawPoints(A,B)
+  \tkzLabelPoints(A,B)
 \end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.5\textwidth}
-\directlua{
-   z.A            = point : new (0 , 0)
-   z.B            = point : new (4 , 3)
-   z.C            = point : new (1 , 5)
-   L.AB           = line : new (z.A,z.B)
-   d              = L.AB : distance (z.C)
-   l              = L.AB.length
-   z.H            = L.AB : projection (z.C)
-}
-\begin{center}
+\end{center}
+\end{tkzexample}
+% subsubsection method_imeth_line_new_pt_pt (end)
+
+\subsubsection{Method \Imeth{line}{distance(pt)}} %(fold)
+\label{ssub:method_imeth_line_distance}
+
+This method gives the distance from a point to a straight line.
+
+\vspace{6pt}
+
+\begin{tkzexample}[latex=7cm]
+  \directlua{
+  z.A = point:new(0, 0)
+  z.B = point:new(4, 3)
+  z.C = point:new(1, 5)
+  L.AB = line:new(z.A, z.B)
+  d = L.AB:distance(z.C)
+  l = L.AB.length
+  z.H = L.AB:projection(z.C)
+  }
+  \begin{center}
   \begin{tikzpicture}
   \tkzGetNodes
   \tkzDrawLines(A,B C,H)
   \tkzDrawPoints(A,B,C,H)
   \tkzLabelPoints(A,B,C,H)
-  \tkzLabelSegment[above right=2em,draw](C,H){$CH = \tkzUseLua{d}$}
-  \tkzLabelSegment[below right=1em,draw](A,B){$AB = \tkzUseLua{l}$}
+  \tkzLabelSegment[above right=2em,draw](C,H){%
+    $CH = \tkzUseLua{d}$}
+  \tkzLabelSegment[below right=1em,draw](A,B){%
+    $AB = \tkzUseLua{l}$}
   \end{tikzpicture}
-\end{center}
+  \end{center}
+\end{tkzexample}
+% subsubsection method_imeth_line_distance(end)
 
-\end{minipage}
-% subsubsection method_imeth_line_distance (end)
+\subsubsection{Method \Imeth{line}{in\_out(pt)}} % (fold)
+\label{ssub:method_in_out}
 
-\subsubsection{Method \Imeth{line}{in\_out}} % (fold)
-\label{ssub:method_imeth}
-
 This method shows whether a point belongs to a straight line.
 
 \vspace{6pt}
-\begin{minipage}{.5\textwidth}
-\begin{Verbatim}
-\directlua{
-function calc_ratio (L,p)
- if L : in_out (p) 
- then
-  return  point.abs(p-L.pa)/L.length
- else 
-   return 0
- end 
-end
-z.A     = point: new (0,0)
-z.B     = point: new (2,4)
-z.X     = point: new (3,6)
-z.Y     = point: new (2,0)
-L.AB    = line :  new (z.A,z.B)
-dx      = calc_ratio (L.AB,z.X)
-dy      = calc_ratio (L.AB,z.Y)
-}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawLine(A,B)
- \tkzDrawPoints(A,B,X,Y)
- \tkzLabelPoints(A,B)
- \tkzLabelPoint(X){X : \tkzUseLua{dx}}
- \tkzLabelPoint(Y){Y : \tkzUseLua{dy}}
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.5\textwidth}
-\directlua{
-function calc_distance (L,p)
- if L : in_out (p) 
- then
-  return  point.abs(p-L.pa)/L.length
- else 
-   return 0
- end 
-end
-z.A     = point: new (0,0)
-z.B     = point: new (2,4)
-z.X     = point: new (3,6)
-z.Y     = point: new (2,0)
-L.AB    = line :  new (z.A,z.B)
-dx      = calc_distance (L.AB,z.X)
-dy      = calc_distance (L.AB,z.Y)
-}
-\begin{center}
-  \begin{tikzpicture}
-   \tkzGetNodes
-   \tkzDrawLine(A,B)
-   \tkzDrawPoints(A,B,X,Y)
-   \tkzLabelPoints(A,B)
-   \tkzLabelPoint(X){X : \tkzUseLua{dx}}
-   \tkzLabelPoint(Y){Y : \tkzUseLua{dy}}
-  \end{tikzpicture}
-\end{center}
-\end{minipage}
 
-% subsubsection method_imeth (end)
+\begin{tkzexample}[latex=7cm]
+  \directlua{
+local  function calc_distance(L, p)
+    if L:in_out(p) then
+      return point.abs(p - L.pa) / L.length
+    else
+      return 0
+    end
+  end
+  z.A = point:new(0, 0)
+  z.B = point:new(2, 4)
+  z.X = point:new(3, 6)
+  z.Y = point:new(2, 0)
+  L.AB = line:new(z.A, z.B)
+  dx = calc_distance(L.AB, z.X)
+  dy = calc_distance(L.AB, z.Y)
+  }
+  \begin{center}
+    \begin{tikzpicture}
+     \tkzGetNodes
+     \tkzDrawLine(A,B)
+     \tkzDrawPoints(A,B,X,Y)
+     \tkzLabelPoints(A,B)
+     \tkzLabelPoint(X){X: \tkzUseLua{dx}}
+     \tkzLabelPoint(Y){Y: \tkzUseLua{dy}}
+    \end{tikzpicture}
+  \end{center}
+\end{tkzexample}
 
-\subsubsection{Method \Imeth{line}{in\_in\_out\_segment}} % (fold)
-\label{ssub:method_imeth_line_in__in__out__segment}
+% subsubsection method_in_out (end)
 
+\subsubsection{Method \Imeth{line}{in\_out\_segment(pt)}} % (fold)
+\label{ssub:method_line_in_out_segment}
+
 Variant of the previous method; indicates whether a point is on or off a segment.
 
 \vspace{6pt}
-\begin{minipage}{.5\textwidth}
-\begin{Verbatim}
+
+\begin{tkzexample}[latex=7cm]
   \directlua{
-  function foo (L,p)
-   if L : in_out_segment (p) 
-   then
-    return  "in"
-   else 
-     return "out"
-   end 
+local  function inseg(L, p)
+    if L:in_out_segment(p) then
+      return "in"
+    else
+      return "out"
+    end
   end
-  z.A     = point: new (0,0)
-  z.B     = point: new (2,4)
-  z.X     = point: new (-1,-2)
-  z.Y     = point: new (1,2)
-  L.AB    = line :  new (z.A,z.B)
-  bx      = foo(L.AB,z.X)
-  by      = foo(L.AB,z.Y)
+  z.A = point:new(0, 0)
+  z.B = point:new(2, 4)
+  z.X = point:new(-1,-2)
+  z.Y = point:new(1, 2)
+  L.AB = line:new(z.A, z.B)
+  dx = inseg(L.AB, z.X)
+  dy = inseg(L.AB, z.Y)
   }
-    \begin{tikzpicture}
-        \tkzGetNodes
-         \tkzDrawLine(A,B)
-         \tkzDrawPoints(A,B,X,Y)
-         \tkzLabelPoints(A,B)
-         \tkzLabelPoint(X){X : \tkzUseLua{bx}}
-         \tkzLabelPoint(Y){Y : \tkzUseLua{by}}
-    \end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.5\textwidth}
-  \directlua{
-  function foo (L,p)
-   if L : in_out_segment (p) 
-   then
-    return  "in"
-   else 
-     return "out"
-   end 
-  end
-  z.A     = point: new (0,0)
-  z.B     = point: new (2,4)
-  z.X     = point: new (-1,-2)
-  z.Y     = point: new (1,2)
-  L.AB    = line :  new (z.A,z.B)
-  bx      = foo(L.AB,z.X)
-  by      = foo(L.AB,z.Y)
-  }
   \begin{center}
     \begin{tikzpicture}
-        \tkzGetNodes
-         \tkzDrawLine(A,B)
-         \tkzDrawPoints(A,B,X,Y)
-         \tkzLabelPoints(A,B)
-         \tkzLabelPoint(X){X : \tkzUseLua{bx}}
-         \tkzLabelPoint(Y){Y : \tkzUseLua{by}}
+     \tkzGetNodes
+     \tkzDrawLine(A,B)
+     \tkzDrawPoints(A,B,X,Y)
+     \tkzLabelPoints(A,B)
+     \tkzLabelPoint(X){X: \tkzUseLua{dx}}
+     \tkzLabelPoint(Y){Y: \tkzUseLua{dy}}
     \end{tikzpicture}
   \end{center}
+\end{tkzexample}
+% subsubsection method_line_in__out__segment (end)
 
-\end{minipage}
+\subsubsection{Method \Imeth{line}{is\_parallel(L)}} % (fold)
+\label{ssub:method_line_is_parallel}
 
-% subsubsection method_imeth_line_in__in__out__segment (end)
+\vspace{6pt}
+\begin{tkzexample}[latex=8cm]
+\directlua{
+z.A = point:new(0, 0)
+z.B = point:new(4, 2)
+L.AB = line:new(z.A, z.B)
+z.C = point:new(1, 2)
+z.D = point:new(5, 4)
+L.CD = line:new(z.C, z.D)
+if L.AB:is_parallel (L.CD) 
+then tkztxt = "parallel"
+else tkztxt = "no parallel"
+end
+}
+\begin{center}
+\begin{tikzpicture}
+  \tkzGetNodes
+  \tkzDrawLines(A,B C,D)
+  \tkzDrawPoints(A,B,C,D)
+  \tkzLabelPoints(A,B,C,D)
+  \tkzLabelSegment[sloped,pos=.2](C,D){%
+   $(CD)\ \tkzUseLua{tkztxt}\ (AB)$}
+\end{tikzpicture}
+\end{center}
+\end{tkzexample}
+% subsubsection method_line_is_parallel (end)
 
-\subsubsection{Method \Imeth{line}{is\_parallel}} % (fold)
-\label{ssub:method_imeth_line_is__parallel}
+\subsubsection{Method \Imeth{line}{is\_orthogonal(L)}} % (fold)
+\label{ssub:method_line_is_orthogonal}
 
-\begin{minipage}{.5\textwidth}
-\begin{Verbatim}
+\vspace{6pt}
+
+\begin{tkzexample}[latex=7cm]
 \directlua{
-z.A = point : new ( 0  , 0  )
-z.B = point : new ( 4  , 2  )
-L.AB = line : new (z.A,z.B)
-z.C = point : new ( 1  , 2  )
-z.D = point : new ( 5  , 4  )
-L.CD = line : new (z.C,z.D)
-if L.AB:is_parallel (L.CD) 
-then tex.print("parallel") 
-else tex.print("no parallel") 
+z.A = point:new(0, 0)
+z.B = point:new(0, 4)
+L.AB = line:new(z.A, z.B)
+z.C = point:new(5, 4)
+L.BC = line:new(z.B, z.C)
+if L.AB:is_orthogonal(L.BC) then
+  tkztxt = "orthogonal"
+else
+  tkztxt = "no orthogonal"
 end
 }
+\begin{center}
 \begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawLines(A,B C,D)
-\tkzDrawPoints(A,B,C,D)
-\tkzLabelPoints(A,B,C,D)
+  \tkzGetNodes
+  \tkzDrawLines(A,B B,C A,C)
+  \tkzDrawPoints(A,B,C)
+  \tkzLabelPoints(A,B,C)
+  \tkzLabelSegment[sloped,pos=.2](B,C){%
+    $(BC)\ \tkzUseLua{tkztxt}\ (AB)$}
 \end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.5\textwidth}
-  \directlua{
-  z.A = point : new ( 0  , 0  )
-  z.B = point : new ( 4  , 2  )
-  L.AB = line : new (z.A,z.B)
-  z.C = point : new ( 1  , 2  )
-  z.D = point : new ( 5  , 4  )
-  L.CD = line : new (z.C,z.D)
-  if L.AB:is_parallel (L.CD) then tex.print("parallel") else tex.print("no parallel") end
-  }
-  \begin{center}
-    \begin{tikzpicture}
-    \tkzGetNodes
-    \tkzDrawLines(A,B C,D)
-    \tkzDrawPoints(A,B,C,D)
-    \tkzLabelPoints(A,B,C,D)
-    \end{tikzpicture}
-  \end{center}
-\end{minipage}
+\end{center}
+\end{tkzexample}
+% subsubsection method_line_is_orthogonal (end)
 
-% subsubsection method_imeth_line_is__parallel (end)
+\subsubsection{Method \Imeth{line}{is\_equidistant(pt)}} % (fold)
+\label{ssub:method_line_is_equidistant}
 
-\subsubsection{Method \Imeth{line}{is\_orthogonal}} % (fold)
-\label{ssub:method_imeth_line_is__orthogonal}
+Is a point equidistant from the two points that define the line?
 
-\begin{minipage}{.5\textwidth}
-\begin{Verbatim}
+\begin{tkzexample}[latex=7cm]
   \directlua{
-  z.A  = point : new (0 , 0 )
-  z.B  = point : new (0 , 4 )
-  L.AB = line : new (z.A,z.B)
-  z.C  = point : new (3 , 4 )
-  L.BC = line : new (z.B,z.C)
-  if L.AB:is_orthogonal (L.BC)
-   then tex.print("orthogonal") 
-   else tex.print("no orthogonal")
-    end
-  }
-    \begin{tikzpicture}
-    \tkzGetNodes
-    \tkzDrawLines(A,B B,C A,C)
-    \tkzDrawPoints(A,B,C)
-    \tkzLabelPoints(A,B,C)
-    \end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.5\textwidth}
-  \directlua{
-  z.A = point : new ( 0  , 0 )
-  z.B = point : new ( 0  , 4 )
-  L.AB = line : new (z.A,z.B)
-  z.C = point : new ( 3  , 4 )
-  L.BC = line : new (z.B,z.C)
-  if L.AB:is_orthogonal (L.BC) then 
-   tex.print("orthogonal") else 
-   tex.print("no orthogonal") 
-   end
-  }
+  z.A = point:new(0, 0)
+  z.B = point:new(0, 4)
+  z.C = point:new(4, 4)
+  L.AC = line:new(z.A, z.C)
+  if L.AC:is_equidistant(z.B) then
+    tex.print("equidistant")
+  else
+    tex.print("no equidistant")
+  end
+    }
   \begin{center}
-    \begin{tikzpicture}
-    \tkzGetNodes
-    \tkzDrawLines(A,B B,C A,C)
-    \tkzDrawPoints(A,B,C)
-    \tkzLabelPoints(A,B,C)
-    \end{tikzpicture}
-  \end{center}
-\end{minipage}
-% subsubsection method_imeth_line_is__orthogonal (end)
-
-\subsubsection{Method \Imeth{line}{is\_equidistant}} % (fold)
-\label{ssub:method_imeth_line_is__equidistant}
-
-\begin{minipage}{.5\textwidth}
-\begin{Verbatim}
-\directlua{
-  z.A = point : new (0 , 0 )
-  z.B = point : new (0 , 4 )
-  z.C = point : new (4 , 4 )
-  L.AC = line : new (z.A,z.C)
-   if L.AC:is_equidistant (z.B) 
-    then tex.print("equidistant")
-    else tex.print("no equidistant")
-    end
-  }
-    \begin{tikzpicture}
-    \tkzGetNodes
-    \tkzDrawLines(A,B B,C A,C)
-    \tkzDrawPoints(A,B,C)
-    \tkzLabelPoints(A,B,C)
-    \end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.5\textwidth}
-\directlua{
-  z.A = point : new (0 , 0 )
-  z.B = point : new (0 , 4 )
-  z.C = point : new (4 , 4 )
-  L.AC = line : new (z.A,z.C)
-   if L.AC:is_equidistant (z.B) 
-    then tex.print("equidistant")
-    else tex.print("no equidistant")
-    end
-  }
-  \begin{center}
       \begin{tikzpicture}
       \tkzGetNodes
       \tkzDrawLines(A,B B,C A,C)
@@ -640,215 +512,117 @@
       \tkzLabelPoints(A,B,C)
       \end{tikzpicture}
   \end{center}
-\end{minipage}
+\end{tkzexample}
+% subsubsection method_line_is_equidistant (end)
 
-% subsubsection method_imeth_line_is__equidistant (end)
-
-\subsubsection{Method \Imeth{line}{report}} % (fold)
+\subsubsection{Method \Imeth{line}{report(r,<pt>)}} % (fold)
 \label{ssub:method_report}
 
-|report (d,pt)| If the point is absent, the transfer is made from the first point that defines the line.
+If the point is absent, the transfer is made from the first point that defines the line otherwise the new point is placed at a distance $r$ from the proposed point, parallel to the line. If $r<0$ then it will be in the opposite direction to the line (the line is considered to be oriented from \code{pa} to \code{pb}).
 
 \vspace{6pt}
-\begin{minipage}{.5\textwidth}
-  \begin{Verbatim}
-  \directlua{%
-init_elements ()
-z.A  = point : new (0,0)
-z.B  = point : new (4,3)
-L.AB = line : new ( z.A , z.B )
-z.M  = point : new (0,2)
-z.N  = L.AB :  report (2.5,z.M)
-z.O  = L.AB :  report (2.5)
+\begin{tkzexample}[latex=7cm]
+\directlua{%
+  init_elements()
+  z.A = point:new(0, 0)
+  z.B = point:new(4, 3)
+  L.AB = line:new(z.A, z.B)
+  z.M = point:new(0, 2)
+  z.N = L.AB:report(2.5, z.M)
+  z.O = L.AB:report(2.5)
+  z.P = L.AB:report(-L.AB.length/3,z.M)
 }
-\begin{tikzpicture}
-  \tkzGetNodes
-  \tkzDrawSegments(A,B M,N)
-  \tkzDrawPoints(A,B,M,N,O)
-  \tkzLabelPoints(A,B,M,N,O)
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.5\textwidth}
-  \directlua{%
-init_elements ()
-z.A  = point : new (0,0)
-z.B  = point : new (4,3)
-L.AB = line : new ( z.A , z.B )
-z.M  = point : new (0,2)
-z.N  = L.AB :  report (2.5,z.M)
-z.O  = L.AB :  report (2.5)
-}
 \begin{center}
   \begin{tikzpicture}
   \tkzGetNodes
-  \tkzDrawSegments(A,B M,N)
-  \tkzDrawPoints(A,B,M,N,O)
-  \tkzLabelPoints(A,B,M,N,O)
+  \tkzDrawSegments(A,B P,N)
+  \tkzDrawPoints(A,B,M,N,O,P)
+  \tkzLabelPoints(A,B,M,N,O,P)
   \end{tikzpicture}
 \end{center}
+\end{tkzexample}
 
-\end{minipage}
+
+
 % subsubsection method_report (end)
 
-\subsubsection{Method \Imeth{line}{two\_angles} } % (fold)
+\subsubsection{Method \Imeth{line}{two\_angles(an, an)} } % (fold)
 \label{ssub:triangle_with_two__angles}
 
 The angles are on either side of the given segment
 
-\begin{minipage}{.4\textwidth}
-\begin{Verbatim}
-\directlua{%
-init_elements ()
-   z.A   = point : new ( 0 , 0 )
-   z.B   = point : new ( 4 , 0 )
-   L.AB  = line : new ( z.A , z.B )
-   T.ABC = L.AB : two_angles (math.pi/6,math.pi/2)
-   z.C   = T.ABC.pc
-}
-\begin{tikzpicture}
-   \tkzGetNodes
-   \tkzDrawPolygons(A,B,C)
-   \tkzDrawPoints(A,B,C)
-   \tkzLabelPoints(A,B)
-   \tkzLabelPoints[above](C)
-   \tkzMarkAngle[red](C,B,A)
-   \tkzMarkAngle[red](B,A,C)
-   \tkzLabelAngle[red,pos=1.3](C,B,A){$\pi/2$}
-   \tkzLabelAngle[red,pos=1.3](B,A,C){$\pi/6$}
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.6\textwidth}
-   \directlua{%
-init_elements ()
-      z.A = point : new ( 0 , 0 )
-      z.B = point : new ( 4 , 0 )
-      L.AB = line : new ( z.A , z.B )
-      T.ABC= L.AB : two_angles (math.pi/6,math.pi/2)
-      z.C = T.ABC.pc
-   }
+\begin{tkzexample}[latex=7cm]
+  \directlua{%
+  init_elements()
+  z.A = point:new(0, 0)
+  z.B = point:new(4, 0)
+  L.AB = line:new(z.A, z.B)
+  T.ABC = L.AB:two_angles(math.pi / 6, math.pi / 2)
+  z.C = T.ABC.pc
+  }
 
-   \begin{center}
-     \begin{tikzpicture}
-        \tkzGetNodes
-        \tkzDrawPolygons(A,B,C)
-        \tkzDrawPoints(A,B,C)
-        \tkzLabelPoints(A,B)
-        \tkzLabelPoints[above](C)
-        \tkzMarkAngle[red](C,B,A)
-        \tkzMarkAngle[red](B,A,C)
-        \tkzLabelAngle[red,pos=1.3](C,B,A){$\pi/2$}
-        \tkzLabelAngle[red,pos=1.3](B,A,C){$\pi/6$}
-     \end{tikzpicture}
-   \end{center}
-
-\end{minipage}
+  \begin{center}
+    \begin{tikzpicture}
+       \tkzGetNodes
+       \tkzDrawPolygons(A,B,C)
+       \tkzDrawPoints(A,B,C)
+       \tkzLabelPoints(A,B)
+       \tkzLabelPoints[above](C)
+       \tkzMarkAngle[red](C,B,A)
+       \tkzMarkAngle[red](B,A,C)
+       \tkzLabelAngle[red,pos=1.3](C,B,A){$\pi/2$}
+       \tkzLabelAngle[red,pos=1.3](B,A,C){$\pi/6$}
+    \end{tikzpicture}
+  \end{center}
+\end{tkzexample}
 % subsubsection triangle_with_two__angles (end)
 
-\subsubsection{Method \Imeth{line}{isosceles}} % (fold)
+\subsubsection{Method \Imeth{line}{isosceles(an,<indirect>)}} % (fold)
 \label{ssub:method_imeth_line_isosceles}
-\begin{minipage}{.5\textwidth}
-  \begin{Verbatim}
-\directlua{%
-init_elements ()
-   z.a    = point :   new (1,2)
-   z.b    = point :   new (5,1)
-   L.ab   = line :    new (z.a,z.b)
-   T.abc  = L.ab :    isosceles (math.pi/6,indirect)
-   z.c    = T.abc.pc
-   z.L    = T.abc : lemoine_point ()
-   T.SY   = T.abc : symmedian ()
-   z.Ka,
-   z.Kb,
-   z.Kc   = get_points (T.SY)
-   L.Kb   = T.abc : symmedian_line (1)
-  _,z.Kb  = get_points(L.Kb)
-}
-\begin{tikzpicture}[scale= 2]
-\tkzGetNodes
-\tkzDrawPolygons(a,b,c Ka,Kb,Kc)
-\tkzDrawPoints(a,b,c,L,Ka,Kb,Kc)
-\tkzLabelPoints(c,L,Ka,Kb)
-\tkzLabelPoints[above](a,b,Kc)
-\tkzDrawSegments[cyan](a,Ka b,Kb c,Kc)
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.5\textwidth}
-\directlua{%
-init_elements ()
- z.a   = point: new (1,2)
- z.b   = point: new (5,1)
- L.ab  = line:  new (z.a,z.b)
- T.abc = L.ab:isosceles(math.pi/6,indirect)
- z.c   = T.abc.pc
- z.L   = T.abc: lemoine_point ()
- T.SY  = T.abc: symmedian ()
- z.Ka,
- z.Kb,
- z.Kc  = get_points (T.SY)
- L.Kb  = T.abc : symmedian_line (1)
-  _,z.Kb = get_points(L.Kb)
-}
-\begin{center}
-  \begin{tikzpicture}[scale= 1.5]
-  \tkzGetNodes
-  \tkzDrawPolygons(a,b,c Ka,Kb,Kc)
-  \tkzDrawPoints(a,b,c,L,Ka,Kb,Kc)
-  \tkzLabelPoints(c,L,Ka,Kb)
-  \tkzLabelPoints[above](a,b,Kc)
-  \tkzDrawSegments[cyan](a,Ka b,Kb c,Kc)
-  \end{tikzpicture}
-\end{center}
 
-\end{minipage}
-
+\begin{tkzexample}[latex=7cm]
+  \directlua{%
+  init_elements()
+  z.a = point:new(1, 2)
+  z.b = point:new(5, 1)
+  L.ab = line:new(z.a, z.b)
+  T.abc = L.ab:isosceles(math.pi / 6, indirect)
+  z.c = T.abc.pc
+  z.L = T.abc:lemoine_point()
+  T.SY = T.abc:symmedian()
+  z.Ka, z.Kb, z.Kc = get_points(T.SY)
+  L.Kb = T.abc:symmedian_line(1)
+  _, z.Kb = get_points(L.Kb)
+  }
+  \begin{center}
+    \begin{tikzpicture}[scale= 1.5]
+    \tkzGetNodes
+    \tkzDrawPolygons(a,b,c Ka,Kb,Kc)
+    \tkzDrawPoints(a,b,c,L,Ka,Kb,Kc)
+    \tkzLabelPoints(c,L,Ka,Kb)
+    \tkzLabelPoints[above](a,b,Kc)
+    \tkzDrawSegments[cyan](a,Ka b,Kb c,Kc)
+    \end{tikzpicture}
+  \end{center}
+\end{tkzexample}
 % subsubsection method_imeth_line_isosceles (end)
 
-\subsubsection{Methods \Imeth{line}{sss}, \Imeth{line}{sas}, \Imeth{line}{ssa}} % (fold)
+\subsubsection{Methods \Imeth{line}{sss(d,d)}, \Imeth{line}{sas(d,an)}, \Imeth{line}{ssa(d,an)}} % (fold)
 \label{ssub:triangle_with_three_given_sides}
 
-In the following example, a small difficulty arises. The given lengths are not affected by scaling, so it's necessary to use the \Igfct{math}{value (r) } function, which will modify the lengths according to the scale.
 
-\vspace{6pt}
-\begin{minipage}{.4\textwidth}
-\begin{Verbatim}
 \directlua{%
-init_elements ()
-  z.A = point : new ( 0 , 0 )
-  z.B = point : new ( 5 , 0 )
-  L.AB = line : new ( z.A , z.B )
-  T.ABC =  L.AB : sss (value(3),value(4))
-  T.ABD =  L.AB : sas (value(3),math.pi/2)
-  T.ABE =  L.AB : ssa (value(7),math.pi/2)
-  z.C = T.ABC.pc
-  z.D = T.ABD.pc
-  z.E = T.ABE.pc
+init_elements()
+z.A = point:new(0, 0)
+z.B = point:new(5, 0)
+L.AB = line:new(z.A, z.B)
+T.ABC = L.AB:sss(3, 4)
+T.ABD = L.AB:sas(3, math.pi / 2)
+T.ABE = L.AB:ssa(7, math.pi / 2)
+z.C = T.ABC.pc
+z.D = T.ABD.pc
+z.E = T.ABE.pc
 }
-\begin{tikzpicture}[gridded]
-  \tkzGetNodes
-  \tkzDrawPolygons(A,B,C A,B,D A,B,E)
-  \tkzDrawPoints(A,B,C,D,E)
-  \tkzLabelPoints(A,B)
-  \tkzLabelPoints[above](C,D,E)
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.6\textwidth}
-\directlua{%
-init_elements ()
-  z.A = point : new ( 0 , 0 )
-  z.B = point : new ( 5 , 0 )
-  L.AB = line : new ( z.A , z.B )
-  T.ABC =  L.AB : sss (value(3),value(4))
-  T.ABD =  L.AB : sas (value(3),math.pi/2)
-  T.ABE =  L.AB : ssa (value(7),math.pi/2)
-  z.C = T.ABC.pc
-  z.D = T.ABD.pc
-  z.E = T.ABE.pc
-}
-
 \begin{center}
   \begin{tikzpicture}[gridded]
     \tkzGetNodes
@@ -859,63 +633,61 @@
   \end{tikzpicture}
 \end{center}
 
-\end{minipage}
 % subsubsection triangle_with_three_given_sides (end)
 
 \subsubsection{Triangle with side between side and angle} % (fold)
 \label{ssub:triangle_with_side_between_side_and_angle}
 
-
-\begin{minipage}{.4\textwidth}
-\begin{Verbatim}
-\directlua{%
-init_elements ()
- z.A  = point: new ( 0 , 0 )
- z.B  = point: new ( 5 , 0 )
- L.AB = line: new ( z.A , z.B )
- T.ABC= L.AB: ssa(value(3),math.pi/6)
- T.ABD= L.AB: ssa(value(3),math.pi/6,swap)
- z.C  = T.ABC.pc
- z.D  = T.ABD.pc
-}
-\begin{tikzpicture}[gridded]
-  \tkzGetNodes
-  \tkzDrawPolygons(A,B,C A,B,D)
-  \tkzDrawPoints(A,B,C,D)
-  \tkzLabelPoints(A,B)
-  \tkzLabelPoints[above](C,D)
-  \tkzLabelAngle[teal](C,B,A){$\pi/6$}
-  \tkzLabelSegment[below left](A,C){$7$}
-  \tkzLabelSegment[below left](A,D){$7$}
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.6\textwidth}
-   \directlua{%
-init_elements ()
- z.A   = point : new ( 0 , 0 )
- z.B   = point : new ( 5 , 0 )
- L.AB  = line : new ( z.A , z.B )
- T.ABC = L.AB : ssa (value(3),math.pi/6)
- T.ABD = L.AB : ssa (value(3),math.pi/6,swap)
- z.C   = T.ABC.pc
- z.D   = T.ABD.pc
-}  
-
-\begin{center}
+\begin{minipage}{.5\textwidth}
+\begin{tkzexample}[code only]
+  \directlua{%
+  init_elements()
+  z.A = point:new(0, 0)
+  z.B = point:new(5, 0)
+  L.AB = line:new(z.A, z.B)
+  T.ABC = L.AB:ssa(3, math.pi / 6)
+  T.ABD = L.AB:ssa(3, math.pi / 6, swap)
+  z.C = T.ABC.pc
+  z.D = T.ABD.pc
+  }  
+  \begin{center}
   \begin{tikzpicture}[gridded]
-        \tkzGetNodes
-        \tkzDrawPolygons(A,B,C A,B,D)
-        \tkzDrawPoints(A,B,C,D)
-        \tkzLabelPoints(A,B)
-        \tkzLabelPoints[above](C,D)
-        \tkzLabelAngle[teal](C,B,A){$\pi/6$}
-        \tkzLabelSegment[below left](A,C){$7$}
-        \tkzLabelSegment[below left](A,D){$7$}
-     \end{tikzpicture}
-\end{center}
-
+   \tkzGetNodes
+   \tkzDrawPolygons(A,B,C A,B,D)
+   \tkzDrawPoints(A,B,C,D)
+   \tkzLabelPoints(A,B)
+   \tkzLabelPoints[above](C,D)
+   \tkzLabelAngle[teal](C,B,A){$\pi/6$}
+   \tkzLabelSegment[below left](A,C){$7$}
+   \tkzLabelSegment[below left](A,D){$7$}
+  \end{tikzpicture}
+  \end{center}
+\end{tkzexample}
 \end{minipage}
+\begin{minipage}{.5\textwidth}
+    \directlua{%
+    init_elements()
+    z.A = point:new(0, 0)
+    z.B = point:new(5, 0)
+    L.AB = line:new(z.A, z.B)
+    T.ABC = L.AB:ssa(3, math.pi / 6)
+    T.ABD = L.AB:ssa(3, math.pi / 6, swap)
+    z.C = T.ABC.pc
+    z.D = T.ABD.pc
+    }  
+    \begin{center}
+    \begin{tikzpicture}[gridded]
+     \tkzGetNodes
+     \tkzDrawPolygons(A,B,C A,B,D)
+     \tkzDrawPoints(A,B,C,D)
+     \tkzLabelPoints(A,B)
+     \tkzLabelPoints[above](C,D)
+     \tkzLabelAngle[teal](C,B,A){$\pi/6$}
+     \tkzLabelSegment[below left](A,C){$7$}
+     \tkzLabelSegment[below left](A,D){$7$}
+    \end{tikzpicture}
+    \end{center}
+  \end{minipage}
 
 % subsubsection triangle_with_side_between_side_and_angle (end)
 
@@ -928,34 +700,34 @@
 \toprule
 \textbf{Name} & \textbf{definition}  \\
 \midrule
-\Imeth{line}{gold (<swap>)}     & Right triangle with $a=\varphi$, $b=1$ and $c=\sqrt{\varphi}$\\
-\Imeth{line}{golden (<swap>)}   & Right triangle $b=\varphi$, $c=1$ ; half of gold rectangle   \\
-\Imeth{line}{divine ()}  & Isosceles $a=\varphi$, $b=c=1$ and $\beta = \gamma=\pi/5$ \\
-\Imeth{line}{pythagoras ()}  & $a=5$, $b=4$, $c=3$ and other names: isis or egyptian\\
-\Imeth{line}{sublime ()}  & Isosceles $a=1$, $b=c=\varphi$  and $\beta =\gamma=2\pi/5$ ; other name: euclid\\
-\Imeth{line}{cheops ()}  &  Isosceles $a=2$, $b=c=\varphi$  and height = $\sqrt{\varphi}$ \\
+\Imeth{line}{gold(<swap>)}     & Right triangle with $a=\varphi$, $b=1$ and $c=\sqrt{\varphi}$\\
+\Imeth{line}{golden(<swap>)}   & Right triangle $b=\varphi$, $c=1$ ; half of gold rectangle   \\
+\Imeth{line}{divine()}    & Isosceles $a=\varphi$, $b=c=1$ and $\beta = \gamma=\pi/5$ \\
+\Imeth{line}{pythagoras()}  & $a=5$, $b=4$, $c=3$ and other names: isis or egyptian\\
+\Imeth{line}{sublime()}  & Isosceles $a=1$, $b=c=\varphi$  and $\beta =\gamma=2\pi/5$ ; other name: euclid\\
+\Imeth{line}{cheops()}  &  Isosceles $a=2$, $b=c=\varphi$  and height = $\sqrt{\varphi}$ \\
 \bottomrule
 \end{tabular}
 
 \begin{minipage}{.4\textwidth}
-\begin{Verbatim}
+\begin{SVerbatim}
 \directlua{%
-init_elements ()
-   z.A = point : new ( 0 , 0 )
-   z.B = point : new ( 4 , 0 )
-   L.AB = line : new ( z.A , z.B )
-   T.ABC = L.AB : cheops ()
-   z.C = T.ABC.pc
-   T.ABD = L.AB : gold ()
-   z.D = T.ABD.pc
-   T.ABE = L.AB : euclide ()
-   z.E = T.ABE.pc
-   T.ABF = L.AB : golden ()
-   z.F = T.ABF.pc
-   T.ABG = L.AB : divine ()
-   z.G = T.ABG.pc
-   T.ABH = L.AB : pythagoras ()
-   z.H = T.ABH.pc
+init_elements()
+z.A = point:new(0, 0)
+z.B = point:new(4, 0)
+L.AB = line:new(z.A, z.B)
+T.ABC = L.AB:cheops()
+z.C = T.ABC.pc
+T.ABD = L.AB:gold()
+z.D = T.ABD.pc
+T.ABE = L.AB:euclide()
+z.E = T.ABE.pc
+T.ABF = L.AB:golden()
+z.F = T.ABF.pc
+T.ABG = L.AB:divine()
+z.G = T.ABG.pc
+T.ABH = L.AB:pythagoras()
+z.H = T.ABH.pc
 }
 \begin{tikzpicture}
    \tkzGetNodes
@@ -963,26 +735,26 @@
    \tkzDrawPoints(A,...,H)
    \tkzLabelPoints(A,...,H)
 \end{tikzpicture}
-\end{Verbatim}
+\end{SVerbatim}
 \end{minipage}
 \begin{minipage}{.6\textwidth}
 \directlua{%
-init_elements ()
-   z.A = point : new ( 0 , 0 )
-   z.B = point : new ( 4 , 0 )
-   L.AB = line : new ( z.A , z.B )
-   T.ABC = L.AB : cheops ()
-   z.C = T.ABC.pc
-   T.ABD = L.AB : gold ()
-   z.D = T.ABD.pc
-   T.ABE = L.AB : euclide ()
-   z.E = T.ABE.pc
-   T.ABF = L.AB : golden ()
-   z.F = T.ABF.pc
-   T.ABG = L.AB : divine ()
-   z.G = T.ABG.pc
-   T.ABH = L.AB : pythagoras ()
-   z.H = T.ABH.pc
+init_elements()
+z.A = point:new(0, 0)
+z.B = point:new(4, 0)
+L.AB = line:new(z.A, z.B)
+T.ABC = L.AB:cheops()
+z.C = T.ABC.pc
+T.ABD = L.AB:gold()
+z.D = T.ABD.pc
+T.ABE = L.AB:euclide()
+z.E = T.ABE.pc
+T.ABF = L.AB:golden()
+z.F = T.ABF.pc
+T.ABG = L.AB:divine()
+z.G = T.ABG.pc
+T.ABH = L.AB:pythagoras()
+z.H = T.ABH.pc
 }
 \begin{center}
   \begin{tikzpicture}
@@ -996,7 +768,7 @@
 \end{minipage}
 % subsubsection about_triangles (end)
 
-\subsubsection{Method \Imeth{line}{point} }% (fold)
+\subsubsection{Method \Imeth{line}{point(r)} }% (fold)
 \label{ssub:method_point}
 This method is very useful. It allows you to place a point on the line under consideration.
 If |r = 0|  then the point is |pa|, if |r = 1| it's |pb|.
@@ -1005,219 +777,122 @@
 
 This method exists for all objects except quadrilaterals.
 
-
-\begin{minipage}{.4\textwidth}
-\begin{Verbatim}
-\directlua{%
-init_elements ()
-   z.A  = point : new (-1,-1)
-   z.B  = point : new (1,1)
-   L.AB = line : new (z.A,z.B)
-   z.I  = L.AB : point (0.5)
-   z.J  = L.AB : point (-0.5)
-   z.K  = L.AB : point (2)
-}
-\begin{tikzpicture}[gridded]
-\tkzGetNodes
-   \tkzDrawLine(J,K)
-   \tkzDrawPoints(A,B,I,J,K)
-   \tkzLabelPoints(A,B,I,J,K)
- \end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.6\textwidth}
-   \directlua{%
-init_elements ()
-   z.A = point : new (-1,-1)
-   z.B = point : new (1,1)
-   L.AB = line : new (z.A,z.B)
-   z.I = L.AB : point (0.5)
-   z.J = L.AB : point (-0.5)
-   z.K = L.AB : point (2)
-}
-\begin{center}
-  \begin{tikzpicture}[gridded]
-  \tkzGetNodes
-     \tkzDrawLine(J,K)
-     \tkzDrawPoints(A,B,I,J,K)
-     \tkzLabelPoints(A,B,I,J,K)
-   \end{tikzpicture}
-\end{center}
-
- \end{minipage}
+\begin{tkzexample}[latex=8cm]
+  \directlua{%
+  init_elements()
+  z.A = point:new(-1,-1)
+  z.B = point:new(1,1)
+  L.AB = line:new(z.A, z.B)
+  z.I = L.AB: point (0.5)
+  z.J = L.AB: point (-0.5)
+  z.K = L.AB: point (2)
+  }
+  \begin{center}
+    \begin{tikzpicture}[gridded]
+    \tkzGetNodes
+       \tkzDrawLine(J,K)
+       \tkzDrawPoints(A,B,I,J,K)
+       \tkzLabelPoints(A,B,I,J,K)
+     \end{tikzpicture}
+  \end{center}
+\end{tkzexample}
 % subsubsection method_point (end)
 
-\subsubsection{Method \Imeth{line}{colinear\_at}} % (fold)
+\subsubsection{Method \Imeth{line}{colinear\_at(pt,<r>)}} % (fold)
 \label{ssub:method_imeth_line_colinear__at}
 If the coefficient is missing then it defaults to $1$ and in the following example we obtain: $CE=AB$ and $(AB)\parallel (CE)$. For point $D$: $CD = .5AB$ and $(AB)\parallel (CD)$.
 
-\begin{minipage}{.5\textwidth}
-\begin{Verbatim}
-\directlua{%
-init_elements ()
-  z.A      = point: new (0 , 0)
-  z.B      = point: new (4 , 0)
-  z.C      = point: new (1 , 3)
-  L.AB     = line : new (z.A,z.B)
-  z.D      = L.AB : colinear_at (z.C,.5)
-  z.E      = L.AB : colinear_at (z.C)
-}
-\begin{tikzpicture}
-  \tkzGetNodes
-  \tkzDrawSegments(A,B C,E)
-  \tkzDrawPoints(A,B,C,D,E)
-  \tkzLabelPoints(A,B,C,D,E)
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.5\textwidth}
-\directlua{%
-init_elements ()
-  z.A      = point: new (0 , 0)
-  z.B      = point: new (4 , 0)
-  z.C      = point: new (1 , 3)
-  L.AB     = line : new (z.A,z.B)
-  z.D      = L.AB : colinear_at (z.C,.5)
-  z.E      = L.AB : colinear_at (z.C)
-}
-\begin{center}
-  \begin{tikzpicture}
-    \tkzGetNodes
-    \tkzDrawSegments(A,B C,E)
-    \tkzDrawPoints(A,B,C,D,E)
-    \tkzLabelPoints(A,B,C,D,E)
-  \end{tikzpicture}
-\end{center}
-
-\end{minipage}
-
+\vspace{6pt}
+\begin{tkzexample}[latex=7cm]
+  \directlua{%
+  init_elements()
+    z.A = point:new(0, 0)
+    z.B = point:new(4, 0)
+    z.C = point:new(1, 3)
+    L.AB = line:new(z.A, z.B)
+    z.D = L.AB:colinear_at(z.C, .5)
+    z.E = L.AB:colinear_at(z.C)
+  }
+  \begin{center}
+    \begin{tikzpicture}
+      \tkzGetNodes
+      \tkzDrawSegments(A,B C,E)
+      \tkzDrawPoints(A,B,C,D,E)
+      \tkzLabelPoints(A,B,C,D,E)
+    \end{tikzpicture}
+  \end{center}
+\end{tkzexample}
 % subsubsection method_imeth_line_colinear__at (end)
 
 
-\subsubsection{Method \Imeth{line}{normalize}} % (fold)
+\subsubsection{Method \Imeth{line}{normalize()}} % (fold)
 \label{ssub:normalize}
 
-\begin{minipage}{.4\textwidth}
-\begin{Verbatim}
-\directlua{%
-init_elements ()
-   z.a  = point: new (1, 1)
-   z.b  = point: new (5, 4)
-   L.ab = line : new (z.a,z.b)
-   z.c  = L.ab : normalize ()
-}
+$ac = 1$ and $c\in [ab]$
 
-\begin{tikzpicture}[gridded]
-\tkzGetNodes
-\tkzDrawSegments(a,b)
-\tkzDrawCircle(a,c)
-\tkzDrawPoints(a,b,c)
-\tkzLabelPoints(a,b,c)
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.6\textwidth}
-\directlua{%
-init_elements ()
-   z.a = point: new (1, 1)
-   z.b = point: new (5, 4)
-   L.ab = line : new (z.a,z.b)
-   z.c   = L.ab : normalize ()
-}
+\vspace{6pt}
 
-\begin{center}
-  \begin{tikzpicture}[gridded]
-  \tkzGetNodes
-  \tkzDrawSegments(a,b)
-  \tkzDrawCircle(a,c)
-  \tkzDrawPoints(a,b,c)
-  \tkzLabelPoints(a,b,c)
-  \end{tikzpicture}
-\end{center}
-
-\end{minipage}
+\begin{tkzexample}[latex=7cm]
+  \directlua{%
+  init_elements()
+  z.a = point:new(1, 1)
+  z.b = point:new(5, 4)
+  L.ab = line:new(z.a, z.b)
+  z.c = L.ab: normalize ()
+  }
+  \begin{center}
+    \begin{tikzpicture}[gridded]
+    \tkzGetNodes
+    \tkzDrawSegments(a,b)
+    \tkzDrawCircle(a,c)
+    \tkzDrawPoints(a,b,c)
+    \tkzLabelPoints(a,b,c)
+    \end{tikzpicture}
+  \end{center}
+\end{tkzexample}
 % subsubsection normalize (end)
 
 
-\subsubsection{Method \Imeth{line}{barycenter}} % (fold)
+\subsubsection{Method \Imeth{line}{barycenter(r,r)}} % (fold)
 \label{ssub:barycenter_with_a_line}
 
-\begin{minipage}{.4\textwidth}
-\begin{Verbatim}
-\directlua{%
-init_elements ()
-   z.A  = point : new ( 0 , -1 )
-   z.B  = point : new ( 4 , 2 )
-   L.AB = line : new ( z.A , z.B )
-   z.G  = L.AB : barycenter (1,2)
-}
-\begin{tikzpicture}
-   \tkzGetNodes
-   \tkzDrawLine(A,B)
-   \tkzDrawPoints(A,B,G)
-   \tkzLabelPoints(A,B,G)
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.6\textwidth}
-\directlua{%
-init_elements ()
-   z.A = point : new ( 0 , -1 )
-   z.B = point : new ( 4 , 2 )
-   L.AB = line : new ( z.A , z.B )
-   z.G = L.AB : barycenter (1,2)
-}
-\begin{center}
-  \begin{tikzpicture}
-     \tkzGetNodes
-     \tkzDrawLine(A,B)
-     \tkzDrawPoints(A,B,G)
-     \tkzLabelPoints(A,B,G)
-  \end{tikzpicture}
-\end{center}
+Barycenter of the points that define the line affected by the coefficients passed as arguments.
 
-\end{minipage}
+\begin{tkzexample}[latex=7cm]
+  \directlua{%
+  init_elements()
+     z.A = point:new(0, -1)
+     z.B = point:new(4, 2)
+     L.AB = line:new(z.A, z.B)
+     z.G = L.AB: barycenter (1,2)
+  }
+  \begin{center}
+    \begin{tikzpicture}
+       \tkzGetNodes
+       \tkzDrawLine(A,B)
+       \tkzDrawPoints(A,B,G)
+       \tkzLabelPoints(A,B,G)
+    \end{tikzpicture}
+  \end{center}
+\end{tkzexample}
 % subsubsection barycenter_with_a_line (end)
 
-\subsubsection{Method \Imeth{line}{ll\_from}} % (fold)
+\subsubsection{Method \Imeth{line}{ll\_from(pt)}} % (fold)
 \label{ssub:new_line_from_a_defined_line}
-\begin{minipage}{0.5\textwidth}
-\begin{Verbatim}
+
+
 \directlua{%
-init_elements ()
-z.A   = point : new (1,1)
-z.B   = point : new (3,2)
-L.AB  = line : new (z.A,z.B)
-z.C   = L.AB.north_pa
-z.D   = L.AB.south_pa
-L.CD  = line : new (z.C,z.D)
-_,z.E = get_points ( L.CD: ll_from (z.B))
-% z.E = L2.pb
+init_elements()
+z.A = point:new(1, 1)
+z.B = point:new(3, 2)
+L.AB = line:new(z.A, z.B)
+z.C = L.AB.north_pa
+z.D = L.AB.south_pa
+L.CD = line:new(z.C, z.D)
+_, z.E = get_points(L.CD:ll_from(z.B))
+% or  z.E= L2.pb with |L2 = L.CD: ll_from (z.B)|
 }
-\begin{tikzpicture}[scale = 1.25]
-   \tkzGetNodes
-   \tkzDrawLines(A,B C,D B,E)
-   \tkzDrawPoints(A,...,E)
-   \tkzLabelPoints(A,...,E)
-   \tkzMarkRightAngle(B,A,C)
-   \tkzMarkSegments(A,C A,B A,D)
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{0.5\textwidth}
-\directlua{%
-init_elements ()
 
-z.A   = point : new (1,1)
-z.B   = point : new (3,2)
-L.AB  = line : new (z.A,z.B)
-z.C   = L.AB.north_pa
-z.D   = L.AB.south_pa
-L.CD  = line : new (z.C,z.D)
-_,z.E   = get_points ( L.CD: ll_from (z.B))
-% or  z.E   = L2.pb with |L2 = L.CD: ll_from (z.B)|
-}
-
 \begin{center}
   \begin{tikzpicture}[scale = 1.25]
   \tkzGetNodes
@@ -1229,94 +904,50 @@
   \end{tikzpicture}
 \end{center}
 
-
-\end{minipage}
  %  \caption{New line from defined line}
 % subsubsection new_line_from_a_defined_line (end)
 
-\subsubsection{Method \Imeth{line}{ortho\_from}} % (fold)
+\subsubsection{Method \Imeth{line}{ortho\_from(pt)}} % (fold)
 \label{ssub:newline_ortho_from}
-\begin{minipage}{0.5\textwidth}
-\begin{Verbatim}
-\directlua{%
-init_elements ()
-   z.A   = point : new (1,1)
-   z.B   = point : new (3,2)
-   L.AB  = line :  new (z.A,z.B)
-   z.C   = point : new (1,3)
-   L.CD  = L.AB :  ortho_from(z.C)
-   z.D   = L.CD.pb
-}
-\begin{tikzpicture}
-   \tkzGetNodes
-   \tkzDrawLines(A,B C,D)
-   \tkzDrawPoints(A,...,D)
-   \tkzLabelPoints(A,...,D)
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{0.5\textwidth}
-\directlua{%
-init_elements ()
-   z.A   = point : new (1,1)
-   z.B   = point : new (3,2)
-   L.AB  = line :  new (z.A,z.B)
-  z.C   = point : new (1,3)
-   L.CD  = L.AB :  ortho_from(z.C)
-   z.D   = L.CD.pb
-}
 
-\begin{center}
-\begin{tikzpicture}
-   \tkzGetNodes
-   \tkzDrawLines(A,B C,D)
-   \tkzDrawPoints(A,...,D)
-   \tkzLabelPoints(A,...,D)
-\end{tikzpicture}
-\end{center}
-
-
-\end{minipage}
-
+\begin{tkzexample}[latex=7cm]
+  \directlua{%
+  init_elements()
+  z.A = point:new(1, 1)
+  z.B = point:new(3, 2)
+  L.AB = line:new(z.A, z.B)
+  z.C = point:new(1, 3)
+  L.CD = L.AB:ortho_from(z.C)
+  z.D = L.CD.pb
+  }
+  \begin{center}
+  \begin{tikzpicture}
+     \tkzGetNodes
+     \tkzDrawLines(A,B C,D)
+     \tkzDrawPoints(A,...,D)
+     \tkzLabelPoints(A,...,D)
+  \end{tikzpicture}
+  \end{center}
+\end{tkzexample}
 % subsubsection new_line_from_a_defined_line (end)
 
-\subsubsection{Method \Imeth{line}{mediator}} % (fold)
+\subsubsection{Method \Imeth{line}{mediator()}} % (fold)
 \label{ssub:method_imeth_line_mediator}
 
 In Mathworld, the mediator is the plane through the midpoint of a line segment and perpendicular to that segment, also called a mediating plane. The term "mediator" was introduced by J. Neuberg (Altshiller-Court 1979, p. 298). Here, I have adopted the French term and the mediator or
 the perpendicular bisector  of a line segment, is a line segment perpendicular to the segment and passing through the midpoint of this segment.
-\begin{minipage}{.5\textwidth}
-\begin{Verbatim}
+
+
+\begin{tkzexample}[latex=7cm]
 \directlua{%
-init_elements ()
-  z.A    = point: new(0,0)
-  z.B    = point: new(5,0)
-  L.AB   = line: new (z.A,z.B)
-  L.med  = L.AB : mediator ()
-  z.M    = L.AB.mid
-  z.x,z.y= get_points(L.med)
+  init_elements()
+  z.A = point:new(0,0)
+  z.B = point:new(5,0)
+  L.AB = line:new(z.A, z.B)
+  L.med = L.AB:mediator()
+  z.M = L.AB.mid
+  z.x, z.y = get_points(L.med)
 }
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawLine(A,B)
-\tkzDrawSegments(x,y)
-\tkzDrawPoints(A,B,M)
-\tkzLabelPoints(A,B)
-\tkzLabelPoints[below left](x,y,M)
-\tkzMarkSegments(A,M M,B)
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.5\textwidth}
-\directlua{%
-init_elements ()
-  z.A    = point: new(0,0)
-  z.B    = point: new(5,0)
-  L.AB   = line: new (z.A,z.B)
-  L.med  = L.AB : mediator ()
-  z.M    = L.AB.mid
-  z.x,z.y= get_points(L.med)
-}
 \begin{center}
 \begin{tikzpicture}
 \tkzGetNodes
@@ -1328,8 +959,7 @@
 \tkzMarkSegments(A,M M,B)
 \end{tikzpicture}
 \end{center}
-\end{minipage}
-
+\end{tkzexample}
 % subsubsection method_imeth_line_mediator (end)
 
 \subsubsection{Method \Imeth{line}{swap\_line}} % (fold)
@@ -1338,30 +968,32 @@
 Sometimes it's useful to swap the two points that define a straight line. This allows you to change the orientation. A more important example is shown here [\ref{ssub:intersection_line_parabola_explained}].
 
 \begin{minipage}{.5\textwidth}
-  \begin{Verbatim}
-    \directlua{
-    init_elements ()
-    z.A = point : new ( 0 , 0 )
-    z.B = point : new ( 2 , -1 )
-    L.dir = line : new (z.A,z.B)
-    L.dir = L.dir: swap_line()
-    z.a = L.dir.pa
-    z.b = L.dir.pb
-    }
+  \begin{tkzexample}[code only]
+  \directlua{
+  init_elements()
+  z.A = point:new(0, 0)
+  z.B = point:new(2, -1)
+  L.dir = line:new(z.A, z.B)
+  L.dir = L.dir:swap_line()
+  z.a = L.dir.pa
+  z.b = L.dir.pb
+  }
+  \begin{center}
     \begin{tikzpicture}
     \tkzGetNodes
     \tkzDrawSegments[cyan,thick,->](a,b)
     \tkzLabelPoints(A,B)
     \end{tikzpicture}
-  \end{Verbatim}
+  \end{center}
+  \end{tkzexample}
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{
-init_elements ()
-z.A = point : new ( 0 , 0 )
-z.B = point : new ( 2 , -1 )
-L.dir = line : new (z.A,z.B)
-L.dir = L.dir: swap_line()
+init_elements()
+z.A = point:new(0, 0)
+z.B = point:new(2, -1)
+L.dir = line:new(z.A, z.B)
+L.dir = L.dir:swap_line()
 z.a = L.dir.pa
 z.b = L.dir.pb
 }
@@ -1372,69 +1004,49 @@
   \tkzLabelPoints(A,B)
   \end{tikzpicture}
 \end{center}
+\end{minipage}
 
-\end{minipage}
 % subsubsection method_imeth_line_swap__line (end)
 
-\subsubsection{Method \Imeth{line}{equilateral}} % (fold)
+\subsubsection{Method \Imeth{line}{equilateral()}} % (fold)
 \label{ssub:method_imeth_line_equilateral}
 
-\begin{minipage}{.5\textwidth}
-\begin{Verbatim}
-\directlua{%
-init_elements ()
-  z.A    = point: new(0,0)
-  z.B    = point: new(5,0)
-  L.AB   = line: new (z.A,z.B)
-  T.ABC  = L.AB : equilateral ()
-  z.C    = T.ABC.pc
-}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawLine(A,B)
-\tkzDrawPolygon(A,B,C)
-\tkzMarkSegments(A,B B,C C,A)
-\tkzDrawPoints(A,B,C)
-\tkzMarkAngles(B,A,C C,B,A A,C,B)
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.5\textwidth}
-\directlua{%
-init_elements ()
-  z.A    = point: new(0,0)
-  z.B    = point: new(5,0)
-  L.AB   = line: new (z.A,z.B)
-  T.ABC  = L.AB : equilateral ()
-  z.C    = T.ABC.pc
-}
-\begin{center}
-  \begin{tikzpicture}
-  \tkzGetNodes
-  \tkzDrawLine(A,B)
-  \tkzDrawPolygon(A,B,C)
-  \tkzMarkSegments(A,B B,C C,A)
-  \tkzDrawPoints(A,B,C)
-  \tkzMarkAngles(B,A,C C,B,A A,C,B)
-  \end{tikzpicture}
-\end{center}
 
-\end{minipage}
+\begin{tkzexample}[latex=7cm]
+  \directlua{%
+   init_elements()
+   z.A = point:new(0,0)
+   z.B = point:new(5,0)
+   L.AB = line:new(z.A, z.B)
+   T.ABC = L.AB:equilateral ()
+   z.C = T.ABC.pc
+  }
+  \begin{center}
+    \begin{tikzpicture}
+    \tkzGetNodes
+    \tkzDrawLine(A,B)
+    \tkzDrawPolygon(A,B,C)
+    \tkzMarkSegments(A,B B,C C,A)
+    \tkzDrawPoints(A,B,C)
+    \tkzMarkAngles(B,A,C C,B,A A,C,B)
+    \end{tikzpicture}
+  \end{center}
+\end{tkzexample}
 
 % subsubsection method_imeth_line_equilateral (end)
 
-\subsubsection{Method \Imeth{line}{projection}} % (fold)
+\subsubsection{Method \Imeth{line}{projection(obj)}} % (fold)
 \label{ssub:example_projection_of_several_points}
 \begin{minipage}{0.5\textwidth}
-\begin{Verbatim}
+\begin{SVerbatim}
 \directlua{%
-init_elements ()
-   z.a       = point:  new (0, 0)
-   z.b       = point:  new (4, 1)
-   z.c       = point:  new (2, 5)
-   z.d       = point:  new (5, 2)
-   L.ab      = line:   new (z.a,z.b)
-   z.cp,z.dp = L.ab:  projection(z.c,z.d)
+init_elements()
+z.a = point:new(0, 0)
+z.b = point:new(4, 1)
+z.c = point:new(2, 5)
+z.d = point:new(5, 2)
+L.ab = line:new(z.a, z.b)
+z.cp, z.dp = L.ab:projection(z.c, z.d)
 }
  \begin{tikzpicture}[scale = .8]
    \tkzGetNodes
@@ -1442,17 +1054,17 @@
    \tkzDrawPoints(a,...,d,c',d')
    \tkzLabelPoints(a,...,d,c',d')
  \end{tikzpicture}
-\end{Verbatim}
+\end{SVerbatim}
 \end{minipage}
 \begin{minipage}{0.5\textwidth}
 \directlua{%
-init_elements ()
-z.a    = point:  new (0, 0)
-z.b    = point:  new (4, 1)
-z.c    = point:  new (2, 5)
-z.d    = point:  new (5, 2)
-L.ab        = line:   new (z.a,z.b)
-z.cp,z.dp   = L.ab :  projection(z.c,z.d)
+init_elements()
+z.a = point:new(0, 0)
+z.b = point:new(4, 1)
+z.c = point:new(2, 5)
+z.d = point:new(5, 2)
+L.ab = line:new(z.a, z.b)
+z.cp, z.dp = L.ab:projection(z.c, z.d)
 }
 
 \begin{center}
@@ -1468,7 +1080,7 @@
 
 % subsubsection example_projection_of_several_points (end)
 
-\subsubsection{Method \Imeth{line}{projection\_ll}} % (fold)
+\subsubsection{Method \Imeth{line}{projection\_ll(L,obj)}} % (fold)
 \label{ssub:method_imeth_line_projection__ll}
 
 We've just seen (orthogonal) projection, but this time we're talking about projecting a point onto a line parallel to a line. At present, this transformation only applies to a point or a group of points, but it will be extended to objects.
@@ -1475,17 +1087,18 @@
 
 \vspace{6pt}
 \begin{minipage}{0.5\textwidth}
-\begin{Verbatim}
+\begin{SVerbatim}
 \directlua{
-  z.a = point: new (0, 0)
-  z.b = point: new (4, 1)
-  z.c = point: new (-1, 3)
-  z.d = point: new (-2, -1)
-  z.m = point: new (1,2)
-  z.n = point: new (3,2)
-  L.ab = line: new (z.a,z.b)
-  L.cd = line: new (z.c,z.d) 
-  z.e,z.f= L.ab:projection_ll(L.cd,z.m,z.n)
+init_elements()
+z.a = point:new(0, 0)
+z.b = point:new(4, 1)
+z.c = point:new(-1, 3)
+z.d = point:new(-2, -1)
+z.m = point:new(1, 2)
+z.n = point:new(3, 2)
+L.ab = line:new(z.a, z.b)
+L.cd = line:new(z.c, z.d)
+z.e, z.f = L.ab:projection_ll(L.cd, z.m, z.n)
 }
 \begin{tikzpicture}
 \tkzGetNodes
@@ -1493,19 +1106,20 @@
 \tkzDrawPoints(a,...,f,m,n)
 \tkzLabelPoints(a,...,f,m,n)
 \end{tikzpicture}
-\end{Verbatim}
+\end{SVerbatim}
 \end{minipage}
 \begin{minipage}{0.5\textwidth}
 \directlua{
-  z.a = point: new (0, 0)
-  z.b = point: new (4, 1)
-  z.c = point: new (-1, 3)
-  z.d = point: new (-2, -1)
-  z.m = point: new (1,2)
-  z.n = point: new (3,2)
-  L.ab = line: new (z.a,z.b)
-  L.cd = line: new (z.c,z.d) 
-  z.e,z.f= L.ab:projection_ll(L.cd,z.m,z.n)
+init_elements()
+z.a = point:new(0, 0)
+z.b = point:new(4, 1)
+z.c = point:new(-1, 3)
+z.d = point:new(-2, -1)
+z.m = point:new(1, 2)
+z.n = point:new(3, 2)
+L.ab = line:new(z.a, z.b)
+L.cd = line:new(z.c, z.d)
+z.e, z.f = L.ab:projection_ll(L.cd, z.m, z.n)
 }
 \begin{tikzpicture}
 \tkzGetNodes
@@ -1517,7 +1131,7 @@
 
 % subsubsection method_imeth_line_projection__ll (end)
 
-\subsubsection{Method \Imeth{line}{affinity}} % (fold)
+\subsubsection{Method \Imeth{line}{affinity(L,obj)}} % (fold)
 \label{ssub:method_imeth_line_affinity}
 
 The introduction of parrallel projection to an axis allows us to define a new transformation: affinity.
@@ -1524,18 +1138,20 @@
 
 \vspace{6pt}
 \begin{minipage}{0.5\textwidth}
-\begin{Verbatim}
+\begin{SVerbatim}
 \directlua{
-  z.a = point: new (0, 0)
-  z.b = point: new (4, 1)
-  z.c = point: new (-1, 3)
-  z.d = point: new (-2, -1)
-  z.m = point: new (1,2)
-  z.n = point: new (3,2)
-  L.ab = line: new (z.a,z.b)
-  L.cd = line: new (z.c,z.d) 
-  z.e,z.f= L.ab:projection_ll(L.cd,z.m,z.n)
-  z.g,z.h = L.ab : affinity(L.cd,2,z.m,z.n)}
+init_elements()
+z.a = point:new(0, 0)
+z.b = point:new(4, 1)
+z.c = point:new(-1, 3)
+z.d = point:new(-2, -1)
+z.m = point:new(1,2)
+z.n = point:new(3,2)
+L.ab = line:new(z.a, z.b)
+L.cd = line:new(z.c, z.d) 
+z.e, z.f = L.ab:projection_ll(L.cd, z.m, z.n)
+z.g, z.h = L.ab: affinity(L.cd,2, z.m, z.n)
+}
 \begin{tikzpicture}
  \tkzGetNodes
  \tkzDrawLines(a,b c,d e,m f,n)
@@ -1542,20 +1158,22 @@
  \tkzDrawPoints(a,...,h,m,n)
  \tkzLabelPoints(a,...,h,m,n)
 \end{tikzpicture}
-\end{Verbatim}
+\end{SVerbatim}
 \end{minipage}
 \begin{minipage}{0.5\textwidth}
 \directlua{
-  z.a = point: new (0, 0)
-  z.b = point: new (4, 1)
-  z.c = point: new (-1, 3)
-  z.d = point: new (-2, -1)
-  z.m = point: new (1,2)
-  z.n = point: new (3,2)
-  L.ab = line: new (z.a,z.b)
-  L.cd = line: new (z.c,z.d) 
-  z.e,z.f= L.ab:projection_ll(L.cd,z.m,z.n)
-  z.g,z.h = L.ab : affinity(L.cd,2,z.m,z.n)}
+init_elements()
+z.a = point:new(0, 0)
+z.b = point:new(4, 1)
+z.c = point:new(-1, 3)
+z.d = point:new(-2, -1)
+z.m = point:new(1,2)
+z.n = point:new(3,2)
+L.ab = line:new(z.a, z.b)
+L.cd = line:new(z.c, z.d) 
+z.e, z.f = L.ab:projection_ll(L.cd, z.m, z.n)
+z.g, z.h = L.ab: affinity(L.cd,2, z.m, z.n)
+}
 \begin{tikzpicture}
 \tkzGetNodes
 \tkzDrawLines(a,b c,d e,m f,n)
@@ -1564,29 +1182,26 @@
 \end{tikzpicture}
 \end{minipage}
 
-
 % subsubsection method_imeth_line_affinity (end)
 
-
-
 \subsubsection{Example: combination of methods} % (fold)
 \label{ssub:example_combination_of_methods}
 
 \begin{minipage}{0.6\textwidth}
-\begin{Verbatim}
+\begin{SVerbatim}
 \directlua{%
-init_elements ()
-   z.A     = point: new (0 , 0)
-   z.B     = point: new (6 , 0)
-   z.C     = point: new (1 , 5)
-   T.ABC   = triangle: new (z.A,z.B,z.C)
-   L.AB    = T.ABC.ab
-   z.O     = T.ABC.circumcenter
-   C.OA    = circle: new (z.O,z.A)
-   z.H     = L.AB: projection (z.O)
-   L.ab    = C.OA: tangent_at (z.A)
-   z.a,z.b = L.ab.pa,L.ab.pb
-  % or z.a,z.b  = get_points (L.ab)
+init_elements()
+z.A = point:new(0, 0)
+z.B = point:new(6, 0)
+z.C = point:new(1, 5)
+T.ABC = triangle:new(z.A, z.B, z.C)
+L.AB = T.ABC.ab
+z.O = T.ABC.circumcenter
+C.OA = circle:new(z.O, z.A)
+z.H = L.AB:projection(z.O)
+L.ab = C.OA:tangent_at(z.A)
+z.a, z.b = L.ab.pa, L.ab.pb
+% or z.a,z.b  = get_points (L.ab)
 }
 \begin{tikzpicture}
    \tkzGetNodes
@@ -1603,22 +1218,22 @@
    \tkzLabelPoints[above](O,C)
    \tkzLabelPoints[left](A)
 \end{tikzpicture}
-\end{Verbatim}
+\end{SVerbatim}
 \end{minipage}
 \begin{minipage}{0.4\textwidth}
 \directlua{%
-init_elements ()
-z.A     = point: new (0 , 0)
-z.B     = point: new (6 , 0)
-z.C     = point: new (1 , 5)
-T.ABC   = triangle: new (z.A,z.B,z.C)
-L.AB    = T.ABC.ab
-z.O     = T.ABC.circumcenter
-C.OA    = circle: new (z.O,z.A)
-z.H     = L.AB : projection (z.O)
-L.ab    = C.OA : tangent_at (z.A)
-z.a,z.b = L.ab.pa,L.ab.pb
-   % or z.a,z.b  = get_points (L.ab)
+init_elements()
+z.A = point:new(0, 0)
+z.B = point:new(6, 0)
+z.C = point:new(1, 5)
+T.ABC = triangle:new(z.A, z.B, z.C)
+L.AB = T.ABC.ab
+z.O = T.ABC.circumcenter
+C.OA = circle:new(z.O, z.A)
+z.H = L.AB:projection(z.O)
+L.ab = C.OA:tangent_at(z.A)
+z.a, z.b = L.ab.pa, L.ab.pb
+% or z.a,z.b  = get_points (L.ab)
 }
 
 \begin{center}
@@ -1638,25 +1253,23 @@
   \tkzLabelPoints[left](A)
   \end{tikzpicture}
 \end{center}
-
-
 \end{minipage}
 
 % subsubsection example_combination_of_methods (end)
 
-\subsubsection{Method \Imeth{line}{translation}} % (fold)
+\subsubsection{Method \Imeth{line}{translation(obj)}} % (fold)
 \label{ssub:example_translation}
 
 \begin{minipage}{0.6\textwidth}
-\begin{Verbatim}
+\begin{SVerbatim}
 \directlua{%
-init_elements ()
-   z.A  = point:  new (0,0)
-   z.B  = point:  new (1,2)
-   z.C  = point:  new (-3,2)
-   z.D  = point:  new (0,2)
-   L.AB = line : new (z.A,z.B)
-   z.E,z.F = L.AB : translation (z.C,z.D)
+ init_elements()
+ z.A  = point:new(0, 0)
+ z.B  = point:new(1, 2)
+ z.C  = point:new(-3, 2)
+ z.D  = point:new(0, 2)
+ L.AB = line:new(z.A, z.B)
+ z.E, z.F = L.AB:translation(z.C, z.D)
 }
 \begin{tikzpicture}
 \tkzGetNodes
@@ -1664,19 +1277,18 @@
 \tkzLabelPoints(A,...,F)
 \tkzDrawSegments[->,red,> =latex](C,E D,F A,B)
 \end{tikzpicture}
-\end{Verbatim}
+\end{SVerbatim}
 \end{minipage}
 \begin{minipage}{0.4\textwidth}
 \directlua{%
-init_elements ()
-   z.A  = point:  new (0,0)
-   z.B  = point:  new (1,2)
-   z.C  = point:  new (-3,2)
-   z.D  = point:  new (0,2)
-   L.AB = line : new (z.A,z.B)
-   z.E,z.F = L.AB : translation (z.C,z.D)
+ init_elements()
+ z.A  = point:new(0, 0)
+ z.B  = point:new(1, 2)
+ z.C  = point:new(-3, 2)
+ z.D  = point:new(0, 2)
+ L.AB = line:new(z.A, z.B)
+ z.E, z.F = L.AB:translation(z.C, z.D)
 }
-
 \begin{center}
   \begin{tikzpicture}
   \tkzGetNodes
@@ -1685,28 +1297,27 @@
   \tkzDrawSegments[->,red,> =latex](C,E D,F A,B)
   \end{tikzpicture}
 \end{center}
-
 \end{minipage}
 
 % subsubsection example_translation (end)
 
 
-\subsubsection{Method \Imeth{line}{reflection} of an object} % (fold)
+\subsubsection{Method \Imeth{line}{reflection(obj)}} % (fold)
 \label{ssub:reflection_of_object}
 
 \begin{minipage}{.5\textwidth}
-\begin{Verbatim}
+\begin{SVerbatim}
 \directlua{%
-init_elements ()
-   z.A = point : new ( 0 , 0 )
-   z.B = point : new ( 4 , 1 )
-   z.E = point : new ( 0 , 2 )
-   z.F = point : new ( 3 , 3 )
-   z.G = point : new ( 4 , 2 )
-   L.AB = line : new ( z.A , z.B )
-   T.EFG = triangle : new (z.E,z.F,z.G)
-   T.new = L.AB : reflection (T.EFG)
-   z.Ep,z.Fp,z.Gp = get_points(T.new)
+ init_elements()
+ z.A = point:new(0, 0)
+ z.B = point:new(4, 1)
+ z.E = point:new(0, 2)
+ z.F = point:new(3, 3)
+ z.G = point:new(4, 2)
+ L.AB = line:new(z.A, z.B)
+ T.EFG = triangle:new(z.E, z.F, z.G)
+ T.new = L.AB:reflection (T.EFG)
+ z.Ep, z.Fp, z.Gp = get_points(T.new)
 }
 \begin{tikzpicture}
    \tkzGetNodes
@@ -1715,20 +1326,20 @@
    \tkzDrawPolygon[new](E',F',G')
    \tkzDrawSegment[red,dashed](E,E')
 \end{tikzpicture}
-\end{Verbatim}
+\end{SVerbatim}
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
-   z.A = point : new ( 0 , 0 )
-   z.B = point : new ( 4 , 1 )
-   z.E = point : new ( 0 , 2 )
-   z.F = point : new ( 3 , 3 )
-   z.G = point : new ( 4 , 2 )
-   L.AB = line : new ( z.A , z.B )
-   T.EFG = triangle : new (z.E,z.F,z.G)
-   T.new = L.AB : reflection (T.EFG)
-   z.Ep,z.Fp,z.Gp = get_points(T.new)
+ init_elements()
+ z.A = point:new(0, 0)
+ z.B = point:new(4, 1)
+ z.E = point:new(0, 2)
+ z.F = point:new(3, 3)
+ z.G = point:new(4, 2)
+ L.AB = line:new(z.A, z.B)
+ T.EFG = triangle:new(z.E, z.F, z.G)
+ T.new = L.AB:reflection (T.EFG)
+ z.Ep, z.Fp, z.Gp = get_points(T.new)
 }
 
 \begin{center}
@@ -1744,19 +1355,19 @@
 \end{minipage}
 % subsubsection reflection_of_object (end)
 
-\subsubsection{Method \Imeth{line}{distance}} % (fold)
+\subsubsection{Method \Imeth{line}{projection(obj)}} % (fold)
 \label{ssub:example_distance_and_projection}
 
 \begin{minipage}{0.5\textwidth}
-\begin{Verbatim}
+\begin{SVerbatim}
 \directlua{%
-init_elements ()
-   z.A    = point : new (0 , 0)
-   z.B    = point : new (4 , -2)
-   z.C    = point : new (3 , 3)
-   L.AB   = line : new (z.A,z.B)
-   d      = L.AB : distance (z.C)
-   z.H    = L.AB : projection (z.C)
+ init_elements()
+ z.A = point:new(0, 0)
+ z.B = point:new(4, -2)
+ z.C = point:new(3, 3)
+ L.AB = line:new(z.A, z.B)
+ d = L.AB:distance (z.C)
+ z.H = L.AB:projection (z.C)
 }
 \begin{tikzpicture}
   \tkzGetNodes
@@ -1766,17 +1377,17 @@
   \tkzLabelSegment[above left,
   draw](C,H){$CH = \tkzUseLua{d}$}
 \end{tikzpicture}
-\end{Verbatim}
+\end{SVerbatim}
 \end{minipage}
 \begin{minipage}{0.5\textwidth}
 \directlua{%
-   init_elements ()
-   z.A    = point : new (0 , 0)
-   z.B    = point : new (4 , -2)
-   z.C    = point : new (3 , 3)
-   L.AB   = line : new (z.A,z.B)
-   d      = L.AB : distance (z.C)
-   z.H    = L.AB : projection (z.C)
+   init_elements()
+   z.A = point:new(0, 0)
+   z.B = point:new(4, -2)
+   z.C = point:new(3, 3)
+   L.AB = line:new(z.A, z.B)
+   d = L.AB:distance (z.C)
+   z.H = L.AB:projection (z.C)
 }
 
 \begin{center}
@@ -1794,19 +1405,19 @@
 % subsubsection example_distance_and_projection (end)
 
 
-\subsubsection{Method \Imeth{line}{apollonius} (Apollonius circle MA/MB = k)} % (fold)
+\subsubsection{Method \Imeth{line}{apollonius(d)} (Apollonius circle MA/MB = k)} % (fold)
 \label{ssub:apollonius_circle_ma_mb_k}
 
-\begin{Verbatim}
+\begin{SVerbatim}
 \directlua{%
-init_elements ()
-   z.A = point : new ( 0 , 0 )
-   z.B = point : new ( 6 , 0 )
-   L.AB =line: new (z.A,z.B)
-   C.apo = L.AB : apollonius (2)
-   z.O,z.C = get_points (   C.apo   )
-   z.D = C.apo : antipode (z.C)
-   z.P = C.apo : point  (0.30)
+init_elements()
+z.A = point:new(0, 0)
+z.B = point:new(6, 0)
+L.AB = line:new(z.A, z.B)
+C.apo = L.AB:apollonius (2)
+z.O,z.C = get_points (C.apo)
+z.D = C.apo:antipode (z.C)
+z.P = C.apo:point (0.30)
 }
 \begin{tikzpicture}
    \tkzGetNodes
@@ -1824,17 +1435,17 @@
    \tkzMarkRightAngle[opacity=.3,fill=lightgray](D,P,C)
    \tkzMarkAngles[mark=||](A,P,D D,P,B)
 \end{tikzpicture}
-\end{Verbatim}
+\end{SVerbatim}
 
 \directlua{%
-init_elements ()
-z.A = point : new ( 0 , 0 )
-z.B = point : new ( 6 , 0 )
-L.AB =line: new (z.A,z.B)
-C.apo = L.AB : apollonius (2)
-z.O,z.C = get_points (  C.apo  )
-z.D = C.apo : antipode (z.C)
-z.P = C.apo : point  (0.30)
+init_elements()
+z.A = point:new(0, 0)
+z.B = point:new(6, 0)
+L.AB = line:new(z.A, z.B)
+C.apo = L.AB:apollonius (2)
+z.O,z.C = get_points (C.apo)
+z.D = C.apo:antipode (z.C)
+z.P = C.apo:point (0.30)
 }
 
 \begin{center}
@@ -1877,22 +1488,23 @@
 \end{itemize}
 
 \vspace{6pt}
-\begin{minipage}{0.4\textwidth}
-\begin{Verbatim}
-  \directlua{
-  init_elements ()
-  z.A    = point : new ( 0  , 0  )
-  z.B    = point : new ( 8  , 0  )
-  z.M    = point : new ( 1  , 1 )
-  z.N    = point : new ( 2  , 5 )
-  L.AB   = line:new(z.A,z.B)
-  C1,C2  = L.AB : c_l_pp (z.M,z.N)
-  z.O1   = C1.center
-  z.O2   = C2.center
-  z.T1   = C1.through
-  z.T2   = C2.through
-  }
-  \begin{tikzpicture}[scale = .75]
+
+\begin{minipage}{0.6\textwidth}
+\directlua{
+init_elements()
+z.A = point:new(0, 0)
+z.B = point:new(6, 0)
+z.M = point:new(1, 1)
+z.N = point:new(2, 5)
+L.AB = line:new(z.A, z.B)
+C1,C2 = L.AB:c_l_pp(z.M, z.N)
+z.O1 = C1.center
+z.O2 = C2.center
+z.T1 = C1.through
+z.T2 = C2.through
+}
+\begin{center}
+  \begin{tikzpicture}[scale =.6]
   \tkzGetNodes
   \tkzDrawLines(A,B M,N)
   \tkzDrawCircles(O1,T1 O2,T2)
@@ -1900,24 +1512,24 @@
   \tkzLabelPoints(A,B,M,N)
   \tkzDrawPoints(A,B,M,N,O1,T1,O2,T2)
   \end{tikzpicture}
-\end{Verbatim}
+\end{center}
 \end{minipage}
-\begin{minipage}{0.6\textwidth}
-\directlua{
-init_elements ()
-z.A    = point : new ( 0  , 0  )
-z.B    = point : new ( 6  , 0  )
-z.M    = point : new ( 1  , 1 )
-z.N    = point : new ( 2  , 5 )
-L.AB   = line:new(z.A,z.B)
-C1,C2  = L.AB : c_l_pp(z.M,z.N)
-z.O1   = C1.center
-z.O2   = C2.center
-z.T1   = C1.through
-z.T2   = C2.through
-}
-\begin{center}
-  \begin{tikzpicture}[scale =.6]
+\begin{minipage}{0.4\textwidth}
+\begin{tkzexample}[code only]
+  \directlua{
+  init_elements()
+  z.A = point:new(0, 0)
+  z.B = point:new(8, 0)
+  z.M = point:new(1, 1)
+  z.N = point:new(2, 5)
+  L.AB = line:new(z.A, z.B)
+  C1,C2 = L.AB:c_l_pp(z.M, z.N)
+  z.O1 = C1.center
+  z.O2 = C2.center
+  z.T1 = C1.through
+  z.T2 = C2.through
+  }
+  \begin{tikzpicture}[scale = .75]
   \tkzGetNodes
   \tkzDrawLines(A,B M,N)
   \tkzDrawCircles(O1,T1 O2,T2)
@@ -1925,8 +1537,7 @@
   \tkzLabelPoints(A,B,M,N)
   \tkzDrawPoints(A,B,M,N,O1,T1,O2,T2)
   \end{tikzpicture}
-\end{center}
-
+\end{tkzexample}
 \end{minipage}
 
 \vspace{6pt}
@@ -1935,54 +1546,54 @@
 The method returns \code{nil} and \code{nil}.
 
 \vspace{6pt}
-\begin{minipage}{0.4\textwidth}
-\begin{Verbatim}
+\begin{minipage}{.5\textwidth}
 \directlua{
-init_elements ()
-z.A    = point :new (0, 0)
-z.B    = point :new (6, 0)
-z.M    = point :new (1, 1)
-z.N    = point :new (3 ,-5)
-L.AB   = line:new(z.A,z.B)
-L.MN   = line:new(z.M,z.N)
-z.I    = intersection(L.AB,L.MN)
-C1,C2  =  L.AB : c_l_pp(z.M,z.N)
+init_elements()
+z.A = point:new(0, 0)
+z.B = point:new(6, 0)
+z.M = point:new(1,  1)
+z.N = point:new(3, -5)
+L.AB = line:new(z.A, z.B)
+L.MN = line:new(z.M, z.N)
+z.I = intersection(L.AB, L.MN)
+C1,C2 = L.AB:c_l_pp(z.M, z.N)
 if C1 == nil
- then
+then
 else
-   z.C    = C1.center
-   z.Cp   = C2.center
-   z.T    = C1.through
-   z.Tp   = C2.through
+   z.C = C1.center
+   z.Cp = C2.center
+   z.T = C1.through
+   z.Tp = C2.through
 end
 }
-\begin{tikzpicture}[scale =.6]
-\tkzGetNodes
-\tkzDrawLines(A,B M,N)
-\tkzDrawPoints(A,B,M,N)
-\tkzLabelPoints(A,B,M,N)
-\end{tikzpicture}
-\end{Verbatim}
+\begin{center}
+  \begin{tikzpicture}[scale =.6]
+  \tkzGetNodes
+  \tkzDrawLines(A,B M,N)
+  \tkzDrawPoints(A,B,M,N)
+  \tkzLabelPoints(A,B,M,N)
+  \end{tikzpicture}
+\end{center}
 \end{minipage}
-\begin{minipage}{0.6\textwidth}
+\begin{minipage}{.5\textwidth}
+\begin{tkzexample}[code only]
 \directlua{
-init_elements ()
-z.A    = point : new ( 0  , 0  )
-z.B    = point : new ( 6  , 0  )
-z.M    = point : new ( 1 ,  1 )
-z.N    = point : new ( 3  , -5 )
-L.AB   = line:new(z.A,z.B)
-L.MN   = line:new(z.M,z.N)
-z.I    = intersection(L.AB,L.MN)
-C1,C2  =  L.AB : c_l_pp(z.M,z.N)
+init_elements()
+z.A = point:new(0, 0)
+z.B = point:new(6, 0)
+z.M = point:new(1,  1)
+z.N = point:new(3, -5)
+L.AB = line:new(z.A, z.B)
+L.MN = line:new(z.M, z.N)
+z.I = intersection(L.AB, L.MN)
+C1,C2 = L.AB:c_l_pp(z.M, z.N)
 if C1 == nil
 then
-
 else
-   z.C    = C1.center
-   z.Cp   = C2.center
-   z.T    = C1.through
-   z.Tp   = C2.through
+   z.C = C1.center
+   z.Cp = C2.center
+   z.T = C1.through
+   z.Tp = C2.through
 end
 }
 \begin{center}
@@ -1993,7 +1604,7 @@
   \tkzLabelPoints(A,B,M,N)
   \end{tikzpicture}
 \end{center}
-
+\end{tkzexample}
 \end{minipage}
 
 \vspace{6pt}
@@ -2001,21 +1612,21 @@
 
 
 \begin{minipage}{0.4\textwidth}
-\begin{Verbatim}
+\begin{SVerbatim}
   \directlua{
-  init_elements ()
-  z.A    = point : new ( 0  , 0  )
-  z.B    = point : new ( 6  , 0  )
-  z.M    = point : new ( 0  , 3 )
-  z.N    = point : new ( 5  , 3 )
-  L.AB   = line:new(z.A,z.B)
-  C1,C2  = L.AB : c_l_pp(z.M,z.N)
-  z.O1   = C1.center
-  z.O2   = C2.center
-  z.T1   = C1.through
-  z.T2   = C2.through
-  }
-  \begin{tikzpicture}
+init_elements()
+z.A = point:new(0, 0)
+z.B = point:new(6, 0)
+z.M = point:new(0, 3)
+z.N = point:new(5, 3)
+L.AB = line:new(z.A, z.B)
+C1, C2 = L.AB:c_l_pp(z.M, z.N)
+z.O1 = C1.center
+z.O2 = C2.center
+z.T1 = C1.through
+z.T2 = C2.through
+}
+\begin{tikzpicture}
   \tkzGetNodes
   \tkzDrawSegments(A,B M,N)
   \tkzDrawCircles(O1,T1)
@@ -2022,22 +1633,23 @@
   \tkzDrawPoints(A,B,M,N)
   \tkzDrawPoints(A,B,M,N)
   \tkzLabelPoints(A,B,M,N)
-  \end{tikzpicture}
-\end{Verbatim}
+\end{tikzpicture}
+\end{SVerbatim}
 \end{minipage}
 \begin{minipage}{0.6\textwidth}
 \directlua{
-init_elements ()
-z.A  = point : new (0 , 0 )
-z.B  = point : new (6 , 0 )
-z.M  = point : new (0 , 3 )
-z.N  = point : new (5 , 3 )
-L.AB = line:new(z.A,z.B)
-C1,C2= L.AB : c_l_pp(z.M,z.N)
+init_elements()
+z.A = point:new(0, 0)
+z.B = point:new(6, 0)
+z.M = point:new(0, 3)
+z.N = point:new(5, 3)
+L.AB = line:new(z.A, z.B)
+C1, C2 = L.AB:c_l_pp(z.M, z.N)
 z.O1 = C1.center
 z.O2 = C2.center
 z.T1 = C1.through
 z.T2 = C2.through
+
 }
 \begin{center}
   \begin{tikzpicture}
@@ -2058,35 +1670,36 @@
 
 \vspace{6pt}
 \begin{minipage}{0.4\textwidth}
-\begin{Verbatim}
+\begin{SVerbatim}
 \directlua{
-init_elements ()
-z.A   = point : new(0, 0 )
-z.B   = point : new(6, 0 )
-z.M   = point : new(1, 1 )
-z.N   = point : new(1, 5 )
-L.AB  = line:new(z.A,z.B)
-C1,C2 = L.AB : c_l_pp(z.M,z.N)
-z.O1  = C1.center
-z.O2  = C2.center
-z.T1  = C1.through
-z.T2  = C2.through
-}
-\end{Verbatim}
+init_elements()
+z.A = point:new(0, 0)
+z.B = point:new(6, 0)
+z.M = point:new(1, 1)
+z.N = point:new(1, 5)
+L.AB = line:new(z.A, z.B)
+C1, C2 = L.AB:c_l_pp(z.M, z.N)
+z.O1 = C1.center
+z.O2 = C2.center
+z.T1 = C1.through
+z.T2 = C2.through
+
+\end{SVerbatim}
 \end{minipage}
 \begin{minipage}{0.6\textwidth}
 \directlua{
-init_elements ()
-z.A    = point : new ( 0  , 0  )
-z.B    = point : new ( 6  , 0  )
-z.M    = point : new ( 1  , 1 )
-z.N    = point : new ( 1  , 5 )
-L.AB   = line:new(z.A,z.B)
-C1,C2  = L.AB : c_l_pp(z.M,z.N)
-z.O1   = C1.center
-z.O2   = C2.center
-z.T1   = C1.through
-z.T2   = C2.through
+init_elements()
+z.A = point:new(0, 0)
+z.B = point:new(6, 0)
+z.M = point:new(1, 1)
+z.N = point:new(1, 5)
+L.AB = line:new(z.A, z.B)
+C1, C2 = L.AB:c_l_pp(z.M, z.N)
+z.O1 = C1.center
+z.O2 = C2.center
+z.T1 = C1.through
+z.T2 = C2.through
+
 }
 \begin{center}
   \begin{tikzpicture}[scale = .75]
@@ -2104,61 +1717,36 @@
 The last special case is when one of the points is on the initial line. In this case, there's only one solution.
 
 \vspace{6pt}
-\begin{minipage}{0.5\textwidth}
-\begin{Verbatim}
-\directlua{
-init_elements ()
-z.A    = point : new ( 0  , 0  )
-z.B    = point : new ( 5  , 0  )
-z.M    = point : new ( 1 ,  0 )
-z.N    = point : new ( 3  , 5 )
-L.AB   = line:new(z.A,z.B)
-L.MN   = line:new(z.M,z.N)
-z.I    = intersection(L.AB,L.MN)
-C1,C2  =  L.AB : c_l_pp(z.M,z.N)
-z.O1   = C1.center
-z.O2   = C2.center
-z.T1   = C1.through
-z.T2   = C2.through
-}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawLines(A,B M,N)
-\tkzDrawCircles(O1,T1 O2,T2)
-\tkzDrawPoints(A,B,M,N)
-\tkzLabelPoints(A,B,M,N)
-\tkzDrawPoints(A,B,M,N,O1,T1,O2,T2)
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{0.5\textwidth}
-\directlua{
-init_elements ()
-z.A    = point : new ( 0  , 0  )
-z.B    = point : new ( 5  , 0  )
-z.M    = point : new ( 1 ,  0 )
-z.N    = point : new ( 3  , 5 )
-L.AB   = line:new(z.A,z.B)
-L.MN   = line:new(z.M,z.N)
-z.I    = intersection(L.AB,L.MN)
-C1,C2  =  L.AB : c_l_pp(z.M,z.N)
-z.O1   = C1.center
-z.O2   = C2.center
-z.T1   = C1.through
-z.T2   = C2.through
-}
-\begin{center}
-  \begin{tikzpicture}
-  \tkzGetNodes
-  \tkzDrawLines(A,B M,N)
-  \tkzDrawCircles(O1,T1 O2,T2)
-  \tkzDrawPoints(A,B,M,N)
-  \tkzLabelPoints(A,B,M,N)
-  \tkzDrawPoints(A,B,M,N,O1,T1,O2,T2)
-  \end{tikzpicture}
-\end{center}
 
-\end{minipage}
+\begin{tkzexample}[latex=8cm]
+  \directlua{
+  init_elements()
+  z.A = point:new(0, 0)
+  z.B = point:new(5, 0)
+  z.M = point:new(1, 0)
+  z.N = point:new(3, 5)
+  L.AB = line:new(z.A, z.B)
+  L.MN = line:new(z.M, z.N)
+  z.I = intersection(L.AB, L.MN)
+  C1, C2 = L.AB:c_l_pp(z.M, z.N)
+  z.O1 = C1.center
+  z.O2 = C2.center
+  z.T1 = C1.through
+  z.T2 = C2.through
+  }
+  \begin{center}
+    \begin{tikzpicture}[scale =.8]
+    \tkzGetNodes
+    \tkzDrawLines(A,B M,N)
+    \tkzDrawCircles(O1,T1 O2,T2)
+    \tkzDrawPoints(A,B,M,N)
+    \tkzLabelPoints(A,B,M,N)
+    \tkzDrawPoints(A,B,M,N,O1,T1,O2,T2)
+    \end{tikzpicture}
+  \end{center}
+\end{tkzexample}
+
+
 % subsubsection c_l_pp (end)
 
 \subsubsection{Method \Imeth{line}{c\_ll\_p}} % (fold)
@@ -2170,180 +1758,109 @@
 The following example shows that there are two solutions using the method linked to the line. A more natural method, linked to the $ABC$ triangle, can also be used.
 
 \vspace{6pt}
-\begin{minipage}{0.5\textwidth}
-\begin{Verbatim}
-\directlua{
+
+\begin{tkzexample}[latex =8cm]
+  \directlua{
   init_elements()
-  z.A   = point : new ( 0  , 0  )
-  z.B   = point : new ( 6  , 0  )
-  L.AB  = line : new ( z.A,z.B )
-  z.C   = point : new ( 6 ,  4  )
-  L.AC  = line : new ( z.A,z.C )
-  T     = triangle : new (z.A,z.B,z.C)
-  z.P = point : new ( 3 ,  1  )
-  C1,C2 = L.AB : c_ll_p (z.C,z.P)
-  z.O1  = C1.center
-  z.T1  = C1.through
-  z.O2  = C2.center
-  z.T2  = C2.through
-}
-\begin{tikzpicture}[scale =.75]
-\tkzGetNodes
-\tkzDrawLines[thick](A,B A,C)
- \tkzDrawCircles[red](O1,T1 O2,T2)
- \tkzDrawPoints(A,B,C,P)
- \tkzLabelPoints(A,B,C,P)
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{0.5\textwidth}
-\directlua{
-init_elements()
-  z.A   = point : new ( 0  , 0  )
-  z.B   = point : new ( 6  , 0  )
-  L.AB  = line : new ( z.A,z.B )
-  z.C   = point : new ( 6 ,  4  )
-  L.AC  = line : new ( z.A,z.C )
-  T     = triangle : new (z.A,z.B,z.C)
-  z.P = point : new ( 3 ,  1  )
-  C1,C2 = L.AB : c_ll_p (z.C,z.P)
-  z.O1  = C1.center
-  z.T1  = C1.through
-  z.O2  = C2.center
-  z.T2  = C2.through
-}
-\begin{center}
-  \begin{tikzpicture}[ scale =.75]
-  \tkzGetNodes
-  \tkzDrawLines[thick](A,B A,C)
-   \tkzDrawCircles[red](O1,T1 O2,T2)
+  z.A = point:new(0, 0)
+  z.B = point:new(6, 0)
+  L.AB = line:new(z.A, z.B)
+  z.C = point:new(6, 4)
+  L.AC = line:new(z.A, z.C)
+  T = triangle:new(z.A, z.B, z.C)
+  z.P = point:new(3, 1)
+  C1, C2 = L.AB:c_ll_p(z.C, z.P)
+  z.O1 = C1.center
+  z.T1 = C1.through
+  z.O2 = C2.center
+  z.T2 = C2.through
+
+  }
+  \begin{center}
+    \begin{tikzpicture}[ scale =.75]
+    \tkzGetNodes
+    \tkzDrawLines[thick](A,B A,C)
+     \tkzDrawCircles[red](O1,T1 O2,T2)
+     \tkzDrawPoints(A,B,C,P)
+     \tkzLabelPoints(A,B,C,P)
+    \end{tikzpicture}
+  \end{center}
+\end{tkzexample}
+
+
+
+\vspace{6pt}
+
+The first special case is where the point $P$ lies on the bisector of $A$.
+
+
+\begin{tkzexample}[latex =8cm]
+  \directlua{
+  init_elements()
+    z.A= point:new(0, 0)
+    z.B= point:new(6, 0)
+    L.AB  = line:new(z.A, z.B)
+    z.C= point:new(6, 4)
+    L.AC  = line:new(z.A, z.C)
+    T  = triangle:new(z.A, z.B, z.C)
+    L.bi  = bisector(z.A, z.B, z.C)
+    z.P= L.bi:point (0.4)
+    C1,C2 = L.AB:c_ll_p (z.C, z.P)
+    z.O1  = C1.center
+    z.T1  = C1.through
+    z.O2  = C2.center
+    z.T2  = C2.through
+  }
+  \begin{center}
+  \begin{tikzpicture}[scale =.75]
+   \tkzGetNodes
+   \tkzDrawLines(A,B A,C A,P)
+   \tkzDrawCircles(O1,T1 O2,T2)
    \tkzDrawPoints(A,B,C,P)
    \tkzLabelPoints(A,B,C,P)
   \end{tikzpicture}
-\end{center}
-\end{minipage}
+  \end{center}
+\end{tkzexample}
 
-\vspace{6pt}
 
-The first special case is where the point $P$ lies on the bisector of $A$.
 
-\begin{minipage}{0.5\textwidth}
-\begin{Verbatim}
-\directlua{
-init_elements()
-  z.A   = point : new (0 , 0)
-  z.B   = point : new (6 , 0)
-  L.AB  = line : new ( z.A,z.B)
-  z.C   = point : new ( 6 , 4)
-  L.AC  = line : new ( z.A,z.C )
-  T     = triangle : new (z.A,z.B,z.C)
-  L.bi  = bisector(z.A,z.B,z.C)
-  z.P   = L.bi :point (0.4)
-  C1,C2 = L.AB : c_ll_p (z.C,z.P)
-  z.O1  = C1.center
-  z.T1  = C1.through
-  z.O2  = C2.center
-  z.T2  = C2.through
-}
-\begin{tikzpicture}[scale =.75]
-\tkzGetNodes
-\tkzDrawLines(A,B A,C A,P)
- \tkzDrawCircles(O1,T1 O2,T2)
- \tkzDrawPoints(A,B,C,P)
- \tkzLabelPoints(A,B,C,P)
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{0.5\textwidth}
-\directlua{
-init_elements()
-  z.A   = point : new (0 , 0)
-  z.B   = point : new (6 , 0)
-  L.AB  = line : new ( z.A,z.B)
-  z.C   = point : new ( 6 , 4)
-  L.AC  = line : new ( z.A,z.C )
-  T     = triangle : new (z.A,z.B,z.C)
-  L.bi  = bisector(z.A,z.B,z.C)
-  z.P   = L.bi :point (0.4)
-  C1,C2 = L.AB : c_ll_p (z.C,z.P)
-  z.O1  = C1.center
-  z.T1  = C1.through
-  z.O2  = C2.center
-  z.T2  = C2.through
-}
-\begin{center}
-\begin{tikzpicture}[scale =.75]
- \tkzGetNodes
- \tkzDrawLines(A,B A,C A,P)
- \tkzDrawCircles(O1,T1 O2,T2)
- \tkzDrawPoints(A,B,C,P)
- \tkzLabelPoints(A,B,C,P)
-\end{tikzpicture}
-\end{center}
-\end{minipage}
 
-
 \vspace{6pt}
 A first special case is when the point $P$ lies on one of the lines
 
 \vspace{6pt}
-\begin{minipage}{0.5\textwidth}
-\begin{Verbatim}
-\directlua{
-init_elements()
-  z.A   = point:new(0, 0)
-  z.B   = point:new(6, 0)
-  L.AB  = line:new(z.A,z.B)
-  z.C   = point:new(6, 4)
-  L.AC  = line:new(z.A,z.C)
-  T     = triangle:new(z.A,z.B,z.C)
-  z.P   = point:new(3, 2)
-  L.bi  = bisector(z.A,z.B,z.C)
-  z.I   = L.bi:point(0.4)
-  C1,C2 = L.AB : c_ll_p (z.C,z.P)
-  z.O1  = C1.center
-  z.T1  = C1.through
-  z.O2  = C2.center
-  z.T2  = C2.through
-}
-\begin{tikzpicture}[scale =.75]
-\tkzGetNodes
-\tkzDrawLines(A,B A,C A,I)
- \tkzDrawCircles(O1,T1 O2,T2)
- \tkzDrawPoints(A,B,C,P,I)
- \tkzLabelPoints(A,B,C,P,I)
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{0.5\textwidth}
-\directlua{
-init_elements()
-  z.A   = point : new ( 0  , 0  )
-  z.B   = point : new ( 6  , 0  )
-  L.AB  = line : new ( z.A,z.B )
-  z.C   = point : new ( 6 ,  4  )
-  L.AC  = line : new ( z.A,z.C )
-  T     = triangle : new (z.A,z.B,z.C)
-  z.P   = point : new ( 3 ,  2  )
-  L.bi  = bisector(z.A,z.B,z.C)
-  z.I   =   L.bi.pb
-  C1,C2 = L.AB : c_ll_p (z.C,z.P)
-  z.O1  = C1.center
-  z.T1  = C1.through
-  z.O2  = C2.center
-  z.T2  = C2.through
-}
-\begin{center}
-  \begin{tikzpicture}[scale = .75]
-  \tkzGetNodes
-  \tkzDrawLines(A,B A,C A,I)
-   \tkzDrawCircles(O1,T1 O2,T2)
-   \tkzDrawPoints(A,B,C,P,I)
-   \tkzLabelPoints(A,B,C,P,I)
-  \end{tikzpicture}
-\end{center}
-\end{minipage}
 
+\begin{tkzexample}[latex=8cm]
+  \directlua{
+  init_elements()
+    z.A= point:new(0, 0)
+    z.B= point:new(6, 0)
+    L.AB  = line:new(z.A, z.B)
+    z.C= point:new(6,  4)
+    L.AC  = line:new(z.A, z.C)
+    T  = triangle:new(z.A, z.B, z.C)
+    z.P= point:new(3,  2)
+    L.bi  = bisector(z.A, z.B, z.C)
+    z.I= L.bi.pb
+    C1,C2 = L.AB:c_ll_p (z.C, z.P)
+    z.O1  = C1.center
+    z.T1  = C1.through
+    z.O2  = C2.center
+    z.T2  = C2.through
+  }
+  \begin{center}
+    \begin{tikzpicture}[scale = .75]
+    \tkzGetNodes
+    \tkzDrawLines(A,B A,C A,I)
+     \tkzDrawCircles(O1,T1 O2,T2)
+     \tkzDrawPoints(A,B,C,P,I)
+     \tkzLabelPoints(A,B,C,P,I)
+    \end{tikzpicture}
+  \end{center}
+\end{tkzexample}
+
+
+
 %subsubsection method_c__ll__p (end)
 % subsection methods_from_class_line (end)
 % section class_line (end)

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-matrices.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-matrices.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-matrices.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -17,19 +17,18 @@
 
 \item  The first method is: [\ref{ssub:method_new}]
 
-  \begin{minipage}{.5\textwidth}
-    \begin{mybox}
-       |M = matrix: new ({{a,b},{c,d}}) | \\
-       or |M = matrix: new {{a,b},{c,d}} | \\
-       a, b, c, et d being real or complex numbers.
-    \end{mybox}
-  \end{minipage}
-  \begin{minipage}{.4\textwidth}
-       \directlua{%
-init_elements ()
-         M = matrix: new {{a,b},{c,d}}
-         tex.print('M = ') M : print ()
-       }
+\begin{minipage}{.5\textwidth}
+\begin{mybox}
+   | M = matrix:new({ { a, b }, { c, d } }) | \\
+   a, b, c, et d being real or complex numbers.
+\end{mybox}
+\end{minipage}
+\begin{minipage}{.4\textwidth}
+\directlua{%
+  init_elements()
+  M = matrix:new({ { a, b }, { c, d } })
+  tex.print('M = ') M : print ()
+}
 
   \end{minipage}
 
@@ -49,7 +48,7 @@
 \end{minipage}
 \begin{minipage}{.4\textwidth}
  \directlua{%
-init_elements ()
+init_elements()
   V = matrix : vector (1,2,3)  tex.print('V = ') V : print ()
   }
 \end{minipage}
@@ -65,7 +64,7 @@
   \end{minipage}
 \begin{minipage}{.4\textwidth}
   \directlua{%
-init_elements ()
+init_elements()
   H = matrix : htm (math.pi/3,1,2,2,1)
    tex.print('H = ') H: print ()
   }
@@ -83,7 +82,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
   \directlua{%
-init_elements ()
+init_elements()
   M = matrix : new {{1,-1},{2,0}}
   M : print ()
   }
@@ -91,7 +90,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
   \directlua{%
-init_elements ()
+init_elements()
   M = matrix : new {{1,-1},{2,0}}
   M : print ()
   }
@@ -138,7 +137,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 M = matrix : new ({{1,2,3},{4,5,6}})
 M : print ()
 tex.print("Rows:  "..M.rows)
@@ -148,7 +147,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 M = matrix : new ({{1,2,3},{4,5,6}})
 M : print ()
 tex.print("Rows:  "..M.rows)
@@ -165,7 +164,7 @@
 \begin{minipage}{.6\textwidth}
 \begin{Verbatim}
   \directlua{%
-init_elements ()
+init_elements()
   M = matrix : square (3,1,1,0,2,-1,-2,1,-1,2)
   M : print ()
   tex.print ('\\\\')
@@ -175,7 +174,7 @@
 \end{minipage}
 \begin{minipage}{.4\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 M = matrix : square (3,1,1,0,2,-1,-2,1,-1,2)
 M : print ()
 tex.print ('\\\\')
@@ -190,7 +189,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
  a = point :new (1,-2)
  b = point :new (0,1)
  c = point :new (1,1)
@@ -202,7 +201,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
  a = point :new (1,-2)
  b = point :new (0,1)
  c = point :new (1,1)
@@ -250,7 +249,7 @@
 \begin{minipage}{.6\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
   A = matrix : new ({{1,2},{2,-1}}) 
   B = matrix : new ({{-1,0},{1,3}})
   S = A + B
@@ -267,7 +266,7 @@
 \end{minipage}
 \begin{minipage}{.4\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
  local function dsp (M,name)
  if name then
  tex.print(name..' = ')print_matrix(M)
@@ -304,7 +303,7 @@
 \begin{minipage}{.5\textwidth}
   \begin{Verbatim}
   \directlua{%
-init_elements ()
+init_elements()
     A = matrix : new ({{1,2},{2,-1}}) 
     B = matrix : new ({{-1,0},{1,3}})
     P = A * B
@@ -317,7 +316,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
  local function dsp (M,name)
  if name then
    tex.print(name..' = ')print_matrix(M)
@@ -394,7 +393,7 @@
 \begin{minipage}{.5\textwidth}
   \begin{Verbatim}
     \directlua{%
-init_elements ()
+init_elements()
     a = point : new (1,0)
     b = point : new (1,1)
     c = point : new (-1,1)
@@ -408,7 +407,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 a = point : new (1,0)
 b = point : new (1,1)
 c = point : new (-1,1)
@@ -431,7 +430,7 @@
 \begin{minipage}{.5\textwidth}
   \begin{Verbatim}
     \directlua{%
-init_elements ()
+init_elements()
     M = matrix : vector (1,2,3)
     M : print () 
     }
@@ -439,7 +438,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
     \directlua{%
-init_elements ()
+init_elements()
     M = matrix : vector (1,2,3)
     M : print () 
     }
@@ -462,7 +461,7 @@
 \begin{minipage}{.5\textwidth}
   \begin{Verbatim}
   \directlua{%
-init_elements ()
+init_elements()
     pi  = math.pi
     M   = matrix : htm (pi/4 , 3 , 1)
     z.A = point : new (2,-1)
@@ -475,7 +474,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
   pi  = math.pi
   M   = matrix : htm (pi/4 , 3 , 1)
   z.A = point : new (2,-1)
@@ -503,7 +502,7 @@
 A 3x3 matrix is created which combines a $\pi/4$ rotation and a $\overrightarrow{t}=(3,1)$ translation.
 
 \directlua{%
-init_elements ()
+init_elements()
   pi  = math.pi
   M   = matrix : htm (pi/4 , 3 , 1)
   M : print ()
@@ -518,7 +517,7 @@
 \end{mybox}
 
 \directlua{%
-init_elements ()
+init_elements()
 pi  = math.pi
 M   = matrix : htm (pi/4 , 3 , 1)
 M :print ()
@@ -542,7 +541,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{verbatim}
 \directlua{%
-init_elements ()
+init_elements()
   W : print ()
   z.P = get_htm_point(W)
   tex.print("The affix of $P$ is: ")
@@ -552,7 +551,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
   W : print ()
   z.P = get_htm_point(W)
   tex.print("The affix of $P$ is: ")
@@ -573,8 +572,8 @@
 
 Then the method \code{htm\_apply} transforms a point, a list of points or an object.
 
-  \directlua{%
-init_elements ()
+\directlua{%
+init_elements()
 pi       = math.pi
 M        = matrix : htm (pi/4 , 3 , 1 )
 z.O      = point : new (0,0)
@@ -597,13 +596,13 @@
 \begin{minipage}{.6\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
   pi     = math.pi
   M      = matrix : htm (pi/4 , 3 , 1 )
   z.O    = point : new (0,0)
   V.ori  = z.O.mtx : homogenization ()
-  z.I    =  point : new (1,0)
-  z.J    =  point : new (0,1)
+  z.I    = point : new (1,0)
+  z.J    = point : new (0,1)
   z.A    = point: new (2,0)
   z.B    = point: new (1,2)
   L.AB   = line : new (z.A,z.B)
@@ -639,7 +638,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{verbatim}
 \directlua{%
-init_elements ()
+init_elements()
   pi = math.pi
   tp = tex.print
   nl = '\\\\'
@@ -660,7 +659,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
     \directlua{%
-init_elements ()
+init_elements()
     pi = math.pi
     tp = tex.print
     nl = '\\\\'
@@ -691,7 +690,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 M = matrix : square (2,2,3,-5,4)
 M : print ()
 }
@@ -699,7 +698,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 M = matrix : square (2,2,3,-5,4)
 M : print ()
 tex.print(S)
@@ -716,7 +715,7 @@
 \vspace{.5em}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
     M = matrix : new ({{math.sqrt(2),math.sqrt(3)},{math.sqrt(4),math.sqrt(5)}})
     M : print ('pmatrix')
 }
@@ -723,7 +722,7 @@
 \end{Verbatim}
 
 \directlua{%
-init_elements ()
+init_elements()
   M = matrix : new ({{math.sqrt(2),math.sqrt(3)},{math.sqrt(4),math.sqrt(5)}})
   tkz_dc = 3
   M : print ('pmatrix')
@@ -739,7 +738,7 @@
 \begin{minipage}{.5\textwidth}
   \begin{Verbatim}
     \directlua{%
-init_elements ()
+init_elements()
     M = matrix : square (2,1,0,0,2)
     M : print () 
     }
@@ -747,7 +746,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
     \directlua{%
-init_elements ()
+init_elements()
     M = matrix : square (2,1,0,0,2)
     M : print () 
     }
@@ -765,7 +764,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
   A = {{1,2},{1,-1}}
   tex.print ('A = ') print_array (A)
   tex.print (' or ')
@@ -778,7 +777,7 @@
 \end{minipage}
  \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
   A = {{1,2},{1,-1}}
   tex.print ('A = ') print_array (A)
   tex.print (' or ')
@@ -798,7 +797,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
   \directlua{%
-init_elements ()
+init_elements()
   M = matrix : new {{1,2},{2,-1}}
   S = M: get(1,1) + M: get(2,2)
   tex.print(S)
@@ -807,7 +806,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 M = matrix : new {{1,2},{2,-1}}
 S = M: get(1,1) + M: get(2,2)
 tex.print(S)
@@ -823,7 +822,7 @@
 \begin{minipage}{.6\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
  A = matrix : new ({{1,2},{2,-1}}) 
  tex.print("Inverse of $A = $")
  B =  A : inverse ()
@@ -833,7 +832,7 @@
 \end{minipage}
 \begin{minipage}{.4\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
   A = matrix : new ({{1,2},{2,-3}}) 
  tex.print("Inverse of $A = $")
  B =  A : inverse ()
@@ -848,7 +847,7 @@
 \begin{minipage}{.6\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
   M = matrix : new ({{1,0,1},{1,2, 1},{0,-1,2}})
   tex.print("$M = $")  print_matrix (M) 
   tex.print('\\\\')
@@ -859,7 +858,7 @@
 \end{minipage}
 \begin{minipage}{.4\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
   M = matrix : new  ({{1,0,1},{1,2,1},{0,-1,2}})
   tex.print("$M = $")  print_matrix (M) tex.print('\\\\')
   tex.print("Inverse of $M = M^{-1} = $")
@@ -878,7 +877,7 @@
 \begin{minipage}{.6\textwidth}
   \begin{Verbatim}
     \directlua{%
-init_elements ()
+init_elements()
       A = matrix : new ({{1,2},{2,-1}}) 
       AT = A : transpose ()
       tex.print("$A^{'T'} = $")
@@ -888,7 +887,7 @@
 \end{minipage}
 \begin{minipage}{.4\textwidth}
     \directlua{%
-init_elements ()
+init_elements()
       A = matrix : new ({{1,2},{2,-1}}) 
       AT = A : transpose ()
       tex.print("$A^{'T'} = $")
@@ -908,7 +907,7 @@
 \begin{minipage}{.6\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
   N =  matrix : new {{1, 0, 3},{2, 1, 0},{-1, 2, 0}}
   tex.print('N = ') print_matrix(N)
   tex.print('\\\\')
@@ -924,7 +923,7 @@
 \end{minipage}
 \begin{minipage}{.4\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
   N =  matrix : new {{1, 0, 3},{2, 1, 0},{-1, 2, 0}}
     tex.print('N = ') print_matrix(N)
   N.a = N : adjugate ()
@@ -948,7 +947,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
   \directlua{%
-init_elements ()
+init_elements()
   Id_3 = matrix : identity (3)
   Id_3 : print ()
   }
@@ -956,7 +955,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
   \directlua{%
-init_elements ()
+init_elements()
 Id_3 = matrix : identity (3)
 Id_3 : print ()
 }
@@ -974,7 +973,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
   \directlua{%
-init_elements ()
+init_elements()
   A = matrix : new  {{5,-3}, {6,-4}}
    tex.print('A = ') A : print ()
    D,P =  A : diagonalize ()
@@ -993,7 +992,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
   \directlua{%
-init_elements ()
+init_elements()
   A = matrix : new  {{5,-3}, {6,-4}}
    tex.print('A = ') A : print ()
    D,P =  A : diagonalize ()
@@ -1018,7 +1017,7 @@
 
 \begin{Verbatim}
   \directlua{%
-init_elements ()
+init_elements()
   local  cos = math.cos
   local  sin = math.sin
   local  pi  = math.pi
@@ -1041,7 +1040,7 @@
 \end{Verbatim}
 
 \directlua{%
-init_elements ()
+init_elements()
 local  cos = math.cos
 local  sin = math.sin
 local  pi  = math.pi

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-misc.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-misc.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-misc.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -26,8 +26,6 @@
 \Igfct{misc}{altitude (z1,z2,z3)} & altitude from z1 \\
 \Igfct{package}{set\_lua\_to\_tex (list)}   & set\_lua\_to\_tex('a','n') defines |\a| and |\n|   \\
 %parabola (a,b,c)   & to get   \\
-\Igfct{math}{value (v) }     &  apply |scale * value |    \\
-\Igfct{math}{real (v) }     &  apply  | value /scale |     \\
 \Igfct{math}{angle\_normalize (an) }   &  to get a value between 0 and $2\pi$ \\
 \Igfct{misc}{barycenter (\{z1,n1\},\{z2,n2\}, ...)} & barycenter of list of points  \\
 \Igfct{math}{solve\_quadratic (a,b,c) }   & gives the solution of $ax^2+bx+c =0$  a,b,c real or complex  [\ref{ssub:function_solve__quadratic}] \\
@@ -72,7 +70,7 @@
 \label{sub:harmonic_division_with_tkzphi}
 \begin{Verbatim}
 \directlua{%
-   init_elements ()
+   init_elements()
    z.a = point: new(0,0)
    z.b = point: new(8,0)
    L.ab = line: new (z.a,z.b)
@@ -88,7 +86,7 @@
 
 
 \directlua{%
-   init_elements ()
+   init_elements()
    z.a = point: new(0,0)
    z.b = point: new(8,0)
    L.ab = line: new (z.a,z.b)
@@ -112,7 +110,7 @@
 \begin{minipage}{0.5\textwidth}
 \begin{Verbatim}
 \directlua{%
- init_elements ()
+ init_elements()
  z.a = point: new (1, 1)
  z.b = point: new (2, 2)
  z.c = point: new (4, 4)
@@ -131,7 +129,7 @@
 \end{minipage}
 \begin{minipage}{0.5\textwidth}
 \directlua{%
-   init_elements ()
+   init_elements()
    z.a = point: new (1, 1)
    z.b = point: new (2, 2)
    z.c = point: new (4, 4)
@@ -150,38 +148,18 @@
   \end{tikzpicture}
 \end{center}
 
-
 \end{minipage}
-
 % subsection function_islinear (end)
 
-\subsection{Function  value }% (fold)
-\label{sub:function_value}
-
-value to apply scaling if necessary
-
-If |scale = 1.2| with a = value(5) the actual value of |a| will be $5\times 1.2 = 6$.
-
-% subsubsection function_value (end)
-
-\subsection{Function  real }% (fold)
-\label{ssub:function_real}
-
-If |scale = 1.2| with a = 6 then real(a) = $6 / 1.2 = 5$ .
-
-% subsection function_real (end)
-
-
 \subsection{Transfer from lua to \TEX} % (fold)
 \label{sub:transfer_from_lua_to_tex}
 It's possible to transfer variable from Lua to \TEX{} with the macro 
 \tkzcname{tkzUseLua}.
 
-
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.A            = point : new (0 , 0)
    z.B            = point : new (3 , 2)
    z.C            = point : new (2 , 5)
@@ -202,7 +180,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
    z.A            = point : new (0 , 0)
    z.B            = point : new (3 , 2)
    z.C            = point : new (2 , 5)
@@ -230,7 +208,7 @@
 \label{sub:normalized_angles}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.a      = point: new(0, 0)
    z.b      = point: new(-3, -3)
    z.c      = point: new(0, 3)
@@ -248,7 +226,7 @@
 
 \end{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 z.a = point: new(0, 0)
 z.b = point: new(-3, -3)
 z.c = point: new(0, 3)
@@ -296,7 +274,7 @@
 \begin{minipage}{0.6\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.a   = point: new(0, 0)
    z.b   = point: new(-2, -2)
    z.c   = point: new(0, 3)
@@ -318,7 +296,7 @@
 \end{minipage}
 \begin{minipage}{0.4\textwidth}
 \directlua{%
-  init_elements ()
+  init_elements()
   z.a   = point: new(0, 0)
   z.b   = point: new(-2, -2)
   z.c   = point: new(0, 3)
@@ -350,7 +328,7 @@
 \begin{minipage}{0.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.A    = point: new(0,0)
    z.B    = point: new(5,0)
    z.C    = point: new(0,3)
@@ -372,7 +350,7 @@
 \end{minipage}
 \begin{minipage}{0.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
  z.A    = point: new(0,0)
  z.B    = point: new(5,0)
  z.C    = point: new(0,3)
@@ -414,7 +392,7 @@
 \begin{minipage}{.5\textwidth}
    \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.a   = point: new (0, 0)
    z.b   = point: new (5, -2)
    z.c   = point: new (2, 3)
@@ -441,7 +419,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
    z.a   = point: new (0, 0)
    z.b   = point: new (5, -2)
    z.c   = point: new (2, 3)
@@ -485,7 +463,7 @@
 \begin{minipage}{.6\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
     tex.sprint('Solve : $x^2+1=0$ The solution set is  ')
     r1,r2 = solve_quadratic(1,0,1)
     tex.print('\\{'..tostring(r1)..' , '..tostring(r2)..'\\}')
@@ -505,7 +483,7 @@
 \end{minipage}
 
 \directlua{%
-init_elements ()
+init_elements()
     tex.sprint('Solve : $x^2+1=0$ The solution set is  ')
     r1,r2 = solve_quadratic(1,0,1)
     tex.print('\\{'..tostring(r1)..' , '..tostring(r2)..'\\}')

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-occs.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-occs.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-occs.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -17,7 +17,7 @@
 \vspace{6pt}
 \begin{Verbatim}
 \directlua{
- init_elements ()
+ init_elements()
 z.O       = point : new (0,0)
 z.i       = point : new (1,0)
 z.j       = point : new (0,1)
@@ -79,7 +79,7 @@
 \end{Verbatim}
 
 \directlua{
- init_elements ()
+ init_elements()
 z.O       = point : new (0,0)
 z.i       = point : new (1,0)
 z.j       = point : new (0,1)

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-parallelogram.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-parallelogram.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-parallelogram.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -40,7 +40,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 z.A         = point : new ( 0 , 0 )
 z.B         = point : new ( 4 , 1 )
 z.C         = point : new ( 7 , 5 )
@@ -63,7 +63,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.A         = point : new ( 0 , 0 )
 z.B         = point : new ( 4 , 1 )
 z.C         = point : new ( 7 , 5 )
@@ -115,7 +115,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 z.A      = point : new ( 0 , 0 )
 z.B      = point : new ( 3 , 1 )
 z.C      = point : new ( 4 , 3 )
@@ -135,7 +135,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.A      = point : new ( 0 , 0 )
 z.B      = point : new ( 3 , 1 )
 z.C      = point : new ( 4 , 3 )

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-point.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-point.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-point.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -25,13 +25,13 @@
     \nodepart{two}\texttt{im (real)}
     \nodepart{three}\texttt{type = 'point'}
     \nodepart{four}\texttt{argument (rad)}
-     \nodepart{five}\texttt{modulus (cm)}
-       \nodepart{six}\texttt{mtx (matrix)}
+    \nodepart{five}\texttt{modulus (cm)}
+    \nodepart{six}\texttt{mtx (matrix)}
   };
   
     \hspace{\fill}  \texttt{Methods}\hspace{\fill}
     
-        \tikz\node[minimum width=\size,font=\small,
+    \tikz\node[minimum width=\size,font=\small,
     draw, fill=orange!20,sharp corners,
     rectangle split, rectangle split parts=4
   ] {
@@ -89,7 +89,7 @@
 
 \begin{mybox}
    Creation \\
-   |z.A = point: new (1,2) |
+   |z.A = point:new (1,2) |
 \end{mybox}
  The point $A$ has coordinates $x=1$ and $y=2$. If you use the notation |z.A|, then $A$ will be  referenced as a node in \TIKZ\ or in \pkg{tkz-euclide}.
 
@@ -119,15 +119,15 @@
 \label{ssub:example_point_attributes}
 
 \directlua{
-init_elements ()
-   z.M = point: new (1,2)
+init_elements()
+   z.M = point:new(1,2)
 }
 \hspace*{\fill}
 
 \begin{Verbatim}
 \directlua{
-   init_elements ()
-   z.M = point: new (1,2)}
+   init_elements()
+   z.M = point:new(1,2)}
 \end{Verbatim}
 \pgfkeys{/pgf/number format/.cd,std,precision=2}
 \let\pmpn\pgfmathprintnumber
@@ -145,7 +145,7 @@
 \tkzDrawSegments(O,M)
 \tkzLabelSegment[above,sloped](O,M){%
 $|z_M| =\sqrt{5}\approx \pmpn{\tkzUseLua{z.M.modulus}}$ cm}
-\tkzLabelPoint[right](M){$M : z_M = 1 + 2i$}
+\tkzLabelPoint[right](M){$M: z_M = 1 + 2i$}
 \tkzDrawPoints(M,A,O,B)
 \tkzPointShowCoord(M)
 \tkzLabelPoint[below,teal](A){$\tkzUseLua{z.M.re}$}
@@ -167,7 +167,7 @@
    \tkzDrawSegments(O,M)
    \tkzLabelSegment[above,sloped](O,M){%
    $|z_M| =\sqrt{5}\approx \pmpn{\tkzUseLua{z.M.modulus}}$ cm}
-   \tkzLabelPoint[right](M){$M : z_M = 1 + 2i$}
+   \tkzLabelPoint[right](M){$M: z_M = 1 + 2i$}
    \tkzDrawPoints(M,A,O,B)
    \tkzPointShowCoord(M)
    \tkzLabelPoint[below,teal](A){$\tkzUseLua{z.M.re}$}
@@ -183,7 +183,7 @@
      \item \texttt{z.M.type} = 'point'
      \item \texttt{z.M.argument} = $\theta \approx \pmpn{\tkzUseLua{z.M.argument}}$ rad
      \item \texttt{z.M.modulus} = $|z_M| =\sqrt{5}\approx \pmpn{\tkzUseLua{z.M.modulus}}$ cm
-     \item \texttt{z.M.mtx} =  \tkzUseLua{z.M.mtx : print ()}
+     \item \texttt{z.M.mtx} =  \tkzUseLua{z.M.mtx:print()}
      \end{itemize}
    \end{mybox}
        };
@@ -196,22 +196,22 @@
 \subsubsection{Attribute \Iattr{point}{mtx}} % (fold)
 \label{ssub:attribute_iattr_point_mtx}
 
-This method allows the point to be used in conjunction with matrices.
+This attributes allows the point to be used in conjunction with matrices.
 
 \vspace{6pt}
 \begin{minipage}{.5\textwidth}
-\begin{Verbatim}
+\begin{SVerbatim}
   \directlua{
-  z.A = point : new (2,-1)
-  z.A.mtx : print () 
+  z.A = point:new(2,-1)
+  z.A.mtx:print() 
   }
-\end{Verbatim}
+\end{SVerbatim}
 \end{minipage}
   \begin{minipage}{.5\textwidth}
     \begin{center}
       \directlua{
-      z.A = point : new (2,-1)
-      z.A.mtx : print () 
+      z.A = point:new(2,-1)
+      z.A.mtx:print() 
       }
     \end{center}
   \end{minipage}
@@ -224,12 +224,12 @@
 \label{ssub:argand_diagram}
 \normalsize
 \begin{minipage}{\textwidth}
-\begin{Verbatim}
+\begin{SVerbatim}
 \directlua{
-init_elements ()
-   z.A = point : new ( 2 , 3 )
-   z.O = point : new ( 0 , 0 )
-   z.I = point : new ( 1 , 0 )
+init_elements()
+   z.A = point:new(2, 3)
+   z.O = point:new(0, 0)
+   z.I = point:new(1, 0)
 }
 \begin{tikzpicture}
    \tkzGetNodes
@@ -243,15 +243,15 @@
    \tkzLabelSegment[above,anchor=south,sloped](O,A){ OA = modulus of $z_A$}
   \tkzLabelAngle[anchor=west,pos=.5](I,O,A){$\theta$ = argument of $z_A$}
 \end{tikzpicture}
-\end{Verbatim}
+\end{SVerbatim}
 \end{minipage}
 
 \begin{minipage}{\textwidth}
 \directlua{
-init_elements ()
-      z.A = point : new ( 2 , 3 )
-      z.O = point : new ( 0 , 0 )
-      z.I = point : new ( 1 , 0 )
+init_elements()
+      z.A = point:new(2, 3)
+      z.O = point:new(0, 0)
+      z.I = point:new(1, 0)
 }
 \begin{center}
   \begin{tikzpicture}
@@ -284,100 +284,88 @@
 \captionof{table}{Functions \& Methods of the class point.}\label{point:met}
 \begin{tabular}{lll}
 \toprule
-\textbf{Functions} & \textbf{Application}& \\
+
+\textbf{Methods} & \textbf{Reference} \\
+\textbf{Creation} &\\
+\Imeth{point}{new(r,r)}     & [\ref{ssub:method_point_new}; \ref{ssub:method_normalize}] \\
+\Imeth{point}{polar(d,an)}   &  [\ref{ssub:method_point_polar}; \ref{sub:archimedes}] \\
+\Imeth{point}{polar\_deg(d,an)} & [\ref{ssub:method_point_polar_deg}]   \\
 \midrule
-\Igfct{point}{new(r,r)}    & |z.A = point : new(1,2)| & [\ref{ssub:method_normalize}] \\
-\Igfct{point}{polar (d,an)}  & |z.A = point : polar(1,math.pi/3)| &  [\ref{sub:archimedes}] \\
-\Igfct{point}{polar\_deg (d,an)} &    an in deg    &  polar coordinates an deg \\
+
+\textbf{Points} & \textbf{Reference}\\
 \midrule
-\textbf{Methods} & \textbf{Application}& \\
+\Imeth{point}{north(r)} &   \ref{ssub:methods}]   \\
+\Imeth{point}{south(r)} &  \\
+\Imeth{point}{east(r)}  &  \\
+\Imeth{point}{west(r)}  &  \\
+\Imeth{point}{normalize()} &   [\ref{ssub:method_normalize}] \\
+\Imeth{point}{normalize\_from(pt)} &   [\ref{ssub:method_normalize}] \\
+\Imeth{point}{orthogonal(d)} & [\ref{ssub:orthogonal_method}]\\
+\Imeth{point}{at()} &   [\ref{ssub:_imeth_point_at_method}] \\
 \midrule
-\textbf{Points} &&\\
+
+\textbf{Transformations} &\textbf{Reference}\\
 \midrule
-\Imeth{point}{north(r)} & |r| distance to the point (1 if empty) &  \ref{ssub:methods}]   \\
-\Imeth{point}{south(r)} & &  \\
-\Imeth{point}{east(r)}  &  & \\
-\Imeth{point}{west(r)}  &  & \\
-\Imeth{point}{normalize()} &  |z.b = z.a: normalize ()| &  [\ref{ssub:method_normalize}] \\
-\Imeth{point}{get\_points (obj)}     & retrieves points from the object & [\ref{ssub:object_rotation}; \ref{ssub:apollonius_circle_ma_mb_k} ]  \\
-\Imeth{point}{orthogonal (d)} & |z.B=z.A:orthogonal(d)| &  $\overrightarrow{OB}\perp \overrightarrow{OA}$  and $OB=d$.  [\ref{ssub:orthogonal_method}]\\
-\Imeth{point}{at ()} & |z.X = z.B : at (z.A)| &  $\overrightarrow{OB}= \overrightarrow{AX}$  and $OB=d$.  [\ref{ssub:_imeth_point_at_method}] \\
- \midrule
-  \textbf{Transformations} &&\\
- \midrule
-  \Imeth{point}{symmetry(obj)} & obj : point, line, etc. & [\ref{ssub:object_symmetry}] \\
- \Imeth{point}{rotation(an , obj)}  & point, line, etc.  & [\ref{ssub:object_rotation}] \\
-  \Imeth{point}{homothety(r,obj)}     & |z.c = z.a : homothety (2,z.b)| & [\ref{sub:homothety}]   \\
-  \midrule
-   \textbf{Misc.} &&\\
-  \midrule
-    \Imeth{point}{print()} & displays the affix of the point & [\ref{ssub:object_symmetry} ]\\
+\Imeth{point}{symmetry(obj)} & [\ref{ssub:object_symmetry}] \\
+\Imeth{point}{rotation(an, obj)}  &  [\ref{ssub:object_rotation}] \\
+\Imeth{point}{homothety(r,obj)}    & [\ref{ssub:method_point_homothety_k_obj}]   \\
+\midrule
+
+\textbf{Misc.} &\\
+\midrule
+\Imeth{point}{print()} & [\ref{ssub:object_symmetry} ]\\
+\midrule
+
+\textbf{Associated.} &\\ 
+\Igfct{misc}{get\_points(obj)}  &  [\ref{sub:_misc_get_points_obj}; \ref{ssub:object_rotation}; \ref{ssub:apollonius_circle_ma_mb_k} ]  \\
 \bottomrule %
 \end{tabular}
 \egroup
 
-\subsubsection{Method  \Imeth{point}{north (d)} } % (fold)
-\label{ssub:example_method_imeth_point_north_d}
+\subsubsection{Method  \Imeth{point}{new(r,r)}} % (fold)
+\label{ssub:method_point_new}
 
-This function defines a point located on a vertical line passing through the given point. This function is useful if you want to report a certain distance (Refer to the following example).
-If |d| is absent then it is considered equal to 1.
+This method creates a point
 
-\begin{minipage}{.5\textwidth}
-\begin{Verbatim}
-\directlua{
-   init_elements ()
-   z.O   = point : new ( 0, 0 )
-   z.A   = z.O : east ()
-   z.Ap  = z.O : east (2) : north (2)
-   z.B   = z.O : north ()
-   z.C   = z.O : west ()
-   z.D   = z.O : south ()
-}
-\begin{tikzpicture}
-   \tkzGetNodes
-   \tkzDrawPolygon(A,B,C,D)
-   \tkzDrawPoints(A,B,C,D,O,A')
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.5\textwidth}
-\directlua{
-   init_elements ()
-   z.O = point : new ( 0, 0 )
-   z.A = z.O : east ()
-   z.Ap = z.O : east (2) : north (2)
-   z.B = z.O : north ()
-   z.C = z.O : west ()
-   z.D = z.O : south ()
-}
-
-\begin{center}
-  \begin{tikzpicture}[scale = 1.5]
-     \tkzGetNodes
-     \tkzDrawPolygon(A,B,C,D)
-     \tkzDrawPoints(A,B,C,D,O,A')
-     \tkzLabelPoints(A,B,C,D,O,A')
+\begin{tkzexample}[latex = 7cm]
+  \directlua{
+    init_elements()
+     z.A  = point:new(0, 0)
+     z.B  = point:new(2, 1)
+  }
+  \begin{tikzpicture}[gridded]
+  \tkzGetNodes
+  \tkzDrawPoints(A,B)
+  \tkzLabelPoints(A,B) 
   \end{tikzpicture}
-\end{center}
+\end{tkzexample}
 
-\end{minipage}
-% subsubsection example_method_imeth_point_north_d (end)
+% subsubsection method_point_new (end)
 
+\subsubsection{Method \Imeth{point}{polar(r,an)}} % (fold)
+\label{ssub:method_point_polar}
 
-\subsubsection{Method \Imeth{point}{polar} } % (fold)
-\label{ssub:example_polar_method}
-
 This involves defining a point using its modulus and argument.
+The first proposed method was the one below, but since the latest version, I've preferred to 
+add a \code{polar} function to make the code more homogeneous. 
+ 
+\begin{mybox}
+\begin{SVerbatim}
+  z.B = point:polar(2, math.pi/4)
+  better 
+  z.B = point:new(polar(2, math.pi/4))
+\end{SVerbatim}
+\end{mybox}
 
-\begin{minipage}{0.6\textwidth}
-\begin{Verbatim}
+\begin{tkzexample}[latex = 7cm]
 \directlua{
-   init_elements ()
-   z.O     = point:   new  (0, 0)
-   z.A     = point:   new  (3, 0)
-   z.F     = point:   polar (3, math.pi/3)
+  init_elements()
+  z.O = point:new(0, 0)
+  z.A = point:new(3, 0)
+  z.F = point:new(polar(3, math.pi/3))
 }
-\begin{tikzpicture}
+\begin{center}
+\begin{tikzpicture}[scale=.75]
    \tkzGetNodes
    \tkzDrawCircle(O,A)
    \tkzDrawSegments[new](O,A)
@@ -386,333 +374,353 @@
    \tkzLabelPoints[below right=6pt](A,O)
    \tkzLabelPoints[above](F)
 \end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{0.4\textwidth}
+\end{center}
+
+\end{tkzexample}
+% subsubsection method_point_polar (end)
+
+
+\subsubsection{Method \Imeth{point}{polar\_deg(d,an)}} % (fold)
+\label{ssub:method_point_polar_deg}
+
+
+\begin{tkzexample}[latex=7cm]
 \directlua{
-init_elements ()
-    z.O     = point:   new  (0, 0)
-    z.A     = point:   new  (3, 0)
-    z.F     = point:   polar (3, math.pi/3)
+ init_elements()
+ z.A = point:new(0, 0)
+ z.B = point:new(polar_deg(3, 60))
+ z.C = point:new(polar_deg(3, 0))
 }
-
 \begin{center}
-  \begin{tikzpicture}[scale = .75]
+  \begin{tikzpicture}[gridded]
   \tkzGetNodes
-  \tkzDrawCircle(O,A)
-  \tkzDrawSegments[new](O,A)
-  \tkzDrawSegments[purple](O,F)
-  \tkzDrawPoints(A,O,F)
-  \tkzLabelPoints[below right=6pt](A,O)
-  \tkzLabelPoints[above](F)
+  \tkzDrawPolygon(A,B,C)
+  \tkzDrawPoints(A,B,C)
+  \tkzLabelPoints(A,C)
+  \tkzLabelPoints[above](B)
   \end{tikzpicture}
 \end{center}
+\end{tkzexample}
 
+% subsubsection method_point_polar_deg(end)
 
-\end{minipage}
-% subsubsection example_polar_method (end)
+\subsubsection{Method  \Imeth{point}{north(d)} } % (fold)
+\label{ssub:example_method_imeth_point_north_d}
 
-\subsubsection{Method \Imeth{point}{normalize ()}} % (fold)
-\label{ssub:method_normalize}
+This function defines a point located on a vertical line passing through the given point. This function is useful if you want to report a certain distance (Refer to the following example).
+If |d| is absent then it is considered equal to 1.
 
-The result is a point located between the origin and the initial point at a distance of $1$ from the origin.
 
-\vspace{6pt}
+\begin{tkzexample}[latex = 7cm]
 \directlua{
-init_elements ()
-z.O = point : new (0,0)
-z.A = point : new (2,1)
-z.B = z.A : normalize ()
-z.I = point : new (1,0)
+ init_elements()
+ z.O = point:new(0, 0)
+ z.A = z.O:east()
+ z.Ap= z.O:east(1):north(1)
+ z.B = z.O:north()
+ z.C = z.O:west()
+ z.D = z.O:south()
 }
-
-\begin{minipage}{0.5\textwidth}
-\begin{Verbatim}
-\directlua{
-init_elements ()
-   z.O = point : new (0,0)
-   z.A = point : new (1,2)
-   z.B = z.A : normalize ()
-   z.I = point : new (1,0)
-}
-\begin{tikzpicture}[scale = 1.5]
-   \tkzGetNodes
-   \tkzDrawSegment(O,A)
-   \tkzDrawCircle(O,B)
-   \tkzDrawPoints(O,A,B,I)
-   \tkzLabelPoints(O,A,B)
-   \tkzLabelPoint[below right](I){$1$}
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{0.5\textwidth}
 \begin{center}
-  \begin{tikzpicture}[scale = 1.5]
-  \tkzGetNodes
-  \tkzDrawSegment(O,A)
-  \tkzDrawCircle(O,B)
-  \tkzDrawPoints(O,A,B,I)
-  \tkzLabelPoints(O,A)
-  \tkzLabelPoints[above](B)
-  \tkzLabelPoint[below right](I){$1$}
+  \begin{tikzpicture}
+     \tkzGetNodes
+     \tkzDrawPolygon(A,B,C,D)
+     \tkzDrawPoints(A,B,C,D,O,A')
   \end{tikzpicture}
 \end{center}
-  \end{minipage}
 
+\end{tkzexample}
+% subsubsection example_method_imeth_point_north_d (end)
 
-% subsubsection method_normalize (end)
 
-\subsubsection{Method \Imeth{point}{orthogonal (d)}} % (fold)
-\label{ssub:orthogonal_method}
+\subsubsection{Method \Imeth{point}{normalize()}} % (fold)
+\label{ssub:method_normalize}
 
-Let $O$ be the origin of the plane. The \code{orthogonal (d)} method is used to obtain a point $B$ from a point $A$ such that $\overrightarrow{OB}\perp \overrightarrow{OA}$ with $OB=OA$ if $d$ is empty, otherwise $OB = d$.
+The result is a point located between the origin and the initial point at a distance of $1$ from the origin. It is possible to apply this method to a segment, |z.U = (z.C-z.B):normalize()+z.B|, here |BU =1| and $U$ is a point on the segment $[BC]$. There are two other ways of achieving the same result: 
 
-\begin{minipage}{.6\textwidth}
-\begin{Verbatim}
+\begin{mybox}
+  \begin{SVerbatim}
+    or z.U = z.C:normalize_from(z.B)
+    or z.U = L.BC:normalize()
+  \end{SVerbatim}
+\end{mybox}
+
+The second requires the creation of the line \code{L.BC}
+
+
+\vspace{6pt}
+
+\begin{tkzexample}[latex=8cm]
 \directlua{
-init_elements ()
-  z.A = point : new (  3 , 1  )
-  z.B = z.A : orthogonal (1)
-  z.O = point : new ( 0,0  )
-  z.C = z.A : orthogonal ()
+  z.A  = point:new(0, 0)
+  z.B  = point:new(4, 3)
+  z.C  = point:new(1, 5)
+  L.AB = line:new(z.A, z.B)
+  L.BC = line:new(z.B, z.C)
+% z.U  =(z.C-z.B):normalize()+z.B
+  z.N = z.B:normalize()
+  z.U = z.C:normalize_from(z.B)
+% z.U = L.BC:normalize()
 }
-\begin{tikzpicture}[gridded]
-  \tkzGetNodes
-  \tkzDrawSegments(O,A O,C)
-  \tkzDrawPoints(O,A,B,C)
-  \tkzLabelPoints[below right](O,A,B,C)
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawLines(A,B  B,C)
+\tkzDrawPoints(A,B,C,U,N)
+\tkzLabelPoints(A,B,C,U,N)
+\tkzDrawSegment(B,C)
 \end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.4\textwidth}
-\directlua{%
-init_elements ()
-  z.A = point : new (  3 , 1  )
-  z.B = z.A : orthogonal (1)
-  z.O = point : new ( 0,0  )
-  z.C = z.A : orthogonal ()
-}
-\begin{center}
-  \begin{tikzpicture}[gridded]
-    \tkzGetNodes
-    \tkzDrawSegments(O,A O,C)
-    \tkzDrawPoints(O,A,B,C)
-    \tkzLabelPoints[below right](O,A,B,C)
-  \end{tikzpicture}
-\end{center}
+\end{tkzexample}
 
-\end{minipage}
-% subsubsection orthogonal_method (end)
+% subsubsection method_normalize (end)
 
-\subsubsection{Method \Imeth{point}{at}} % (fold)
+\subsubsection{Method \Imeth{point}{orthogonal(d)}} % (fold)
+\label{ssub:orthogonal_method}
+
+Let $O$ be the origin of the plane. The \code{orthogonal (d)} method is used to obtain a point $B$ from a point $A$ such that $\overrightarrow{OB}\perp \overrightarrow{OA}$ with $OB=OA$ if $d$ is empty, otherwise $OB = d$.
+
+
+
+\begin{tkzexample}[latex=7cm]
+  \directlua{
+  init_elements()
+    z.A = point:new(3, 1)
+    z.B = z.A:orthogonal(1)
+    z.O = point:new(0, 0)
+    z.C = z.A:orthogonal()
+  }
+  \begin{center}
+    \begin{tikzpicture}[gridded]
+      \tkzGetNodes
+      \tkzDrawSegments(O,A O,C)
+      \tkzDrawPoints(O,A,B,C)
+      \tkzLabelPoints[below right](O,A,B,C)
+    \end{tikzpicture}
+  \end{center}
+\end{tkzexample}
+
+
+% subsubsection orthogonal_method(end)
+
+\subsubsection{Method \Imeth{point}{at(pt)}} %(fold)
 \label{ssub:_imeth_point_at_method}
 
 This method is complementary to the previous one, so you may not wish to have $\overrightarrow{OB}\perp \overrightarrow{OA}$ but $\overrightarrow{AB}\perp \overrightarrow{OA}$.
 
-\begin{minipage}{.6\textwidth}
-\begin{Verbatim}
-\directlua{%
-init_elements ()
-z.O = point : new ( 0,0  )
-z.A = point : new (  3 , 2  )
-z.B = z.A : orthogonal (1)
-z.C = z.A+z.B
-z.D =(z.C-z.A):orthogonal(2) : at (z.C) 
-}
-  \begin{tikzpicture}[gridded]
-  \tkzGetNodes
-  \tkzLabelPoints[below right](O,A,C)
-  \tkzLabelPoints[above](B,D)
-  \tkzDrawSegments(O,A A,B A,C C,D O,B)
-  \tkzDrawPoints(O,A,B,C,D)
-  \end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.4\textwidth}
-\directlua{%
-init_elements ()
-z.O = point : new ( 0,0 )
-z.A = point : new ( 3 ,2)
-z.B = z.A : orthogonal (1)
-z.C = z.A+z.B
-z.D =(z.C-z.A):orthogonal(2) : at (z.C) 
-}
-\begin{center}
-  \begin{tikzpicture}[gridded]
-  \tkzGetNodes
-  \tkzLabelPoints[below right](O,A,C)
-  \tkzLabelPoints[above](B,D)
-  \tkzDrawSegments(O,A A,B A,C C,D O,B)
-  \tkzDrawPoints(O,A,B,C,D)
-  \end{tikzpicture}
-\end{center}
-\end{minipage}
 
+\begin{tkzexample}[latex=7cm]
+  \directlua{%
+  init_elements()
+  z.O = point:new(0,0 )
+  z.A = point:new(3, 2 )
+  z.B = z.A:orthogonal(1)
+  z.C = z.A+z.B
+  z.D =(z.C-z.A):orthogonal(2):at(z.C) 
+  }
+  \begin{center}
+    \begin{tikzpicture}[gridded]
+    \tkzGetNodes
+    \tkzLabelPoints[below right](O,A,C)
+    \tkzLabelPoints[above](B,D)
+    \tkzDrawSegments(O,A A,B A,C C,D O,B)
+    \tkzDrawPoints(O,A,B,C,D)
+    \end{tikzpicture}
+  \end{center}
+\end{tkzexample}
+
 % subsubsection _imeth_point_at_method (end)
 
-\subsubsection{Method \Imeth{point}{rotation} first example} % (fold)
+\subsubsection{Method \Imeth{point}{rotation(obj)} first example} % (fold)
 \label{ssub:example_rotation_of_points}
 
 The arguments are the angle of rotation in radians, and here a list of points.
 
-\begin{minipage}{.6\textwidth}
-\begin{Verbatim}
-\directlua{%
-init_elements ()
-  z.a       = point:  new(0, -1)
-  z.b       = point:  new(4, 0)
-  z.o       = point:  new(6, -2)
-  z.ap,z.bp = z.o : rotation (math.pi/2,z.a,z.b)
-}
-  \begin{tikzpicture}
-  \tkzGetNodes
-  \tkzDrawLines(o,a o,a' o,b o,b')
-  \tkzDrawPoints(a,a',b,b',o)
-  \tkzLabelPoints(b,b',o)
-  \tkzLabelPoints[below left](a,a')
-  \tkzDrawArc(o,a)(a')
-  \tkzDrawArc(o,b)(b')
+
+\begin{tkzexample}[latex=7cm]
+  \directlua{%
+  init_elements()
+    z.a       = point:new(0, -1)
+    z.b       = point:new(4, 0)
+    z.o       = point:new(6, -2)
+    z.ap,z.bp = z.o:rotation(math.pi/2,z.a,z.b)
+  }
+  \begin{center}
+  \begin{tikzpicture}[scale = .5]
+     \tkzGetNodes
+     \tkzDrawLines(o,a o,a' o,b o,b')
+     \tkzDrawPoints(a,a',b,b',o)
+     \tkzLabelPoints(b,b',o)
+     \tkzLabelPoints[below left](a,a')
+     \tkzDrawArc(o,a)(a')
+     \tkzDrawArc(o,b)(b')
   \end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.4\textwidth}
-\directlua{%
-  init_elements ()
-  z.a = point:  new(0, -1)
-  z.b = point:  new(4, 0)
-  z.o = point:  new(6, -2)
-  z.ap,z.bp =  z.o : rotation (math.pi/2,z.a,z.b)
-}
-
-\begin{center}
-\begin{tikzpicture}[scale = .5]
-   \tkzGetNodes
-   \tkzDrawLines(o,a o,a' o,b o,b')
-   \tkzDrawPoints(a,a',b,b',o)
-   \tkzLabelPoints(b,b',o)
-   \tkzLabelPoints[below left](a,a')
-   \tkzDrawArc(o,a)(a')
-   \tkzDrawArc(o,b)(b')
-\end{tikzpicture}
-\end{center}
-\end{minipage}
+  \end{center}
+\end{tkzexample}
 % subsubsection example_rotation_of_points (end)
 
-\subsubsection{Method \Imeth{point}{rotation} second example} % (fold)
+\subsubsection{Method \Imeth{point}{rotation(an,obj)} second example} % (fold)
 \label{ssub:object_rotation}
-Rotate a triangle by an angle of $\pi/6$ around $O$.
+Rotate a triangle by an angle of $\pi/6$ around $O$.  Please refer to the end of this section for the use of \code{get\_points}.
 
-\begin{minipage}{.5\textwidth}
-\begin{Verbatim}
+
+\begin{tkzexample}[latex=7cm]
 \directlua{%
-init_elements ()
-   z.O   = point: new(-1, -1)
-   z.A   = point: new(2, 0)
-   z.B   = point: new(5, 0)
-   L.AB  = line: new(z.Az.B)
-   T.ABC = L.AB: equilateral()
-   S.fig = L.AB: square ()
-   _,_,
-   z.E,z.F = get_points(S.fig)
-   S.new = z.O : rotation(math.pi/3,S.fig)
-   _,_,z.Ep,z.Fp = get_points( S.new )
-   z.C = T.ABC.pc
-   T.ApBpCp = z.O : rotation(math.pi/3,T.ABC)
-   z.Ap,z.Bp,z.Cp = get_points ( T.ApBpCp)
+ init_elements()
+ z.O  = point:new(-1, -1)
+ z.A  = point:new(2, 0)
+ z.B  = point:new(5, 0)
+ L.AB  = line:new(z.A, z.B)
+ T.ABC = L.AB:equilateral()
+ S.fig = L.AB:square()
+ _,_,z.E,z.F = get_points(S.fig)
+ S.new = z.O:rotation(math.pi/3, S.fig)
+ _,_,z.Ep,z.Fp = get_points(S.new)
+ z.C = T.ABC.pc
+ T.ApBpCp = z.O:rotation(math.pi/3, T.ABC)
+ z.Ap,z.Bp,z.Cp = get_points(T.ApBpCp)
 }
-\begin{tikzpicture}[scale = .75]
-   \tkzGetNodes
-   \tkzDrawPolygons(A,B,C A',B',C'%
-          A,B,E,F A',B',E',F')
-   \tkzDrawPoints (A,B,C,A',B',C',O)
-   \tkzLabelPoints (A,B,C,A',B',C',O)
-   \tkzDrawArc[delta=0,->](O,A)(A')
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.5\textwidth}
-\directlua{%
-init_elements ()
-z.O = point : new ( -1 , -1 )
-z.A = point : new ( 2 , 0 )
-z.B = point : new ( 5 , 0 )
-L.AB = line : new (z.A,z.B)
-T.ABC = L.AB : equilateral ()
-S.fig = L.AB : square ()
-_,_,z.E,z.F = get_points (   S.fig   )
-S.new = z.O : rotation (math.pi/3,S.fig)
-_,_,z.Ep,z.Fp = get_points (   S.new   )
-z.C = T.ABC.pc
-T.ApBpCp = z.O : rotation (math.pi/3,T.ABC)
-z.Ap,z.Bp,z.Cp = get_points ( T.ApBpCp)
-}
-
 \begin{center}
-\begin{tikzpicture}[  scale = .75]
-   \tkzGetNodes
-   \tkzDrawPolygons(A,B,C A',B',C' A,B,E,F A',B',E',F')
-   \tkzDrawPoints (A,B,C,A',B',C',O)
-   \tkzLabelPoints (A,B,C,A',B',C',O)
-    \begin{scope}
-       \tkzDrawArc[delta=0,->,dashed,red](O,A)(A')
-       \tkzDrawSegments[dashed,red](O,A O,A')
-    \end{scope}
+\begin{tikzpicture}[scale = .6]
+ \tkzGetNodes
+ \tkzDrawPolygons(A,B,C A',B',C' A,B,E,F)
+ \tkzDrawPolygons(A',B',E',F')
+ \tkzDrawPoints(A,B,C,A',B',C',O)
+ \tkzLabelPoints(A,B,C,A',B',C',O)
+ \begin{scope}
+  \tkzDrawArc[delta=0,->,dashed,red](O,A)(A')
+  \tkzDrawSegments[dashed,red](O,A O,A')
+ \end{scope}
 \end{tikzpicture}
 \end{center}
-\end{minipage}
+\end{tkzexample}
+
+
 % subsubsection object_rotation (end)
 
-\subsubsection{Method \Imeth{point}{symmetry}} % (fold)
+\subsubsection{Method \Imeth{point}{symmetry}(obj)} % (fold)
 \label{ssub:object_symmetry}
 
-Example of the symmetry of an object
+Example of the symmetry of an object. Please refer to the end of this section for the use of \code{get\_points}.
 
 
-\begin{minipage}{.5\textwidth}
-\begin{Verbatim}
+\begin{tkzexample}[latex=7cm]
+  \directlua{%
+  init_elements()
+    z.a = point:new(0,-1)
+    z.b = point:new(2, 0)
+    L.ab = line:new(z.a,z.b)
+    C.ab = circle:new(z.a,z.b)
+    z.o = point:new(1,1)
+    z.ap,z.bp = get_points(z.o:symmetry(C.ab))
+  }
+  \begin{center}
+    \begin{tikzpicture}
+    \tkzGetNodes
+    \tkzDrawCircles(a,b a',b')
+    \tkzDrawLines(a,a' b,b')
+    \tkzDrawLines[red](a,b a',b')
+    \tkzDrawPoints(a,a',b,b',o)
+    \tkzLabelPoints(a,a',b,b',o)
+    \end{tikzpicture}
+  \end{center}
+\end{tkzexample}
+% subsubsection object_symmetry (end)
+
+\subsubsection{Method \Imeth{point}{homothety(k,obj)}} % (fold)
+\label{ssub:method_point_homothety_k_obj}
+
+It is possible to transform a point, several points or an object.
+
+
+\begin{tkzexample}[latex=7cm]
 \directlua{%
-init_elements ()
-  z.a = point:  new(0,-1)
-  z.b = point:  new(2, 0)
-  L.ab = line : new (z.a,z.b)
-  C.ab = circle : new (z.a,z.b)
-  z.o = point:  new(1,1)
-  z.ap,z.bp =  get_points (z.o: symmetry (C.ab))
+ init_elements()
+ z.A = point:new(0, 0)
+ z.B = point:new(1, 2)
+ z.E = point:new(-3, 2)
+ z.C,z.D = z.E:homothety(2, z.A, z.B)
 }
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircles(a,b a',b')
- \tkzDrawLines(a,a' b,b')
- \tkzDrawLines[red](a,b a',b')
- \tkzDrawPoints(a,a',b,b',o)
- \tkzLabelPoints(a,a',b,b',o)
+\begin{center}
+\begin{tikzpicture}[scale = .5]
+  \tkzGetNodes
+  \tkzDrawPoints(A,B,C,E,D)
+  \tkzLabelPoints(A,B,C,E)
+  \tkzDrawCircles(A,B C,D)
+  \tkzDrawLines(E,C E,D)
 \end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.5\textwidth}
+\end{center}
+\end{tkzexample}
+
+\subsubsection{Method \Imeth{point}{print()}} % (fold)
+\label{ssub:_imeth_point_print}
+
+|tkz_dc = 0| sets the number of decimal places to 0. By default, the \code{ init\_elements()} function sets |tkz_dc| to 2.
+
+\begin{SVerbatim}
+  \directlua{%
+  init_elements()
+  z.A = point:new(1, 2)
+  z.B = point:new(1, -1)
+  z.a = z.A + z.B
+  z.m = z.A * z.B
+  tkz_dc = 0
+  }
+  Les affixes respectives  des points $A$ et $B$ étant 
+   \tkzUseLua{z.A:print()} et \tkzUseLua{z.B:print()},
+  leur somme est  \tkzUseLua{z.a:print()} et 
+  leur produit \tkzUseLua{z.m:print()}.
+\end{SVerbatim}
+
 \directlua{%
-init_elements ()
-  z.a = point:  new(0, -1)
-  z.b = point:  new(2, 0)
-  L.ab = line : new (z.a,z.b)
-  C.ab = circle : new (z.a,z.b)
-  z.o = point:  new(1, 1)
-  z.ap,z.bp =  get_points (z.o: symmetry (C.ab))
+init_elements()
+z.A = point:new(1, 2)
+z.B = point:new(1, -1)
+z.a = z.A + z.B
+z.m = z.A * z.B
+tkz_dc = 0
 }
 
-\begin{center}
-  \begin{tikzpicture}
-  \tkzGetNodes
-  \tkzDrawCircles(a,b a',b')
-  \tkzDrawLines(a,a' b,b')
-  \tkzDrawLines[red](a,b a',b')
-  \tkzDrawPoints(a,a',b,b',o)
-  \tkzLabelPoints(a,a',b,b',o)
-  \end{tikzpicture}
-\end{center}
+Les affixes respectives  des points $A$ et $B$ étant 
+ \tkzUseLua{z.A:print()} et \tkzUseLua{z.B:print()},
+leur somme est  \tkzUseLua{z.a:print()} et 
+leur produit \tkzUseLua{z.m:print()}.
 
-\end{minipage}
-% subsubsection object_symmetry (end)
+
+% subsubsection _imeth_point_print (end)
+
+\subsection{Function \Igfct{misc}{get\_points(obj)}} % (fold)
+\label{sub:_misc_get_points_obj}
+
+This function isn't part of the \code{point} class, but it's related to it. The following classes are objects made up of several points. This function gets the points that define the object, if there are a finite number of them.
+
+For example, you can define a circle by its center and radius. Sometimes, we don't have the points required to draw it with tkz-euclide. \code{get\_points} lets us get these points. Later, we'll see that it's possible to write:
+
+\begin{mybox}
+  \begin{SVerbatim}
+    z.O = C.center| and |z.T = C.through
+\end{SVerbatim}
+ \end{mybox}
+
+
+\begin{tkzexample}[latex=7cm]
+\directlua{
+  z.A = point:new(0,0)
+  z.B = point:new(4,2)
+  C = circle:new(through(midpoint(z.A,z.B),2))
+  z.O,z.T = get_points(C)
+}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawCircle(O,T)
+\tkzDrawPoints(A,B,O,T)
+\tkzLabelPoints(A,B,O,T)
+\end{tikzpicture}
+\end{tkzexample}
+
+
+
+% subsection _misc_get__points_obj (end)
+
+% subsubsection method_point_homothety_k_obj (end)
 % subsection methods_of_the_class_point (end)
 
 % section class_point (end)

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-quadrilateral.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-quadrilateral.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-quadrilateral.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -43,7 +43,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 z.A    = point : new ( 0 , 0 )
 z.B    = point : new ( 4 , 0 )
 z.C    = point : new ( 5 , 1 )
@@ -63,7 +63,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.A      = point : new ( 0 , 0 )
 z.B      = point : new ( 4 , 0 )
 z.C      = point : new ( 5 , 1 )
@@ -108,7 +108,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 z.A      = point : new ( 0 , 0 )
 z.B      = point : new ( 4 , 0 )
 z.D      = point : polar ( 4 , 2*math.pi/3 )
@@ -137,7 +137,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.A      = point : new ( 0 , 0 )
 z.B      = point : new ( 4 , 0 )
 z.D      = point : polar ( 4 , 2*math.pi/3 )

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-rectangle.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-rectangle.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-rectangle.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -42,7 +42,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 z.A   = point : new ( 0 , 0 )
 z.B   = point : new ( 4 , 0 )
 z.C   = point  : new ( 4 , 4)
@@ -63,7 +63,7 @@
 \end{minipage}
 \hspace{\fill}\begin{minipage}{.5\textwidth}
 \directlua{%
-   init_elements ()
+   init_elements()
    z.A   = point : new ( 0 , 0 )
    z.B   = point : new ( 4 , 0 )
    z.C   = point  : new ( 4 , 2)
@@ -120,7 +120,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 z.A     = point : new ( 0 , 0 )
 z.B     = point : new ( 4 , 0 )
 z.I     = point : new ( 4 , 3 )
@@ -141,7 +141,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.A     = point : new ( 0 , 0 )
 z.B     = point : new ( 4 , 0 )
 z.I     = point : new ( 4 , 3 )
@@ -167,7 +167,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 z.A    = point : new ( 0 , 0 )
 z.B    = point : new ( 4 , 3 )
 R.side = rectangle : side (z.A,z.B,3)
@@ -187,7 +187,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.A    = point : new ( 0 , 0 )
 z.B    = point : new ( 4 , 3 )
 R.side = rectangle : side (z.A,z.B,3)
@@ -212,7 +212,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 z.A         = point : new ( 0 , 0 )
 z.C         = point : new ( 4 , 3 )
 R.diag      = rectangle : diagonal (z.A,z.C)
@@ -234,7 +234,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.A         = point : new ( 0 , 0 )
 z.C         = point : new ( 4 , 3 )
 R.diag      = rectangle : diagonal (z.A,z.C)
@@ -260,7 +260,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 z.X    = point : new ( 0 , 0 )
 z.Y    = point : new ( 4 , 2 )
 R.gold = rectangle : gold (z.X,z.Y)
@@ -282,7 +282,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.X    = point : new ( 0 , 0 )
 z.Y    = point : new ( 4 , 2 )
 R.gold = rectangle : gold (z.X,z.Y)

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-regular.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-regular.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-regular.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -34,7 +34,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 z.O     = point:    new (0,0)
 z.I     = point:    new (1,3)
 z.A     = point:    new (2,0)
@@ -55,7 +55,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-   init_elements ()
+   init_elements()
    z.O      = point:    new (0,0)
    z.I      = point:    new (1,3)
    z.A      = point:    new (2,0)

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-square.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-square.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-square.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -42,7 +42,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 z.A        = point  : new ( 0 , 0 )
 z.B        = point  : new ( 4 , 0 )
 z.C        = point  : new ( 4 , 4)
@@ -67,7 +67,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
    \directlua{%
-init_elements ()
+init_elements()
    z.A        = point  : new ( 0 , 0 )
    z.B        = point  : new ( 4 , 0 )
    z.C        = point  : new ( 4 , 4)
@@ -121,7 +121,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-   init_elements ()
+   init_elements()
    z.A         = point : new ( 0 , 0 )
    z.B         = point : new ( 2 , 1 )
    S.side      = square : side (z.A,z.B)
@@ -143,7 +143,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
    \directlua{%
-init_elements ()
+init_elements()
 z.A         = point : new ( 0 , 0 )
 z.B         = point : new ( 2 , 1 )
 S.side      = square : side (z.A,z.B)

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-triangle.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-triangle.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-triangle.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -51,7 +51,7 @@
 \begin{minipage}{.6\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
   z.A       = point: new(0,0)
   z.B       = point: new(5,0)
   z.C       = point: new(2,3)
@@ -70,7 +70,7 @@
 \end{minipage}
 \begin{minipage}{.4\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
    z.A       = point: new(0,0)
    z.B       = point: new(5,0)
    z.C       = point: new(2,3)
@@ -92,7 +92,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.A   = point: new (0 , 0)
    z.B   = point: new (4 , 0)
    z.C   = point: new (0 , 3)
@@ -122,7 +122,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
    z.A   = point: new (0 , 0)
    z.B   = point: new (4 , 0)
    z.C   = point: new (1 , 3)
@@ -189,22 +189,22 @@
 \midrule 
 \Imeth{triangle}{lemoine\_point ()} &  |T.ABC : lemoine_point ()| intersection of the symmedians & [\ref{ssub:method_imeth_line_isosceles}]\\
 
-\Imeth{triangle}{symmedian\_point ()}  & Lemoine point  or the Grebe point& [\ref{ssub:method_imeth_triangle_symmedial}] \\
+\Imeth{triangle}{symmedian\_point()}  & Lemoine point  or the Grebe point& [\ref{ssub:method_imeth_triangle_symmedial}] \\
 
-\Imeth{triangle}{lemoine\_point ()}  & symmedian point  or the Grebe point& [\ref{ssub:method_imeth_triangle_symmedial}] \\
+\Imeth{triangle}{lemoine\_point()}  & symmedian point  or the Grebe point& [\ref{ssub:method_imeth_triangle_symmedial}] \\
 
 \Imeth{triangle}{bevan\_point ()}  &  Circumcenter of the excentral triangle& [\ref{ssub:methods_imeth_triangle_bevan_circle_and_imeth_triangle_bevan_point}
 ]\\
 
-\Imeth{triangle}{mittenpunkt\_point ()}  &  Symmedian point of the excentral triangle& [\ref{ssub:method_imeth_triangle_mittenpunkt}]\\
+\Imeth{triangle}{mittenpunkt\_point()}  &  Symmedian point of the excentral triangle& [\ref{ssub:method_imeth_triangle_mittenpunkt}]\\
 
-\Imeth{triangle}{gergonne\_point ()}  & Intersection of the three cevians that lead to the contact points& [\ref{ssub:gergonne_point}]\\
+\Imeth{triangle}{gergonne\_point()}  & Intersection of the three cevians that lead to the contact points& [\ref{ssub:gergonne_point}]\\
 
-\Imeth{triangle}{nagel\_point () } & Intersection of the three cevians that lead to the extouch points& [\ref{ssub:method_imeth_triangle_nagel__point}]\\
+\Imeth{triangle}{nagel\_point()} & Intersection of the three cevians that lead to the extouch points& [\ref{ssub:method_imeth_triangle_nagel__point}]\\
 
-\Imeth{triangle}{feuerbach\_point () } & The point at which the incircle and euler circle are tangent.& [\ref{ssub:method_imeth_triangle_feuerbach}]\\
+\Imeth{triangle}{feuerbach\_point()} & The point at which the incircle and euler circle are tangent.& [\ref{ssub:method_imeth_triangle_feuerbach}]\\
 
-\Imeth{triangle}{spieker\_center ()} &  Incenter of the medial triangle& [\ref{sub:apollonius_circle_v1_with_inversion}]\\
+\Imeth{triangle}{spieker\_center()} &  Incenter of the medial triangle& [\ref{sub:apollonius_circle_v1_with_inversion}]\\
 
 \Imeth{triangle}{barycentric (ka,kb,kc)} & |T.ABC: barycentric (2,1,1)| & Remark \footnote{The function \code{barycenter} is used to obtain the barycentre for any number of points }\\
 
@@ -302,6 +302,8 @@
 
 \Imeth{triangle}{taylor\_circle ()} & Circumscribed circle of Conway points  & [\ref{ssub:method_imeth_triangle_taylor__circle}]\\
 
+\Imeth{triangle}{kenmotu\_circle ()} &   & [\ref{ssub:methods_imeth_triangle_kenmotu_circle}]\\
+
 \Imeth{triangle}{c\_ll\_p (pt)}  & circle tgt to two side through pt [\ref{ssub:tr_method_c__ll__p}]\\
 \midrule 
  \textbf{Triangles} &\\
@@ -359,7 +361,7 @@
 \begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 z.a  = point: new(1,0)
 z.b  = point: new(6,2)
 z.c  = point: new(2,5)
@@ -382,7 +384,7 @@
 \end{minipage}
 \begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
 \directlua{%
-init_elements ()
+init_elements()
 z.a  = point: new(1,0)
 z.b  = point: new(6,2)
 z.c  = point: new(2,5)
@@ -417,7 +419,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
   z.A           = point :   new (0,0)
   z.B           = point :   new (3.6,0)
   z.C           = point :   new (2.8,4)
@@ -446,7 +448,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
   z.A           = point :   new (0,0)
   z.B           = point :   new (3.6,0)
   z.C           = point :   new (2.8,4)
@@ -489,7 +491,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
   z.A   = point : new ( 0  , 0  )
   z.B   = point : new ( 6  , 0  )
   z.C   = point : new ( 4  , 6  )
@@ -506,7 +508,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
   z.A   = point : new ( 0  , 0  )
   z.B   = point : new ( 6  , 0  )
   z.C   = point : new ( 4  , 6  )
@@ -569,7 +571,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 z.A    = point: new (0 , 0)
 z.B    = point: new (5 , 0)
 z.C    = point: new (-.4 , 4)
@@ -583,7 +585,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.A    = point: new (0 , 0)
 z.B    = point: new (5 , 0)
 z.C    = point: new (-.4 , 4)
@@ -642,7 +644,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{
- init_elements ()
+ init_elements()
  z.B        = point: new (0,0)
  z.C        = point: new (4,0)
  z.A        = point : new (1,3.2) 
@@ -667,7 +669,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
   \directlua{
-   init_elements ()
+   init_elements()
    z.B        = point: new (0,0)
    z.C        = point: new (4,0)
    z.A        = point : new (1,3.2) 
@@ -704,7 +706,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 z.A = point : new ( 0  , 0  )
 z.B = point : new ( 4  , 0  )
 z.C = point : new ( 4 , 3 )
@@ -726,7 +728,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.A = point : new ( 0  , 0  )
 z.B = point : new ( 4  , 0  )
 z.C = point : new ( 4 , 3 )
@@ -760,7 +762,7 @@
 \begin{minipage}{.5\textwidth}
   \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
   z.A       = point: new (1,1)
   z.B       = point: new (8,0)
   z.C       = point: new (2,5)
@@ -779,7 +781,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-  init_elements ()
+  init_elements()
   z.A           = point: new (1,1)
   z.B           = point: new (8,0)
   z.C           = point: new (2,5)
@@ -809,7 +811,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
- init_elements ()
+ init_elements()
  z.A           = point: new (1,1)
  z.B           = point: new (8,0)
  z.C           = point: new (0,5)
@@ -829,7 +831,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-    init_elements ()
+    init_elements()
     z.A           = point: new (1,1)
     z.B           = point: new (8,0)
     z.C           = point: new (0,5)
@@ -860,7 +862,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-  init_elements ()
+  init_elements()
   z.A       = point: new (0,0)
   z.B       = point: new (5,0)
   z.C       = point: new (1,4)
@@ -889,7 +891,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
   \directlua{%
-    init_elements ()
+    init_elements()
     z.A       = point: new (0,0)
     z.B       = point: new (5,0)
     z.C       = point: new (1,4)
@@ -930,7 +932,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
   z.A       = point: new (0,0)
   z.B       = point: new (5,0)
   z.C       = point: new (1,4)
@@ -950,7 +952,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
   z.A       = point: new (0,0)
   z.B       = point: new (5,0)
   z.C       = point: new (1,4)
@@ -1001,7 +1003,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
   z.A       = point: new (0,0)
   z.B       = point: new (5,0)
   z.C       = point: new (2,4)
@@ -1028,7 +1030,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
   z.A       = point: new (0,0)
   z.B       = point: new (5,0)
   z.C       = point: new (2,4)
@@ -1067,7 +1069,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.A    = point : new (0 , 0)
    z.B    = point : new (3 , 2)
    z.C    = point : new (2 , 5)
@@ -1092,7 +1094,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
    z.A    = point : new (0 , 0)
    z.B    = point : new (3 , 2)
    z.C    = point : new (2 , 5)
@@ -1135,7 +1137,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-  init_elements ()
+  init_elements()
   z.A       = point: new (0,0)
   z.B       = point: new (5,0)
   z.C       = point: new (1,4)
@@ -1155,7 +1157,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-  init_elements ()
+  init_elements()
   z.A       = point: new (0,0)
   z.B       = point: new (5,0)
   z.C       = point: new (1,4)
@@ -1186,7 +1188,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
   z.A       = point: new (0,0)
   z.B       = point: new (5,0)
   z.C       = point: new (1,4)
@@ -1206,7 +1208,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
   z.A       = point: new (0,0)
   z.B       = point: new (5,0)
   z.C       = point: new (1,4)
@@ -1241,7 +1243,7 @@
 \vspace{6pt}
 
 \directlua{%
- init_elements ()
+ init_elements()
  z.A    = point : new (0 , 0)
  z.B    = point : new (5 , 0)
  z.C    = point : new (1 , 3)
@@ -1254,12 +1256,13 @@
 }
 \begin{center}
   \begin{tikzpicture}
-    [scale = 2, new/.style ={ color = orange },
-                    one/.style = { new,/tkzmkangle/size=.5 },
-                    two/.style = { new,/tkzmkangle/size=.6 },
-                    l/.style   = { /tkzmkangle/arc=l },
-                    ll/.style  = { /tkzmkangle/arc=ll },
-                    lll/.style = { /tkzmkangle/arc=lll }]
+    [scale = 2, 
+    new/.style ={ color = orange },
+    one/.style = { new,/tkzmkangle/size=.5 },
+    two/.style = { new,/tkzmkangle/size=.6 },
+    l/.style   = { /tkzmkangle/arc=l },
+    ll/.style  = { /tkzmkangle/arc=ll },
+    lll/.style = { /tkzmkangle/arc=lll }]
   \tkzGetNodes
   \tkzDrawPolygon(A,B,C)
   \tkzDrawSegments[new](A,E B,F C,G)
@@ -1288,7 +1291,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
   z.A    = point : new (0 , 0)
   z.B    = point : new (5 , 0)
   z.C    = point : new (1 , 3)
@@ -1345,7 +1348,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 z.A    = point: new (0 , 0)
 z.B    = point: new (5 , 0)
 z.C    = point: new (-.4 , 4)
@@ -1367,7 +1370,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.A    = point: new (0 , 0)
 z.B    = point: new (5 , 0)
 z.C    = point: new (-.4 , 4)
@@ -1429,7 +1432,7 @@
 
 \begin{minipage}{.5\textwidth}
 \directlua{%
-   init_elements ()
+   init_elements()
    z.A      = point:  new (1,1)
    z.B      = point:  new (5,1)
    z.C      = point:  new (2.2,4)
@@ -1458,7 +1461,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-   init_elements ()
+   init_elements()
    z.A      = point:  new (1,1)
    z.B      = point:  new (5,1)
    z.C      = point:  new (2.2,4)
@@ -1498,7 +1501,7 @@
 \vspace{6pt}
 
 \directlua{%
-init_elements ()
+init_elements()
  z.A            = point: new (0,0)
  z.B            = point: new (4,0)
  z.C            = point: new (1.8,3)
@@ -1532,7 +1535,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
  z.A            = point: new (0,0)
  z.B            = point: new (4,0)
  z.C            = point: new (1.8,3)
@@ -1574,7 +1577,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-  init_elements ()
+  init_elements()
   z.A    = point: new(0,0)
   z.B    = point: new(5,0)
   z.C    = point: new(1.5,3)
@@ -1600,7 +1603,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
   \directlua{%
-init_elements ()
+init_elements()
     z.A    = point: new(0,0)
     z.B    = point: new(5,0)
     z.C    = point: new(1.5,3)
@@ -1637,7 +1640,7 @@
 \begin{minipage}{.5\textwidth}
   \begin{Verbatim}
   \directlua{%
-init_elements ()
+init_elements()
     z.A      = point:new (0,0)
     z.C      = point:new (5,0)
     z.B      = point:new (1,3)
@@ -1664,7 +1667,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
- init_elements ()
+ init_elements()
  z.A      = point:new (0,0)
  z.C      = point:new (5,0)
  z.B      = point:new (1,3)
@@ -1696,7 +1699,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-  init_elements ()
+  init_elements()
   z.A           = point: new (1,1)
   z.B           = point: new (6,0)
   z.C           = point: new (2,4)
@@ -1717,7 +1720,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-    init_elements ()
+    init_elements()
     z.A           = point: new (1,1)
     z.B           = point: new (6,0)
     z.C           = point: new (2,4)
@@ -1742,7 +1745,7 @@
 
 %%%%%% Triangles %%%%%
 
-\subsubsection{Method \Imeth{triangle}{feuerbach} and method \Imeth{triangle}{feuerbach\_point}} % (fold)
+\subsubsection{Method \Imeth{triangle}{feuerbach} and method \Imeth{triangle}{feuerbach\_point()}} % (fold)
 \label{ssub:method_imeth_triangle_feuerbach}
 
 The Feuerbach triangle is the triangle formed by the three points of tangency of the nine-point circle with the excircles. (The fact that the excircles touch the nine-point circle is known as Feuerbach's theorem.)
@@ -1754,7 +1757,7 @@
 \begin{minipage}{.5\textwidth}
   \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
  z.A               = point: new (0,0)
  z.B               = point: new (6,0)
  z.C               = point: new (0.8,4)
@@ -1783,7 +1786,7 @@
 
 
 \directlua{%
- init_elements ()
+ init_elements()
  z.A               = point: new (0,0)
  z.B               = point: new (6,0)
  z.C               = point: new (0.8,4)
@@ -1821,7 +1824,7 @@
 \begin{minipage}{.5\textwidth}
   \begin{Verbatim}
 \directlua{%
- init_elements ()
+ init_elements()
  z.A            = point: new (0 , 0)
  z.B            = point: new (6 , 0)
  z.C            = point: new (1.5 , 3.5)
@@ -1842,7 +1845,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-   init_elements ()
+   init_elements()
    z.A            = point: new (0 , 0)
    z.B            = point: new (6 , 0)
    z.C            = point: new (1.5 , 3.5)
@@ -1877,7 +1880,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
- init_elements ()
+ init_elements()
  z.A           = point: new (0,1)
  z.B           = point: new (6,0)
  z.C           = point: new (2,4)
@@ -1905,7 +1908,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-    init_elements ()
+    init_elements()
     z.A           = point: new (0,1)
     z.B           = point: new (6,0)
     z.C           = point: new (2,4)
@@ -1947,7 +1950,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
  z.A        = point: new (0 , 0)
  z.B        = point: new (6 , 0)
  z.C        = point: new (1 , 4)
@@ -1973,7 +1976,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-   init_elements ()
+   init_elements()
    z.A        = point: new (0 , 0)
    z.B        = point: new (6 , 0)
    z.C        = point: new (1 , 4)
@@ -2012,7 +2015,7 @@
 [ \href{https://mathworld.wolfram.com/TangentialTriangle.html}{Weisstein, Eric W. "Tangential Triangle." From MathWorld--A Wolfram Web Resource.}]
 
 \directlua{%
-init_elements ()
+init_elements()
   z.A       = point: new (0,0)
   z.B       = point: new (5,0)
   z.C       = point: new (1,3)
@@ -2049,7 +2052,7 @@
 
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
   z.A       = point: new (0,0)
   z.B       = point: new (5,0)
   z.C       = point: new (1,3)
@@ -2105,7 +2108,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
- init_elements ()
+ init_elements()
  z.A            = point :   new (0,0)
  z.B            = point :   new (7,0)
  z.C            = point :   new (2,3)
@@ -2138,7 +2141,7 @@
 
 
 \directlua{%
-init_elements ()
+init_elements()
    z.A            = point :   new (0,0)
    z.B            = point :   new (7,0)
    z.C            = point :   new (2,3)
@@ -2181,7 +2184,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
   z.A       = point: new (0,0)
   z.B       = point: new (5,0)
   z.C       = point: new (2,4)
@@ -2203,7 +2206,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
   z.A       = point: new (0,0)
   z.B       = point: new (5,0)
   z.C       = point: new (2,4)
@@ -2239,7 +2242,7 @@
 
 \begin{Verbatim}
 \directlua{
-  init_elements ()
+  init_elements()
   z.B       = point: new (0,0)
   z.C       = point: new (5,0)
   z.A       = point: new (.6,3)
@@ -2321,7 +2324,7 @@
 
 \vspace{6pt}
 \directlua{%
- init_elements ()
+ init_elements()
  z.A      = point: new (2,3.8)
  z.B      = point: new (0 ,0)
  z.C      = point: new (6.2 ,0)
@@ -2351,7 +2354,7 @@
 
 \begin{Verbatim}
 \directlua{%
- init_elements ()
+ init_elements()
  z.A      = point: new (2,3.8)
  z.B      = point: new (0 ,0)
  z.C      = point: new (6.2 ,0)
@@ -2494,7 +2497,7 @@
 \begin{minipage}{.4\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.A      = point: new (0 , 0)
    z.B      = point: new (6 , 0)
    z.M      = point: new (5 , 4)
@@ -2517,7 +2520,7 @@
 \end{minipage}
 \begin{minipage}{.6\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
    z.A  = point: new (0 , 0)
    z.B  = point: new (6 , 0)
    z.M  = point: new (5 , 4)
@@ -2945,7 +2948,7 @@
 The six projections of the feet of the heights of a triangle onto the adjacent sides are cocylic.
 
 \directlua{
-  init_elements ()
+  init_elements()
   z.A           = point :   new (0,0)
   z.B           = point :   new (6,0)
   z.C           = point :   new (2.8,4)
@@ -2979,7 +2982,7 @@
   
 \begin{Verbatim}
 \directlua{
-  init_elements ()
+  init_elements()
   z.A           = point :   new (0,0)
   z.B           = point :   new (6,0)
   z.C           = point :   new (2.8,4)
@@ -3104,6 +3107,151 @@
 \end{tikzpicture}
 
 % subsubsection method_imeth_triangle_isogonal (end)
+
+\subsubsection{Methods \Imeth{triangle}{kenmotu\_circle()} and\Imeth{triangle}{kenmotu\_point()} } % (fold)
+\label{ssub:methods_imeth_triangle_kenmotu_circle}
+
+\begin{SVerbatim}
+z.A = point:new(1.6, 4.5)
+z.B = point:new(0, 0)
+z.C = point:new(5, 0)
+T.ABC = triangle:new(z.A,z.B,z.C)
+local ken_circle = T.ABC:kenmotu_circle()
+z.K = ken_circle.center
+z.T = ken_circle.through
+
+local sides = {T.ABC.ab, T.ABC.bc, T.ABC.ca}
+local intersection_points = {}
+for i = 1, 3 do
+  local p1, p2 = intersection(sides[i], ken_circle)
+  intersection_points[2*i-1] = p1
+  intersection_points[2*i] = p2
+end
+
+local squares = {}
+local circumcenters = {}
+local triangles = {}
+
+for i = 0, 2 do
+  squares[i+1] = T.ABC:square_inscribed(i)
+  local _,_,c,d = get_points(squares[i+1])
+  local points = {z.A, z.B, z.C}
+  triangles[i+1] = triangle:new(points[i+1], c, d)
+  circumcenters[i+1] = triangles[i+1].circumcenter
+end
+
+local circles = {}
+for i = 1, 3 do
+  local points = {z.A, z.B, z.C}
+  circles[i] = circle:new(circumcenters[i], points[i])
+end
+
+local intersections = {}
+intersections[1] = intersection(circles[1], circles[2])
+intersections[2] = intersection(circles[2], circles[3])
+intersections[3] = intersection(circles[1], circles[3])
+
+local p7 = intersection_points[1] + intersection_points[6] - z.K
+local p8 = intersection_points[2] + intersection_points[3] - z.K
+local p9 = intersection_points[4] + intersection_points[5] - z.K
+
+z.p1 = intersection_points[1]
+z.p2 = intersection_points[2]
+z.p3 = intersection_points[3]
+z.p4 = intersection_points[4]
+z.p5 = intersection_points[5]
+z.p6 = intersection_points[6]
+z.p7 = p7
+z.p8 = p8
+z.p9 = p9
+}
+
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawCircles(K,T)
+\tkzFillPolygon[opacity=.4,red!40](K,p1,p7,p6)
+\tkzFillPolygon[opacity=.4,blue!40](K,p2,p8,p3)
+\tkzFillPolygon[opacity=.4,orange!40](K,p4,p9,p5)
+\tkzDrawPolygons(A,B,C K,p1,p7,p6 K,p2,p8,p3 K,p4,p9,p5)
+\tkzDrawPoints(K)
+\tkzLabelPoints(B,C)
+\tkzDrawPoints(p1,p2,p3,p4,p5,p6,p7,p8,p9)
+\tkzLabelPoints[above](A,K)
+\end{tikzpicture}
+\end{SVerbatim}
+
+\directlua{%
+z.A = point:new(1.6, 4.5)
+z.B = point:new(0, 0)
+z.C = point:new(5, 0)
+T.ABC = triangle:new(z.A,z.B,z.C)
+local ken_circle = T.ABC:kenmotu_circle()
+z.K = ken_circle.center
+z.T = ken_circle.through
+
+local sides = {T.ABC.ab, T.ABC.bc, T.ABC.ca}
+local intersection_points = {}
+for i = 1, 3 do
+  local p1, p2 = intersection(sides[i], ken_circle)
+  intersection_points[2*i-1] = p1
+  intersection_points[2*i] = p2
+end
+
+local squares = {}
+local circumcenters = {}
+local triangles = {}
+
+for i = 0, 2 do
+  squares[i+1] = T.ABC:square_inscribed(i)
+  local _,_,c,d = get_points(squares[i+1])
+  local points = {z.A, z.B, z.C}
+  triangles[i+1] = triangle:new(points[i+1], c, d)
+  circumcenters[i+1] = triangles[i+1].circumcenter
+end
+
+local circles = {}
+for i = 1, 3 do
+  local points = {z.A, z.B, z.C}
+  circles[i] = circle:new(circumcenters[i], points[i])
+end
+
+local intersections = {}
+intersections[1] = intersection(circles[1], circles[2])
+intersections[2] = intersection(circles[2], circles[3])
+intersections[3] = intersection(circles[1], circles[3])
+
+local p7 = intersection_points[1] + intersection_points[6] - z.K
+local p8 = intersection_points[2] + intersection_points[3] - z.K
+local p9 = intersection_points[4] + intersection_points[5] - z.K
+
+z.p1 = intersection_points[1]
+z.p2 = intersection_points[2]
+z.p3 = intersection_points[3]
+z.p4 = intersection_points[4]
+z.p5 = intersection_points[5]
+z.p6 = intersection_points[6]
+z.p7 = p7
+z.p8 = p8
+z.p9 = p9
+}
+
+\begin{center}
+  \begin{tikzpicture}[scale = 1.25]
+  \tkzGetNodes
+  \tkzDrawCircles(K,T)
+  \tkzFillPolygon[opacity=.4,red!40](K,p1,p7,p6)
+  \tkzFillPolygon[opacity=.4,blue!40](K,p2,p8,p3)
+  \tkzFillPolygon[opacity=.4,orange!40](K,p4,p9,p5)
+  \tkzDrawPolygons(A,B,C K,p1,p7,p6 K,p2,p8,p3 K,p4,p9,p5)
+  \tkzDrawPoints(K)
+  \tkzLabelPoints(B,C)
+  \tkzDrawPoints(p1,p2,p3,p4,p5,p6,p7,p8,p9)
+  \tkzLabelPoints[above](A,K)
+  \end{tikzpicture}
+\end{center}
+
+
+% subsubsection methods_imeth_triangle_kenmotu_circle (end)
 % % subsection methods_of_the_class_triangle (end)
 % % section class_triangle (end)
 \endinput

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-vectors.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-vectors.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes-vectors.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -57,7 +57,7 @@
 \begin{minipage}{.6\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements () 
+init_elements() 
   z.O         = point: new (0,0)
   z.A         = point: new (0,1)
   z.B         = point: new (3,4)
@@ -83,7 +83,7 @@
 \end{minipage}
 \begin{minipage}{.4\textwidth}
 \directlua{%
-init_elements () 
+init_elements() 
   z.O         = point: new (0,0)
   z.A         = point: new (0,1)
   z.B         = point: new (3,4)
@@ -142,7 +142,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-  init_elements () 
+  init_elements() 
   z.O   = point: new (0,0)
   z.A   = point: new (0,1)
   z.B   = point: new (3,4)
@@ -169,7 +169,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements () 
+init_elements() 
   z.O   = point: new (0,0)
   z.A   = point: new (0,1)
   z.B   = point: new (3,4)

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-classes.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -42,16 +42,16 @@
 
 \begin{Verbatim}
 \directlua{
-      init_elements ()
-      z.A = point (1,0)
-      z.B = z.A : north (2)             
-      z.C = z.A : rotation (math.pi/3,z.B)
+      init_elements()
+      z.A = point(1,0)
+      z.B = z.A:north (2)             
+      z.C = z.A:rotation (math.pi/3,z.B)
       tex.print(tostring(z.C))
 }
 \end{Verbatim}
 
 \directlua{
-   init_elements ()
+   init_elements()
    z.A = point (1,0)
    z.B = z.A : north (2)
    z.C = z.A : rotation (math.pi/3,z.B)

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-examples.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-examples.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-examples.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -11,7 +11,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
   z.A   = point : new ( 0 , 0 )
   z.B   = point : new ( 3 , 0 )
   L.AB  = line : new ( z.A , z.B )
@@ -34,7 +34,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
    z.A = point : new ( 0 , 0 )
    z.B = point : new ( 3 , 0 )
    L.AB = line : new ( z.A , z.B )
@@ -60,78 +60,7 @@
 \end{minipage}
 % subsection report_de_distance (end)
 
-\subsection{Apollonius circles of a triangle} % (fold)
-\label{sub:apollonius_circles_of_a_triangle}
 
-\emph{The three Apollonius circles of a (non-equilateral) triangle meet at exactly two points.
-}
-
-Proof:
-
-Let $ABC$ be a non-equilateral triangle, say with $AB \not =AC$. By definition, we have directly that if a point belongs to two of the circles, then it belongs to the third. Indeed, if
-
-$\dfrac{MB}{MC} = \dfrac{AB}{AC}$ and $\dfrac{MA}{MB} = \dfrac{CA}{CB}$  then  $\dfrac{MA}{MC} = \dfrac{BA}{BC}$
-
-However,  the circles are neither tangent nor disjoint if $AB \not =AC$ .
-
-The three Apollonius circles are coaxal. 
-\vspace{12pt}
-
-
-\begin{Verbatim}
-  \directlua{%
-  z.A = point : new (0,0)
-  z.B = point : new (5,0)
-  z.C = point : new (3.5,2)
-  T = triangle : new (z.A,z.B,z.C)
-  z.O = T.circumcenter
-  C.AB = T.ab : apollonius(T.b/T.a)
-  z.w1,z.t1 = get_points(C.AB)
-  C.BC = T.bc : apollonius(T.c/T.b)
-  z.w2,z.t2 = get_points(C.BC)
-  C.AC = T.ca : apollonius(T.a/T.c)
-  z.w3,z.t3 = get_points(C.AC)
-  }
-  \begin{tikzpicture}[scale=.5]
-   \tkzGetNodes
-   \tkzDrawPolygon(A,B,C)
-   \tkzDrawCircle[purple](O,A)
-   \tkzDrawCircles[cyan](w1,t1 w2,t2 w3,t3)
-   \tkzDrawLine(w1,w2)
-   \tkzDrawPoints(A,B,C,w1,w2,w3)
-   \tkzLabelPoints(A,B,w1,w2,w3)
-    \tkzLabelPoints[above](C)
-  \end{tikzpicture}
-\end{Verbatim}
-
-\directlua{%
-z.A = point : new (0,0)
-z.B = point : new (5,0)
-z.C = point : new (3.5,2)
-T = triangle : new (z.A,z.B,z.C)
-z.O = T.circumcenter
-C.AB = T.ab : apollonius(T.b/T.a)
-z.w1,z.t1 = get_points(C.AB)
-C.BC = T.bc : apollonius(T.c/T.b)
-z.w2,z.t2 = get_points(C.BC)
-C.AC = T.ca : apollonius(T.a/T.c)
-z.w3,z.t3 = get_points(C.AC)
-}
-\begin{center}
-  \begin{tikzpicture}[scale=.5]
-   \tkzGetNodes
-   \tkzDrawPolygon(A,B,C)
-   \tkzDrawCircle[purple](O,A)
-   \tkzDrawCircles[cyan](w1,t1 w2,t2 w3,t3)
-   \tkzDrawLine(w1,w2)
-   \tkzDrawPoints(A,B,C,w1,w2,w3)
-   \tkzLabelPoints(A,B,w1,w2,w3)
-    \tkzLabelPoints[above](C)
-  \end{tikzpicture}
-\end{center}
-
-% subsection apollonius_circles_of_a_triangle (end)
-
 \subsection{D'Alembert 1} % (fold)
 \label{sub:d_alembert_1}
 
@@ -138,7 +67,7 @@
 \begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
   z.A  = point : new (0,0)
   z.a  = point : new (4,0)
   z.B  = point : new (7,-1)
@@ -167,7 +96,7 @@
 \end{minipage}
 \begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
 \directlua{%
-init_elements ()
+init_elements()
 z.A = point : new (0,0)
 z.a = point : new (4,0)
 z.B = point : new (7,-1)
@@ -205,7 +134,7 @@
 \begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
 \begin{Verbatim}
 \directlua{%
- init_elements ()
+ init_elements()
  z.A     = point : new (0,0)
  z.a     = point : new (5,0)
  z.B     = point : new (7,-1)
@@ -228,7 +157,7 @@
 \end{minipage}
 \begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
 \directlua{%
-   init_elements ()
+   init_elements()
    z.A     = point : new (0,0)
    z.a     = point : new (5,0)
    z.B     = point : new (7,-1)
@@ -260,7 +189,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
- init_elements ()
+ init_elements()
  z.P   = point : new (0,0)
  z.Q   = point : new (5,0)
  z.I   = point : new (3,2)
@@ -289,7 +218,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.P  = point : new (0,0)
 z.Q  = point : new (5,0)
 z.I  = point : new (3,2)
@@ -325,7 +254,7 @@
 \begin{minipage}{.4\textwidth}
 \begin{Verbatim}
 \directlua{%
- init_elements ()
+ init_elements()
  z.A   = point: new (1,0)
  z.B   = point: new (5,2)
  z.C   = point: new (1.2,2)
@@ -354,7 +283,7 @@
 \end{minipage}
 \begin{minipage}{.6\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.A   = point: new (1,0)
 z.B   = point: new (5,2)
 z.C   = point: new (1.2,2)
@@ -392,7 +321,7 @@
 \begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
 \begin{Verbatim}
 \directlua{%
- init_elements ()
+ init_elements()
  z.A  = point: new (0 , 0)
  z.B  = point: new (6 , 0)
  z.C  = point: new (1 , 5)
@@ -419,7 +348,7 @@
 \end{minipage}
 \begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
 \directlua{%
-init_elements ()
+init_elements()
 z.A  = point: new (0 , 0)
 z.B  = point: new (6 , 0)
 z.C  = point: new (1 , 5)
@@ -454,7 +383,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
- init_elements ()
+ init_elements()
  z.A   = point : new ( 0  , 0  )
  z.B   = point : new ( 4  , 2  )
  L.AB  = line : new ( z.A , z.B )
@@ -488,7 +417,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
   \directlua{%
-  init_elements ()
+  init_elements()
   z.A   = point : new ( 0  , 0  )
   z.B   = point : new ( 4  , 2  )
   L.AB = line : new ( z.A , z.B )
@@ -528,7 +457,7 @@
 \label{sub:apollonius_circle}
 
 \directlua{%
-init_elements ()
+init_elements()
 z.A      = point: new (0 , 0)
 z.B      = point: new (6 , 0)
 z.M      = point: new (5 , 3)
@@ -546,7 +475,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.A      = point: new (0 , 0)
    z.B      = point: new (6 , 0)
    z.M      = point: new (5 , 3)
@@ -613,7 +542,7 @@
 
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
  z.A   = point: new (0 , 0)
  z.B   = point: new (6 , 0)
  z.M   = point: new (5 , 4)
@@ -647,7 +576,7 @@
 
 
 \directlua{%
-init_elements ()
+init_elements()
    z.A   = point: new (0 , 0)
    z.B   = point: new (6 , 0)
    z.M   = point: new (5 , 4)
@@ -691,7 +620,7 @@
 
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.A   = point: new (0 , 0)
    z.B   = point: new (6 , 0)   
    z.C   = point: new (4.5 , 1)
@@ -736,7 +665,7 @@
 \end{Verbatim}
 
 \directlua{%
-init_elements ()
+init_elements()
 z.A   = point: new (0 , 0)
 z.B   = point: new (6 , 0)   
 z.C   = point: new (4.5 , 1)
@@ -781,29 +710,83 @@
   \end{tikzpicture}
 \end{center}
 
+% subsection apollonius_circles (end)
 
+\subsection{Apollonius circles in a triangle with method} % (fold)
+\label{sub:apollonius_circles_of_a_triangle}
 
-Same result using the function |T.ABC.ab : apollonius (k) |
+\emph{The three Apollonius circles of a (non-equilateral) triangle meet at exactly two points.
+}
 
+Proof:
+
+Let $ABC$ be a non-equilateral triangle, say with $AB \not =AC$. By definition, we have directly that if a point belongs to two of the circles, then it belongs to the third. Indeed, if
+
+$\dfrac{MB}{MC} = \dfrac{AB}{AC}$ and $\dfrac{MA}{MB} = \dfrac{CA}{CB}$  then  $\dfrac{MA}{MC} = \dfrac{BA}{BC}$
+
+However,  the circles are neither tangent nor disjoint if $AB \not =AC$ .
+
+The three Apollonius circles are coaxal. 
+
+Same result than the previous example using the function |T.ABC.ab : apollonius (k) |
+\vspace{12pt}
+
+
 \begin{Verbatim}
+  \directlua{%
+  z.A = point : new (0,0)
+  z.B = point : new (5,0)
+  z.C = point : new (3.5,2)
+  T = triangle : new (z.A,z.B,z.C)
+  z.O = T.circumcenter
+  C.AB = T.ab : apollonius(T.b/T.a)
+  z.w1,z.t1 = get_points(C.AB)
+  C.BC = T.bc : apollonius(T.c/T.b)
+  z.w2,z.t2 = get_points(C.BC)
+  C.AC = T.ca : apollonius(T.a/T.c)
+  z.w3,z.t3 = get_points(C.AC)
+  }
+  \begin{tikzpicture}[scale=.5]
+   \tkzGetNodes
+   \tkzDrawPolygon(A,B,C)
+   \tkzDrawCircle[purple](O,A)
+   \tkzDrawCircles[cyan](w1,t1 w2,t2 w3,t3)
+   \tkzDrawLine(w1,w2)
+   \tkzDrawPoints(A,B,C,w1,w2,w3)
+   \tkzLabelPoints(A,B,w1,w2,w3)
+    \tkzLabelPoints[above](C)
+  \end{tikzpicture}
+\end{Verbatim}
+
 \directlua{%
- init_elements ()  
-z.A         = point: new (0 , 0)
-z.B         = point: new (6 , 0)
-z.C         = point: new (4.5 , 1)
-T.ABC       = triangle : new (z.A,z.B,z.C)
-z.O         = T.ABC.circumcenter
-C.AB        = T.ABC.ab : apollonius (length(z.C,z.A)/length(z.C,z.B))
-z.w1,z.t1   = get_points ( C.AB )
-C.AC        = T.ABC.ca : apollonius (length(z.B,z.C)/length(z.B,z.A))
-z.w2,z.t2   = get_points ( C.AC )
-C.BC        = T.ABC.bc : apollonius (length(z.A,z.B)/length(z.A,z.C))
-z.w3,z.t3   = get_points ( C.BC )
+z.A = point : new (0,0)
+z.B = point : new (5,0)
+z.C = point : new (3.5,2)
+T = triangle : new (z.A,z.B,z.C)
+z.O = T.circumcenter
+C.AB = T.ab : apollonius(T.b/T.a)
+z.w1,z.t1 = get_points(C.AB)
+C.BC = T.bc : apollonius(T.c/T.b)
+z.w2,z.t2 = get_points(C.BC)
+C.AC = T.ca : apollonius(T.a/T.c)
+z.w3,z.t3 = get_points(C.AC)
 }
-\end{Verbatim}
+\begin{center}
+  \begin{tikzpicture}[scale=.5]
+   \tkzGetNodes
+   \tkzDrawPolygon(A,B,C)
+   \tkzDrawCircle[purple](O,A)
+   \tkzDrawCircles[cyan](w1,t1 w2,t2 w3,t3)
+   \tkzDrawLine(w1,w2)
+   \tkzDrawPoints(A,B,C,w1,w2,w3)
+   \tkzLabelPoints(A,B,w1,w2,w3)
+    \tkzLabelPoints[above](C)
+  \end{tikzpicture}
+\end{center}
 
-% subsection apollonius_circles (end)
+% subsection apollonius_circles_of_a_triangle (end)
 
+
 \subsection{Archimedes} % (fold)
 \label{sub:archimedes}
 
@@ -810,7 +793,7 @@
 \begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 z.O_1    = point:   new  (0, 0)
 z.O_2    = point:   new  (0, 1)
 z.A      = point:   new  (0, 3)
@@ -836,7 +819,7 @@
 \end{minipage}
 \begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
 \directlua{%
- init_elements ()
+ init_elements()
  z.O_1  = point:   new  (0, 0)
  z.O_2  = point:   new  (0, 1)
  z.A    = point:   new  (0, 3)
@@ -869,7 +852,7 @@
 \label{sub:bankoff_circle}
 \begin{Verbatim}
 \directlua{%
-   init_elements ()
+   init_elements()
    z.A      = point: new (0 , 0)
    z.B      = point: new (10 , 0)
    L.AB     = line : new (z.A,z.B)
@@ -936,7 +919,7 @@
 
 
 \directlua{%
-init_elements ()
+init_elements()
    z.A  = point: new (0 , 0)
    z.B  = point: new (10 , 0)
    L.AB = line : new (z.A,z.B)
@@ -1011,7 +994,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
- init_elements ()
+ init_elements()
  z.A     = point :   new (1,2)
  z.B     = point :   new (5,1)
  z.C     = point :   new (3,5)
@@ -1043,7 +1026,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-   init_elements ()
+   init_elements()
    z.A            = point :   new (1,2)
    z.B            = point :   new (5,1)
    z.C            = point :   new (3,5)
@@ -1081,7 +1064,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-  init_elements ()
+  init_elements()
   z.a   = point:  new (1,2)
   z.b   = point:  new (5,1)
   z.c   = point:  new (3,5)
@@ -1106,7 +1089,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.a = point:  new (1,2)
 z.b = point:  new (5,1)
 z.c = point:  new (3,5)
@@ -1136,7 +1119,7 @@
 
 \begin{Verbatim}
 \directlua{%
- init_elements ()
+ init_elements()
  z.A    = point: new (0,0)
  z.B    = point: new (6,0)
  z.C    = point: new (.8,4)
@@ -1175,7 +1158,7 @@
 \end{Verbatim}
 
 \directlua{%
-init_elements ()
+init_elements()
    z.A    = point: new (0,0)
    z.B    = point: new (6,0)
    z.C    = point: new (.8,4)
@@ -1221,7 +1204,7 @@
 
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 z.A         = point: new (0 , 0)
 z.B         = point: new (8 , 0)
 L.AB        = line: new (z.A,z.B)
@@ -1257,7 +1240,7 @@
 \end{Verbatim}
 
 \directlua{%
-init_elements ()
+init_elements()
  z.A     = point: new (0 , 0)
  z.B     = point: new (8 , 0)
  L.AB    = line: new (z.A,z.B)
@@ -1372,7 +1355,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 z.A         = point:  new (0,0)
 z.B         = point:  new (2.5,0)
 L.AB        = line:   new (z.A,z.B)
@@ -1403,7 +1386,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
   \directlua{%
-  init_elements ()
+  init_elements()
   z.A     = point:  new (0,0)
   z.B     = point:  new (2.5,0)
   L.AB    = line:   new (z.A,z.B)
@@ -1442,7 +1425,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.C       = point: new (3 , 2)
    z.A       = point: new (5 , 1)
    L.CA      = line : new (z.C,z.A)
@@ -1465,7 +1448,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
    z.C       = point: new (3 , 2)
    z.A       = point: new (5 , 1)
    L.CA      = line : new (z.C,z.A)
@@ -1501,7 +1484,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 z.C     = point: new (0 , 4)
 local b = math.sqrt(8)
 local a = math.sqrt(32)
@@ -1524,7 +1507,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.C      = point: new (0 , 4)
 local b  = math.sqrt(8)
 local a  = math.sqrt(32)
@@ -1555,7 +1538,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
  local e   = .8
  z.A       = point: new (2 , 3)
  z.B       = point: new (5 , 4)
@@ -1583,7 +1566,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
  local e         = .8
  z.A       = point: new (2 , 3)
  z.B       = point: new (5 , 4)
@@ -1623,7 +1606,7 @@
 
 \begin{Verbatim}
   \directlua{
-    init_elements ()
+    init_elements()
     z.A             = point: new(0,0)
     z.B             = point: new(5,0)
     z.C             = point: new(4,4)
@@ -1659,7 +1642,7 @@
 
 
 \directlua{
-  init_elements ()
+  init_elements()
   z.A             = point: new(0,0)
   z.B             = point: new(5,0)
   z.C             = point: new(4,4)
@@ -1705,7 +1688,7 @@
 
 \begin{Verbatim}
 \directlua{%
-  init_elements ()
+  init_elements()
    z.A      = point : new ( 0 , 0 )
    z.B      = point : new ( 6, 0 )
    z.C      = point : new ( 1.1, 4.5 )
@@ -1737,7 +1720,7 @@
 \end{Verbatim}
 
 \directlua{%
-  init_elements ()
+  init_elements()
    z.A      = point : new ( 0 , 0 )
    z.B      = point : new ( 6, 0 )
    z.C      = point : new ( 1.1, 4.5 )
@@ -1776,7 +1759,7 @@
 
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
  z.A        = point: new (0 , 0)
  z.B        = point: new (5 , 0)
  z.C        = point: new (-.4 , 4)
@@ -1805,7 +1788,7 @@
 \end{Verbatim}
 
 \directlua{%
-init_elements ()
+init_elements()
 z.A       = point: new (0 , 0)
 z.B       = point: new (5 , 0)
 z.C       = point: new (-.4 , 4)
@@ -1842,7 +1825,7 @@
 \begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
   z.A    = point: new (0 , 0)
   z.B    = point: new (5 , 0)
   z.C    = point: new (-2 , 4)
@@ -1868,7 +1851,7 @@
 \end{minipage}
 \begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
 \directlua{%
-init_elements ()
+init_elements()
 z.A      = point: new (0 , 0)
 z.B      = point: new (5 , 0)
 z.C      = point: new (-2 , 4)
@@ -1902,7 +1885,7 @@
 \begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
  z.A   = point: new (0 , 0)
  z.B   = point: new (6 , 0)
  z.C   = point: new (1 , 5)
@@ -1930,7 +1913,7 @@
 \end{minipage}
 \begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
 \directlua{%
-init_elements ()
+init_elements()
 z.A = point: new (0 , 0)
 z.B = point: new (6 , 0)
 z.C = point: new (1 , 5)
@@ -1967,7 +1950,7 @@
 
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
  z.A     = point: new (0 , 0)
  z.B     = point: new (5 , -.5)
  z.C     = point: new (-.5 , 3)
@@ -2008,7 +1991,7 @@
 \end{Verbatim}
 
 \directlua{%
-init_elements ()
+init_elements()
 z.A    = point: new (0 , 0)
 z.B    = point: new (5 , -.5)
 z.C    = point: new (-.5 , 3)
@@ -2055,7 +2038,7 @@
 \begin{minipage}{.5\textwidth}
  \begin{Verbatim}
 \directlua{%
- init_elements ()
+ init_elements()
  z.A   = point: new (0 , 0)
  z.B   = point: new (6 , 0)
  L.AB  = line: new (z.A,z.B)
@@ -2081,7 +2064,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.A = point: new (0 , 0)
 z.B = point: new (6 , 0)
 L.AB    = line: new (z.A,z.B)
@@ -2113,7 +2096,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
- init_elements ()
+ init_elements()
  z.A      = point: new (0 , 0)
  z.C      = point: new (6 , 0)
  L.AC     = line: new (z.A,z.C)
@@ -2137,7 +2120,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.A  = point: new (0 , 0)
 z.C  = point: new (6 , 0)
 L.AC = line: new (z.A,z.C)
@@ -2162,12 +2145,103 @@
 \end{minipage}
 % subsection gold_arbelos (end)
 
+\subsection{Points cocylics with Arbelos} % (fold)
+\label{sub:points_cocylics_with_arbelos}
+
+\begin{Verbatim}
+  \directlua{%
+     init_elements ()
+     dofile ("preamble.lua")
+     L.OA = line   :  new (z.O,z.A)
+     z.Op = intersection (L.OA,L.CD)
+     L.BQ = line   :  new (z.B,z.Q)
+     z.P_0p = intersection (L.CD,L.BQ)
+     C.AD = circle   :  new (z.A,z.D)
+     L.OpD = line  :  new (z.Op,z.D)
+     _,z.Dp = intersection(L.OpD,C.AD)
+     C.AD          =  circle  : new (z.A,z.D)
+     z.P_1p,z.Tp   = C.AD : inversion (z.P_1,z.T)
+     T.O3p          = triangle: new ( z.P_0p, z.P_1p, z.Q)
+     z.O_3p          = T.O3p.circumcenter
+  }
+    \hspace{\fill}
+  \begin{tikzpicture}
+     \tkzGetNodes
+     \tkzDrawCircles(O_0,A O_4,C O_3',Q)
+     \tkzDrawCircles[red](O_3,P_0)
+     \tkzDrawSemiCircles[teal](O_1,C O_2,B)
+     \tkzDrawArc[delta=10,gray,dashed](A,D')(D)
+     \tkzDrawArc[delta=10,gray,dashed](P,A)(P_0)
+     \tkzDrawArc[delta=10,gray,dashed](Q,P_0)(B)
+     \tkzDrawArc[delta=10,gray,dashed](O,B)(A)
+     \tkzDrawSegments[new](A,B A,P_0 P_0,B A,Q A,P_1')
+     \tkzDrawSegments[cyan](A,T' B,P O,P_0)
+     \tkzDrawSegments[step 2](B,P_0' A,O'  B,O)
+     \tkzDrawLines[add=0 and .8,step 1](B,P_1')
+     \tkzDrawLines[add=0 and .1,step 1](O',D)
+     \tkzDrawPoints(A,B,C,P_2,P_0,P_1,O,D,D',P,Q,P_1',O',P_0',O,T,T',O_4,O_3',O_5)
+     \tkzDrawPoints[red](O_3)
+     \tkzLabelPoints(A,B,C,P_2,O,P_1',O_4,O_3',O_5)
+     \tkzLabelPoints[above right](P_1,P_0,D,D',P,Q,O',T,T')
+     \tkzLabelPoints[above left](P_0')
+     \tkzLabelPoints[below,red](O_3)
+     \tkzLabelLine[left,pos=1.25](C,D){$\ell$}
+     \tkzLabelLine[left,pos=1.5](B,P_1'){${\ell}'$}
+     \tkzLabelCircle[above=4pt,font=\scriptsize](O_0,B)(150){$(\alpha)$}
+     \tkzLabelCircle[above=2pt,font=\scriptsize](O_1,C)(120){$(\beta)$}
+     \tkzLabelCircle[above=4pt,font=\scriptsize](O_2,B)(50){$(\gamma)$}
+     \tkzLabelCircle[above,font=\scriptsize,red](O_3,P_2)(180){$(\delta)$}
+     \tkzLabelCircle[left](O_4,C)(-30){$(\epsilon)$}
+   \end{tikzpicture}
+\end{Verbatim}
+
+\directlua{%
+ init_elements()
+ dofile("preamble.lua")
+}
+ 
+\begin{center}
+  \begin{tikzpicture}
+     \tkzGetNodes
+     \tkzDrawCircles(O_0,A O_4,C O_3',Q)
+     \tkzDrawCircles[red](O_3,P_0)
+     \tkzDrawSemiCircles[teal](O_1,C O_2,B)
+     \tkzDrawArc[delta=10,gray,dashed](A,D')(D)
+     \tkzDrawArc[delta=10,gray,dashed](P,A)(P_0)
+     \tkzDrawArc[delta=10,gray,dashed](Q,P_0)(B)
+     \tkzDrawArc[delta=10,gray,dashed](O,B)(A)
+     \tkzDrawSegments[new](A,B A,P_0 P_0,B A,Q A,P_1')
+     \tkzDrawSegments[cyan](A,T' B,P O,P_0)
+     \tkzDrawSegments[step 2](B,P_0' A,O'  B,O)
+     \tkzDrawLines[add=0 and .8,step 1](B,P_1')
+     \tkzDrawLines[add=0 and .1,step 1](O',D)
+     \tkzDrawPoints(A,B,C,P_2,P_0,P_1,O,D,D',P,Q,P_1',O',P_0',O,T,T',O_4,O_3',O_5)
+     \tkzDrawPoints[red](O_3)
+     \tkzLabelPoints(A,B,C,P_2,O,P_1',O_4,O_3',O_5)
+     \tkzLabelPoints[above right](P_1,P_0,D,D',P,Q,O',T,T')
+     \tkzLabelPoints[above left](P_0')
+     \tkzLabelPoints[below,red](O_3)
+     \tkzLabelLine[left,pos=1.25](C,D){$\ell$}
+     \tkzLabelLine[left,pos=1.5](B,P_1'){${\ell}'$}
+     \tkzLabelCircle[above=4pt,font=\scriptsize](O_0,B)(150){$(\alpha)$}
+     \tkzLabelCircle[above=2pt,font=\scriptsize](O_1,C)(120){$(\beta)$}
+     \tkzLabelCircle[above=4pt,font=\scriptsize](O_2,B)(50){$(\gamma)$}
+     \tkzLabelCircle[above,font=\scriptsize,red](O_3,P_2)(180){$(\delta)$}
+     \tkzLabelCircle[left](O_4,C)(-30){$(\epsilon)$}
+   \end{tikzpicture}
+\end{center}
+
+
+
+% subsection points_cocylics_with_arbelos (end)
+
+
 \subsection{Harmonic division v1} % (fold)
 \label{sub:harmonic_division_v1}
 \begin{minipage}[t]{.4\textwidth}\vspace{0pt}%
 \begin{Verbatim}
 \directlua{%
- init_elements ()
+ init_elements()
  z.A   = point: new (0 , 0)
  z.B   = point: new (4 , 0)
  z.G   = point: new (2,2)
@@ -2191,7 +2265,7 @@
 \end{minipage}
 \begin{minipage}[t]{.6\textwidth}\vspace{0pt}%
 \directlua{%
-init_elements ()
+init_elements()
  z.A  = point: new (0 , 0)
  z.B  = point: new (4 , 0)
  z.G  = point: new (2,2)
@@ -2222,7 +2296,7 @@
 \begin{minipage}[t]{.45\textwidth}\vspace{0pt}%
 \begin{Verbatim}
 \directlua{%
- init_elements ()
+ init_elements()
  z.A    = point: new (0 , 0)
  z.B    = point: new (6 , 0)
  z.D    = point: new (12 , 0)
@@ -2249,7 +2323,7 @@
 \end{minipage}
 \begin{minipage}[t]{.55\textwidth}\vspace{0pt}%
 \directlua{%
-init_elements ()
+init_elements()
 z.A    = point: new (0 , 0)
 z.B    = point: new (6 , 0)
 z.D    = point: new (12 , 0)
@@ -2284,7 +2358,7 @@
 \begin{minipage}{.4\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.A  = point: new (0 , 0)
    z.B  = point: new (6 , 0)
    z.C  = point: new (5 , 4)
@@ -2308,7 +2382,7 @@
 \end{minipage}
 \begin{minipage}{.6\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.A   = point: new (0 , 0)
 z.B   = point: new (6 , 0)
 z.C   = point: new (5 , 4)
@@ -2340,7 +2414,7 @@
 \subsection{Euler ellipse} % (fold)
 \label{sub:hexagram}
 \directlua{%
-init_elements ()
+init_elements()
 z.A        = point: new (2,3.8)
 z.B        = point: new (0 ,0)
 z.C        = point: new (6.2 ,0)
@@ -2382,7 +2456,7 @@
 \begin{minipage}{.4\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 z.A        = point: new (2,3.8)
 z.B        = point: new (0 ,0)
 z.C        = point: new (6.2 ,0)
@@ -2465,7 +2539,7 @@
 \label{sub:gold_arbelos_properties}
 
 \directlua{%
-init_elements ()
+init_elements()
 z.A  = point : new(0,0)
 z.B  = point : new(10,0)
 z.C  = gold_segment_ (z.A,z.B)
@@ -2506,7 +2580,7 @@
 \begin{minipage}{.4\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
  z.A     = point : new(0,0)
  z.B     = point : new(10,0)
  z.C     = gold_segment_ (z.A,z.B)
@@ -2617,7 +2691,7 @@
 \label{sub:apollonius_circle_v1_with_inversion}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.A               = point: new (0,0)
    z.B               = point: new (6,0)
    z.C               = point: new (0.8,4)
@@ -2654,7 +2728,7 @@
 \end{Verbatim}
 
 \directlua{%
-init_elements ()
+init_elements()
    z.A               = point: new (0,0)
    z.B               = point: new (6,0)
    z.C               = point: new (0.8,4)
@@ -2699,7 +2773,7 @@
 \label{sub:apollonius_circle_v2}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.A         = point: new (0,0)
    z.B         = point: new (6,0)
    z.C         = point: new (0.8,4)
@@ -2740,7 +2814,7 @@
 \end{Verbatim}
 
 \directlua{%
-init_elements ()
+init_elements()
 z.A    = point: new (0,0)
 z.B    = point: new (6,0)
 z.C    = point: new (0.8,4)
@@ -2790,7 +2864,7 @@
 \begin{minipage}{.5\textwidth}
   \begin{Verbatim}
   \directlua{%
-  init_elements ()
+  init_elements()
   z.O      = point: new (2,2)
   z.Op     = point: new (-4,1)
   z.P      = point: polar (4,0)
@@ -2825,7 +2899,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
   \directlua{%
-  init_elements ()
+  init_elements()
   z.O      = point: new (2,2)
   z.Op     = point: new (-4,1)
   z.P      = point: polar (4,0)
@@ -2871,7 +2945,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
  z.O      = point :   new (-1,0)
  z.B      = point :   new (0,2)
  z.Op     = point :   new (4,-1)
@@ -2902,7 +2976,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.O   = point :   new (-1,0)
 z.B   = point :   new (0,2)
 z.Op  = point :   new (4,-1)
@@ -2939,7 +3013,7 @@
 \label{sub:midcircles}
 
 \directlua{%
-init_elements ()
+init_elements()
 z.A  = point: new (0 , 0)
 z.B  = point: new (10 , 0)
 L.AB = line : new (z.A,z.B)
@@ -3022,7 +3096,7 @@
 
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.A      = point: new (0 , 0)
    z.B      = point: new (10 , 0)
    L.AB     = line : new (z.A,z.B)
@@ -3108,7 +3182,7 @@
 \label{sub:pencil_v1}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.A         = point : new (0,2)
    z.B         = point : new (0,-2)
    z.C_0       = point : new (-3,0)
@@ -3126,7 +3200,7 @@
 \end{Verbatim}
 
 \directlua{%
-init_elements ()
+init_elements()
 z.A     = point : new (0,2)
 z.B     = point : new (0,-2)
 z.C_0   = point : new (-3,0)
@@ -3174,7 +3248,7 @@
 \label{sub:pencil_v2}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.A     = point : new (0,0)
    z.B     = point : new (1,0)
    z.C_0   = point : new (-2,0)
@@ -3195,7 +3269,7 @@
 \end{Verbatim}
 
 \directlua{%
-init_elements ()
+init_elements()
    z.A     = point : new (0,0)
    z.B     = point : new (1,0)
    z.C_0   = point : new (-2,0)
@@ -3247,7 +3321,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
  z.A   = point: new (0,0)
  z.E   = point: new (-2,2)
  C.AE  = circle : new (z.A,z.E)
@@ -3281,7 +3355,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
   \directlua{%
-  init_elements ()
+  init_elements()
      z.A     = point: new (0,0)
      z.E     = point: new (-2,2)
      C.AE    = circle :   new (z.A,z.E)
@@ -3325,7 +3399,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
  z.A      = point: new (0,0)
  z.B      = point: new (10,0)
  z.C      = point: new (4,0)
@@ -3342,7 +3416,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
   \directlua{%
-  init_elements ()
+  init_elements()
   z.A     = point: new (0,0)
   z.B     = point: new (10,0)
   z.C     = point: new (4,0)
@@ -3393,7 +3467,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.A     = point: new (0,0)
    z.B     = point: new (8,0)
    z.C     = point: new (2,6)
@@ -3433,7 +3507,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
   \directlua{%
-  init_elements ()
+  init_elements()
      z.A     = point: new (0,0)
      z.B     = point: new (8,0)
      z.C     = point: new (2,6)
@@ -3480,7 +3554,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.A         = point:    new (1,0)
    z.B         = point:    new (2,2)
    z.E         = point:    new (5,-4)
@@ -3504,7 +3578,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.A     = point:    new (1,0)
 z.B     = point:    new (2,2)
 z.E     = point:    new (5,-4)
@@ -3531,53 +3605,12 @@
 \end{minipage}
 % subsection tangent_and_circle (end)
 
-\subsection{Homothety} % (fold)
-\label{sub:homothety}
-\begin{minipage}{.5\textwidth}
-\begin{Verbatim}
-\directlua{%
-init_elements ()
-   z.A      = point:  new (0,0)
-   z.B      = point:  new (1,2)
-   z.E      = point:  new (-3,2)
-   z.C,z.D  = z.E : homothety(2,z.A,z.B)
-}
-\begin{tikzpicture}
-   \tkzGetNodes
-   \tkzDrawPoints(A,B,C,E,D)
-   \tkzLabelPoints(A,B,C,E)
-   \tkzDrawCircles(A,B C,D)
-   \tkzDrawLines(E,C E,D)
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{.5\textwidth}
-\directlua{%
-init_elements ()
-z.A  = point:  new (0,0)
-z.B  = point:  new (1,2)
-z.E  = point:  new (-3,2)
-z.C,z.D  = z.E : homothety(2,z.A,z.B)
-}
-\begin{center}
-  \begin{tikzpicture}[scale = .5]
-  \tkzGetNodes
-  \tkzDrawPoints(A,B,C,E,D)
-  \tkzLabelPoints(A,B,C,E)
-  \tkzDrawCircles(A,B C,D)
-  \tkzDrawLines(E,C E,D)
-  \end{tikzpicture}
-\end{center}
-
-\end{minipage}
-% subsection homothety (end)
-
 \subsection{Tangent and chord} % (fold)
 \label{sub:tangent_and_chord}
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
  z.A       = point: new (0 , 0)
  z.B       = point: new (6 , 0)
  z.C       = point: new (1 , 5)
@@ -3606,7 +3639,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.A     = point: new (0 , 0)
 z.B     = point: new (6 , 0)
 z.C     = point: new (1 , 5)
@@ -3642,7 +3675,7 @@
 \label{sub:three_chords}
 
 \directlua{%
-init_elements ()
+init_elements()
 z.O  = point: new (0 , 0)
 z.B  = point: new (0 , 2)
 z.P  = point: new (1 , -.5)
@@ -3675,7 +3708,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 z.O  = point: new (0 , 0)
 z.B  = point: new (0 , 2)
 z.P  = point: new (1 , -.5)
@@ -3758,7 +3791,7 @@
 \begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.A    = point: new (-1 , 0)
    z.C    = point: new (4 , -1.5)
    z.E    = point: new (1 , -1)
@@ -3791,7 +3824,7 @@
 \end{minipage}
 \begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
 \directlua{%
-init_elements ()
+init_elements()
 z.A    = point: new (-1 , 0)
 z.C    = point: new (4 , -1.5)
 z.E    = point: new (1 , -1)
@@ -3831,7 +3864,7 @@
 \begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.A   = point:  new (-1,0)
    z.B   = point:  new (2,4)
    C.AB  = circle: new (z.A,z.B)
@@ -3849,7 +3882,7 @@
 \end{minipage}
 \begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
 \directlua{%
-init_elements ()
+init_elements()
 z.A  = point:  new (-1,0)
 z.B  = point:  new (2,4)
 C.AB = circle:  new (z.A,z.B)
@@ -3875,7 +3908,7 @@
 \begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.A         = point: new (1,0)
    z.B         = point: new (5,2)
    z.C         = point: new (1.2,2)
@@ -3909,7 +3942,7 @@
 \end{minipage}
 \begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
 \directlua{%
-init_elements ()
+init_elements()
 z.A         = point: new (1,0)
 z.B         = point: new (5,2)
 z.C         = point: new (1.2,2)
@@ -3956,7 +3989,7 @@
 \vspace{6pt}
 \begin{minipage}[t]{.35\textwidth}\vspace{0pt}%
 \directlua{%
-init_elements ()
+init_elements()
    z.A      = point:  new (1,1)
    z.B      = point:  new (5,1)
    z.C      = point:  new (2.2,4)
@@ -3984,7 +4017,7 @@
 \begin{minipage}[t]{.65\textwidth}\vspace{0pt}%
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
  z.A  = point:  new (1,1)
  z.B  = point:  new (5,1)
  z.C  = point:  new (2.2,4)
@@ -4019,7 +4052,7 @@
 
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
  z.a             = point:  new (0,0)
  z.b             = point:  new (5,0)
  z.c             = point:  new (2,3)
@@ -4056,7 +4089,7 @@
 \end{Verbatim}
 
 \directlua{%
-init_elements ()
+init_elements()
 z.a   = point:  new (0,0)
 z.b   = point:  new (5,0)
 z.c   = point:  new (2,3)
@@ -4101,7 +4134,7 @@
 \label{sub:inversion}
 
 \directlua{%
-init_elements ()
+init_elements()
 z.A     = point: new (-1,0)
 z.B     = point: new (2,2)
 z.C     = point: new (2,4)
@@ -4121,7 +4154,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
  \directlua{%
-init_elements ()
+init_elements()
   z.A     = point: new (-1,0)
   z.B     = point: new (2,2)
   z.C     = point: new (2,4)
@@ -4170,7 +4203,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.a         = point:  new (0,0)
    z.b         = point:  new (5,0)
    z.c         = point:  new (1,4)
@@ -4197,7 +4230,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.a = point:  new (0,0)
 z.b = point:  new (5,0)
 z.c = point:  new (1,4)
@@ -4230,7 +4263,7 @@
 \label{sub:pappus_chain}
 
 \directlua{%
-init_elements ()
+init_elements()
   xC,nc    = 10,16
   xB       = xC/tkzphi
   xD       = (xC*xC)/xB
@@ -4260,7 +4293,7 @@
 
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
   xC,nc    = 10,16
   xB       = xC/tkzphi
   xD       = (xC*xC)/xB
@@ -4321,7 +4354,7 @@
 \label{sub:three_circles}
 
 \directlua{%
-init_elements ()
+init_elements()
 function threecircles(c1,r1,c2,r2,c3,h1,h3,h2)
    local xk = math.sqrt (r1*r2)
    local cx = (2*r1*math.sqrt(r2))/(math.sqrt(r1)+math.sqrt(r2))
@@ -4340,7 +4373,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 function threecircles(c1,r1,c2,r2,c3,h1,h3,h2)
    local xk = math.sqrt (r1*r2)
    local cx = (2*r1*math.sqrt(r2))/(math.sqrt(r1)+math.sqrt(r2))
@@ -4380,7 +4413,7 @@
 \label{sub:golden_arbelos}
 
 \directlua{%
-init_elements ()
+init_elements()
 z.A      = point: new (0 , 0)
 z.B      = point: new (10 , 0)
 L.AB     = line:  new ( z.A, z.B)
@@ -4420,41 +4453,41 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
-  z.A      = point: new (0 , 0)
-  z.B      = point: new (10 , 0)
-  L.AB     = line:  new ( z.A, z.B)
-  z.C      = L.AB : gold_ratio ()
-  L.AC     = line:  new ( z.A, z.C)
-  L.CB     = line:  new ( z.C, z.B)
-  z.O_0    = L.AB.mid
-  z.O_1    = L.AC.mid
-  z.O_2    = L.CB.mid
-  C.O0B    = circle: new ( z.O_0, z.B)
-  C.O1C    = circle: new ( z.O_1, z.C)
-  C.O2B    = circle: new ( z.O_2, z.B)
-  z.M_0    = C.O1C:external_similitude(C.O2B)
-  L.O0C    = line:new(z.O_0,z.C)
-  T.golden = L.O0C : golden ()
-  z.L      = T.golden.pc
-  L.O0L    = line:new(z.O_0,z.L)
-  z.D      = intersection (L.O0L,C.O0B)
-  L.DB     = line:new(z.D,z.B)
-  z.Z      = intersection (L.DB,C.O2B)
-  L.DA     = line:new(z.D,z.A)
-  z.I      = intersection (L.DA,C.O1C)
-  L.O2Z    = line:new(z.O_2,z.Z)
-  z.H      = intersection (L.O2Z,C.O0B)
-  C.BD     = circle:new (z.B,z.D)
-  C.DB     = circle:new (z.D,z.B)
-  _,z.G    = intersection (C.BD,C.O0B)
-  z.E      = intersection (C.DB,C.O0B)
-  C.GB     = circle:new (z.G,z.B)
-  _,z.F    = intersection (C.GB,C.O0B)
-  k        = 1/tkzphi^2
-  kk       = tkzphi
-  z.D_1,z.E_1,z.F_1,z.G_1 = z.B :   homothety (k, z.D,z.E,z.F,z.G)
-  z.D_2,z.E_2,z.F_2,z.G_2 = z.M_0 : homothety (kk,z.D_1,z.E_1,z.F_1,z.G_1)
+init_elements()
+z.A = point:new(0, 0)
+z.B = point:new(10, 0)
+L.AB = line:new(z.A, z.B)
+z.C = L.AB:gold_ratio()
+L.AC = line:new(z.A, z.C)
+L.CB = line:new(z.C, z.B)
+z.O_0 = L.AB.mid
+z.O_1 = L.AC.mid
+z.O_2 = L.CB.mid
+C.O0B = circle:new(z.O_0, z.B)
+C.O1C = circle:new(z.O_1, z.C)
+C.O2B = circle:new(z.O_2, z.B)
+z.M_0 = C.O1C:external_similitude(C.O2B)
+L.O0C = line:new(z.O_0, z.C)
+T.golden = L.O0C:golden()
+z.L = T.golden.pc
+L.O0L = line:new(z.O_0, z.L)
+z.D = intersection(L.O0L, C.O0B)
+L.DB = line:new(z.D, z.B)
+z.Z = intersection(L.DB, C.O2B)
+L.DA = line:new(z.D, z.A)
+z.I = intersection(L.DA, C.O1C)
+L.O2Z = line:new(z.O_2, z.Z)
+z.H = intersection(L.O2Z, C.O0B)
+C.BD = circle:new(z.B, z.D)
+C.DB = circle:new(z.D, z.B)
+_, z.G = intersection(C.BD, C.O0B)
+z.E = intersection(C.DB, C.O0B)
+C.GB = circle:new(z.G, z.B)
+_, z.F = intersection(C.GB, C.O0B)
+k = 1 / tkzphi ^ 2
+kk = tkzphi
+z.D_1, z.E_1, z.F_1, z.G_1 = z.B:homothety(k, z.D, z.E, z.F, z.G)
+z.D_2, z.E_2, z.F_2, z.G_2 = z.M_0:homothety(kk, z.D_1, z.E_1, z.F_1, z.G_1)
 }
 \end{Verbatim}
 \end{minipage}
@@ -4516,4 +4549,459 @@
 \end{Verbatim}
 
 % subsection golden_arbelos (end)
+
+\subsection{Polar and Pascal's theorem} % (fold)
+\label{sub:polar_and_pascal_s_theorem}
+
+
+Given a cyclic quadrilateral $ABCD$  if the intersection of $(AC)$ and $(BD)$ is $P$, the intersection of $(AB)$ and $(CD)$ is $Q$ and the intersection of $(AD)$ and $(BC)$ is $R$, prove the polar of
+$P$ with respect of $\mathcal{C}(O,A)$ passes through $Q$ and $R$.
+
+\begin{Verbatim}
+\directlua{%
+ init_elements()
+ z.O = point:new(0, 0)
+ z.D = point:new(3, 0)
+ C.OD = circle:new(z.O, z.D)
+ z.B = C.OD:point(0.25)
+ z.A = C.OD:point(0.45)
+ z.C = C.OD:point(0.10)
+ L.AC = line:new(z.A, z.C)
+ L.AB = line:new(z.A, z.B)
+ L.CD = line:new(z.C, z.D)
+ L.AD = line:new(z.A, z.D)
+ L.BD = line:new(z.B, z.D)
+ L.BC = line:new(z.B, z.C)
+ z.X = intersection(L.AC, L.BD)
+ z.Q = intersection(L.AB, L.CD)
+ z.R = intersection(L.AD, L.BC)
+ L.QR = line:new(z.Q, z.R)
+ L.Ta = C.OD:tangent_at(z.A)
+ L.Tb = C.OD:tangent_at(z.B)
+ L.Tc = C.OD:tangent_at(z.C)
+ L.Td = C.OD:tangent_at(z.D)
+ z.Ax, z.Ay = get_points(L.Ta)
+ z.Bx, z.By = get_points(L.Tb)
+ z.Cx, z.Cy = get_points(L.Tc)
+ z.Dx, z.Dy = get_points(L.Td)
+ z.Ibd = intersection(L.Tb, L.Td)
+ z.P = intersection(L.Ta, L.Tc)
+ z.T = intersection(L.Tb, L.Td)
+ z.Ibc = intersection(L.Tb, L.Tc)
+}
+\begin{tikzpicture}[scale = .8]
+  \tkzGetNodes
+  \tkzDrawCircle(O,A)
+  \tkzDrawLines[cyan, thick](P,R)
+  \tkzDrawLines(A,P Bx,By C,P Dx,Dy)
+  \tkzDrawLines[orange](A,Q D,Q B,D A,C B,R A,R)
+  \tkzDrawPoints(A,...,D,X,Q,R,Ibd,Ibc,O,P,T)
+  \tkzLabelPoints[below right](C)
+  \tkzLabelPoints[below left](D)
+  \tkzLabelPoints[below](O,X)
+  \tkzLabelPoints[above left](A,B)
+  \tkzLabelPoints[above right](P,Q,R,T)
+\end{tikzpicture}
+\end{Verbatim}
+
+
+\directlua{%
+ init_elements()
+ z.O = point:new(0, 0)
+ z.D = point:new(3, 0)
+ C.OD = circle:new(z.O, z.D)
+ z.B = C.OD:point(0.25)
+ z.A = C.OD:point(0.45)
+ z.C = C.OD:point(0.10)
+ L.AC = line:new(z.A, z.C)
+ L.AB = line:new(z.A, z.B)
+ L.CD = line:new(z.C, z.D)
+ L.AD = line:new(z.A, z.D)
+ L.BD = line:new(z.B, z.D)
+ L.BC = line:new(z.B, z.C)
+ z.X = intersection(L.AC, L.BD)
+ z.Q = intersection(L.AB, L.CD)
+ z.R = intersection(L.AD, L.BC)
+ L.QR = line:new(z.Q, z.R)
+ L.Ta = C.OD:tangent_at(z.A)
+ L.Tb = C.OD:tangent_at(z.B)
+ L.Tc = C.OD:tangent_at(z.C)
+ L.Td = C.OD:tangent_at(z.D)
+ z.Ax, z.Ay = get_points(L.Ta)
+ z.Bx, z.By = get_points(L.Tb)
+ z.Cx, z.Cy = get_points(L.Tc)
+ z.Dx, z.Dy = get_points(L.Td)
+ z.Ibd = intersection(L.Tb, L.Td)
+ z.P = intersection(L.Ta, L.Tc)
+ z.T = intersection(L.Tb, L.Td)
+ z.Ibc = intersection(L.Tb, L.Tc)
+}
+
+  \begin{center}
+    \begin{tikzpicture}[scale = .8]
+      \tkzGetNodes
+      \tkzDrawCircle(O,A)
+      \tkzDrawLines[cyan, thick](P,R)
+      \tkzDrawLines(A,P Bx,By C,P Dx,Dy)
+      \tkzDrawLines[orange](A,Q D,Q B,D A,C B,R A,R)
+      \tkzDrawPoints(A,...,D,X,Q,R,Ibd,Ibc,O,P,T)
+      \tkzLabelPoints[below right](C)
+      \tkzLabelPoints[below left](D)
+      \tkzLabelPoints[below](O,X)
+      \tkzLabelPoints[above left](A,B)
+      \tkzLabelPoints[above right](P,Q,R,T)
+    \end{tikzpicture}
+  \end{center}
+
+% subsection polar_and_pascal_s_theorem (end)
+
+\subsection{Iran Lemma} % (fold)
+\label{sub:iran_lemma}
+
+Let $ABC$ be a triangle. Let $I$ be the incenter, $M_a$, $M_b$, $M_c$ be the midpoints of $[BC]$, $[CA]$, $[AB]$ and let $T_a$, $T_b$, $T_c$ be the points of tangency of the incircle with $[BC]$, $[CA]$, $[AB]$. Then $(AI)$, $M_aM_b$, $T_aT_c$, the circle $\mathcal{C}(G,A)$  and the circle $\mathcal{C}(M_b,A)$ concur.
+
+\begin{Verbatim}
+\directlua{%
+ init_elements()
+ z.A = point:new(1, 4)
+ z.B = point:new(0, 0)
+ z.C = point:new(5, 0)
+ T.ABC = triangle:new(z.A, z.B, z.C)
+ z.I = T.ABC.incenter
+ z.T_a, z.T_b, z.T_c = T.ABC:projection(z.I)
+ z.M_a = T.ABC.bc.mid
+ z.M_b = T.ABC.ca.mid
+ z.M_c = T.ABC.ab.mid
+ L.MaMb = line:new(z.M_a, z.M_b)
+ L.MaMc = line:new(z.M_a, z.M_c)
+ L.MbMc = line:new(z.M_b, z.M_c)
+ L.AI = line:new(z.A, z.I)
+ L.BI = line:new(z.B, z.I)
+ L.CI = line:new(z.C, z.I)
+ z.G = T.ABC.circumcenter
+ C.Hc = circle:diameter(z.I, z.C)
+ z.Hc = C.Hc.center
+ C.Ha = circle:diameter(z.I, z.A)
+ z.Ha = C.Ha.center
+ C.Hb = circle:diameter(z.I, z.B)
+ z.Hb = C.Hb.center
+ z.J = intersection(L.AI, L.MaMb)
+ z.K = intersection(L.BI, L.MaMb)
+ z.L = intersection(L.CI, L.MbMc)
+}
+\begin{tikzpicture}[scale = 1.5]
+  \tkzGetNodes
+  \tkzDrawPolygon(A,B,C)
+  \tkzDrawCircles[lightgray](I,T_a Hc,I Ha,I Hb,I M_b,A M_a,C M_c,B)
+  \tkzDrawSegments(A,J B,K C,L J,L J,K M_b,L T_c,K)
+  \tkzDrawLine(M_a,M_c)
+  \tkzDrawPoints(A,B,C,T_a,T_b,T_c,I,M_a,M_b,M_c,J,K,L,Hc)
+  \tkzLabelPoints[below right](B,C,T_a,T_c,I,M_a,J,Hc)
+  \tkzLabelPoints[above right](A,T_b,M_b,K,L,M_c)
+  \end{tikzpicture}
+\end{Verbatim}
+
+
+\directlua{%
+init_elements()
+z.A = point:new(1, 4)
+z.B = point:new(0, 0)
+z.C = point:new(5, 0)
+T.ABC = triangle:new(z.A, z.B, z.C)
+z.I = T.ABC.incenter
+z.T_a, z.T_b, z.T_c = T.ABC:projection(z.I)
+z.M_a = T.ABC.bc.mid
+z.M_b = T.ABC.ca.mid
+z.M_c = T.ABC.ab.mid
+L.MaMb = line:new(z.M_a, z.M_b)
+L.MaMc = line:new(z.M_a, z.M_c)
+L.MbMc = line:new(z.M_b, z.M_c)
+L.AI = line:new(z.A, z.I)
+L.BI = line:new(z.B, z.I)
+L.CI = line:new(z.C, z.I)
+z.G = T.ABC.circumcenter
+C.Hc = circle:diameter(z.I, z.C)
+z.Hc = C.Hc.center
+C.Ha = circle:diameter(z.I, z.A)
+z.Ha = C.Ha.center
+C.Hb = circle:diameter(z.I, z.B)
+z.Hb = C.Hb.center
+z.J = intersection(L.AI, L.MaMb)
+z.K = intersection(L.BI, L.MaMb)
+z.L = intersection(L.CI, L.MbMc)
+}
+
+\begin{center}
+  \begin{tikzpicture}[scale = 1.5]
+  \tkzGetNodes
+  \tkzDrawPolygon(A,B,C)
+  \tkzDrawCircles[lightgray](I,T_a Hc,I Ha,I Hb,I M_b,A M_a,C M_c,B)
+  \tkzDrawSegments(A,J B,K C,L J,L J,K M_b,L T_c,K)
+  \tkzDrawLine(M_a,M_c)
+  \tkzDrawPoints(A,B,C,T_a,T_b,T_c,I,M_a,M_b,M_c,J,K,L,Hc)
+  \tkzLabelPoints[below right](B,C,T_a,T_c,I,M_a,J,Hc)
+  \tkzLabelPoints[above right](A,T_b,M_b,K,L,M_c)
+  \end{tikzpicture}
+\end{center}
+
+% subsection iran_lemma (end)
+
+\subsection{Adams's circle} % (fold)
+\label{sub:adams_circle}
+
+\begin{tkzexample}[overhang,vbox]
+  \directlua{%
+    z.A = point:new(0.5, 4)
+    z.B = point:new(0, 0)
+    z.C = point:new(5, 0)
+    T.ABC = triangle:new(z.A, z.B, z.C)
+    T.ins = T.ABC:intouch()
+    z.D, z.E, z.F = get_points(T.ins)
+    z.i = T.ABC.incenter
+    z.G_e = T.ABC:gergonne_point()
+    local function find_points(side1, side2, side3)
+      local line = side1:ll_from(z.G_e)
+      local p1 = intersection(line, side2)
+      local p2 = intersection(line, side3)
+      return p1, p2
+    end
+    z.M, z.J = find_points(T.ins.ca, T.ABC.ab, T.ABC.bc)
+    z.N, z.K = find_points(T.ins.bc, T.ABC.ab, T.ABC.ca)
+    z.I, z.L = find_points(T.ins.ab, T.ABC.bc, T.ABC.ca)
+  }
+  \begin{center}
+    \begin{tikzpicture}[scale = 2]
+      \tkzGetNodes
+      \tkzDrawPolygon(A,B,C)
+      \tkzDrawPolygon[orange](D,E,F)
+      \tkzDrawCircles(i,D)
+      \tkzDrawCircles[thick,purple](i,M)
+      \tkzDrawSegments(A,D B,E C,F)
+      \tkzDrawSegments[orange](M,J N,K I,L)
+      \tkzDrawPoints(A,...,F,G_e,I,J,K,L,M,N)
+      \tkzLabelPoints(B,C,D,I,J)
+      \tkzLabelPoints[above](A,E,L,K)
+      \tkzLabelPoints[above left](F,M,N)
+    \end{tikzpicture}
+  \end{center}
+\end{tkzexample}
+
+% subsection adams_circle (end)
+
+\subsection{Van Lamoen's circle} % (fold)
+\label{sub:van_lamoen_s_circle}
+
+\begin{tkzexample}[overhang,vbox]
+\directlua{%
+init_elements()
+z.A = point:new(2.2, 3)
+z.B = point:new(0, 0)
+z.C = point:new(5, 0)
+T.ABC = triangle:new(z.A,z.B,z.C)
+T.med = T.ABC:medial()
+z.ma,z.mb,z.mc = get_points(T.med)
+z.G = T.ABC.centroid
+ z.wab = triangle:new(z.A,z.mb,z.G).circumcenter
+ z.wac = triangle:new(z.A,z.mc,z.G).circumcenter
+ z.wba = triangle:new(z.B,z.ma,z.G).circumcenter
+ z.wbc = triangle:new(z.B,z.mc,z.G).circumcenter
+ z.wca = triangle:new(z.C,z.ma,z.G).circumcenter
+ z.wcb = triangle:new(z.C,z.mb,z.G).circumcenter
+ T.lamoen = triangle:new(z.wab,z.wac,z.wba)
+ z.w = T.lamoen.circumcenter
+}
+\begin{center}
+  \begin{tikzpicture}[scale = 2]
+  \tkzGetNodes
+  \tkzDrawPolygon(A,B,C)
+  \tkzDrawCircles(wab,A wac,A wba,B wbc,B wca,C wcb,C)
+  \tkzDrawPoints(A,B,C,G,ma,mb,mc)
+  \tkzDrawCircle[purple](w,wab)
+  \tkzDrawPoints[size=2,purple,fill=white](wab,wac,wba,wbc,wca,wcb)
+  \tkzLabelPoints(A,B,C)
+  \end{tikzpicture}
+\end{center}
+\end{tkzexample}
+% subsection van_lamoen_s_circle (end)
+les cercles de Yiu
+\subsection{Yiu's circles variant one} % (fold)
+\label{sub:yiu_circles_variant_one}
+
+\begin{tkzexample}[vbox]
+ \directlua{
+  z.A = point:new(0, 2)
+  z.B = point:new(0, 0)
+  z.C = point:new(5, 0.8)
+  T = triangle:new(z.A, z.B, z.C)
+  z.Ap = T.bc:reflection(z.A)
+  z.Bp = T.ca:reflection(z.B)
+  z.Cp = T.ab:reflection(z.C)
+  T.A = triangle:new(z.A, z.Bp, z.Cp)
+  T.B = triangle:new(z.B, z.Ap, z.Cp)
+  T.C = triangle:new(z.C, z.Ap, z.Bp)
+  z.O_A = T.A.circumcenter
+  z.O_B = T.B.circumcenter
+  z.O_C = T.C.circumcenter
+  T.O = triangle:new(z.O_A, z.O_B, z.O_C)
+  C.A = circle:new(z.O_A, z.A)
+  C.B = circle:new(z.O_B, z.B)
+  _,z.S = intersection(C.A,C.B)
+  }
+\begin{center}
+  \begin{tikzpicture}
+  \tkzGetNodes
+  \tkzDrawPolygon(A,B,C)
+  \tkzDrawPolygon(O_A,O_B,O_C)
+  \tkzDrawCircles[purple](O_A,A O_B,B O_C,C)
+  \tkzDrawSegments[orange,dashed](A,A' B,B' C,C')
+  \tkzDrawPoints(A,B,C,A',B',C',O_A,O_B,O_C,S)
+  \tkzLabelPoints(B,C,A',C')
+  \tkzLabelPoints[above](A,B',S)
+  \end{tikzpicture}
+\end{center}
+
+\end{tkzexample}
+
+% subsection yiu_circles_variant_one (end)
+
+\subsection{Yiu's circles variant two} % (fold)
+\label{sub:yiu_s_circles_variant_two}
+
+\begin{tkzexample}[overhang,vbox]
+  \directlua{%
+  z.A = point:new(3.8, 4.5)
+  z.B = point:new(0, 0)
+  z.C = point:new(6, 0.5)
+  T.ABC = triangle:new(z.A,z.B,z.C)
+  z.Ap = T.ABC.bc:reflection(z.A)
+  z.Bp = T.ABC.ca:reflection(z.B)
+  z.Cp = T.ABC.ab:reflection(z.C)
+  T.ABpC = triangle:new(z.A, z.Bp, z.C)
+  T.BACp = triangle:new(z.B, z.A, z.Cp)
+  T.CApB = triangle:new(z.C, z.Ap, z.B)
+  z.O_A = T.ABpC.circumcenter
+  z.O_B = T.BACp.circumcenter
+  z.O_C = T.CApB.circumcenter
+  z.H = T.ABC.orthocenter
+  }    
+  \begin{center}
+    \begin{tikzpicture}
+    \tkzGetNodes
+    \tkzDrawPolygon(A,B,C)
+    \tkzDrawPolygon(O_A,O_B,O_C)
+    \tkzDrawCircles[purple](O_A,A O_B,B O_C,C)
+    \tkzDrawCircles[red](H,O_A)
+    \tkzDrawSegments[orange,dashed](A,A' B,B' C,C')
+    \tkzDrawPoints(A,B,C,A',B',C',O_A,O_B,O_C)
+    \tkzLabelPoints(B,C,A',C',O_A,O_B,O_C)
+    \tkzLabelPoints[above](A,B')
+    \end{tikzpicture}
+  \end{center}
+
+\end{tkzexample}
+% subsection yiu_s_circles_variant_two (end)
+
+\subsection{Yff's circles variant one} % (fold)
+\label{sub:yff_s_circles_variant_one}
+
+\begin{tkzexample}[overhang,vbox]
+  \directlua{%
+    z.A = point:new(3.8, 2.5)
+    z.B = point:new(0, 0)
+    z.C = point:new(6, 0.5)
+    T.ABC = triangle:new(z.A, z.B, z.C)
+    z.I = T.ABC.incenter
+    z.O = T.ABC.circumcenter
+    z.Y = T.ABC:kimberling(55)  
+    local r = T.ABC.inradius
+    local R = T.ABC.circumradius
+    local rho = (r * R) / (R + r)
+    local C = circle:new(through(z.Y, rho))
+    z.T = C.through 
+    local bisectors = {
+      {z.A, z.I, "wa", T.ABC.ab},
+      {z.B, z.I, "wb", T.ABC.bc},
+      {z.C, z.I, "wc", T.ABC.ca}
+    }
+    for _, bisector in ipairs(bisectors) do
+      local origin, incenter, name, side = unpack(bisector)
+      local L = line:new(origin, incenter)
+      local x, y = intersection(C, L)
+      local d = side:distance(x)
+      if math.abs(d - C.radius) < tkz_epsilon then
+        z[name] = x
+      else
+        z[name] = y
+      end
+    end
+  }
+  \begin{center}
+    \begin{tikzpicture}[scale = 1.25]
+    \tkzGetNodes
+    \tkzDrawPolygon(A,B,C)
+    \tkzDrawPolygon[orange](wa,wb,wc)
+    \tkzDrawCircle[orange](Y,wa)
+    \tkzDrawCircles[purple](wc,Y wb,Y wa,Y)
+    \tkzDrawPoints(A,B,C,O,I,Y,wa,wb,wc)
+    \tkzLabelPoints(B,C,O,I,Y,wa,wb,wc)
+    \tkzDrawLine(O,I)
+    \tkzLabelPoints[above](A)
+    \end{tikzpicture}
+  \end{center}
+
+\end{tkzexample}
+
+% subsection yff_s_circles_variant_one (end)
+
+\subsection{Yff's circles variant two} % (fold)
+\label{sub:yff_s_circles_variant_two}
+
+\begin{tkzexample}[overhang,vbox]
+\directlua{%
+  z.A = point:new(3.8, 2.5)
+  z.B = point:new(0, 0)
+  z.C = point:new(6, 0.5)
+  T.ABC = triangle:new(z.A, z.B, z.C)
+  z.I = T.ABC.incenter
+  z.O = T.ABC.circumcenter
+  z.Y = T.ABC:kimberling(56)
+  local r = T.ABC.inradius
+  local R = length(z.O, z.A)
+  local rho = (r * R) / (R - r)
+  local C = circle:new(through(z.Y, rho))
+  z.T = C.through
+  local bisectors = {
+    {z.A, z.I, "wa", T.ABC.ab},
+    {z.B, z.I, "wb", T.ABC.bc},
+    {z.C, z.I, "wc", T.ABC.ca}
+  }
+  for _, bisector in ipairs(bisectors) do
+    local origin, incenter, name, side = unpack(bisector)
+    local L = line:new(origin, incenter)
+    local x, y = intersection(C, L)
+    local d = side:distance(x)
+    if math.abs(d - C.radius) < tkz_epsilon then
+      z[name] = x
+    else
+      z[name] = y
+    end
+  end
+}
+\begin{center}
+  \begin{tikzpicture}[scale=1.25]
+  \tkzGetNodes
+  \tkzDrawPolygon(A,B,C)
+  \tkzDrawCircles[purple](wc,Y wb,Y wa,Y)
+  \tkzDrawCircles[red](Y,T)
+  \tkzLabelPoints(B,C,O,I,Y,wa,wb,wc)
+  \tkzDrawLine[add=0.5 and .5](O,Y)
+  \tkzDrawLines[add=0 and .5](B,A C,A)
+  \tkzDrawPoints(A,B,C,O,I,Y,wa,wb,wc)
+  \tkzLabelPoints[above](A)
+  \end{tikzpicture}
+\end{center}
+
+\end{tkzexample}
+
+% subsection yff_s_circles_variant_two (end)
 % section examples (end)
\ No newline at end of file

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-indepthstudy.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-indepthstudy.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-indepthstudy.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -166,7 +166,7 @@
 
 \vspace{1em}
 If you want to use only complex numbers then you must choose the following syntax :|za =point (1,2)|.
-The difference between |z.A = point : new (1,2)| and |za = point (1,2)| is that the first function takes into account the scale. If |scale = 2| then $z_A = 2+4i$. In addition, the object referenced by A is stored in table |z| and not za.
+The difference between |z.A = point : new (1,2)| and |za = point (1,2)| is that the object referenced by A is stored in table |z| and not za.
 
  The notation may come as a surprise, as I used the term "point". The aim here was not to create a complete library on complex numbers, but to be able to use their main properties in relation to points. I didn't want to have two different levels, and since a unique connection can be established between the points of the plane and the complexes, I decided not to mention the complex numbers! But they are there.
 
@@ -248,7 +248,7 @@
 \begin{minipage}{.45\textwidth}
 \begin{Verbatim}
 \directlua{%
- init_elements ()
+ init_elements()
  z.O = point : new (0,0)
  z.A = point : new (1,2)
  a = math.pi/6
@@ -266,7 +266,7 @@
 \end{minipage}
 \begin{minipage}{.55\textwidth}
 \directlua{%
-   init_elements ()
+   init_elements()
    z.O = point : new (0,0)
    z.A = point : new (1,2)
    a = math.pi/6
@@ -292,7 +292,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.o  = point: new(0,0)
    z.a  = point: new(1,-1)
    z.b  = point: new(2,1)
@@ -320,7 +320,7 @@
    \end{minipage}
 \begin{minipage}{.5\textwidth}
  \directlua{%
-init_elements ()
+init_elements()
  z.o  = point: new(0,0)
  z.a  = point: new(1,-1)
  z.b  = point: new(2,1)
@@ -382,7 +382,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
  z.A =  point: new (1,0)
  z.B =  point: new (5,-1)
  z.C =  point: new (2,5)
@@ -397,7 +397,7 @@
 \end{Verbatim}
 \end{minipage}
 \begin{minipage}{.5\textwidth}\directlua{%
-init_elements ()
+init_elements()
  z.A =  point: new (1,0)
  z.B =  point: new (5,-1)
  z.C =  point: new (2,5)
@@ -440,7 +440,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 local r  = 3
 z.O      = point : new (0,0)
 max      = 100
@@ -454,7 +454,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
   local r  = 3
   z.O      = point : new (0,0)
   max      = 100
@@ -701,7 +701,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 z.A     = point: new (0,0)
 z.B     = point: new (1,2)
 z.X     = point: new (2,4.000)
@@ -732,7 +732,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
    \directlua{%
-init_elements ()
+init_elements()
 z.A     = point: new (0,0)
 z.B     = point: new (1,2)
 z.X     = point: new (2,4.000)
@@ -869,7 +869,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.A   = point : new ( 0 , 0 ) 
    z.B   = point : new ( 4 , 2 ) 
    z.C   = point : new ( 1 , 3 )
@@ -892,7 +892,7 @@
 \hspace{\fill}
 \begin{minipage}{.5\textwidth}
 \directlua{%
-   init_elements ()
+   init_elements()
    z.A   = point : new ( 0 , 0 ) 
    z.B   = point : new ( 4 , 2 ) 
    z.C   = point : new ( 1 , 3 )
@@ -946,7 +946,6 @@
 
 The difference is that programming is more direct with primary functions and a little more efficient, but loses visibility.
 
-
 % subsection behind_the_objects (end)
 % section in_depth_study (end)
 \endinput
\ No newline at end of file

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-intersection.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-intersection.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-intersection.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -15,7 +15,7 @@
 \begin{minipage}{0.6\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.A   = point : new (1,-1)
    z.B   = point : new (4,1)
    z.C   = point : new (2,1)
@@ -41,7 +41,7 @@
 \end{minipage}
 \begin{minipage}{0.4\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.A   = point : new (1,-1)
 z.B   = point : new (4,1)
 z.C   = point : new (2,1)
@@ -76,7 +76,7 @@
 \begin{minipage}{0.6\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.A   = point : new (1,-1)
    z.B   = point : new (1,2)
    L.AB  = line : new (z.A,z.B)
@@ -100,7 +100,7 @@
 \end{minipage}
 \begin{minipage}{0.4\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.A = point : new (1,-1)
 z.B = point : new (1,2)
 L.AB = line : new (z.A,z.B)
@@ -135,7 +135,7 @@
 \begin{minipage}{0.5\textwidth}
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
    z.A      = point : new (1,1)
    z.B      = point : new (2,2)
    z.C      = point : new (3,3)
@@ -156,7 +156,7 @@
 \end{minipage}
 \begin{minipage}{0.5\textwidth}
 \directlua{%
-init_elements ()
+init_elements()
 z.A = point : new (1,1)
 z.B = point : new (2,2)
 z.C = point : new (3,3)
@@ -189,7 +189,7 @@
 \begin{minipage}{0.5\textwidth}
 \begin{Verbatim}
 \directlua{%
- init_elements ()
+ init_elements()
  z.a      = point: new (5 , 2)
  z.b      = point: new (-4 , 0)
  L.ab     = line : new (z.a,z.b)
@@ -222,7 +222,7 @@
 \end{minipage}
 \begin{minipage}{0.5\textwidth}
 \directlua{%
- init_elements ()
+ init_elements()
  z.a      = point: new (5 , 2)
  z.b      = point: new (-4 , 0)
  L.ab     = line : new (z.a,z.b)
@@ -419,8 +419,8 @@
   z.y       = OCCS.abscissa :report(r2,z.K)
   L1        = L.euler : ortho_from (z.x)
   L2        = L.euler : ortho_from (z.y)
-  z.α_1     = intersection (L.ab,L1)
-  z.α_2     = intersection (L.ab,L2)
+  z.s_1     = intersection (L.ab,L1)
+  z.s_2     = intersection (L.ab,L2)
   } 
   \begin{tikzpicture}
   \tkzGetNodes 
@@ -430,9 +430,9 @@
    \tkzDrawSegment[blue](a,b)
    \tkzDrawPoints(F,K,H,S,O)
    \tkzDrawPoints(A,B,F,K,S,ta,tb,tc)
-   \tkzDrawPoints[red,size=2](α_1,α_2)
-   \tkzLabelPoints[red,above](α_1)
-   \tkzLabelPoints[red,right](α_2)
+   \tkzDrawPoints[red,size=2](s_1,s_2)
+   \tkzLabelPoints[red,above](s_1)
+   \tkzLabelPoints[red,right](s_2)
    \tkzLabelPoints(F,S,O,A,B)
    \tkzLabelPoints[above](C)
    \tkzLabelPoints[left](H,K)
@@ -478,8 +478,8 @@
   z.y       = OCCS.abscissa :report(r2,z.K)
   L1        = L.euler : ortho_from (z.x)
   L2        = L.euler : ortho_from (z.y)
-  z.α_1     = intersection (L.ab,L1)
-  z.α_2     = intersection (L.ab,L2)
+  z.s_1     = intersection (L.ab,L1)
+  z.s_2     = intersection (L.ab,L2)
   } 
 
   \begin{center}
@@ -491,9 +491,9 @@
      \tkzDrawSegment[blue](a,b)
      \tkzDrawPoints(F,K,H,S,O)
      \tkzDrawPoints(A,B,F,K,S,ta,tb,tc)
-     \tkzDrawPoints[red,size=2](α_1,α_2)
-     \tkzLabelPoints[red,above](α_1)
-     \tkzLabelPoints[red,right](α_2)
+     \tkzDrawPoints[red,size=2](s_1,s_2)
+     \tkzLabelPoints[red,above](s_1)
+     \tkzLabelPoints[red,right](s_2)
      \tkzLabelPoints(F,S,O,A,B)
      \tkzLabelPoints[above](C)
      \tkzLabelPoints[left](H,K)

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-main.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-main.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-main.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,7 +1,7 @@
 % !TEX TS-program = lualatex
 % encoding : utf8 
-% Documentation of tkz-elements v3.32c
-% Copyright 2024  Alain Matthes
+% Documentation of tkz-elements v3.34c
+% Copyright 2025  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.
@@ -21,10 +21,10 @@
                headings    = small
                ]{tkz-doc}
 \gdef\tkznameofpack{tkz-elements}
-\gdef\tkzversionofpack{3.32c}
+\gdef\tkzversionofpack{3.34c}
 \gdef\tkzdateofpack{\today}
 \gdef\tkznameofdoc{tkz-elements.pdf}
-\gdef\tkzversionofdoc{3.32c}
+\gdef\tkzversionofdoc{3.34c}
 \gdef\tkzdateofdoc{\today}
 \gdef\tkzauthorofpack{Alain Matthes}
 \gdef\tkzadressofauthor{}
@@ -40,6 +40,7 @@
 \usepackage{tkz-base}
 \usepackage[mini]{tkz-euclide}
 \usepackage{tkz-elements}
+\usepackage{tkzexample}
 \usepackage{pgfornament}
 \usetikzlibrary{backgrounds}
 \usetikzlibrary{mindmap}
@@ -140,7 +141,10 @@
 '\percentchar.5f',math.sqrt((#1)*(#1)+(#2)*(#2))))
 }}
 % printnumber
-
+\newenvironment{SVerbatim}
+  {\small\Verbatim}
+  {\endVerbatim}
+  
 \let\pmpn\pgfmathprintnumber
 \AtBeginDocument{\MakeShortVerb{\|}} % link to shortvrb
 
@@ -257,9 +261,9 @@
 |east(d)                   -> p|   \\
 |west(d)                   -> p|   \\
 |normalize(p)              -> p|   \\
-|symmetry (...)            -> O|   \\
-|rotation (an , ...)       -> O|   \\
-|homothety (r , ...)       -> O|   \\
+|symmetry(...)             -> O|   \\
+|rotation(an , ...)        -> O|   \\
+|homothety(r , ...)        -> O|   \\
 |orthogonal(d)             -> p|   \\
 |at()                      -> p|   \\
 |print()                   -> s|   \\
@@ -280,64 +284,64 @@
 |vec                       -> V|   \\
 \\
 \textbf{Methods} table(\ref{line:met})     \\
-|new (p,p)                 -> d|   \\
-|distance (p)              -> d|   \\
-|slope ()                  -> r|   \\
-|in_out (p)                -> b|   \\
-|in_out_segment (p)        -> b|   \\
-|is_parallel (l)           -> b|   \\
-|is_orthogonal (l)         -> b|   \\
-|is_equidistant (p)        -> b|   \\
-|barycenter (r,r)          -> p|   \\
-|point (t)                 -> p|   \\
-|midpoint ()               -> p|   \\
-|harmonic_int (p)          -> p|   \\
-|harmonic_ext (p)          -> p|   \\
-|harmonic_both (d)         -> p|   \\
+|new(p,p)                  -> d|   \\
+|distance(p)               -> d|   \\
+|slope()                   -> r|   \\
+|in_out(p)                 -> b|   \\
+|in_out_segment(p)         -> b|   \\
+|is_parallel(l)            -> b|   \\
+|is_orthogonal(l)          -> b|   \\
+|is_equidistant(p)         -> b|   \\
+|barycenter(r,r)           -> p|   \\
+|point(t)                  -> p|   \\
+|midpoint()                -> p|   \\
+|harmonic_int(p)           -> p|   \\
+|harmonic_ext(p)           -> p|   \\
+|harmonic_both(d)          -> p|   \\
 |gold_ratio()              -> p|   \\
-|normalize ()              -> p|   \\
-|normalize_inv ()          -> p|   \\
-|_north_pa (d)             -> p|   \\
-|_north_pb (d)             -> p|   \\
-|_south_pa (d)             -> p|   \\
-|_south_pb (d)             -> p|   \\ 
-|_east (d)                 -> p|   \\
-|_west (d)                 -> p|   \\
-|report (r,p)              -> p|   \\
-|colinear_at (p,k)         -> p|   \\
-|affinity (p)              -> P|   \\
-|affinity (pts)          -> pts|   \\
-|projection (pts)        -> pts|   \\
-|projection_ll (pts)     -> pts|   \\
-|translation (...)         -> O|   \\
-|reflection (...)          -> O|   \\
-|ll_from ( p )             -> L|   \\
-|ortho_from ( p )          -> L|   \\
-|mediator ()               -> L|   \\
-|swap_line ()              -> L|   \\
-|circle ()                 -> C|   \\
-|circle_swap ()            -> C|   \\
-|diameter ()               -> C|   \\
-|apollonius (r)            -> C|   \\
-|c_ll_p (p,p)              -> C|   \\
-|c_l_pp (p,p)              -> C|   \\
-|equilateral (<swap>)      -> T|   \\
-|isosceles (an,<swap>)     -> T|   \\
-|school ()                 -> T|   \\
-|two_angles (an,an)        -> T|   \\
-|half ()                   -> T|   \\
-|sss (r,r,r)               -> T|   \\
-|sas (r,an)                -> T|   \\
-|ssa (r,an)                -> T|   \\
-|gold (<swap>)             -> T|   \\
-|euclide (<swap>)          -> T|   \\
-|golden (<swap>)           -> T|   \\
-|divine ()                 -> T|   \\
-|cheops ()                 -> T|   \\
-|pythagoras ()             -> T|   \\
-|sublime  ()               -> T|   \\
-|egyptian ()               -> T|   \\
-|square (<swap>)           -> T|   \\
+|normalize()               -> p|   \\
+|normalize_inv()           -> p|   \\
+|_north_pa(d)              -> p|   \\
+|_north_pb(d)              -> p|   \\
+|_south_pa(d)              -> p|   \\
+|_south_pb(d)              -> p|   \\ 
+|_east(d)                  -> p|   \\
+|_west(d)                  -> p|   \\
+|report(r,p)               -> p|   \\
+|colinear_at(p,k)          -> p|   \\
+|affinity(p)               -> P|   \\
+|affinity(pts)           -> pts|   \\
+|projection(pts)         -> pts|   \\
+|projection_ll(pts)      -> pts|   \\
+|translation(...)          -> O|   \\
+|reflection(...)           -> O|   \\
+|ll_from( p )              -> L|   \\
+|ortho_from( p )           -> L|   \\
+|mediator()                -> L|   \\
+|swap_line()               -> L|   \\
+|circle()                  -> C|   \\
+|circle_swap()             -> C|   \\
+|diameter()                -> C|   \\
+|apollonius(r)             -> C|   \\
+|c_ll_p(p,p)               -> C|   \\
+|c_l_pp(p,p)               -> C|   \\
+|equilateral(<swap>)       -> T|   \\
+|isosceles(an,<swap>)      -> T|   \\
+|school()                  -> T|   \\
+|two_angles(an,an)         -> T|   \\
+|half()                    -> T|   \\
+|sss(r,r,r)                -> T|   \\
+|sas(r,an)                 -> T|   \\
+|ssa(r,an)                 -> T|   \\
+|gold(<swap>)              -> T|   \\
+|euclide(<swap>)           -> T|   \\
+|golden(<swap>)            -> T|   \\
+|divine()                  -> T|   \\
+|cheops()                  -> T|   \\
+|pythagoras()              -> T|   \\
+|sublime)                  -> T|   \\
+|egyptian()                -> T|   \\
+|square(<swap>)            -> T|   \\
                                    \\
 \fbox{\textbf{triangle}}           \\
 \textbf{Attributes} table(\ref{triangle:att})  \\
@@ -363,54 +367,54 @@
 |circumradius              -> r|  \\
 \\
 \textbf{Methods} table(\ref{triangle:met}) \\
-|new (p,p,p)               -> T|  \\
-|check_equilateral ()      -> b|  \\
-|in_out (p)                -> b|  \\
-|area ()                   -> d|  \\
-|parallelogram ()          -> p|  \\
-|trilinear (r,r,r)         -> p|  \\
-|barycentric (r,r,r)       -> p|  \\
-|bevan_point ()            -> p|  \\
-|mittenpunkt_point ()      -> p|  \\
-|gergonne_point ()         -> p|  \\
-|nagel_point ()            -> p|  \\
-|feuerbach_point ()        -> p|  \\
+|new(p,p,p)                -> T|  \\
+|check_equilateral()       -> b|  \\
+|in_out(p)                 -> b|  \\
+|area()                    -> d|  \\
+|parallelogram()           -> p|  \\
+|trilinear(r,r,r)          -> p|  \\
+|barycentric(r,r,r)        -> p|  \\
+|bevan_point()             -> p|  \\
+|mittenpunkt_point()       -> p|  \\
+|gergonne_point()          -> p|  \\
+|nagel_point()             -> p|  \\
+|feuerbach_point()         -> p|  \\
 |lemoine_point()           -> p|  \\
 |symmedian_point()         -> p|  \\
 |spieker_center()          -> p|  \\
-|barycenter (r,r,r)        -> p|  \\
-|base (u,v)                -> p|  \\
-|euler_points ()           -> p|  \\
-|nine_points ()            -> p|  \\
-|point (t)                 -> p|  \\
-|soddy_center ()           -> p|  \\
-|isogonal (p)              -> p|   \\
-|conway_points ()        -> pts|   \\
-|projection (p)        -> p,p,p|   \\
-|euler_line ()             -> L|   \\
-|symmedian_line (n)        -> L|   \\
-|altitude (n)              -> L|   \\
-|bisector (n)              -> L|   \\
+|barycenter(r,r,r)         -> p|  \\
+|base(u,v)                 -> p|  \\
+|euler_points()            -> p|  \\
+|nine_points()             -> p|  \\
+|point(t)                  -> p|  \\
+|soddy_center()            -> p|  \\
+|isogonal(p)               -> p|   \\
+|conway_points()         -> pts|   \\
+|projection(p)         -> p,p,p|   \\
+|euler_line()              -> L|   \\
+|symmedian_line(n)         -> L|   \\
+|altitude(n)               -> L|   \\
+|bisector(n)               -> L|   \\
 |bisector_ext(n)           -> L|   \\
 |antiparallel(p,n)         -> L|   \\
-|brocard_axis ()           -> L|   \\
-|simson_line (p)           -> L|   \\
-|steiner_line (p)          -> L|   \\
-|euler_line ()             -> L|   \\
-|fermat_axis (p)           -> L|   \\
-|lemoine_axis ()           -> L|   \\
-|euler_circle ()           -> C|   \\
+|brocard_axis()            -> L|   \\
+|simson_line(p)            -> L|   \\
+|steiner_line(p)           -> L|   \\
+|euler_line()              -> L|   \\
+|fermat_axis(p)            -> L|   \\
+|lemoine_axis()            -> L|   \\
+|euler_circle()            -> C|   \\
 |circum_circle()           -> C|   \\
-|in_circle ()              -> C|   \\
-|ex_circle (n)             -> C|   \\
+|in_circle()               -> C|   \\
+|ex_circle(n)              -> C|   \\
 |first_lemoine_circle()    -> C|   \\
 |second_lemoine_circle()   -> C|   \\
 |spieker_circle()          -> C|   \\
-|soddy_circle ()           -> C|   \\
-|conway_circle ()          -> C|   \\
-|pedal_circle ()           -> C|   \\
-|cevian_circle ()          -> C|   \\
-|c_ll_p (p)                -> C|   \\
+|soddy_circle()            -> C|   \\
+|conway_circle()           -> C|   \\
+|pedal_circle()            -> C|   \\
+|cevian_circle()           -> C|   \\
+|c_ll_p(p)                 -> C|   \\
 |orthic()                  -> T|   \\
 |medial()                  -> T|   \\
 |incentral()               -> T|   \\
@@ -419,12 +423,12 @@
 |contact()                 -> T|   \\
 |extouch()                 -> T|   \\
 |feuerbach()               -> T|   \\
-|anti ()                   -> T|   \\
-|tangential ()             -> T|   \\
-|cevian (p)                -> T|   \\
-|symmedian ()              -> T|   \\
-|euler ()                  -> T|   \\
-|pedal (p)                 -> T|   \\
+|anti()                    -> T|   \\
+|tangential()              -> T|   \\
+|cevian(p)                 -> T|   \\
+|symmedian()               -> T|   \\
+|euler()                   -> T|   \\
+|pedal(p)                  -> T|   \\
 |barycentric_coordinates(p)|       \\
                       |-> r,r,r|   \\
 \\
@@ -443,38 +447,42 @@
 |perimeter                 -> r|   \\ 
 |area                      -> r|   \\ 
 \\
+\textbf{Functions} table(\ref{circle:func})  \\
+|new(p,p)                  -> C|   \\
+|through(p,p)            -> p,p|   \\
+|radius(p, r)              -> C|   \\
+\\
 \textbf{Methods} table(\ref{circle:met})  \\
-|new (p,p)                 -> C|   \\
-|radius (p, r)             -> C|   \\
-|diameter (p,p)            -> C|   \\ 
-|in_out (p)                -> b|   \\ 
-|in_out_disk (p)           -> b|   \\ 
-|circles_position (C)      -> s|   \\ 
-|power (p)                 -> r|   \\ 
-|antipode (p)              -> p|   \\ 
-|midarc (p,p)              -> p|   \\ 
-|point (r)                 -> p|   \\ 
-|random_pt (lower, upper)  -> p|   \\ 
-|internal_similitude (C)   -> p|   \\ 
-|external_similitude (C)   -> p|   \\ 
+|new(p,p)                  -> C|   \\
+|diameter(p,p)             -> C|   \\ 
+|in_out(p)                 -> b|   \\ 
+|in_out_disk(p)            -> b|   \\ 
+|circles_position(C)       -> s|   \\ 
+|power(p)                  -> r|   \\ 
+|antipode(p)               -> p|   \\ 
+|midarc(p,p)               -> p|   \\ 
+|point(r)                  -> p|   \\ 
+|random_pt(lower, upper)   -> p|   \\ 
+|internal_similitude(C)    -> p|   \\ 
+|external_similitude(C)    -> p|   \\ 
 |radical_center(C,<C>)     -> p|   \\
-|taylor_points()         -> pts|  \\
-|tangent_at (p)            -> L|   \\ 
-|radical_axis (C)          -> L|   \\ 
-|polar (p)                 -> L|   \\ 
+|taylor_points()         -> pts|   \\
+|tangent_at(p)             -> L|   \\ 
+|radical_axis(C)           -> L|   \\ 
+|polar(p)                  -> L|   \\ 
 |radical_circle(C,<C>)     -> C|   \\ 
-|orthogonal_from (p)       -> C|   \\ 
+|orthogonal_from(p)        -> C|   \\ 
 |orthogonal_through(p,p)   -> C|   \\
-|c_lc_p (L,p,inside)       -> C|   \\
+|c_lc_p(L,p,inside)        -> C|   \\
 |c_c_pp(a,b)(p,p)          -> C|   \\
-|c_cc_p (C,p)              -> C|   \\
+|c_cc_p(C,p)               -> C|   \\
 |midcircle(C)              -> C|   \\
 |taylor_circle()           -> C|   \\
 |external_tangent(C)     -> L,L|   \\
 |internal_tangent(C)     -> L,L|   \\
 |common_tangent(C)       -> L,L|   \\
-|tangent_from (p)        -> L,L|   \\
-|inversion (...)           -> O|   \\
+|tangent_from(p)         -> L,L|   \\
+|inversion(...)            -> O|   \\
                                    \\
 \fbox{\textbf{conic}}              \\
 \textbf{Attributes} table(\ref{conic:att}) \\
@@ -500,28 +508,28 @@
 |minor_axis                -> L|  \\
 \\
 \textbf{Methods} table(\ref{conic:met}) \\
-|new (p,L,r)               -> E|   \\
-|points (r,r,n,< swap >)   -> E|   \\
-|point (r,< swap >)        -> E|   \\
-|in_out (p)                -> b|   \\
-|tangent_at (p)            -> L|   \\
-|tangent_from (p)          -> L|   \\
-|asymptotes (r))           -> L|   \\
-|orthoptic ()           -> L,Co|   \\
-|antipode (p)              -> p|    \\
+|new(p,L,r)                -> E|   \\
+|points(r,r,n,< swap >)    -> E|   \\
+|point(r,< swap >)         -> E|   \\
+|in_out(p)                 -> b|   \\
+|tangent_at(p)             -> L|   \\
+|tangent_from(p)           -> L|   \\
+|asymptotes(r))            -> L|   \\
+|orthoptic()            -> L,Co|   \\
+|antipode(p)               -> p|    \\
                                    \\                        
 \textbf{Functions}  \ref{sub:useful_tools}  \\
-|EL_points (p,p,p)     -> p,L,r|   \\
+|EL_points(p,p,p)      -> p,L,r|   \\
 |EL_bifocal(p,p,r or p)-> p,L,r|   \\
 |HY_bifocal(p,p,r or p)-> p,L,r|   \\
 |PA_dir(p,p,p)         -> p,L,r|   \\
-|PA_focus(L,p,p)       -> p,L,r|    \\
-\\
-\fbox{\textbf{occs}}          \\
+|PA_focus(L,p,p)       -> p,L,r|   \\
+                                   \\
+\fbox{\textbf{occs}}               \\
 \textbf{Attributes} table(\ref{occs:att}) \\
-|L,p                    -> occs|  \\
+|L,p                    -> occs|   \\
 |type                      -> s|   \\
-|origin                    -> p|  \\
+|origin                    -> p|   \\
 |y                         -> p|   \\
 |x                         -> p|   \\
 |abscissa                  -> L|   \\
@@ -528,11 +536,11 @@
 |ordinate                  -> L|   \\
  \\
  \textbf{Methods} table(\ref{rectangle:met}) \\
-|new (L,p)                 -> R|   \\ 
-|coordinates (p)         -> r,r|   \\
+|new(L,p)                  -> R|   \\ 
+|coordinates(p)          -> r,r|   \\
                                    \\
 \fbox{\textbf{square} }            \\
-      \\
+                            \\
  \textbf{Attributes} table(\ref{square:att}) \\
 |pa,pb,pc,pd               -> p|   \\
 |type                      -> s|   \\
@@ -545,9 +553,9 @@
 |ab bc cd da               -> L|   \\
 |ac bd                     -> L|   \\
  \textbf{Methods} table(\ref{square:met}) \\
-|new (p,p,p,p)             -> S|   \\ 
-|rotation (p,p)            -> S|   \\
-|side (p,p,<swap>)         -> S|   \\
+|new(p,p,p,p)              -> S|   \\ 
+|rotation(p,p)             -> S|   \\
+|side(p,p,<swap>)          -> S|   \\
                                    \\
 \fbox{\textbf{rectangle}}          \\
 \textbf{Attributes} table(\ref{rectangle:att}) \\
@@ -561,14 +569,14 @@
 |ab bc cd da               -> L|   \\
 |ac bd                     -> L|   \\
  \textbf{Methods} table(\ref{rectangle:met}) \\
-|new (p,p,p,p)             -> R|   \\ 
-|angle (p,p,an)            -> R|   \\
-|gold  (p,p,<swap>)        -> R|   \\
-|diagonal  (p,p,<swap>)    -> R|   \\
-|side  (p,p,r,<swap>)      -> R|   \\
-|get_lengths ()           ->r,r|  \\
-                                   \\
-\fbox{\textbf{quadrilateral} }     \\
+|new(p,p,p,p)              -> R|   \\ 
+|angle(p,p,an)             -> R|   \\
+|gold(p,p,<swap>)          -> R|   \\
+|diagonal(p,p,<swap>)      -> R|   \\
+|side(p,p,r,<swap>)        -> R|   \\
+|get_lengths()           -> r,r|   \\
+                                  \\
+\fbox{\textbf{quadrilateral}}     \\
  \textbf{Attributes} table(\ref{quadrilateral:att}) \\
 |pa,pb,pc,pd               -> p|  \\
 |ab bc cd da               -> L|  \\
@@ -578,19 +586,19 @@
 |g                         -> p|  \\
 |a b c d                   -> r|  \\
  \textbf{Methods} table(\ref{quadrilateral:met}) \\
-|new (p,p,p,p)             -> Q|   \\ 
-|iscyclic ()               -> b|   \\         
-                                   \\
-\fbox{\textbf{parallelogram}}      \\
+|new(p,p,p,p)              -> Q|  \\ 
+|iscyclic()                -> b|  \\         
+                                  \\
+\fbox{\textbf{parallelogram}}     \\
  \textbf{Attributes} table(\ref{parallelogram:att}) \\
-|pa,pb,pc,pd               -> p|   \\
+|pa,pb,pc,pd               -> p|  \\
 |ab bc cd da               -> L|  \\
 |ac bd                     -> L|  \\
 |type                      -> s|  \\
 |center                    -> p|   \\
  \textbf{Methods} table(\ref{parallelogram:met}) \\
-|new (p,p,p,p)              ->P|     \\ 
-|fourth (p,p,p)             ->P|     \\
+|new(p,p,p,p)               ->P|     \\ 
+|fourth(p,p,p)              ->P|     \\
                                    \\
 \fbox{\textbf{Regular\_polygon}}   \\
  \textbf{Attributes} table(\ref{regular:att}) \\
@@ -605,9 +613,9 @@
 |nb                        -> i|   \\
 |angle                    -> an|  \\
  \textbf{Methods} table(\ref{regular:met})  \\
-|new (p,p,n)              -> PR|  \\
-|incircle ()               -> C|   \\
-|name (s)                  -> ?|   \\
+|new(p,p,n)               -> PR|  \\
+|incircle()                -> C|   \\
+|name(s)                   -> ?|   \\
                                    \\
 \fbox{\textbf{vector}}             \\
 \textbf{Attributes} table(\ref{vector:att}) \\
@@ -616,12 +624,12 @@
 |slope                     -> r|   \\
 |mtx                       -> M|   \\
 \textbf{Methods} table(\ref{vector:met})  \\
-|new (p,p)                 -> V|   \\
+|new(p,p)                  -> V|   \\
 |+ - *                     -> p|   \\
-|normalize (V)             -> V|   \\
-|orthogonal (d)            -> V|   \\
-|scale (r)                 -> V|   \\
-|at (p)                    -> V|   \\
+|normalize(V)              -> V|   \\
+|orthogonal(d)             -> V|   \\
+|scale(r)                  -> V|   \\
+|at(p)                     -> V|   \\
         \\
 \fbox{\textbf{matrix}}             \\
 \textbf{Attributes} table(\ref{matrix:att})   \\
@@ -637,8 +645,8 @@
 |vector                    ->  m|  \\
 \\
 \textbf{Metamethods} table(\ref{matrix:meta}) \\
-|+ - *  (m,m)               -> m|   \\
-|^ (m,n)                    -> m|   \\
+|+ - *(m,m)                 -> m|   \\
+|^(m,n)                     -> m|   \\
 |=                          -> b|   \\
 |tostring                   -> s|   \\
 \\
@@ -652,33 +660,31 @@
 |is_orthogonal              -> b|   \\  
 |homogenization             -> m|   \\  
 |htm_apply                  -> m|   \\  
-                                   \\                       
-\fbox{\textbf{Misc.}}              \\
+                                    \\                       
+\fbox{\textbf{Misc.}}               \\
  \textbf{Attributes} table(\ref{misc}) \\
-|scale (default =1)          -> r|   \\ 
-|tkzphi                      -> r|   \\
-|tkzinvphi                   -> r|   \\
-|tkzsqrtphi                  -> r|   \\
-|tkz_epsilon (default=1e-8)  -> r|   \\
-|length                      -> d|   \\
-|islinear(p,p,p)             -> b|   \\
-|isortho(p,p,p)              -> b|   \\
-|value{r}                    -> r|   \\
-|real                        -> r|   \\
-|angle_normalize (an)       -> an|  \\
-|barycenter (...)            -> p|  \\
-|bisector (p,p,p)            -> L|   \\
-|bisector_ext (p,p,p)        -> L|   \\
-|altitude (p,p,p)            -> L|   \\
-|midpoint (p,p)              -> p|  \\
-|midpoints (...)   -> list of pts|  \\
-|equilateral (p,p)           -> T|   \\
-|format_number(r,n)          -> r|   \\
-|solve_quadratic(cx,cx,cx)->cx,cx|\\
-|\tkzUseLua{v}               -> s|   \\
+|scale(default =1)          -> r|   \\ 
+|tkzphi                     -> r|   \\
+|tkzinvphi                  -> r|   \\
+|tkzsqrtphi                 -> r|   \\
+|tkz_epsilon(default=1e-8)  -> r|   \\
+|length                     -> d|   \\
+|islinear(p,p,p)            -> b|   \\
+|isortho(p,p,p)             -> b|   \\
+|angle_normalize(an)       -> an|  \\
+|barycenter(...)            -> p|  \\
+|bisector(p,p,p)            -> L|   \\
+|bisector_ext(p,p,p)        -> L|   \\
+|altitude(p,p,p)            -> L|   \\
+|midpoint(p,p)              -> p|  \\
+|midpoints(...)   -> list of pts|  \\
+|equilateral(p,p)           -> T|   \\
+|format_number(r,n)         -> r|   \\
+|solve_quadratic(r,r,r)  -> cr,r|\\
+|\tkzUseLua{v}              -> s|   \\
                                    \\
 \fbox{\textbf{Macros}}             \\
-|\tkzDN[n]{r}                -> r|   \\
+|\tkzDN[n]{r}               -> r|   \\
 |\tkzDrawLuaEllipse(p,p,p)|   \\
 \end{multicols}
 \end{document}
\ No newline at end of file

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-news.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-news.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-news.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -18,6 +18,7 @@
 Another change is the removal of scaling in the \code{lua} part. It turned out that this caused significant code management issues, while scaling with \TIKZ{} was already highly effective (since the most important calculations were already performed). From now on, scaling is not supported by certain functions, so it is recommended to use it only within the \code{tikzpicture} environment.
 
 In version 3.32c, a change has been made to the \code{occs} class: the first argument is still a straight line, but it is no longer the directrix of a conic. Instead, it becomes the main axis passing through a vertex and a focus. This axis will serve as the future ordinate axis. This class can, of course, be used for other constructions beyond conics.
+
 % section news (end)
 \endinput
 

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-organization.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-organization.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-organization.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -19,7 +19,7 @@
 
 
 \begin{minipage}{.5\textwidth}
-\begin{Verbatim}
+\begin{SVerbatim}
 % !TEX TS-program = lualatex
 % Created by Alain Matthes on 2024-01-09.
 \documentclass[margin = 12pt]{standalone} 
@@ -28,7 +28,7 @@
 
 \begin{document}  
 \directlua{
- init_elements ()
+ init_elements()
  dofile ("sangaku.lua")
 }
 \begin{tikzpicture}[scale = 1.25]
@@ -39,11 +39,11 @@
    \tkzFillCircle[color = orange](I,F)%
 \end{tikzpicture}
 \end{document}
-\end{Verbatim}
+\end{SVerbatim}
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{
- init_elements ()
+ init_elements()
  dofile ("sangaku.lua")
 }
 
@@ -56,26 +56,28 @@
      \tkzFillCircle[color = orange](I,F)%
   \end{tikzpicture}
 \end{center}
+\end{minipage}
 
-\end{minipage}
+\vspace{12pt}
 And here is the code for the \code{Lua} part: the file |ex_sangaku.lua|
 
+\vspace{6pt}
 \begin{minipage}{.5\textwidth}
 \begin{mybox}
-  \begin{Verbatim}
-  z.A         = point : new ( 0,0 ) 
-  z.B         = point : new ( 8,0 )
-  L.AB        = line : new ( z.A , z.B )
-  S           = L.AB : square ()
-  _,_,z.C,z.D = get_points (S)
-  z.F         = S.ac : projection (z.B)
-  L.BF        = line : new (z.B,z.F)
-  T.ABC       = triangle : new ( z.A , z.B , z.C )
-  L.bi        = T.ABC : bisector (2)
-  z.c         = L.bi.pb
-  L.Cc        = line : new (z.C,z.c)
-  z.I         = intersection (L.Cc,L.BF)
-  \end{Verbatim}
+\begin{SVerbatim}
+ z.A = point:new(0, 0)
+ z.B = point:new(8, 0)
+ L.AB = line:new(z.A, z.B)
+ S = L.AB:square()
+ _, _, z.C, z.D = get_points(S)
+ z.F = S.ac:projection(z.B)
+ L.BF = line:new(z.B, z.F)
+ T.ABC = triangle:new(z.A, z.B, z.C)
+ L.bi = T.ABC:bisector(2)
+ z.c = L.bi.pb
+ L.Cc = line:new(z.C, z.c)
+ z.I = intersection(L.Cc, L.BF)
+\end{SVerbatim}
 \end{mybox}
 \end{minipage}
 

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-presentation.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-presentation.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-presentation.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -33,7 +33,7 @@
 begin{document} 
     
 \directlua{
-init_elements ()
+init_elements()
 % definition of some points
 z.A = point : new (   ,   )
 z.B = point : new (   ,   )
@@ -70,7 +70,6 @@
 After obtaining all the necessary points for the drawing, they must be transformed into \tkzname{nodes} so that \pkg{TikZ} or \pkg{tkz-euclide} can render the figure. This is accomplished using the macro \tkzcname{tkzGetNodes}. This macro iterates through  all the elements of the table |z| using the key (which is essentially the name of the point) and retrieves the associated values, namely the coordinates of the point (node).
 % subsection the_main_process (end)
 
-\newpage
 \subsection{Complete example: Pappus circle} % (fold)
 \label{sub:the_figure_pappus_circle}
 
@@ -77,30 +76,30 @@
 \subsubsection{The figure} 
 
 \directlua{
-  init_elements ()
-  z.A  = point: new (0 , 0)
-  z.B  = point: new (10 , 0)
-  L.AB = line:  new ( z.A, z.B)
-  z.C  = L.AB:  gold_ratio () 
-  L.AC = line:  new ( z.A, z.C)
-  L.CB = line:  new ( z.C, z.B)
-  L.AB = line:  new ( z.A, z.B)
-  z.O_0    = L.AB.mid
-  z.O_1    = L.AC.mid
-  z.O_2    = L.CB.mid
-  C.AB = circle: new ( z.O_0, z.B) 
-  C.AC = circle: new ( z.O_1, z.C) 
-  C.CB = circle: new ( z.O_2, z.B)
-  z.P  = C.CB.north  
-  z.Q  = C.AC.north
-  z.O  = C.AB.south
-  z.c  = z.C : north (2)
-  C.PC = circle: new ( z.P, z.C) 
-  C.QA = circle: new ( z.Q, z.A)  
-  z.P_0    = intersection (C.PC,C.AB)
-  z.P_1    = intersection (C.PC,C.AC)
-  _,z.P_2  = intersection (C.QA,C.CB)
-  z.O_3 = triangle: new ( z.P_0, z.P_1, z.P_2).circumcenter
+z.A = point:new(0, 0)
+z.B = point:new(10, 0)
+L.AB = line:new(z.A, z.B)
+z.C = L.AB:gold_ratio()
+L.AC = line:new(z.A, z.C)
+L.CB = line:new(z.C, z.B)
+L.AB = line:new(z.A, z.B)
+z.O_0 = L.AB.mid
+z.O_1 = L.AC.mid
+z.O_2 = L.CB.mid
+C.AB = circle:new(z.O_0, z.B)
+C.AC = circle:new(z.O_1, z.C)
+C.CB = circle:new(z.O_2, z.B)
+z.P = C.CB.north
+z.Q = C.AC.north
+z.O = C.AB.south
+z.c = z.C:north(2)
+C.PC = circle:new(z.P, z.C)
+C.QA = circle:new(z.Q, z.A)
+z.P_0 = intersection(C.PC, C.AB)
+z.P_1 = intersection(C.PC, C.AC)
+_, z.P_2 = intersection(C.QA, C.CB)
+T.P = triangle:new(z.P_0, z.P_1, z.P_2)
+z.O_3 = T.P.circumcenter
 }
 
 \begin{center}
@@ -123,7 +122,7 @@
 \subsubsection{The code} % (fold)
 \label{ssub:the_code}
 
-\begin{Verbatim}
+\begin{SVerbatim}
 % !TEX TS-program = lualatex
 \documentclass{article}
 \usepackage{tkz-euclide}
@@ -131,32 +130,32 @@
 \begin{document}
 
 \directlua{
-init_elements ()
-z.A     = point: new (0 , 0)
-z.B     = point: new (10 , 0)        %  creation of two fixed points $A$ and $B$
-L.AB    = line:  new ( z.A, z.B)
-z.C     = L.AB:  gold_ratio ()       %  use of a method linked to “line”
-z.O_0   = line:  new ( z.A, z.B).mid % midpoint of segment with an attribute of “line”
-z.O_1   = line:  new ( z.A, z.C).mid %  objects are not stored and cannot be reused.
-z.O_2   = line:  new ( z.C, z.B).mid   
-C.AB    = circle: new ( z.O_0, z.B)  %  new object “circle” stored and reused
-C.AC    = circle: new ( z.O_1, z.C) 
-C.CB    = circle: new ( z.O_2, z.B)
-z.P     = C.CB.north                 %  “north” atrributes of a circle
-z.Q     = C.AC.north
-z.O     = C.AB.south
-z.c     = z.C : north (2)            %   “north” method of a point (needs a parameter)
-C.PC    = circle: new ( z.P, z.C)
-C.QA    = circle: new ( z.Q, z.A)
-z.P_0   = intersection (C.PC,C.AB)   %  search for intersections of two circles.
-z.P_1   = intersection (C.PC,C.AC)   %   idem
-_,z.P_2 = intersection (C.QA,C.CB)   %  idem
-z.O_3   = triangle: new ( z.P_0, z.P_1, z.P_2).circumcenter
-                      % circumcenter attribute of “triangle”
+init_elements()
+z.A  = point:new(0, 0)
+z.B = point:new(10, 0)  %  creation of two fixed points $A$ and $B$
+L.AB = line:new(z.A, z.B)
+z.C = L.AB:gold_ratio()       %  use of a method linked to “line”
+z.O_0 = line:new(z.A, z.B).mid % midpoint of segment with an attribute of “line”
+z.O_1 = line:new(z.A, z.C).mid %  objects are not stored and cannot be reused.
+z.O_2 = line:new(z.C, z.B).mid   
+C.AB = circle:new(z.O_0, z.B)  %  new object “circle” stored and reused
+C.AC = circle:new(z.O_1, z.C) 
+C.CB = circle:new(z.O_2, z.B)
+z.P = C.CB.north            %  “north” atrributes of a circle
+z.Q = C.AC.north
+z.O = C.AB.south
+z.c = z.C:north(2)   %“north” method of a point (needs a parameter)
+C.PC = circle:new(z.P, z.C)
+C.QA = circle:new(z.Q, z.A)
+z.P_0 = intersection(C.PC,C.AB)   %  search for intersections of two circles.
+z.P_1 = intersection(C.PC,C.AC)   %   idem
+_,z.P_2 = intersection(C.QA,C.CB)   %  idem
+T.P = triangle:new(z.P_0, z.P_1, z.P_2)
+z.O_3 = T.P.circumcenter  % circumcenter attribute of “triangle”
 }
-\end{Verbatim}
+\end{SVerbatim}
 
-\begin{Verbatim}
+\begin{SVerbatim}
 \begin{tikzpicture}
   \tkzGetNodes
   \tkzDrawCircle[black,fill=yellow!20,opacity=.4](O_0,B)
@@ -169,7 +168,7 @@
   \tkzLabelPoints(A,B,C,O_0,O_1,O_2,P,Q,P_0,P_0,P_1,P_2,O)
 \end{tikzpicture}
 \end{document}
-\end{Verbatim}
+\end{SVerbatim}
 % subsubsection the_code (end)
 
 \subsection{Another example with comments: South Pole} % (fold)
@@ -177,7 +176,7 @@
 
 Here's another example with comments
 
-\begin{Verbatim}
+\begin{SVerbatim}
 % !TEX TS-program = lualatex
 \documentclass{standalone}
 \usepackage[mini]{tkz-euclide}
@@ -184,41 +183,41 @@
 \usepackage{tkz-elements}
 \begin{document}
 \directlua{
-   init_elements ()
-   z.A      = point: new (2 , 4)          
-   z.B      = point: new (0 , 0)          % three fixed points are used
-   z.C      = point: new (8 , 0)
-   T.ABC    = triangle: new (z.A,z.B,z.C) % we create a new triangle object
-   C.ins    = T.ABC: in_circle ()         % we get the incircle of this triangle
-   z.I      = C.ins.center                % center is an attribute of the circle
-   z.T      = C.ins.through               % through is also an attribute
-  %  z.I,z.T  = get_points (C.ins)        % get_points is a shortcut
-   C.cir    = T.ABC : circum_circle ()    % we get the  circumscribed circle
-   z.W      = C.cir.center                % we get the center of this circle   
-   z.O      = C.cir.south                 % now we get the south pole of this circle
-   L.AO     = line: new (z.A,z.O)         % we create an object "line"
-   L.BC     = T.ABC.bc                    % we get the line (BC)
-   z.I_A    = intersection (L.AO,L.BC)    %  we search the intersection of the last lines
+init_elements()
+z.A = point:new(2, 4)
+z.B = point:new(0, 0)               % three fixed points are used
+z.C = point:new(8, 0)               %
+T.ABC = triangle:new(z.A, z.B, z.C) % we create a new triangle object
+C.ins = T.ABC:in_circle()           % we get the incircle of this triangle
+z.I = C.ins.center                  % center is an attribute of the circle
+z.T = C.ins.through                 % through is also an attribute
+z.I, z.T = get_points(C.ins)        % get_points is a shortcut
+C.cir = T.ABC:circum_circle()       % we get the  circumscribed circle
+z.W = C.cir.center                  % we get the center of this circle
+z.O = C.cir.south                   % now we get the south pole of this circle
+L.AO = line:new(z.A, z.O)           % we create an object "line"
+L.BC = T.ABC.bc                     % we get the line (BC)
+z.I_A = intersection(L.AO, L.BC)    % we search the intersection of the last lines
 }
-\end{Verbatim}
+\end{SVerbatim}
+
 \directlua{
-   init_elements ()
-   z.A      = point: new (2 , 4)
-   z.B      = point: new (0 , 0)
-   z.C      = point: new (8 , 0)
-   T.ABC    = triangle: new (z.A,z.B,z.C)
-   C.ins    = T.ABC: in_circle ()
-   z.I      = C.ins.center
-   z.T      = C.ins.through
-   C.cir    = T.ABC : circum_circle ()
-   z.W      = C.cir.center
-   z.O      = C.cir.south
-   L.AO     = line: new (z.A,z.O)
-   L.BC     = T.ABC.bc
-   z.I_A    = intersection (L.AO,L.BC)
+ init_elements()
+ z.A = point:new(2, 4)
+ z.B = point:new(0, 0)
+ z.C = point:new(8, 0)
+ T.ABC = triangle:new(z.A, z.B, z.C)
+ C.ins = T.ABC:in_circle()
+ z.I = C.ins.center
+ z.T = C.ins.through
+ C.cir = T.ABC:circum_circle()
+ z.W = C.cir.center
+ z.O = C.cir.south
+ L.AO = line:new(z.A, z.O)
+ L.BC = T.ABC.bc
+ z.I_A = intersection(L.AO, L.BC)
 }
 
-
 \begin{center}
   \begin{tikzpicture}[ scale= 1.2]
   \tkzGetNodes
@@ -239,7 +238,7 @@
 
 \vspace{12pt}
 Here's the tikzpicture environment to obtain the drawing:
-\begin{Verbatim}
+\begin{SVerbatim}
 \begin{tikzpicture}
 \tkzGetNodes
 \tkzDrawCircles(W,A I,T)
@@ -253,6 +252,6 @@
 \tkzLabelPoints(I,I_A,W,B,C,O)
 \tkzLabelPoints[above](A)
 \end{tikzpicture}
-\end{Verbatim}
+\end{SVerbatim}
 % subsection south_pole (end)
 \endinput
\ No newline at end of file

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-structure.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-structure.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-structure.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,6 +1,5 @@
 \section{Structure} % (fold)
 \label{sec:structure}
-After loading the package, the scale is initialized to 1, and then all values in various tables are cleared.
 
 The package defines  two macros |\tkzGetNodes| and |\tkzUseLua|.
 

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-theorems.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-theorems.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-theorems.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -92,7 +92,7 @@
 \begin{minipage}{0.5\textwidth}
 \begin{Verbatim}
 \directlua{
-init_elements ()
+init_elements()
 z.A    = point:new(0, 0)
 z.B    = point:new(8, 0)
 z.C    = point:new(5, 5)
@@ -126,7 +126,7 @@
 \end{minipage}
 \begin{minipage}{0.5\textwidth}
 \directlua{
-init_elements ()
+init_elements()
 z.A    = point : new ( 0  , 0  )
 z.B    = point : new ( 8  , 0  )
 z.C    = point : new ( 5  , 5  )
@@ -448,7 +448,7 @@
 
 \begin{Verbatim}
 \directlua{%
-init_elements ()
+init_elements()
 z.A = point : new ( 0  , 0  )
 z.B = point : new ( 5  , 0  )
 z.C = point : new ( 0.5 ,  4  )
@@ -495,7 +495,7 @@
 \end{Verbatim}
 
 \directlua{%
-init_elements ()
+init_elements()
 z.A = point : new ( 0  , 0  )
 z.B = point : new ( 5  , 0  )
 z.C = point : new ( 0.5 ,  4  )
@@ -548,7 +548,7 @@
 \label{ssub:soddy_circle_with_function}
 
 \directlua{%
-init_elements ()
+init_elements()
 z.A = point : new ( 0  , 0  )
 z.B = point : new ( 5  , 0  )
 z.C = point : new (4 ,  4  )
@@ -569,7 +569,7 @@
 \begin{minipage}{.5\textwidth}
   \begin{Verbatim}
 \directlua{%
-  init_elements ()
+  init_elements()
   z.A = point : new ( 0  , 0  )
   z.B = point : new ( 5  , 0  )
   z.C = point : new (4 ,  4  )
@@ -665,7 +665,7 @@
 \begin{minipage}{.5\textwidth}
 \begin{Verbatim}
 \directlua{
-init_elements ()
+init_elements()
 z.A    = point : new ( 0  , 0  )
 z.B    = point : new ( 8  , 0  )
 z.C    = point : new ( 2  , 6  )
@@ -685,7 +685,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{
-init_elements ()
+init_elements()
 z.A    = point : new ( 0  , 0  )
 z.B    = point : new ( 8  , 0  )
 z.C    = point : new ( 2  , 6  )
@@ -717,7 +717,7 @@
 \end{minipage}
 \begin{minipage}{.5\textwidth}
 \directlua{
-init_elements ()
+init_elements()
 z.A    = point : new ( 0  , 0  )
 z.B    = point : new ( 8  , 0  )
 z.C    = point : new ( 2  , 6  )

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-transfers.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-transfers.tex	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/TKZdoc-elements-transfers.tex	2025-03-05 21:31:22 UTC (rev 74457)
@@ -16,7 +16,7 @@
 \vspace*{1em}
 
 \begin{mybox}
-\begin{Verbatim}
+\begin{SVerbatim}
 \def\tkzGetNodes{\directlua{%
    for K,V in pairs(z) do
       local n,sd,ft
@@ -30,7 +30,7 @@
   tex.print("\\coordinate ("..K..") at ("..V.re..","..V.im..") ;\\\\")
 end}
 }
-\end{Verbatim}
+\end{SVerbatim}
 \end{mybox}
 See the section In-depth Study \ref{sec:in_depth_study} for an explanation of the previous code.
 
@@ -37,51 +37,29 @@
 Point names can contain the underscore |_| and the macro \tkzcname{tkzGetNodes} allows to obtain names of nodes containing \tkzname{prime} or \tkzname{double prime}. (Refer to the next example)
 
 \vspace{6pt}
-\begin{minipage}{0.5\textwidth}
-\begin{Verbatim}
-\directlua{
-   init_elements ()
-   z.o   = point: new (0,0)
-   z.a_1 = point: new (2,1)
-   z.a_2 = point: new (1,2)
-   z.ap  = z.a_1 + z.a_2
-   z.app = z.a_1 - z.a_2
-}
-\begin{tikzpicture}[ scale = 1.5]
-   \tkzGetNodes
-   \tkzDrawSegments(o,a_1 o,a_2 o,a' o,a'')
-   \tkzDrawSegments[red](a_1,a' a_2,a')
-   \tkzDrawSegments[blue](a_1,a'' a_2,a'')
-   \tkzDrawPoints(a_1,a_2,a',o,a'')
-   \tkzLabelPoints(o,a_1,a_2,a',a'')
-\end{tikzpicture}
-\end{Verbatim}
-\end{minipage}
-\begin{minipage}{0.5\textwidth}
-\directlua{
-   init_elements ()
-   z.o   = point: new (0,0)
-   z.a_1 = point: new (2,1)
-   z.a_2 = point: new (1,2)
-   z.ap  = z.a_1 + z.a_2
-   z.app = z.a_1 - z.a_2
-}
 
-\begin{center}
-  \begin{tikzpicture}[ scale = 1.5]
-     \tkzGetNodes
-     \tkzDrawSegments(o,a_1 o,a_2 o,a' o,a'')
-     \tkzDrawSegments[red](a_1,a' a_2,a')
-     \tkzDrawSegments[blue](a_1,a'' a_2,a'')
-     \tkzDrawPoints(a_1,a_2,a',o,a'')
-     \tkzLabelPoints(o,a_1,a_2,a',a'')
-  \end{tikzpicture}
-\end{center}
+\begin{tkzexample}[latex=7cm]
+  \directlua{
+     init_elements()
+     z.o   = point: new (0,0)
+     z.a_1 = point: new (2,1)
+     z.a_2 = point: new (1,2)
+     z.ap  = z.a_1 + z.a_2
+     z.app = z.a_1 - z.a_2
+  }
 
+  \begin{center}
+    \begin{tikzpicture}[ scale = 1.5]
+       \tkzGetNodes
+       \tkzDrawSegments(o,a_1 o,a_2 o,a' o,a'')
+       \tkzDrawSegments[red](a_1,a' a_2,a')
+       \tkzDrawSegments[blue](a_1,a'' a_2,a'')
+       \tkzDrawPoints(a_1,a_2,a',o,a'')
+       \tkzLabelPoints(o,a_1,a_2,a',a'')
+    \end{tikzpicture}
+  \end{center}
+\end{tkzexample}
 
-\end{minipage}%
-
-\newpage
 % subsubsection points_transfer (end)
 % subsection fom_lua_to_tkz_euclide_or_tikz (end)
 
@@ -92,14 +70,14 @@
 \IEmacro{tkzUseLua(value)}
 
 \begin{mybox}
-  \begin{Verbatim}
+  \begin{SVerbatim}
   \def\tkzUseLua#1{\directlua{tex.print(tostring(#1))}} 
-\end{Verbatim}
+\end{SVerbatim}
 \end{mybox}
+
 \directlua{
-init_elements ()
+z.a = point:  new (4,2)
 z.b = point:  new (1,1)
-z.a = point:  new (4,2)
 z.c = point:  new (2,2)
 z.d = point:  new (5,1)
 L.ab = line : new (z.a,z.b)
@@ -114,12 +92,12 @@
 The intersection of the two lines lies at
 a point whose affix is: \tkzUseLua{x}
 
+\vspace{6pt}
 \begin{minipage}{0.5\textwidth}
-\begin{Verbatim}
+\begin{SVerbatim}
 \directlua{
- init_elements ()
+ z.a = point:  new (4,2)
  z.b = point:  new (1,1)
- z.a = point:  new (4,2)
  z.c = point:  new (2,2)
  z.d = point:  new (5,1)
  L.ab = line : new (z.a,z.b)
@@ -142,10 +120,9 @@
    \tkzDrawSegments[blue](a,b c,d)}
     \tkzLabelPoints(a,...,d)
 \end{tikzpicture}
-\end{Verbatim}
+\end{SVerbatim}
 \end{minipage}
 \begin{minipage}{0.5\textwidth}
-
 \begin{center}
   \begin{tikzpicture}
    \tkzGetNodes
@@ -301,11 +278,11 @@
 This time, the transfer will be carried out using an external file. The following example is based on this one, but using a table.
 
 \directlua{
-init_elements()
-   z.a   = point: new (1,0) 
-   z.b   = point: new (3,2) 
-   z.c   = point: new (0,2)
-   A,B,C =  parabola (z.a,z.b,z.c)
+ init_elements()
+ z.a = point:new(1, 0) 
+ z.b = point:new(3, 2) 
+ z.c = point:new(0, 2)
+ A,B,C =  parabola (z.a, z.b, z.c)
 
  function f(t0, t1, n)
   local out=assert(io.open("tmp.table","w"))
@@ -319,7 +296,7 @@
  }
  
 \begin{minipage}{0.5\textwidth}
-\begin{Verbatim}
+\begin{SVerbatim}
 \directlua{
   init_elements()
    z.a   = point: new (1,0) 
@@ -345,7 +322,7 @@
    \directlua{f(-1,3,100)}%
    \draw[domain=-1:3] plot[smooth] file {tmp.table};
 \end{tikzpicture}
-\end{Verbatim}
+\end{SVerbatim}
 \end{minipage}
 \begin{minipage}{0.5\textwidth}
 \begin{center}
@@ -366,7 +343,7 @@
 \label{ssub:example_4}
 
 The result is identical to the previous one.
-\begin{Verbatim}
+\begin{SVerbatim}
 \directlua{
    z.a   = point: new (1,0) 
    z.b   = point: new (3,2) 
@@ -388,13 +365,13 @@
    \tkzDrawPoints[red,size=2pt](a,b,c)
    \draw[domain=-2:3,smooth] plot coordinates {\directlua{tex.print(f(-2,3,100))}};
 \end{tikzpicture}
-\end{Verbatim}
+\end{SVerbatim}
 % subsubsection example_4 (end)
 
 \subsubsection{Example 5} % (fold)
 \label{ssub:example_5}
 
-\begin{Verbatim}
+\begin{SVerbatim}
 \makeatletter\let\percentchar\@percentchar\makeatother
 \directlua{
 function cellx (start,step,n)
@@ -429,7 +406,7 @@
 \fvalues(x^2-3*x+1,-2,.25,8)
 \vspace{12pt}
 
-\end{Verbatim}
+\end{SVerbatim}
 
 \makeatletter\let\percentchar\@percentchar\makeatother
 \directlua{

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/gold_preamble.lua
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/gold_preamble.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/gold_preamble.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,46 +1,43 @@
-z.A            = point: new (0 , 0)
-z.B            = point: new (10 , 0)
-L.AB           = line:  new ( z.A, z.B)
-z.C            = L.AB : gold_ratio ()
-L.AC           = line:  new ( z.A, z.C)
-L.CB           = line:  new ( z.C, z.B)
-z.O_0          = L.AB.mid
-z.O_1          = L.AC.mid
-z.O_2          = L.CB.mid
-C.O0B          = circle: new ( z.O_0, z.B)
-C.O1C          = circle: new ( z.O_1, z.C)
-C.O2B          = circle: new ( z.O_2, z.B)
-z.M_0          = C.O1C : external_similitude (C.O2B)
-z.M_1          = C.O0B : internal_similitude (C.O1C)
-z.M_2          = C.O0B : internal_similitude (C.O2B)
-z.Q            = C.O2B.north
-z.P            = C.O1C.north
-z.O            = C.O0B.south
-z.W            = C.O0B.north
-L.O1Q          = line   :  new (z.O_1,z.Q)
-L.O2P          = line   :  new (z.O_2,z.P)
-z.O_4          = intersection (L.O1Q,L.O2P)
-L.CO4          = line  :  new (z.C,z.O_4)
-z.D            = intersection (L.CO4,C.O0B)
-L.CD           = line   :  new (z.C,z.D)
-L.PQ           = line   :  new (z.P,z.Q)
-L.CQ           = line   :  new (z.C,z.Q)
-z.O_5          = intersection (L.CD,L.PQ)
-C.QC           = circle: new ( z.Q, z.C)
-C.PA           = circle: new ( z.P, z.A)
-z.P_0          = intersection (C.QC,C.O0B)
-z.P_1          = intersection (C.QC,C.O1C)
-_,z.P_2        = intersection (C.PA,C.O2B)
-T.P            = triangle: new ( z.P_0, z.P_1, z.P_2)
-z.O_3          = T.P.circumcenter
-L.AQ           = line   :  new (z.A,z.Q)
-L.BP           = line   :  new (z.B,z.P)
-z.T            = intersection(L.BP,L.AQ)
-z.O_6          = L.CD.mid
-C.DC           = circle :  new   (z.D,z.C)
-z.U,z.V        = intersection (C.DC,C.O0B)
-L.UV           = line :  new (z.U,z.V)
-z.R,z.S        = L.UV : projection (z.O_1,z.O_2)
-
-
-
+z.A = point:new(0, 0)
+z.B = point:new(10, 0)
+L.AB = line:new(z.A, z.B)
+z.C = L.AB:gold_ratio()
+L.AC = line:new(z.A, z.C)
+L.CB = line:new(z.C, z.B)
+z.O_0 = L.AB.mid
+z.O_1 = L.AC.mid
+z.O_2 = L.CB.mid
+C.O0B = circle:new(z.O_0, z.B)
+C.O1C = circle:new(z.O_1, z.C)
+C.O2B = circle:new(z.O_2, z.B)
+z.M_0 = C.O1C:external_similitude(C.O2B)
+z.M_1 = C.O0B:internal_similitude(C.O1C)
+z.M_2 = C.O0B:internal_similitude(C.O2B)
+z.Q = C.O2B.north
+z.P = C.O1C.north
+z.O = C.O0B.south
+z.W = C.O0B.north
+L.O1Q = line:new(z.O_1, z.Q)
+L.O2P = line:new(z.O_2, z.P)
+z.O_4 = intersection(L.O1Q, L.O2P)
+L.CO4 = line:new(z.C, z.O_4)
+z.D = intersection(L.CO4, C.O0B)
+L.CD = line:new(z.C, z.D)
+L.PQ = line:new(z.P, z.Q)
+L.CQ = line:new(z.C, z.Q)
+z.O_5 = intersection(L.CD, L.PQ)
+C.QC = circle:new(z.Q, z.C)
+C.PA = circle:new(z.P, z.A)
+z.P_0 = intersection(C.QC, C.O0B)
+z.P_1 = intersection(C.QC, C.O1C)
+_, z.P_2 = intersection(C.PA, C.O2B)
+T.P = triangle:new(z.P_0, z.P_1, z.P_2)
+z.O_3 = T.P.circumcenter
+L.AQ = line:new(z.A, z.Q)
+L.BP = line:new(z.B, z.P)
+z.T = intersection(L.BP, L.AQ)
+z.O_6 = L.CD.mid
+C.DC = circle:new(z.D, z.C)
+z.U, z.V = intersection(C.DC, C.O0B)
+L.UV = line:new(z.U, z.V)
+z.R, z.S = L.UV:projection(z.O_1, z.O_2)

Added: trunk/Master/texmf-dist/doc/latex/tkz-elements/preamble.lua
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/preamble.lua	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/preamble.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -0,0 +1,55 @@
+z.A = point:new(0, 0)
+z.B = point:new(10, 0)
+-- z.C = point:new(6.75, 0)
+L.AB = line:new(z.A, z.B)
+z.C = L.AB:gold_ratio()
+L.AC = line:new(z.A, z.C)
+L.CB = line:new(z.C, z.B)
+z.O_0 = L.AB.mid
+z.O_1 = L.AC.mid
+z.O_2 = L.CB.mid
+C.O0B = circle:new(z.O_0, z.B)
+C.O1C = circle:new(z.O_1, z.C)
+C.O2B = circle:new(z.O_2, z.B)
+z.M_0 = C.O1C:external_similitude(C.O2B)
+z.M_1 = C.O0B:internal_similitude(C.O1C)
+z.M_2 = C.O0B:internal_similitude(C.O2B)
+z.Q = C.O2B.north
+z.P = C.O1C.north
+z.O = C.O0B.south
+z.W = C.O0B.north
+L.O1Q = line:new(z.O_1, z.Q)
+L.O2P = line:new(z.O_2, z.P)
+z.O_4 = intersection(L.O1Q, L.O2P)
+L.CO4 = line:new(z.C, z.O_4)
+z.D = intersection(L.CO4, C.O0B)
+L.CD = line:new(z.C, z.D)
+L.PQ = line:new(z.P, z.Q)
+L.CQ = line:new(z.C, z.Q)
+z.O_5 = intersection(L.CD, L.PQ)
+C.QC = circle:new(z.Q, z.C)
+C.PA = circle:new(z.P, z.A)
+z.P_0 = intersection(C.QC, C.O0B)
+z.P_1 = intersection(C.QC, C.O1C)
+_, z.P_2 = intersection(C.PA, C.O2B)
+T.P = triangle:new(z.P_0, z.P_1, z.P_2)
+z.O_3 = T.P.circumcenter
+L.AQ = line:new(z.A, z.Q)
+L.BP = line:new(z.B, z.P)
+z.T = intersection(L.BP, L.AQ)
+z.O_6 = L.CD.mid
+C.DC = circle:new(z.D, z.C)
+z.U, z.V = intersection(C.DC, C.O0B)
+L.UV = line:new(z.U, z.V)
+z.R, z.S = L.UV:projection(z.O_1, z.O_2)
+L.OA = line:new(z.O, z.A)
+z.Op = intersection(L.OA, L.CD)
+L.BQ = line:new(z.B, z.Q)
+z.P_0p = intersection(L.CD, L.BQ)
+C.AD = circle:new(z.A, z.D)
+L.OpD = line:new(z.Op, z.D)
+_, z.Dp = intersection(L.OpD, C.AD)
+C.AD = circle:new(z.A, z.D)
+z.P_1p, z.Tp = C.AD:inversion(z.P_1, z.T)
+T.O3p = triangle:new(z.P_0p, z.P_1p, z.Q)
+z.O_3p = T.O3p.circumcenter


Property changes on: trunk/Master/texmf-dist/doc/latex/tkz-elements/preamble.lua
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/sangaku.lua
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/sangaku.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/sangaku.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,14 +1,13 @@
-xB = value(8)
-z.A = point : new ( 0,0 ) 
-z.B = point : new ( 
-xB,0 )
-L.AB = line : new ( z.A , z.B )
-S = L.AB : square ()
-_,_,z.C,z.D = get_points (S)
-z.F = S.ac : projection (z.B)
-L.BF = line : new (z.B,z.F)
-T.ABC = triangle : new ( z.A , z.B , z.C )
-L.bi = T.ABC : bisector (2)
+local xB = 8
+z.A = point:new(0, 0)
+z.B = point:new(xB, 0)
+L.AB = line:new(z.A, z.B)
+S = L.AB:square()
+_, _, z.C, z.D = get_points(S)
+z.F = S.ac:projection(z.B)
+L.BF = line:new(z.B, z.F)
+T.ABC = triangle:new(z.A, z.B, z.C)
+L.bi = T.ABC:bisector(2)
 z.c = L.bi.pb
-L.Cc = line : new (z.C,z.c)
-z.I = intersection (L.Cc,L.BF)
\ No newline at end of file
+L.Cc = line:new(z.C, z.c)
+z.I = intersection(L.Cc, L.BF)

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/search_circle.lua
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-elements/search_circle.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/doc/latex/tkz-elements/search_circle.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,29 +1,30 @@
 -- search_circle.lua
-local r =...
+local r = ...
 
-function newcircle (T,C)
-  local NT,L,NC,c,t
-    NT    = T.incenter : homothety ((1+C.radius/T.inradius),T)
-     L    = line : new (NT.pb,NT.pa)
-    _,NC  = L :  c_ll_p(NT.pc,C.center)
-  return NC.center,T.bc:projection(NC.center)
+function newcircle(T, C)
+	local NT, L, NC, c, t
+	NT = T.incenter:homothety((1 + C.radius / T.inradius), T)
+	L = line:new(NT.pb, NT.pa)
+	_, NC = L:c_ll_p(NT.pc, C.center)
+	return NC.center, T.bc:projection(NC.center)
 end
 
-z.A    = point : new ( 0  , 0  )
-z.B    = point : new ( 8  , 0  )
-z.C    = point : new ( 2  , 6  )
-T.ABC  = triangle : new (z.A,z.B,z.C)
-L.bA   = T.ABC : bisector ()
-z.c1   = L.bA : report(r)
-z.t1   = T.ABC.ab : projection(z.c1)
-C.last  = circle : new(z.c1,z.t1)
+z.A = point:new(0, 0)
+z.B = point:new(8, 0)
+z.C = point:new(2, 6)
+T.ABC = triangle:new(z.A, z.B, z.C)
+L.bA = T.ABC:bisector()
+z.c1 = L.bA:report(r)
+z.t1 = T.ABC.ab:projection(z.c1)
+C.last = circle:new(z.c1, z.t1)
 
-local vertices = {"A", "B", "C"} 
-  for i = 2, 6 do
-     T.used = triangle : new(
-      z[vertices[math.fmod(i - 2, 3) + 1]],
-      z[vertices[math.fmod(i - 1, 3) + 1]],
-      z[vertices[math.fmod(i, 3) + 1]] )
-    z["c" .. i], z["t" .. i] = newcircle(T.used, C.last)
-    C.last = circle : new(z["c" .. i], z["t" .. i])
-  end
+local vertices = { "A", "B", "C" }
+for i = 2, 6 do
+	T.used = triangle:new(
+		z[vertices[math.fmod(i - 2, 3) + 1]],
+		z[vertices[math.fmod(i - 1, 3) + 1]],
+		z[vertices[math.fmod(i, 3) + 1]]
+	)
+	z["c" .. i], z["t" .. i] = newcircle(T.used, C.last)
+	C.last = circle:new(z["c" .. i], z["t" .. i])
+end

Modified: trunk/Master/texmf-dist/doc/latex/tkz-elements/tkz-elements.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz-elements.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz-elements.sty	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz-elements.sty	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,5 +1,5 @@
 % encoding : utf8 
-% tkz-elements.sty v3.0c
+% tkz-elements.sty v3.34c
 % Copyright 2025  Alain Matthes
 % This work may be distributed and/or modified under the
 % conditions of the LaTeX Project Public License, either version 1.3
@@ -11,21 +11,15 @@
 % This work has the LPPL maintenance status “maintained”.
 % The Current Maintainer of this work is Alain Matthes.
 
-\ProvidesPackage{tkz-elements}[2025/02/14 version 3.32 Graphic Object Library]
+\ProvidesPackage{tkz-elements}[2025/03/04 version 3.34c Graphic Object Library]
 \RequirePackage{unicode-math}
 
  \directlua{
       require "tkz_elements_main"
-      tkz_epsilon  = 1e-8
-      tkz_dc       = 2
-      indirect     = true
-      inside       = true
-      swap         = true
       init_elements()}%
       
 \newenvironment{tkzelements}
-  {   \directlua{scale=1}
-      \directlua{z = {}
+  {  \directlua{ z = {}
                  C = {}
                  E = {}
                  L = {}
@@ -46,10 +40,10 @@
   for K,V in pairs(z) do
      local n,sd,ft
      n = string.len(K)
-     if n >1 then
-     _,_,ft, sd = string.find( K , "(.+)(.)" )  
+     if n > 1 then
+     _,_,ft, sd = string.find(K, "(.+)(.)" )  
     if sd == "p" then   K=ft.."'" end
-    _,_,xft, xsd = string.find( ft , "(.+)(.)" )
+    _,_,xft, xsd = string.find(ft, "(.+)(.)" )
     if xsd == "p" then  K=xft.."'".."'" end
       end    
  tex.sprint("\string\\coordinate ("..K..") at ("..V.re..","..V.im..") ; \string\r")

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_circle.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_circle.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_circle.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,12 +1,12 @@
--- tkz_elements-circles.lua
--- date 2025/02/26
--- version 3.32
+-- tkz_elements_circles.lua
+-- date 2025/03/04
+-- version 3.34c
 -- Copyright 2025  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
+-- 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”.
@@ -19,13 +19,13 @@
    local type              = 'circle'
    local ct                = line :new (c,t) 
    local opp               = antipode_ (c,t)
-   local radius            = point.abs ( c - t )
+   local radius            = point.abs (c - t)
    local south             = c - point (0,radius)
    local east              = c + point (radius,0)
    local north             = c + point (0,radius)
    local west              = c - point (radius,0)
-   local perimeter         = 2*math.pi*radius
-   local area              = 4*math.pi*radius*radius
+   local perimeter         = 2 * math.pi * radius
+   local area              = 4 * math.pi * radius*radius
    local cir = { center      = c, 
                through     = t, 
                ct          = ct,
@@ -44,12 +44,12 @@
 end
 -- other definition
 
-function circle: radius (center, radius) -- c --> center r --> radius
-   return circle : new  (center, center + point( radius,  0 ) )
+function circle:radius(center, radius)
+    return circle:new(center, center + point(radius, 0))
 end
 
-function circle: diameter (za, zb)
-   return circle : new  (midpoint_(za,zb), zb )
+function circle:diameter(za, zb)
+    return circle:new(midpoint_(za, zb), zb)
 end
 -----------------------
 -- boolean --
@@ -62,8 +62,7 @@
     return point.abs(pt - self.center) <= self.radius
 end
 
--- new version 1.80 added 
-function circle : circles_position (C)
+function circle:circles_position (C)
    return circles_position_ (self.center,self.radius,C.center,C.radius)
 end
 
@@ -80,50 +79,57 @@
 -----------------------
 -- real --
 -----------------------
-function circle: power (pt)
-  local d
-    d = point.abs (self.center - pt)
-   return   d * d - self.radius * self.radius
+function circle:power(pt)
+    local d = point.abs(self.center - pt)
+    return d * d - self.radius * self.radius
 end
 -----------------------
 -- points --
 -----------------------
-function circle: antipode (pt)
+function circle: antipode(pt)
    return 2 * self.center - pt
 end
 
-function circle: set_inversion (...)
+function circle:set_inversion(...)
 	local tp = table.pack(...)
 	local i
   local t = {}
 	for i=1,tp.n do
-        table.insert( t , inversion_ ( self.center,self.through, tp[i] ) ) 
+        table.insert(t, inversion_( self.center, self.through, tp[i])) 
 	end
-  return table.unpack ( t )
+  return table.unpack(t)
 end
 
-function circle: midarc (z1,z2)
-   local phi = 0.5 * get_angle (self.center,z1,z2 )
-   return rotation_ (self.center,phi,z1)
+function circle:midarc(z1,z2)
+   local phi = 0.5 * get_angle (self.center, z1, z2)
+   return rotation_(self.center, phi, z1)
 end
 
-function circle: point (t)
+function circle:point(t)
    local phi = 2 * t * math.pi
-   return rotation_ (self.center,phi,self.through) 
+   return rotation_ (self.center, phi, self.through) 
 end
 
-function circle: random_pt (lower, upper)
-     math.randomseed( tonumber(tostring(os.time()):reverse():sub(1,6)) )
-    local  phi = lower + math.random() * (upper - lower)
-return point (self.center.re+self.radius*math.cos(phi),self.center.im+self.radius*math.sin(phi) )
+function circle:random_pt(lower, upper)
+    -- Initialisation du générateur de nombres aléatoires
+    math.randomseed(os.time() + math.random())
+
+    -- Génération d'un angle aléatoire dans l'intervalle [lower, upper]
+    local phi = lower + math.random() * (upper - lower)
+
+    -- Calcul des coordonnées du point aléatoire sur le cercle
+    return point(
+        self.center.re + self.radius * math.cos(phi),
+        self.center.im + self.radius * math.sin(phi)
+    )
 end
 
-function circle: internal_similitude (C)
-  return internal_similitude_ (self.center,self.radius,C.center,C.radius)
+function circle:internal_similitude(C)
+    return internal_similitude_(self.center, self.radius, C.center, C.radius)
 end
 
-function circle: external_similitude (C)
-  return  external_similitude_ (self.center,self.radius,C.center,C.radius)
+function circle:external_similitude(C)
+    return external_similitude_(self.center, self.radius, C.center, C.radius)
 end
 
 -----------------------
@@ -131,114 +137,148 @@
 -----------------------
 function circle:tangent_at(pt)
     return line:new(
-        rotation_(pt,  math.pi / 2, self.center), 
+        rotation_(pt, math.pi / 2, self.center), 
         rotation_(pt, -math.pi / 2, self.center)
     )
 end
-
  
- function circle:tangent_from(pt)
-     local t1, t2 = tangent_from_(self.center, self.through, pt)
-     return line:new(pt, t1), line:new(pt, t2)
- end
- 
- function circle:radical_axis(C)
-     local t1, t2
-     if self.radius > C.radius then
-         t1, t2 = radical_axis_(self.center, self.through, C.center, C.through)
-     else
-         t1, t2 = radical_axis_(C.center, C.through, self.center, self.through)
-     end
-     return line:new(t1, t2)
- end
+function circle:tangent_from(pt)
+    local t1, t2 = tangent_from_(self.center, self.through, pt)
+    return line:new(pt, t1), line:new(pt, t2)
+end
 
- function circle : polar (p)
-   local q = self : inversion (p)
-   local qa = (p-q) : orthogonal (1): at (q)
-   local qb = (q-p) : orthogonal (1): at (q)
-   return line : new (qa,qb) 
- end
- 
- function circle:radical_center(C1, C2)
-     if C2 == nil then
-         if self.radius > C1.radius then
-             return radical_center_(self.center, self.through, C1.center, C1.through)
-         else
-             return radical_center_(C1.center, C1.through, self.center, self.through)
-         end
-     else
-         return radical_center3(self, C1, C2)
-     end
- end 
+function circle:radical_axis(C)
+    local t1, t2
+    if self.radius > C.radius then
+        t1, t2 = radical_axis_(self.center, self.through, C.center, C.through)
+    else
+        t1, t2 = radical_axis_(C.center, C.through, self.center, self.through)
+    end
+    return line:new(t1, t2)
+end
 
- function circle : radical_circle (C1,C2)
-    local rc
-     if C2 == nil then
-        rc = self : radical_center (C1)
-        return self : orthogonal_from (rc)
-     else
-        rc = self : radical_center (C1,C2)
-        return C1 : orthogonal_from (rc)
-     end
- end
+function circle:polar(p)
+    local q = self:inversion(p)
+    local qa = (p - q):orthogonal(1):at(q)
+    local qb = (q - p):orthogonal(1):at(q)
+    return line:new(qa, qb)
+end
+
+function circle:radical_center(C1, C2)
+    if C2 == nil then
+        if self.radius > C1.radius then
+            return radical_center_(self.center, self.through, C1.center, C1.through)
+        else
+            return radical_center_(C1.center, C1.through, self.center, self.through)
+        end
+    else
+        return radical_center3(self, C1, C2)
+    end
+end
+
+function circle:radical_circle(C1, C2)
+    local rc = self:radical_center(C1, C2)
+    if C2 == nil then
+        return self:orthogonal_from(rc)
+    else
+        return C1:orthogonal_from(rc)
+    end
+end
  
- function circle:external_tangent(C)
-     local i, t1, t2, k, T1, T2
-     i = barycenter_({C.center, self.radius}, {self.center, -C.radius})
-     t1, t2 = tangent_from_(self.center, self.through, i)
-     k = point.mod((C.center - i) / (self.center - i))
-     T1 = homothety_(i, k, t1)
-     T2 = homothety_(i, k, t2)
-     return line:new(t1, T1), line:new(t2, T2)
- end
 
+function circle:external_tangent(C)
+    local i, t1, t2, k, T1, T2
+    -- Find the barycenter of the two circles
+    i = barycenter_({C.center, self.radius}, {self.center, -C.radius})
+    
+    -- Calculate the tangents from the circle to the point of intersection
+    t1, t2 = tangent_from_(self.center, self.through, i)
+    
+    -- Calculate the scaling factor for the homothety
+    k = point.mod((C.center - i) / (self.center - i))
+    
+    -- Apply homothety to the tangents
+    T1 = homothety_(i, k, t1)
+    T2 = homothety_(i, k, t2)
+    
+    -- Return the two tangent lines
+    return line:new(t1, T1), line:new(t2, T2)
+end
 
- function circle : internal_tangent(C)
-   local i,t1,t2,k,T1,T2
-      i = barycenter_ ({C.center,self.radius},{self.center,C.radius})
-      t1,t2 = tangent_from_ (self.center,self.through,i) 
-      k = -point.mod((C.center-i)/(self.center-i))
-      T1 = homothety_(i,k,t1)
-      T2 = homothety_(i,k,t2)
-   return line : new (t1,T1),line : new (t2,T2)
- end
+function circle:internal_tangent(C)
+    local i, t1, t2, k, T1, T2
+    -- Find the barycenter of the two circles with opposite signs for radii
+    i = barycenter_({C.center, self.radius}, {self.center, C.radius})
+    
+    -- Calculate the tangents from the circle to the point of intersection
+    t1, t2 = tangent_from_(self.center, self.through, i)
+    
+    -- Calculate the scaling factor for the homothety
+    k = -point.mod((C.center - i) / (self.center - i))
+    
+    -- Apply homothety to the tangents
+    T1 = homothety_(i, k, t1)
+    T2 = homothety_(i, k, t2)
+    
+    -- Return the two tangent lines
+    return line:new(t1, T1), line:new(t2, T2)
+end
  
- function circle : common_tangent(C)
-    local o,s1,s2,t1,t2
-   o = external_similitude_ (self.center,self.radius,C.center,C.radius)
-
-  if  self.radius < C.radius then 
-     t1,t2 = tangent_from_ (C.center,C.through,o) 
-     s1,s2 = tangent_from_ (self.center,self.through,o) 
-      return s1,t1,t2,s2
-   else
-      s1,s2 = tangent_from_ (C.center,C.through,o) 
-      t1,t2 = tangent_from_ (self.center,self.through,o) 
-       return s1,t1,t2,s2     
-   end
- end
- -----------------------
+function circle:common_tangent(C)
+    local o, s1, s2, t1, t2
+    
+    -- Calcul de la similitude externe entre les deux cercles
+    o = external_similitude_(self.center, self.radius, C.center, C.radius)
+    
+    if self.radius < C.radius then
+        -- Si le rayon de 'self' est plus petit que celui de 'C'
+        t1, t2 = tangent_from_(C.center, C.through, o)  -- Tangentes depuis le cercle C
+        s1, s2 = tangent_from_(self.center, self.through, o)  -- Tangentes depuis 'self'
+        
+        -- Retourner les tangentes dans un ordre spécifique
+        return s1, t1, t2, s2
+    else
+        -- Si le rayon de 'self' est plus grand ou égal à celui de 'C'
+        s1, s2 = tangent_from_(C.center, C.through, o)  -- Tangentes depuis le cercle C
+        t1, t2 = tangent_from_(self.center, self.through, o)  -- Tangentes depuis 'self'
+        
+        -- Retourner les tangentes dans un ordre spécifique
+        return s1, t1, t2, s2
+    end
+end
+-----------------------
  -- circles --
- -----------------------
-function circle: orthogonal_from (pt)
-    local t1,t2 = tangent_from_ (self.center,self.through,pt) 
-    return circle : new (pt,t1)
+-----------------------
+function circle:orthogonal_from(pt)
+    -- Calcul des tangentes à partir du point 'pt'
+    local t1, t2 = tangent_from_(self.center, self.through, pt)
+    
+    -- Retourne un cercle avec le centre en 'pt' et une des tangentes comme rayon
+    return circle:new(pt, t1)
 end
- 
-function circle: orthogonal_through (pta,ptb)
-    return circle : new (orthogonal_through_ (self.center,self.through,pta,ptb),pta)
- end
 
- function circle:inversion_L(L)
-     if L:in_out(self.center) then
-         return L
-     else
-         local p = L:projection(self.center)
-         local q = inversion_(self.center, self.through, p)
-         return circle:new(midpoint_(self.center, q), q)
-     end
- end
+function circle:orthogonal_through(pta, ptb)
+    -- Retourne un cercle défini par l'orthogonale passant par 'pta' et 'ptb'
+    local o = orthogonal_through_(self.center, self.through, pta, ptb)
+    return circle:new(o, pta)
+end
 
+function circle:inversion_L(L)
+    -- Vérifie si le centre du cercle est à l'intérieur ou à l'extérieur de la ligne L
+    if L:in_out(self.center) then
+        return L  -- Retourne la ligne L inchangée si le centre est du bon côté
+    else
+        -- Calcul de la projection du centre sur la ligne L
+        local p = L:projection(self.center)
+        
+        -- Inversion du point projeté par rapport au cercle défini par 'self.center' et 'self.through'
+        local q = inversion_(self.center, self.through, p)
+        
+        -- Retourne un cercle avec le centre au milieu de 'self.center' et 'q' et comme rayon 'q'
+        return circle:new(midpoint_(self.center, q), q)
+    end
+end
+
  function circle:inversion_C(C)
     local p, q, x, y, X, Y
     if C:in_out(self.center) then
@@ -276,17 +316,23 @@
      end
  end
  
-function circle: draw ()
-   local x, y = self.center: get ()
-   local r = self.radius
-   local frmt = '\\draw (%0.3f,%0.3f) circle [radius=%0.3f];'
-   tex.sprint(string.format(frmt, x,y,r))
-end 
- 
-function circle: midcircle(C)
-  return midcircle_ (self,C)
-end
+ function circle:draw()
+     -- Récupère les coordonnées du centre et le rayon du cercle
+     local x, y = self.center:get()
+     local r = self.radius
+    
+     -- Format de la commande LaTeX pour dessiner le cercle
+     local frmt = '\\draw (%0.3f,%0.3f) circle [radius=%0.3f];'
+    
+     -- Affiche la commande LaTeX en formatant les valeurs de x, y et r
+     tex.sprint(string.format(frmt, x, y, r))
+ end
 
+ function circle:midcircle(C)
+     -- Retourne le cercle médian entre 'self' et 'C'
+     return midcircle_(self, C)
+ end
+
 -- -----------------------------------------------------------
 -- Circle tangent to a circle passing through two points
 function circle : c_c_pp(a,b)
@@ -332,65 +378,111 @@
 end
 end
 
-
 -- Circle  tangent to two circles passing through a point
-function circle : c_cc_p (C,p)
-  local i = self: external_similitude (C)
-  local lofcenters = line : new (self.center,C.center)
-  local u1,u2 = intersection (lofcenters,self)
-  local v1,v2 = intersection (lofcenters,C)
-   local u1,v1 = self : common_tangent (C) 
-  local o =  circum_circle_(u1,v1,p)
-   local a,b = intersection_lc_(i,p,o,p)
-   if (point.abs(a - b) < tkz_epsilon) then
-    local li = line:new (i,p)
-     return C : c_lc_p (li,a)
-   else
-   local q
-   -- problem if p == q ?
-   if (point.abs(a - p) < tkz_epsilon) then q = b else q=a end
-   return C : c_c_pp (p,q) 
- end
+function circle:c_cc_p(C, p)
+    -- Calcule la similitude externe entre les cercles 'self' et 'C'
+    local i = self:external_similitude(C)
+    
+    -- Crée la ligne passant par les centres des cercles 'self' et 'C'
+    local lofcenters = line:new(self.center, C.center)
+    
+    -- Trouve les intersections de la ligne avec 'self' et avec 'C'
+    local u1, u2 = intersection(lofcenters, self)
+    local v1, v2 = intersection(lofcenters, C)
+    
+    -- Trouve les tangentes communes entre 'self' et 'C'
+    local u1, v1 = self:common_tangent(C)
+    
+    -- Calcule le cercle circonscrit passant par u1, v1 et p
+    local o = circum_circle_(u1, v1, p)
+    
+    -- Trouve les intersections du cercle 'o' avec la ligne i et le point p
+    local a, b = intersection_lc_(i, p, o, p)
+    
+    -- Si les deux intersections sont très proches, retourne un cercle défini par la ligne et l'intersection
+    if (point.abs(a - b) < tkz_epsilon) then
+        local li = line:new(i, p)
+        return C:c_lc_p(li, a)
+    else
+        local q
+        -- Résout le cas où p et q sont égaux
+        if (point.abs(a - p) < tkz_epsilon) then
+            q = b
+        else
+            q = a
+        end
+        
+        -- Retourne le cercle défini par p et q
+        return C:c_c_pp(p, q)
+    end
 end
 
 -- Circle  tangent to one circle, on line and passing through a point
-function circle : c_lc_p (l,p,inside)
-    inside = inside or false  
-  if self : in_out (p) then
-   local t1 = intersection_ll_( self.north,p,l.pa,l.pb)
-   local t2 = intersection_ll_( self.south,p,l.pa,l.pb)
-   local l1 = l : ortho_from (t1)
-   local l2 = l : ortho_from (t2)
-   local o1 = intersection_ll_( self.center,p,l1.pa,l1.pb)
-    local o2 = intersection_ll_( self.center,p,l2.pa,l2.pb)
-    return circle:new(o1,t1),circle:new(o2,t2)
-  else
-    if l : in_out (p) then
-  local i = l : projection (self.center)
-  local lortho = l : ortho_from (p)
-  local u = lortho : report (self.radius,p)
-   local v = lortho : report (-self.radius,p)
-   local ux,uy = mediator_ (self.center,u)
-   local vx,vy = mediator_ (self.center,v)
-   -- pb if c tgt l
-    local o1= intersection_ll_(u,v,ux,uy)
-    local o2 = intersection_ll_(u,v,vx,vy)
-   return circle:new(o1,p),circle:new(o2,p)
- else  -- genral case
-   local u = self.north
-   local v = self.south
-   local h = intersection_ll_(u,v,l.pa,l.pb)
-     if inside then
-     local o = circum_circle_(p,u,h)
-     local q = intersection_lc_(p,v,o,p)
-     return self : c_c_pp (p,q)
-  else 
-   local o = circum_circle_(p,v,h)
-   local q = intersection_lc_(u,p,o,v)  
-   return self : c_c_pp (p,q)
-   end  
- end
- end
+function circle:c_lc_p(l, p, inside)
+    inside = inside or false  -- Définit la valeur par défaut de 'inside' si elle n'est pas fournie
+    
+    -- Vérifie si le point p est à l'intérieur ou à l'extérieur du cercle
+    if self:in_out(p) then
+        -- Trouve les intersections de la ligne avec les deux bords du cercle
+        local t1 = intersection_ll_(self.north, p, l.pa, l.pb)
+        local t2 = intersection_ll_(self.south, p, l.pa, l.pb)
+        
+        -- Trouve les lignes orthogonales aux tangentes
+        local l1 = l:ortho_from(t1)
+        local l2 = l:ortho_from(t2)
+        
+        -- Trouve les intersections de ces lignes avec le cercle
+        local o1 = intersection_ll_(self.center, p, l1.pa, l1.pb)
+        local o2 = intersection_ll_(self.center, p, l2.pa, l2.pb)
+        
+        -- Retourne les cercles définis par les points d'intersection
+        return circle:new(o1, t1), circle:new(o2, t2)
+    else
+        -- Si le point p est à l'extérieur du cercle, on vérifie si p est dans ou hors de la ligne
+        if l:in_out(p) then
+            -- Calcule la projection de 'self.center' sur la ligne
+            local i = l:projection(self.center)
+            
+            -- Trouve les lignes orthogonales passant par p
+            local lortho = l:ortho_from(p)
+            
+            -- Trouve les points de rapport pour l'orthogonale
+            local u = lortho:report(self.radius, p)
+            local v = lortho:report(-self.radius, p)
+            
+            -- Trouve les médiateurs entre le centre du cercle et les points de rapport
+            local ux, uy = mediator_(self.center, u)
+            local vx, vy = mediator_(self.center, v)
+            
+            -- Trouve les intersections des médiateurs
+            local o1 = intersection_ll_(u, v, ux, uy)
+            local o2 = intersection_ll_(u, v, vx, vy)
+            
+            -- Retourne les cercles définis par les points d'intersection et p
+            return circle:new(o1, p), circle:new(o2, p)
+        else
+            -- Cas général
+            local u = self.north
+            local v = self.south
+            local h = intersection_ll_(u, v, l.pa, l.pb)
+            
+            if inside then
+                -- Calcule le cercle circonscrit entre p, u et h
+                local o = circum_circle_(p, u, h)
+                
+                -- Trouve l'intersection du cercle et retourne le résultat
+                local q = intersection_lc_(p, v, o, p)
+                return self:c_c_pp(p, q)
+            else
+                -- Si 'inside' est faux, on calcule l'autre cercle circonscrit
+                local o = circum_circle_(p, v, h)
+                
+                -- Trouve l'intersection du cercle et retourne le résultat
+                local q = intersection_lc_(u, p, o, v)
+                return self:c_c_pp(p, q)
+            end
+        end
+    end
 end
 
 

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_class.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_class.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_class.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,6 +1,6 @@
 -- tkz_elements_class.lua 
--- date 2025/02/26
--- version 3.32
+-- date 2025/03/04
+-- version 3.34c
 -- from class.lua (Simple Lua Classes from Lua-users wiki)
 -- Compatible with Lua 5.1 (not 5.0).
 --  http://lua-users.org/wiki/SimpleLuaClasses DavidManura 

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_conic.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_conic.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_conic.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,12 +1,12 @@
--- tkz_elements-ellipses.lua
--- date 2025/02/26
--- version 3.32
+-- tkz_elements_conic.lua
+-- date 2025/03/04
+-- version 3.34c
 -- Copyright 2025  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
+-- 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”.
@@ -13,9 +13,40 @@
 -- The Current Maintainer of this work is Alain Matthes.
 
 ---------------------------------------------------------------------------
---                           circles
+--                           conics
 ---------------------------------------------------------------------------
--- warning : parabola no center,no second focus, no covertex
+-----------------------------
+----- Conic parameters
+-----------------------------
+
+-- foci, directrix and eccentricity are the main parameters and are used to define all conics.
+
+-------------------- General parameters common to all conics -------------
+-- (e) is  eccentricity  e = 1 for parabola; e = p / h
+
+-- (h) distance between the focus and the directrix (sometime called f) ;  h = p / e ellipse and hyperbola and h = p for parabola
+
+-- (p) semi-latus rectum (The latus rectum is the chord parallel to the directrix and passing through a focus) It's also called, the focal parameter (distance from a focus to the corresponding directrix.)
+
+-- vertex We can define the distance between the vertex and the directrix or the distance between the vertex and the focus p / (e + 1) so p / 2 for parabola;   (e * h) / (e + 1) = h * e / (e + 1)
+
+-- major_axis : The principal axis is the line joining the foci of an ellipse or hyperbola, and its midpoint is the curve's center. A parabola has no center, in this case, the major_axis is the line joining the focus and the vertex.
+
+-- parabola has no center and one focus. c/a for hyperbola and ellipse
+-- (c) is the distance between the center and a focus. (line eccentricity)
+
+-- for ellipse
+    -- a semi_major_awis distance between center and vertex
+    -- b semi_mminor_axis distance between center and covertex
+    -- c = math.sqrt(a^2 - b^2) and p = b^2 / a
+    -- h = b^2 / c
+
+-- for hyperbola
+    -- a semi_major_awis distance between center and vertex
+    -- b semi_mminor_axis distance between center and covertex b/a slope of asymptote
+    -- c = math.sqrt(a^2 - b^2) and p = b^2 / a
+    -- h = b^2 / c
+---------------------------------------------------------------------------
 conic = {}
 function conic: new (Fa,Di,ecc) -- focus, directrix, eccentricity
     local type              = 'conic'
@@ -61,37 +92,35 @@
     self.__index = self
     return o
 end
-
-
-    
-function conic: points(ta, tb, nb,swap)
-  if  not swap   then
-     return get_points_conic_(self, ta, tb, nb)
-  else
-    return get_points_sym_conic_(self, ta, tb, nb)
-  end
+   
+function conic:points(ta, tb, nb, swap)
+    -- Retourne les points associés à la conique, selon la valeur de 'swap'
+    if not swap then
+        return get_points_conic_(self, ta, tb, nb)
+    else
+        return get_points_sym_conic_(self, ta, tb, nb)
+    end
 end
 
-
--- function conic : points_sym (ta,tb,nb)
---   return get_points_sym_conic_ (self,ta,tb,nb)
--- end
-
-function conic : point (t,swap)
- if  not swap   then
-     return get_one_point_conic_ (self,t)
-   else
-   return   get_one_point_hyperbola_ii (self,t)
-   end
+function conic:point(t, swap)
+    -- Retourne un seul point sur la conique, selon la valeur de 'swap'
+    if not swap then
+        return get_one_point_conic_(self, t)
+    else
+        return get_one_point_hyperbola_ii(self, t)
+    end
 end
 
-function conic: antipode (pt)
-  if self.e ~= 1 then
- return 2 * self.center - pt
-else
-  -- traitement erreur
+function conic:antipode(pt)
+    -- Calcule l'antipode d'un point sur la conique
+    if self.e ~= 1 then
+        -- Si l'excentricité n'est pas égale à 1, l'antipode est défini comme 2 * center - pt
+        return 2 * self.center - pt
+    else
+        -- Si l'excentricité est égale à 1, un message d'erreur est généré via LuaLaTeX
+        tex.error("Undefined antipode for a parabola.")
+    end
 end
-end
 
 function conic:tangent_at(pt) -- actually  only parabola
     local u, v
@@ -115,22 +144,37 @@
 end
 
 
--- intersection line parabola
-function conic : inter_Pa_line (pa,pb)
-  local sys = occs : new (self.major_axis ,self.vertex)
-  local Xa,Ya = sys : coordinates (pa)  
-  local Xb,Yb = sys : coordinates (pb) 
-  local r1,r2 = solve_para_line (self.h,param_line (Xa,Ya,Xb,Yb))
-  if r1 ==false then 
-    local s1= false
-    local s2 =false
-    return s1,s2 
-  else
-    local s1,s2 = self : point(r1) , self : point(r2)
-    if length(pa,s1) < length(pa,s2) then return s1,s2 else return s2,s1 end
-  end
+-- Intersection entre une parabole et une droite
+function conic:inter_Pa_line(pa, pb)
+    -- Crée un système de coordonnées basé sur l'axe majeur et le sommet de la parabole
+    local sys = occs:new(self.major_axis, self.vertex)
+    
+    -- Calcule les coordonnées des points pa et pb dans ce système
+    local Xa, Ya = sys:coordinates(pa)
+    local Xb, Yb = sys:coordinates(pb)
+    
+    -- Résout l'intersection entre la parabole et la droite définie par les points pa et pb
+    local r1, r2 = solve_para_line(self.h, param_line(Xa, Ya, Xb, Yb))
+    
+    -- Si les résultats de l'intersection sont invalides (false), retourne deux faux
+    if r1 == false then
+        local s1 = false
+        local s2 = false
+        return s1, s2
+    else
+        -- Sinon, calcule les points d'intersection
+        local s1, s2 = self:point(r1), self:point(r2)
+        
+        -- Retourne les points d'intersection dans l'ordre croissant de distance par rapport à pa
+        if length(pa, s1) < length(pa, s2) then
+            return s1, s2
+        else
+            return s2, s1
+        end
+    end
 end
 
+
 function conic:tangent_from(pt)
     if self.e == 1 then  -- Parabola
       local sys = occs : new (self.major_axis  ,self.vertex) 
@@ -196,42 +240,51 @@
     end
   end
 
-function conic : in_out(pt)
-  if self.e == 1 then  -- Parabola
-    return PA_in_out (self,pt)
-  elseif self.e > 1 then  -- Hyperbola
-     return HY_in_out (self,pt)
-  elseif self.e < 1 then  -- Ellipse 
-   return EL_in_out (self,pt)
+  -- Fonction pour déterminer si un point est à l'intérieur ou à l'extérieur de la conique
+  function conic:in_out(pt)
+      if self.e == 1 then  -- Parabole
+          return PA_in_out(self, pt)
+      elseif self.e > 1 then  -- Hyperbole
+          return HY_in_out(self, pt)
+      elseif self.e < 1 then  -- Ellipse 
+          return EL_in_out(self, pt)
+      end
   end
-end
 
-function conic: orthoptic ()
-  if self.e == 1 then  -- Parabola
-    return self.directrix
-  elseif self.e > 1 and self.e < math.sqrt(2) then  -- Hyperbola
-    local r = math.sqrt(self.a * self.a - self.b * self.b)
-    local th = report_(self.center,self.vertex,r)
-    return circle : new (self.center, th)
-  elseif self.e < 1 then  -- Ellipse 
-    local r = math.sqrt(self.a * self.a + self.b * self.b)
-    local th = report_(self.center,self.vertex,r)
-    return circle : new (self.center, th)
-  end     
-end
+  -- Fonction pour obtenir l'orthoptique de la conique
+  function conic:orthoptic()
+      if self.e == 1 then  -- Parabole
+          return self.directrix
+      elseif self.e > 1 and self.e < math.sqrt(2) then  -- Hyperbole
+          local r = math.sqrt(self.a * self.a - self.b * self.b)
+          local th = report_(self.center, self.vertex, r)
+          return circle:new(self.center, th)
+      elseif self.e < 1 then  -- Ellipse 
+          local r = math.sqrt(self.a * self.a + self.b * self.b)
+          local th = report_(self.center, self.vertex, r)
+          return circle:new(self.center, th)
+      end
+  end
 
-function conic : asymptotes ()
-  if self.e >1 then
-    local pa = report_(self.Fa,self.Fb,self.a,self.center)
-    local p1 = (pa-self.center) : orthogonal (self.b) : at (pa)
-    local p2 = (pa-self.center) : orthogonal (-self.b) : at (pa)
-    local q1 = symmetry_(self.center,p1)
-    local q2 = symmetry_(self.center,p2)  
-    return line :new (p1,q1), line : new (p2,q2)
-  else
-    tex.error("An error has occurred", {"It's not an hyperbola"})
-    return
+  -- Fonction pour calculer les asymptotes de la conique
+  function conic:asymptotes()
+      if self.e > 1 then  -- Hyperbole
+          -- Calcul du point sur les foyers et des asymptotes
+          local pa = report_(self.Fa, self.Fb, self.a, self.center)
+          local p1 = (pa - self.center):orthogonal(self.b):at(pa)
+          local p2 = (pa - self.center):orthogonal(-self.b):at(pa)
+        
+          -- Symétrie des points d'asymptotes par rapport au centre
+          local q1 = symmetry_(self.center, p1)
+          local q2 = symmetry_(self.center, p2)  
+        
+          -- Retourne les deux asymptotes
+          return line:new(p1, q1), line:new(p2, q2)
+      else
+          -- Si ce n'est pas une hyperbole, renvoie une erreur
+          tex.error("An error has occurred", {"It's not an hyperbola"})
+          return
+      end
   end
-end
   
 return conic
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_ellipse.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_ellipse.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_ellipse.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,12 +1,12 @@
--- tkz_elements-ellipses.lua
--- date 2025/02/26
--- version 3.32
+-- tkz_elements_ellipses.lua
+-- date 2025/03/04
+-- version 3.34c
 -- Copyright 2025  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
+-- 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”.
@@ -17,114 +17,115 @@
 ---------------------------------------------------------------------------
 ellipse = {}
 
-function ellipse: new(pc, pa ,pb)
--- pc --> center   pa --> through big axe     pb --> little axe
-    local type             = 'ellipse'
-    local Rx               = point.abs ( pa - pc )
-    local Ry               = point.abs ( pb - pc )
-    local slope            = slope_ (pc,pa)
-    local c                = math.sqrt (Rx*Rx-Ry*Ry) 
-    local Fa               = pc + c*(point(math.cos(slope),math.sin(slope)))
-    local Fb               = pc - c*(point(math.cos(slope),math.sin(slope)))
-    local east             = pa
-    local north            = pb
-    local west             = 2 * pc - pa
-    local south            = 2 * pc - pb
-    local vertex           = pa
-    local covertex         = pb
-    local e                = c/Rx
-    local h                = (Rx*Rx-c*c)/c
-    local o = {   center   = pc,
-                  vertex   = vertex,
-                  covertex = covertex,
-                  Rx       = Rx,
-                  Ry       = Ry,
-                  slope    = slope,
-                  Fa       = Fa,
-                  Fb       = Fb,
-                  type     = type,
-                  north    = north,
-                  south    = south,
-                  east     = east,
-                  west     = west,
-                  e        = e,
-                  h        = h }
-    setmetatable(o, self)
-    self.__index = self
-    return o
+function ellipse:new(pc, pa, pb)
+	-- pc --> center   pa --> through big axe     pb --> little axe
+	local type = "ellipse"
+	local Rx = point.abs(pa - pc)
+	local Ry = point.abs(pb - pc)
+	local slope = slope_(pc, pa)
+	local c = math.sqrt(Rx * Rx - Ry * Ry)
+	local Fa = pc + c * (point(math.cos(slope), math.sin(slope)))
+	local Fb = pc - c * (point(math.cos(slope), math.sin(slope)))
+	local east = pa
+	local north = pb
+	local west = 2 * pc - pa
+	local south = 2 * pc - pb
+	local vertex = pa
+	local covertex = pb
+	local e = c / Rx
+	local h = (Rx * Rx - c * c) / c
+	local o = {
+		center = pc,
+		vertex = vertex,
+		covertex = covertex,
+		Rx = Rx,
+		Ry = Ry,
+		slope = slope,
+		Fa = Fa,
+		Fb = Fb,
+		type = type,
+		north = north,
+		south = south,
+		east = east,
+		west = west,
+		e = e,
+		h = h,
+	}
+	setmetatable(o, self)
+	self.__index = self
+	return o
 end
 
-function ellipse: foci (f1,f2,v )
-   local c,a,h,b,cov
-   c = midpoint_ (f1,f2)
-   a = point.abs(v-c)
-   h = point.abs(f1-c)
-   b = math.sqrt(a^2-h^2)
-   cov = (v-c)*point(0,1)/point.abs(v-c)*b+c
-    return ellipse: new (c,v,cov)     
+function ellipse:foci(f1, f2, v)
+	local c, a, h, b, cov
+	c = midpoint_(f1, f2)
+	a = point.abs(v - c)
+	h = point.abs(f1 - c)
+	b = math.sqrt(a ^ 2 - h ^ 2)
+	cov = (v - c) * point(0, 1) / point.abs(v - c) * b + c
+	return ellipse:new(c, v, cov)
 end
 
-function ellipse: radii (c,a,b,sl )
-   local z,v,cov
-   z     = point (a*math.cos(sl),a*math.sin(sl))
-   v     = c +  z
-   z.V   = v
-   cov   =  (v-c)*point(0,1)/point.abs(v-c)*b+c
-return ellipse: new (c,v,cov)     
+function ellipse:radii(c, a, b, sl)
+	local z, v, cov
+	z = point(a * math.cos(sl), a * math.sin(sl))
+	v = c + z
+	z.V = v
+	cov = (v - c) * point(0, 1) / point.abs(v - c) * b + c
+	return ellipse:new(c, v, cov)
 end
 
-function ellipse: eccentricity (f1,d,e)
-  local E  =  conic : new (f1,d,e)
- return ellipse: new (E.c,E.vertex,E.covertex)
+function ellipse:eccentricity(f1, d, e)
+	local E = conic:new(f1, d, e)
+	return ellipse:new(E.c, E.vertex, E.covertex)
 end
 
-function ellipse: point (t)
-   local phi = 2*t* math.pi
-   local cx =  self.center.re
-   local cy =  self.center.im
-   local ax =  self.Rx * math.cos(self.slope) * math.cos(phi)
-   local ay =  self.Rx * math.sin(self.slope) * math.cos(phi)
-   local bx = -self.Ry * math.sin(self.slope) * math.sin(phi)
-   local by =  self.Ry * math.cos(self.slope) * math.sin(phi)
-return point (cx+ax+bx,cy+ay+by)
+function ellipse:point(t)
+	local phi = 2 * t * math.pi
+	local cx = self.center.re
+	local cy = self.center.im
+	local ax = self.Rx * math.cos(self.slope) * math.cos(phi)
+	local ay = self.Rx * math.sin(self.slope) * math.cos(phi)
+	local bx = -self.Ry * math.sin(self.slope) * math.sin(phi)
+	local by = self.Ry * math.cos(self.slope) * math.sin(phi)
+	return point(cx + ax + bx, cy + ay + by)
 end
 
-function ellipse: tangent_at (pt)
-  local zi = in_center_ (self.Fa,pt,self.Fb)
-  local u = pt+(zi-pt)*point(0,1)
-  local u = normalize_(pt,u)
-  local v = pt : symmetry (u)
-    return line : new (u,v)
+function ellipse:tangent_at(pt)
+	local zi = in_center_(self.Fa, pt, self.Fb)
+	local u = pt + (zi - pt) * point(0, 1)
+	local u = normalize_(pt, u)
+	local v = pt:symmetry(u)
+	return line:new(u, v)
 end
 
-function ellipse: tangent_from (pt)
-   local u,v,U,V,w,s1,s2,s3,s4
-   w = report_ (self.Fb,self.Fa,2 * self.Rx)
-   s1,s2 = intersection_cc_ (pt,self.Fa,self.Fb,w)
-   u,v   = mediator_ (s1,self.Fa)
-   U     = intersection_ll_ (u,v,self.Fb,s1)
-   u,v   = mediator_ (s2,self.Fa)
-   V     = intersection_ll_ (u,v,self.Fb,s2)
-   return  line : new (pt,U) , line : new (pt,V)
+function ellipse:tangent_from(pt)
+	local u, v, U, V, w, s1, s2, s3, s4
+	w = report_(self.Fb, self.Fa, 2 * self.Rx)
+	s1, s2 = intersection_cc_(pt, self.Fa, self.Fb, w)
+	u, v = mediator_(s1, self.Fa)
+	U = intersection_ll_(u, v, self.Fb, s1)
+	u, v = mediator_(s2, self.Fa)
+	V = intersection_ll_(u, v, self.Fb, s2)
+	return line:new(pt, U), line:new(pt, V)
 end
 
-function ellipse: in_out (pt)
-     local d,D,an,m
-     d = point.abs (pt - self.center)
-     an = point.arg (pt - self.center)
-     m = point(self.Rx*math.cos(an),self.Ry*math.sin(an))
-     D = point.abs (m - self.center)
-     if D-d > tkz_epsilon
-      then
-        return true
-     else
-        return false
-     end
+function ellipse:in_out(pt)
+	local d, D, an, m
+	d = point.abs(pt - self.center)
+	an = point.arg(pt - self.center)
+	m = point(self.Rx * math.cos(an), self.Ry * math.sin(an))
+	D = point.abs(m - self.center)
+	if D - d > tkz_epsilon then
+		return true
+	else
+		return false
+	end
 end
 
-function ellipse: orthoptic_circle ()
-   local r = math.sqrt(self.Rx*self.Rx+self.Ry*self.Ry)
-   return circle : radius (self.center, r)
+function ellipse:orthoptic_circle()
+	local r = math.sqrt(self.Rx * self.Rx + self.Ry * self.Ry)
+	return circle:radius(self.center, r)
 end
 
-return ellipse
\ No newline at end of file
+return ellipse

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_circles.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_circles.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_circles.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,12 +1,12 @@
 -- tkz_elements_functions_circles.lua
--- date 2025/02/26
--- version 3.32
+-- date 2025/03/04
+-- version 3.34c
 -- Copyright 2025  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
+-- 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”.
@@ -13,164 +13,169 @@
 -- The Current Maintainer of this work is Alain Matthes.
 
 --  define a circle by the center and a radius
+function through(c,r,an)
+  if an then   
+    return c, c + point(r * math.cos(an), r * math.sin(an))
+  else
+    return c, c + point(r, 0)
+  end
+end
 
--- function circle_cr ( c, r )
---     return c +  point(r,0)
--- end
+function diameter(a, b, swap)
+	if swap then
+		return midpoint_(a, b), a
+	else
+		return midpoint_(a, b), b
+	end
+end
 
-function midarc_ (o,a,b) -- a -> b
-   local phi = 0.5 * get_angle_ ( a,o,b )
-   return rotation_ (o,phi,b)
+function midarc_(o, a, b) -- a -> b
+	local phi = 0.5 * get_angle_(a, o, b)
+	return rotation_(o, phi, b)
 end
 
-function tangent_from_ (c,p,pt)
-  local o
-   o  = midpoint_ ( c,pt )
- return  intersection_cc_ (o,c,c,p)
+function tangent_from_(c, p, pt)
+	local o
+	o = midpoint_(c, pt)
+	return intersection_cc_(o, c, c, p)
 end
 
-function tangent_at_ (a,p)
-   return rotation_ (p,math.pi/2,a),rotation_ (p,-math.pi/2,a)
+function tangent_at_(a, p)
+	return rotation_(p, math.pi / 2, a), rotation_(p, -math.pi / 2, a)
 end
- 
-function orthogonal_from_ (a,b,p)
-    return tangent_from_ (a,b,p)
+
+function orthogonal_from_(a, b, p)
+	return tangent_from_(a, b, p)
 end
 
 function orthogonal_through_(a, b, x, y)
-    local d = 1 / point.mod(x - a)
-    local z = a + (b - a) * d
-    return circum_center_(x, y, z)
+	local d = 1 / point.mod(x - a)
+	local z = a + (b - a) * d
+	return circum_center_(x, y, z)
 end
 
 function inversion_(c, p, pt)
-    local ry = point.abs(c - p)
-    local d = point.abs(c - pt)
-    local r = (ry * ry) / d
-    return c + polar_(r, point.arg(pt - c))
+	local ry = point.abs(c - p)
+	local d = point.abs(c - pt)
+	local r = (ry * ry) / d
+	return c + polar_(r, point.arg(pt - c))
 end
 
 function circles_position_(c1, r1, c2, r2)
-    local d = point.mod(c1 - c2)
-    local max = r1 + r2
-    local min = math.abs(r1 - r2)
+	local d = point.mod(c1 - c2)
+	local max = r1 + r2
+	local min = math.abs(r1 - r2)
 
-    if d > max then
-        return "outside"
-    elseif math.abs(d - max) < tkz_epsilon then
-        return "outside tangent"
-    elseif math.abs(d - min) < tkz_epsilon then
-        return "inside tangent"
-    elseif d < min then
-        return "inside"
-    else
-        return "intersect"
-    end
+	if d > max then
+		return "outside"
+	elseif math.abs(d - max) < tkz_epsilon then
+		return "outside tangent"
+	elseif math.abs(d - min) < tkz_epsilon then
+		return "inside tangent"
+	elseif d < min then
+		return "inside"
+	else
+		return "intersect"
+	end
 end
 
- 
 function radical_axis_(c1, p1, c2, p2)
-    local r1 = point.abs(c1 - p1)
-    local r2 = point.abs(c2 - p2)
-    local d = point.abs(c1 - c2)
-    local h = (r1 * r1 - r2 * r2 + d * d) / (2 * d)
+	local r1 = point.abs(c1 - p1)
+	local r2 = point.abs(c2 - p2)
+	local d = point.abs(c1 - c2)
+	local h = (r1 * r1 - r2 * r2 + d * d) / (2 * d)
 
-    local ck = radical_center_(c1, p1, c2, p2)
-    local cj = rotation_(ck, -math.pi / 2, c1)
-    local ci = symmetry_(ck, cj)
+	local ck = radical_center_(c1, p1, c2, p2)
+	local cj = rotation_(ck, -math.pi / 2, c1)
+	local ci = symmetry_(ck, cj)
 
-    return cj, ci
+	return cj, ci
 end
 
-
-function radical_center_ (c1,p1,c2,p2)
-   local d,r1,r2,h
-   r1 = point.abs(c1-p1)
-   r2 = point.abs(c2-p2)
-   d  = point.abs(c1-c2)
-   h  = (r1*r1-r2*r2+d*d)/(2*d)
-   return h*(c2-c1)/d+c1
+function radical_center_(c1, p1, c2, p2)
+	local d, r1, r2, h
+	r1 = point.abs(c1 - p1)
+	r2 = point.abs(c2 - p2)
+	d = point.abs(c1 - c2)
+	h = (r1 * r1 - r2 * r2 + d * d) / (2 * d)
+	return h * (c2 - c1) / d + c1
 end
 
-function radical_center3 (C1,C2,C3)
-   local t1,t2,t3,t4
-   t1,t2 = radical_axis_ (C1.center,C1.through,C2.center,C2.through)
-   if C3 == nil then
-    return  intersection_ll_ (t1,t2,C1.center,C2.center)
-   else
-   t3,t4 = radical_axis_ (C3.center,C3.through,C2.center,C2.through)
-return intersection_ll_ (t1,t2,t3,t4)
+function radical_center3(C1, C2, C3)
+	local t1, t2, t3, t4
+	t1, t2 = radical_axis_(C1.center, C1.through, C2.center, C2.through)
+	if C3 == nil then
+		return intersection_ll_(t1, t2, C1.center, C2.center)
+	else
+		t3, t4 = radical_axis_(C3.center, C3.through, C2.center, C2.through)
+		return intersection_ll_(t1, t2, t3, t4)
+	end
 end
-end
 
 function south_pole_(c, p)
-    return c - point(0, point.abs(c - p))
+	return c - point(0, point.abs(c - p))
 end
 
-
 function north_pole_(c, p)
-    return c + point(0, point.abs(c - p))
+	return c + point(0, point.abs(c - p))
 end
 
-
-function antipode_ (c,pt)
-   return 2 * c - pt
+function antipode_(c, pt)
+	return 2 * c - pt
 end
 
-function internal_similitude_ (c1,r1,c2,r2)
-  return barycenter_ ({c2,r1},{c1,r2})
+function internal_similitude_(c1, r1, c2, r2)
+	return barycenter_({ c2, r1 }, { c1, r2 })
 end
 
-function  external_similitude_ (c1,r1,c2,r2)
-  return  barycenter_ ({c2,r1},{c1,-r2})
+function external_similitude_(c1, r1, c2, r2)
+	return barycenter_({ c2, r1 }, { c1, -r2 })
 end
 
-function circlepoint_ (c,t,k)
-   local phi = 2*k* math.pi
-   return rotation_ (c,phi,t) 
+function circlepoint_(c, t, k)
+	local phi = 2 * k * math.pi
+	return rotation_(c, phi, t)
 end
- 
-function midcircle_(C1,C2)
-    local state, r, s, t1, t2, T1, T2, p, a, b, c, d, Cx, Cy, i, j
-    state = circles_position_(C1.center, C1.radius, C2.center, C2.radius)
-    i = barycenter_({C2.center, C1.radius}, {C1.center, -C2.radius})
-    j = barycenter_({C2.center, C1.radius}, {C1.center, C2.radius})
-    t1, t2 = tangent_from_(C1.center, C1.through, i)
-    T1, T2 = tangent_from_(C2.center, C2.through, i)
-      
-    if (state == 'outside') or (state == 'outside tangent') then
-        p = math.sqrt(point.mod(i - t1) * point.mod(i - T1))
-        return circle:radius(i, p)
-    elseif state == 'intersect' then
-        r, s = intersection(C1, C2)
-        return circle:radius(i, point.mod(r - i)), circle:radius(j, point.mod(r - j))
-    elseif (state == 'inside') or (state == 'inside tangent') then
-        a, b = intersection_lc_(C1.center, C2.center, C1.center, C1.through)
-        c, d = intersection_lc_(C1.center, C2.center, C2.center, C2.through)
-  
-      -- Ensure the smaller radius circle is used first
-      if C1.radius < C2.radius then 
-         z.u, z.v, z.r, z.s = a, b, c, d
-      else
-         z.u, z.v, z.r, z.s = c, d, a, b
-      end
-      
-        -- Determine circle orientation and return orthogonal from j
-        if in_segment_(z.s, z.v, z.u) then
-            Cx = circle:diameter(z.r, z.v)
-            Cy = circle:diameter(z.u, z.s)
-        else
-            Cx = circle:diameter(z.s, z.v)
-            Cy = circle:diameter(z.u, z.r)
-        end
 
-        -- Return the circle with the smaller radius orthogonal from j
-        if Cx.radius < Cy.radius then
-            return Cy:orthogonal_from(j)
-        else
-            return Cx:orthogonal_from(j)
-        end
-    end
+function midcircle_(C1, C2)
+	local state, r, s, t1, t2, T1, T2, p, a, b, c, d, Cx, Cy, i, j
+	state = circles_position_(C1.center, C1.radius, C2.center, C2.radius)
+	i = barycenter_({ C2.center, C1.radius }, { C1.center, -C2.radius })
+	j = barycenter_({ C2.center, C1.radius }, { C1.center, C2.radius })
+	t1, t2 = tangent_from_(C1.center, C1.through, i)
+	T1, T2 = tangent_from_(C2.center, C2.through, i)
+
+	if (state == "outside") or (state == "outside tangent") then
+		p = math.sqrt(point.mod(i - t1) * point.mod(i - T1))
+		return circle:radius(i, p)
+	elseif state == "intersect" then
+		r, s = intersection(C1, C2)
+		return circle:radius(i, point.mod(r - i)), circle:radius(j, point.mod(r - j))
+	elseif (state == "inside") or (state == "inside tangent") then
+		a, b = intersection_lc_(C1.center, C2.center, C1.center, C1.through)
+		c, d = intersection_lc_(C1.center, C2.center, C2.center, C2.through)
+
+		-- Ensure the smaller radius circle is used first
+		if C1.radius < C2.radius then
+			z.u, z.v, z.r, z.s = a, b, c, d
+		else
+			z.u, z.v, z.r, z.s = c, d, a, b
+		end
+
+		-- Determine circle orientation and return orthogonal from j
+		if in_segment_(z.s, z.v, z.u) then
+			Cx = circle:diameter(z.r, z.v)
+			Cy = circle:diameter(z.u, z.s)
+		else
+			Cx = circle:diameter(z.s, z.v)
+			Cy = circle:diameter(z.u, z.r)
+		end
+
+		-- Return the circle with the smaller radius orthogonal from j
+		if Cx.radius < Cy.radius then
+			return Cy:orthogonal_from(j)
+		else
+			return Cx:orthogonal_from(j)
+		end
+	end
 end
-
- 
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_conics.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_conics.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_conics.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,316 +1,344 @@
--- tkz_elements-square.lua
--- date 2025/02/26
--- version 3.32
+-- tkz_elements_functions_conics.lua
+-- date 2025/03/04
+-- version 3.34c
 -- Copyright 2025  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
+-- 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.
----------------------------------------------------------------------------
---                           Tracing
----------------------------------------------------------------------------
-----------                   with eccentricity                   ----------
 
-function get_a(h,e)
-  if e == 1    then return nil
-  elseif e < 1 then return e * h / (1 - e^2)
-  elseif e > 1 then return e * h / (e^2 - 1)
+
+function get_a(h, e)
+	if e == 1 then
+		return nil
+	elseif e < 1 then
+		return e * h / (1 - e ^ 2)
+	elseif e > 1 then
+		return e * h / (e ^ 2 - 1)
+	end
 end
+
+function get_b(h, e)
+	if e == 1 then
+		return nil
+	elseif e < 1 then
+		return e * h / math.sqrt(1 - e ^ 2)
+	elseif e > 1 then
+		return e * h / math.sqrt(e ^ 2 - 1)
+	end
 end
 
-function get_b(h,e)
-  if e == 1    then return nil
-  elseif e < 1 then return e * h / math.sqrt(1 - e^2)
-  elseif e > 1 then return e * h / math.sqrt(e^2 - 1)
+function get_c(h, e)
+	if e == 1 then
+		return nil
+	elseif e < 1 then
+		return e ^ 2 * h / (1 - e ^ 2)
+	elseif e > 1 then
+		return e ^ 2 * h / (e ^ 2 - 1)
+	end
 end
+
+function next_focus(F, K, e, h)
+	if e == 1 then
+		return nil
+	elseif e > 1 then
+		return report_(F, K, 2 * get_c(h, e))
+	elseif e < 1 then
+		return report_(F, K, -2 * get_c(h, e))
+	end
 end
 
-function get_c (h,e)
-  if e == 1    then return nil
-  elseif e < 1 then return  e^2 * h / (1 - e^2)
-  elseif e > 1 then return  e^2 * h / (e^2 - 1)
+function conic_center(F, K, e, h)
+	if e == 1 then
+		return nil
+	elseif e > 1 then
+		return report_(F, K, get_c(h, e))
+	elseif e < 1 then
+		return report_(F, K, -get_c(h, e))
+	end
 end
+
+function get_subtype(e)
+	if e == 1 then
+		return "parabola"
+	elseif e < 1 then
+		return "ellipse"
+	elseif e > 1 then
+		return "hyperbola"
+	end
 end
 
-function next_focus(F,K,e,h)
-  if e == 1    then return nil 
-  elseif e > 1 then return report_(F,K, 2 * get_c(h,e))
-  elseif e < 1 then return report_(F,K,-2 * get_c(h,e))
-   end
+function get_vertex(F, K, e, h)
+	if e == 1 then
+		return report_(K, F, h / 2)
+	else
+		local center = conic_center(F, K, e, h)
+		return report_(center, F, get_a(h, e))
+	end
 end
 
-function conic_center(F,K,e,h)
-  if e == 1    then return nil
-  elseif e > 1 then return report_(F,K, get_c(h,e))
-  elseif e < 1 then return report_(F,K,-get_c(h,e))
-  end
- end
-
- function get_subtype(e)
-   if e == 1    then return "parabola"
-   elseif e < 1 then return "ellipse"
-   elseif e > 1 then return "hyperbola"
-     end
+function get_covertex(F, K, e, h)
+	if e == 1 then
+		return nil
+	else
+		local center = conic_center(F, K, e, h)
+		return report_(center, ortho_from_(center, center, F), get_b(h, e))
+	end
 end
 
- function get_vertex(F,K,e,h)
-   if e == 1 then return report_(K,F,h/2)
-   else
-      local center = conic_center(F,K,e,h)
-      return report_( center,F,get_a (h,e))
-     end
-end 
-
- function get_covertex(F,K,e,h) 
-   if e == 1 then return nil
-   else 
-      local center = conic_center(F,K,e,h)
-     return report_(center, ortho_from_ (center,center,F),get_b (h,e))
-      end
-end   
-
-function get_minor_axis(F,K,e,h)
-   if e == 1 then return nil
-   else 
-     local center = conic_center(F,K,e,h)
-     local pa = get_covertex(F,K,e,h) 
-     local pb = symmetry_(center,pa)
-     return line : new (pa,pb)
-   end
+function get_minor_axis(F, K, e, h)
+	if e == 1 then
+		return nil
+	else
+		local center = conic_center(F, K, e, h)
+		local pa = get_covertex(F, K, e, h)
+		local pb = symmetry_(center, pa)
+		return line:new(pa, pb)
+	end
 end
 
 ---------------------------------------------------------------------------
 ---------------------------------------------------------------------------
 
-function get_points_conic_ (Co,ta,tb,nb)
-      if Co.e == 1  then return get_points_parabola  (Co, ta, tb, nb)
-  elseif Co.e  > 1  then return get_points_hyperbola (Co, ta, tb, nb)
-  elseif Co.e  < 1  then return get_points_ellipse   (Co, ta, tb, nb)
-    end
+function get_points_conic_(Co, ta, tb, nb)
+	if Co.e == 1 then
+		return get_points_parabola(Co, ta, tb, nb)
+	elseif Co.e > 1 then
+		return get_points_hyperbola(Co, ta, tb, nb)
+	elseif Co.e < 1 then
+		return get_points_ellipse(Co, ta, tb, nb)
+	end
 end
 
-function get_points_sym_conic_ (Co,ta,tb,nb)
-  return get_points_hyperbola_sym (Co, ta, tb, nb)
+function get_points_sym_conic_(Co, ta, tb, nb)
+	return get_points_hyperbola_sym(Co, ta, tb, nb)
 end
 
-function get_points_parabola (C, ta, tb, nb)
-   local points  = {}
-  --Function to add points in a given range
-   for t = ta,tb, 1 / nb  do
-     local T    = C.directrix : report (t,C.K)
-     local LL   = C.major_axis : ll_from (T)
-     local x,y  = mediator_ (C.Fa,T)
-     local pt   = intersection_ll_(x,y,LL.pa,LL.pb)
-       table.insert (points, "("..checknumber(pt.re)..","..checknumber(pt.im)..")")
-    end
-  return points
+function get_points_parabola(C, ta, tb, nb)
+	local points = {}
+	--Function to add points in a given range
+	for t = ta, tb, 1 / nb do
+		local T = C.directrix:report(t, C.K)
+		local LL = C.major_axis:ll_from(T)
+		local x, y = mediator_(C.Fa, T)
+		local pt = intersection_ll_(x, y, LL.pa, LL.pb)
+		table.insert(points, "(" .. checknumber(pt.re) .. "," .. checknumber(pt.im) .. ")")
+	end
+	return points
 end
 
-function get_points_hyperbola (C,ta,tb,nb)
-local points = {}
-local LC   = C.minor_axis
-local LS   = LC : ll_from (C.vertex)
- for t = ta, tb, 1/nb do
-   local T    = C.directrix : report (t,C.K)
-   local LT   = C.major_axis : ll_from (T)
-   local D    = intersection_ll_ (LC.pa,LC.pb,C.Fa,T)
-   local E    = intersection_ll_ (LS.pa,LS.pb,C.Fa,T)
-   local P,Q  = intersection_lc_ (LT.pa,LT.pb,D,E)
-  if length(P,C.Fa) > length(Q,C.Fa) then P,Q = Q,P end
-  table.insert (points, "("..checknumber(P.re)..","..checknumber(P.im)..")")
- end
- return  points
+function get_points_hyperbola(C, ta, tb, nb)
+	local points = {}
+	local LC = C.minor_axis
+	local LS = LC:ll_from(C.vertex)
+	for t = ta, tb, 1 / nb do
+		local T = C.directrix:report(t, C.K)
+		local LT = C.major_axis:ll_from(T)
+		local D = intersection_ll_(LC.pa, LC.pb, C.Fa, T)
+		local E = intersection_ll_(LS.pa, LS.pb, C.Fa, T)
+		local P, Q = intersection_lc_(LT.pa, LT.pb, D, E)
+		if length(P, C.Fa) > length(Q, C.Fa) then
+			P, Q = Q, P
+		end
+		table.insert(points, "(" .. checknumber(P.re) .. "," .. checknumber(P.im) .. ")")
+	end
+	return points
 end
 
-function get_points_hyperbola_sym (C,ta,tb,nb)
-local points = {}
-local LC   = C.minor_axis
-local LS   = LC : ll_from (C.vertex)
- for t = ta, tb, 1/nb do
-   local T    = C.directrix : report (t,C.K)
-   local LT   = C.major_axis : ll_from (T)
-   local D    = intersection_ll_ (LC.pa,LC.pb,C.Fa,T)
-   local E    = intersection_ll_ (LS.pa,LS.pb,C.Fa,T)
-   local M,N  = intersection_lc_ (LT.pa,LT.pb,D,E)
-   local P    = symmetry_(C.center,M)
-   local Q    = symmetry_(C.center,N)
-  if length(P,C.Fb) > length(Q,C.Fb) then  P,Q = Q,P end
-  table.insert (points, "("..checknumber(P.re)..","..checknumber(P.im)..")")
- end
- return  points
+function get_points_hyperbola_sym(C, ta, tb, nb)
+	local points = {}
+	local LC = C.minor_axis
+	local LS = LC:ll_from(C.vertex)
+	for t = ta, tb, 1 / nb do
+		local T = C.directrix:report(t, C.K)
+		local LT = C.major_axis:ll_from(T)
+		local D = intersection_ll_(LC.pa, LC.pb, C.Fa, T)
+		local E = intersection_ll_(LS.pa, LS.pb, C.Fa, T)
+		local M, N = intersection_lc_(LT.pa, LT.pb, D, E)
+		local P = symmetry_(C.center, M)
+		local Q = symmetry_(C.center, N)
+		if length(P, C.Fb) > length(Q, C.Fb) then
+			P, Q = Q, P
+		end
+		table.insert(points, "(" .. checknumber(P.re) .. "," .. checknumber(P.im) .. ")")
+	end
+	return points
 end
 
-function get_points_ellipse (C,x,y,nb)
-local points = {}
-for t = x,y+1/nb,1/nb do
-  -- point on circle
-  CI = circle : new (C.center,C.vertex)
-  local M  = CI : point(t)
-  -- point on ellipse
-  local P  = affinity_ (C.Fa, C.Fb, C.center, C.covertex, C.b/C.a, M)
-  table.insert(points, "("..checknumber(P.re)..","..checknumber(P.im)..")")
-   end
-return points
+function get_points_ellipse(C, x, y, nb)
+	local points = {}
+	for t = x, y + 1 / nb, 1 / nb do
+		-- point on circle
+		CI = circle:new(C.center, C.vertex)
+		local M = CI:point(t)
+		-- point on ellipse
+		local P = affinity_(C.Fa, C.Fb, C.center, C.covertex, C.b / C.a, M)
+		table.insert(points, "(" .. checknumber(P.re) .. "," .. checknumber(P.im) .. ")")
+	end
+	return points
 end
 ---------------------------------------------------------------------------
 ---------------------------------------------------------------------------
 
 function get_one_point_conic_(C, t)
-    if C.e < 1 then
-        return get_one_point_ellipse(C, t)
-    else
-        local a, b = C.directrix.pa, C.directrix.pb
-        local c, d = C.Fa, C.K
-        local angle = angle_between_vectors(a, b, c, d)
-        local newDir = (angle < 0) and line:new(b, a) or line:new(a, b)
+	if C.e < 1 then
+		return get_one_point_ellipse(C, t)
+	else
+		local a, b = C.directrix.pa, C.directrix.pb
+		local c, d = C.Fa, C.K
+		local angle = angle_between_vectors(a, b, c, d)
+		local newDir = (angle < 0) and line:new(b, a) or line:new(a, b)
 
-        local T = newDir:report(t, C.K)
-        local LT = C.major_axis:ll_from(T)
+		local T = newDir:report(t, C.K)
+		local LT = C.major_axis:ll_from(T)
 
-        if C.e == 1 then
-            return get_one_point_parabola(C, T, LT)
-        else
-            return get_one_point_hyperbola(C, T, LT)
-        end
-    end
+		if C.e == 1 then
+			return get_one_point_parabola(C, T, LT)
+		else
+			return get_one_point_hyperbola(C, T, LT)
+		end
+	end
 end
 
-function get_one_point_parabola (C,T,LT)
-   local x,y  = mediator_ (C.Fa,T)
-   return       intersection_ll_(x,y,LT.pa,LT.pb)
+function get_one_point_parabola(C, T, LT)
+	local x, y = mediator_(C.Fa, T)
+	return intersection_ll_(x, y, LT.pa, LT.pb)
 end
 
-function get_one_point_hyperbola (C,T,LT)
-  local LC   = C.minor_axis
-  local LS   = LC : ll_from (C.vertex)
-  local D    = intersection_ll_ (LC.pa,LC.pb,C.Fa,T)
-  local E    = intersection_ll_ (LS.pa,LS.pb,C.Fa,T)
-  local P,Q  = intersection_lc_ (LT.pa,LT.pb,D,E)
-  if length(P,C.Fa) > length(Q,C.Fa) then  P,Q = Q,P end
-  return P
+function get_one_point_hyperbola(C, T, LT)
+	local LC = C.minor_axis
+	local LS = LC:ll_from(C.vertex)
+	local D = intersection_ll_(LC.pa, LC.pb, C.Fa, T)
+	local E = intersection_ll_(LS.pa, LS.pb, C.Fa, T)
+	local P, Q = intersection_lc_(LT.pa, LT.pb, D, E)
+	if length(P, C.Fa) > length(Q, C.Fa) then
+		P, Q = Q, P
+	end
+	return P
 end
 
-function get_one_point_hyperbola_ii (C,t)
-  local T    = C.directrix : report (t,C.K)
-  local LT   = C.major_axis : ll_from (T)
-  local p    = get_one_point_hyperbola (C, T, LT)
- local D = C.minor_axis
- return symmetry_axial_(D.pa,D.pb,p)
+function get_one_point_hyperbola_ii(C, t)
+	local T = C.directrix:report(t, C.K)
+	local LT = C.major_axis:ll_from(T)
+	local p = get_one_point_hyperbola(C, T, LT)
+	local D = C.minor_axis
+	return symmetry_axial_(D.pa, D.pb, p)
 end
 
-function get_one_point_ellipse (C,t)
-    -- point on circle
-    CI = circle : new (C.center,C.vertex)
-    local M  = CI : point(t)
-  return affinity_ (C.Fa, C.Fb, C.center, C.covertex, C.b/C.a, M)
+function get_one_point_ellipse(C, t)
+	-- point on circle
+	CI = circle:new(C.center, C.vertex)
+	local M = CI:point(t)
+	return affinity_(C.Fa, C.Fb, C.center, C.covertex, C.b / C.a, M)
 end
 
-function EL_in_out (CO,pt)
-    local d = point.abs (pt - CO.center)
-    local L = line : new(CO.center,pt)
-    local x,y = intersection(L,CO)
-    local dx = point.abs (x - CO.center)
-    if d < dx then 
-        return true
-     else
-        return false
-     end
+function EL_in_out(CO, pt)
+	local d = point.abs(pt - CO.center)
+	local L = line:new(CO.center, pt)
+	local x, y = intersection(L, CO)
+	local dx = point.abs(x - CO.center)
+	if d < dx then
+		return true
+	else
+		return false
+	end
 end
 
-function PA_in_out (PA,pt)
-  local D = PA.major_axis
-  local Dp = D : ortho_from (pt)
-  local x,y = intersection (Dp,PA)
-  if x == false then return false 
-  else
-    local L = line : new (x,y)
-   return L : in_out_segment(pt) 
-  end
+function PA_in_out(PA, pt)
+	local D = PA.major_axis
+	local Dp = D:ortho_from(pt)
+	local x, y = intersection(Dp, PA)
+	if x == false then
+		return false
+	else
+		local L = line:new(x, y)
+		return L:in_out_segment(pt)
+	end
 end
 
-function HY_in_out (HY,pt)
-  local D = HY.major_axis
-  local Dp = D : ortho_from (pt)
-  local x,y = intersection (Dp,HY)
-  if x == false then return false 
-  else
-    local L = line : new (x,y)
-   return L : in_out_segment(pt) 
-  end
+function HY_in_out(HY, pt)
+	local D = HY.major_axis
+	local Dp = D:ortho_from(pt)
+	local x, y = intersection(Dp, HY)
+	if x == false then
+		return false
+	else
+		local L = line:new(x, y)
+		return L:in_out_segment(pt)
+	end
 end
 
-function  EL_points (center,vertex,covertex)
-  local a = length(center,vertex)
-  local b = length(center,covertex)
-  local c = math.sqrt(a^2-b^2)
-  local F = report_(center,vertex,c)
-  local e = c/a
-  local h = b^2/c
-  local K = report_(center,F,b^2/c,F)
-  local axis = line : new (vertex,center)
-  local L = axis : ortho_from (K)
-  return F,L,e
+function EL_points(center, vertex, covertex)
+	local a = length(center, vertex)
+	local b = length(center, covertex)
+	local c = math.sqrt(a ^ 2 - b ^ 2)
+	local F = report_(center, vertex, c)
+	local e = c / a
+	local h = b ^ 2 / c
+	local K = report_(center, F, b ^ 2 / c, F)
+	local axis = line:new(vertex, center)
+	local L = axis:ortho_from(K)
+	return F, L, e
 end
 
-function EL_bifocal (Fa,Fb,x)
-  local a
-  if type(x) == "number" then
-     a = x
-   else -- x is a point
-    a = (length(Fa,x)+length(Fb,x))/2
- end
- local center = midpoint_(Fa,Fb)
- local c = length(center,Fa)
- local e = c/a
- local b = math.sqrt(a^2-c^2)
- local h = b^2/c
- local K = report_(center,Fa,b^2/c,Fa)
- local vertex = report_(center,Fa,a)
- local axis = line : new (vertex,center)
- local L = axis : ortho_from (K)
-return  Fa,L,e
+function EL_bifocal(Fa, Fb, x)
+	local a
+	if type(x) == "number" then
+		a = x
+	else -- x is a point
+		a = (length(Fa, x) + length(Fb, x)) / 2
+	end
+	local center = midpoint_(Fa, Fb)
+	local c = length(center, Fa)
+	local e = c / a
+	local b = math.sqrt(a ^ 2 - c ^ 2)
+	local h = b ^ 2 / c
+	local K = report_(center, Fa, b ^ 2 / c, Fa)
+	local vertex = report_(center, Fa, a)
+	local axis = line:new(vertex, center)
+	local L = axis:ortho_from(K)
+	return Fa, L, e
 end
 
+function HY_bifocal(Fa, Fb, x)
+	local a
+	if type(x) == "number" then
+		a = x
+	else -- x is a point
+		a = math.abs((length(Fa, x) - length(Fb, x))) / 2
+	end
+	local center = midpoint_(Fa, Fb)
+	local c = length(center, Fa)
+	local e = c / a
+	local b = math.sqrt(c ^ 2 - a ^ 2)
+	local h = b ^ 2 / c
+	local K = report_(center, Fa, -b ^ 2 / c, Fa)
+	local vertex = report_(center, Fa, a)
+	local axis = line:new(vertex, center)
+	local L = axis:ortho_from(K)
+	return Fa, L, e
+end
 
-function HY_bifocal (Fa,Fb,x)
-  local a
-  if type(x) == "number" then
-     a = x
-  else -- x is a point
-     a =math.abs( (length(Fa,x)-length(Fb,x)))/2
-  end
-  local center = midpoint_(Fa,Fb)
-  local c = length(center,Fa)
-  local e = c/a
-  local b = math.sqrt(c^2-a^2)
-  local h = b^2/c
-  local K = report_(center,Fa,-b^2/c,Fa)
-  local vertex = report_(center,Fa,a)
-  local axis = line : new (vertex,center)
-  local L = axis : ortho_from (K)
-return  Fa,L,e
+function PA_dir(F, A, B)
+	local CA = circle:new(A, F)
+	local CB = circle:new(B, F)
+	local R, S, U, V = CA:common_tangent(CB)
+	return line:new(R, S), line:new(U, V)
 end
 
-function PA_dir (F,A,B)
-  local CA = circle :new (A,F)
-  local CB = circle :new (B,F)
-  local R,S,U,V = CA:common_tangent(CB) 
-  return line:new(R,S),line:new(U,V)
+function PA_focus(D, pA, pB)
+	local HA = D:projection(pA)
+	local HB = D:projection(pB)
+	local x, y = intersection_cc_(pA, HA, pB, HB)
+	if x == false then
+		error("An error has occurred. Bad configuration")
+		return
+	else
+		return x, y
+	end
 end
-
-function PA_focus (D,pA,pB)
-  local HA = D : projection (pA)
-  local HB = D : projection (pB)
-  local x,y = intersection_cc_ (pA,HA,pB,HB)
-  if x == false then
-     error("An error has occurred. Bad configuration")
-     return
-  else
-     return x,y
-   end
-end
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_intersections.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_intersections.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_intersections.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,12 +1,12 @@
 -- tkz_elements_intersections.lua
--- date 2025/02/26
--- version 3.32
+-- date 2025/03/04
+-- version 3.34c
 -- Copyright 2025  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
+-- 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”.
@@ -15,218 +15,215 @@
 -------------------------------------------------------------------------
 -- intersection of lines
 -------------------------------------------------------------------------
-function intersection_ll (la,lb)
-    return intersection_ll_ (la.pa,la.pb,lb.pa,lb.pb)
+function intersection_ll(la, lb)
+	return intersection_ll_(la.pa, la.pb, lb.pa, lb.pb)
 end
 ---------------------------------------------------------------------------
 -- intersection of a line and a circle
 ---------------------------------------------------------------------------
-function intersection_lc (D,C )
-    return intersection_lc_ ( D.pa,D.pb ,C.center,C.through )
+function intersection_lc(D, C)
+	return intersection_lc_(D.pa, D.pb, C.center, C.through)
 end -- function
 ---------------------------------------------------------------------------
 -- intersection of two circles
 ---------------------------------------------------------------------------
-function intersection_cc (Ca , Cb )
-   return intersection_cc_(Ca.center,Ca.through,Cb.center,Cb.through)
+function intersection_cc(Ca, Cb)
+	return intersection_cc_(Ca.center, Ca.through, Cb.center, Cb.through)
 end -- function
 
 --  line ellipse
-function intersection_le (L,E)
-   local a,b,c,d,t1,t2,z1,z2,A,B,Bx,By,Ax,Ay,Rx,Ry,sd
-   A = (L.pa - E.center)*(point(math.cos(E.slope),-math.sin(E.slope)))
-   B = (L.pb - E.center)*(point(math.cos(E.slope),-math.sin(E.slope)))
-   Rx  = E.Rx
-   Ry  = E.Ry
-   Ax  = A.re
-   Ay  = A.im
-   Bx  = B.re
-   By  = B.im
-    a  = Rx^2  * (By-Ay)^2 +Ry^2 * (Bx-Ax)^2
-    b  = 2 * Rx^2 * Ay * (By-Ay)+ 2  * Ry^2 * Ax * (Bx-Ax)
-    c  = Rx^2 * Ay^2 + Ry^2 * Ax^2 -  Rx^2 * Ry^2
-    d  =  b^2 - 4 * a * c
+function intersection_le(L, E)
+	local a, b, c, d, t1, t2, z1, z2, A, B, Bx, By, Ax, Ay, Rx, Ry, sd
+	A = (L.pa - E.center) * (point(math.cos(E.slope), -math.sin(E.slope)))
+	B = (L.pb - E.center) * (point(math.cos(E.slope), -math.sin(E.slope)))
+	Rx = E.Rx
+	Ry = E.Ry
+	Ax = A.re
+	Ay = A.im
+	Bx = B.re
+	By = B.im
+	a = Rx ^ 2 * (By - Ay) ^ 2 + Ry ^ 2 * (Bx - Ax) ^ 2
+	b = 2 * Rx ^ 2 * Ay * (By - Ay) + 2 * Ry ^ 2 * Ax * (Bx - Ax)
+	c = Rx ^ 2 * Ay ^ 2 + Ry ^ 2 * Ax ^ 2 - Rx ^ 2 * Ry ^ 2
+	d = b ^ 2 - 4 * a * c
 
-   if d > 0 then
-      sd = math.sqrt(d)
-      t1 = (-(b)+sd)/(2*a)
-      t2 = (-(b)-sd)/(2*a)
-      z1 = point ( Ax + (Bx-Ax)*t1 ,  Ay + (By-Ay)*t1 )
-      z2 = point ( Ax + (Bx-Ax)*t2 ,  Ay + (By-Ay)*t2 )
-      if angle_normalize (point.arg(z1)) < angle_normalize (point.arg(z2))
-      then
-      return z1*(point(math.cos(E.slope),math.sin(E.slope))) + E.center,
-             z2*(point(math.cos(E.slope),math.sin(E.slope))) + E.center
-          else
-             return z2*(point(math.cos(E.slope),math.sin(E.slope))) + E.center,
-                    z1*(point(math.cos(E.slope),math.sin(E.slope))) + E.center
-            end -- if 
-       elseif  math.abs(d) < tkz_epsilon 
-       then
-           t1 = (-(b))/(2*a)
-           z1 = point ( Ax + (Bx-Ax)*t1 ,  Ay + (By-Ay)*t1 )           
-          return z1*(point(math.cos(E.slope),math.sin(E.slope))) + E.center,
-                 z1*(point(math.cos(E.slope),math.sin(E.slope))) + E.center
-       else
-         return false,false
-      end
+	if d > 0 then
+		sd = math.sqrt(d)
+		t1 = (-b + sd) / (2 * a)
+		t2 = (-b - sd) / (2 * a)
+		z1 = point(Ax + (Bx - Ax) * t1, Ay + (By - Ay) * t1)
+		z2 = point(Ax + (Bx - Ax) * t2, Ay + (By - Ay) * t2)
+		if angle_normalize(point.arg(z1)) < angle_normalize(point.arg(z2)) then
+			return z1 * (point(math.cos(E.slope), math.sin(E.slope))) + E.center,
+				z2 * (point(math.cos(E.slope), math.sin(E.slope))) + E.center
+		else
+			return z2 * (point(math.cos(E.slope), math.sin(E.slope))) + E.center,
+				z1 * (point(math.cos(E.slope), math.sin(E.slope))) + E.center
+		end -- if
+	elseif math.abs(d) < tkz_epsilon then
+		t1 = -b / (2 * a)
+		z1 = point(Ax + (Bx - Ax) * t1, Ay + (By - Ay) * t1)
+		return z1 * (point(math.cos(E.slope), math.sin(E.slope))) + E.center,
+			z1 * (point(math.cos(E.slope), math.sin(E.slope))) + E.center
+	else
+		return false, false
+	end
 end
- 
+
 function intersection_ll_(a, b, c, d)
-    local x1, y1, x2, y2, x3, y3, x4, y4
-    local DN, NX, NY
+	local x1, y1, x2, y2, x3, y3, x4, y4
+	local DN, NX, NY
 
-    x1, y1 = a.re, a.im
-    x2, y2 = b.re, b.im
-    x3, y3 = c.re, c.im
-    x4, y4 = d.re, d.im
+	x1, y1 = a.re, a.im
+	x2, y2 = b.re, b.im
+	x3, y3 = c.re, c.im
+	x4, y4 = d.re, d.im
 
-    DN = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4)
+	DN = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4)
 
-    if math.abs(DN) < tkz_epsilon then
-        return false
-    end
+	if math.abs(DN) < tkz_epsilon then
+		return false
+	end
 
-    NX = (x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4)
-    NY = (x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4)
+	NX = (x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4)
+	NY = (x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4)
 
-    return point(NX / DN, NY / DN)
+	return point(NX / DN, NY / DN)
 end
 
 function intersection_lc_(pa, pb, c, p)
-    local zh, dh, arg_ab, phi, c1, c2, r, test
+	local zh, dh, arg_ab, phi, c1, c2, r, test
 
-    r = point.mod(c - p)
-    zh = projection_(pa, pb, c)
-    dh = point.abs(c - zh)
-    arg_ab = point.arg(pa - pb)
+	r = point.mod(c - p)
+	zh = projection_(pa, pb, c)
+	dh = point.abs(c - zh)
+	arg_ab = point.arg(pa - pb)
 
-    if dh < tkz_epsilon then
-        -- Le centre du cercle est sur la droite
-        return c + polar_(r, math.pi + arg_ab), c + polar_(r, arg_ab)
-    elseif math.abs(r - dh) < tkz_epsilon then
-        -- La droite est tangente au cercle
-        return zh, zh
-    elseif dh > r then
-        -- Aucune intersection
-        return false, false
-    else
-        -- Il y a une intersection, calcul de l'angle
-        phi = math.asin(dh / r)
-        test = (pa - pb) * point.conj(c - zh)
-        if test.im < 0 then
-            phi = math.pi + phi
-        end
+	if dh < tkz_epsilon then
+		-- Le centre du cercle est sur la droite
+		return c + polar_(r, math.pi + arg_ab), c + polar_(r, arg_ab)
+	elseif math.abs(r - dh) < tkz_epsilon then
+		-- La droite est tangente au cercle
+		return zh, zh
+	elseif dh > r then
+		-- Aucune intersection
+		return false, false
+	else
+		-- Il y a une intersection, calcul de l'angle
+		phi = math.asin(dh / r)
+		test = (pa - pb) * point.conj(c - zh)
+		if test.im < 0 then
+			phi = math.pi + phi
+		end
 
-        c1 = angle_normalize(arg_ab + phi)
-        c2 = angle_normalize(math.pi + arg_ab - phi)
+		c1 = angle_normalize(arg_ab + phi)
+		c2 = angle_normalize(math.pi + arg_ab - phi)
 
-        -- Retourner les deux points d'intersection
-        if c2 < c1 then
-            return c + polar_(r, c2), c + polar_(r, c1)
-        else
-            return c + polar_(r, c1), c + polar_(r, c2)
-        end
-    end
+		-- Retourner les deux points d'intersection
+		if c2 < c1 then
+			return c + polar_(r, c2), c + polar_(r, c1)
+		else
+			return c + polar_(r, c1), c + polar_(r, c2)
+		end
+	end
 end
 
 function intersection_cc_(ca, pa, cb, pb)
-    local d, cosphi, phi, ra, rb, c1, c2, epsilon
+	local d, cosphi, phi, ra, rb, c1, c2, epsilon
 
-    -- Précision pour arrondir les résultats
-    epsilon = 12
-    -- Distance entre les centres des cercles
-    d = point.abs(ca - cb)
-    -- Rayons des cercles
-    ra = point.abs(ca - pa)
-    rb = point.abs(cb - pb)
+	-- Précision pour arrondir les résultats
+	epsilon = 12
+	-- Distance entre les centres des cercles
+	d = point.abs(ca - cb)
+	-- Rayons des cercles
+	ra = point.abs(ca - pa)
+	rb = point.abs(cb - pb)
 
-    -- Calcul du cosinus de l'angle phi entre les centres et les points sur les cercles
-    cosphi = tkzround((ra * ra + d * d - rb * rb) / (2 * ra * d), epsilon)
-    
-    -- Calcul de l'angle phi
-    phi = tkzround(math.acos(cosphi), epsilon)
+	-- Calcul du cosinus de l'angle phi entre les centres et les points sur les cercles
+	cosphi = tkzround((ra * ra + d * d - rb * rb) / (2 * ra * d), epsilon)
 
-    -- Si phi est invalide (par exemple, cosphi > 1 ou < -1), aucune intersection
-    if not phi then
-        return false, false
-    elseif phi == 0 then
-        -- Les cercles sont tangents l'un à l'autre, retourne le même point pour les deux intersections
-        return ca + polar_(ra, point.arg(cb - ca)), ca + polar_(ra, point.arg(cb - ca))
-    else
-        -- Calcul des angles des points d'intersection
-        c1 = angle_normalize(phi + point.arg(cb - ca))
-        c2 = angle_normalize(-phi + point.arg(cb - ca))
+	-- Calcul de l'angle phi
+	phi = tkzround(math.acos(cosphi), epsilon)
 
-        -- Retourner les points d'intersection dans l'ordre croissant des angles
-        if c1 < c2 then
-            return ca + polar_(ra, c1), ca + polar_(ra, c2)
-        else
-            return ca + polar_(ra, c2), ca + polar_(ra, c1)
-        end
-    end
+	-- Si phi est invalide (par exemple, cosphi > 1 ou < -1), aucune intersection
+	if not phi then
+		return false, false
+	elseif phi == 0 then
+		-- Les cercles sont tangents l'un à l'autre, retourne le même point pour les deux intersections
+		return ca + polar_(ra, point.arg(cb - ca)), ca + polar_(ra, point.arg(cb - ca))
+	else
+		-- Calcul des angles des points d'intersection
+		c1 = angle_normalize(phi + point.arg(cb - ca))
+		c2 = angle_normalize(-phi + point.arg(cb - ca))
+
+		-- Retourner les points d'intersection dans l'ordre croissant des angles
+		if c1 < c2 then
+			return ca + polar_(ra, c1), ca + polar_(ra, c2)
+		else
+			return ca + polar_(ra, c2), ca + polar_(ra, c1)
+		end
+	end
 end
 
 function intersection(X, Y)
-   local t = {}  -- Table for storing intersection points
+	local t = {} -- Table for storing intersection points
 
-   -- When X is a circle
-   if X.type == 'circle' then
-      if Y.type == 'circle' then
-         -- Intersection entre deux cercles
-         local z1, z2 = intersection_cc(X, Y)
-         table.insert(t, z1)
-         table.insert(t, z2)
-      else -- Y est une droite
-         local z1, z2 = intersection_lc(Y, X)  -- Intersection entre un cercle et une droite
-         table.insert(t, z1)
-         table.insert(t, z2)
-      end
+	-- When X is a circle
+	if X.type == "circle" then
+		if Y.type == "circle" then
+			-- Intersection entre deux cercles
+			local z1, z2 = intersection_cc(X, Y)
+			table.insert(t, z1)
+			table.insert(t, z2)
+		else -- Y est une droite
+			local z1, z2 = intersection_lc(Y, X) -- Intersection entre un cercle et une droite
+			table.insert(t, z1)
+			table.insert(t, z2)
+		end
 
-   -- When X is a line
-   elseif X.type == 'line' then
-      if Y.type == 'circle' then
-         -- Intersection entre une droite et un cercle
-         local z1, z2 = intersection_lc(X, Y)
-         table.insert(t, z1)
-         table.insert(t, z2)
-      elseif Y.type == 'line' then
-         -- Intersection entre deux droites
-         local z1 = intersection_ll(X, Y)
-         table.insert(t, z1)
-      else -- Y is a conic
-        if     Y.subtype == 'parabola' then
-          local z1, z2 =  Y : inter_Pa_line (X.pa,X.pb)
-          table.insert(t, z1)
-          table.insert(t, z2)
-        elseif Y.subtype == 'hyperbola' then
-          local z1, z2 =  Y : inter_Hy_line (X.pa,X.pb)
-          table.insert(t, z1)
-          table.insert(t, z2)
-        elseif Y.subtype == 'ellipse'  then
-         local z1, z2 = intersection_le(X, Y) 
-         table.insert(t, z1)
-         table.insert(t, z2)
-      end
-    end
+	-- When X is a line
+	elseif X.type == "line" then
+		if Y.type == "circle" then
+			-- Intersection entre une droite et un cercle
+			local z1, z2 = intersection_lc(X, Y)
+			table.insert(t, z1)
+			table.insert(t, z2)
+		elseif Y.type == "line" then
+			-- Intersection entre deux droites
+			local z1 = intersection_ll(X, Y)
+			table.insert(t, z1)
+		else -- Y is a conic
+			if Y.subtype == "parabola" then
+				local z1, z2 = Y:inter_Pa_line(X.pa, X.pb)
+				table.insert(t, z1)
+				table.insert(t, z2)
+			elseif Y.subtype == "hyperbola" then
+				local z1, z2 = Y:inter_Hy_line(X.pa, X.pb)
+				table.insert(t, z1)
+				table.insert(t, z2)
+			elseif Y.subtype == "ellipse" then
+				local z1, z2 = intersection_le(X, Y)
+				table.insert(t, z1)
+				table.insert(t, z2)
+			end
+		end
 
-   -- When X is a conic (not a circle)
-   elseif X.type == 'conic' then
-     if     X.subtype == 'parabola' then
-     local z1, z2 =  X : inter_Pa_line (Y.pa,Y.pb)
-     table.insert(t, z1)
-     table.insert(t, z2)
-     elseif X.subtype == 'hyperbola' then
-      local z1, z2 =  X : inter_Hy_line(Y.pa, Y.pb)
-      table.insert(t, z1)
-      table.insert(t, z2)
-     elseif X.subtype == 'ellipse' then
-      local z1, z2 = intersection_le(Y, X)
-      table.insert(t, z1)
-      table.insert(t, z2)
-     end
+	-- When X is a conic (not a circle)
+	elseif X.type == "conic" then
+		if X.subtype == "parabola" then
+			local z1, z2 = X:inter_Pa_line(Y.pa, Y.pb)
+			table.insert(t, z1)
+			table.insert(t, z2)
+		elseif X.subtype == "hyperbola" then
+			local z1, z2 = X:inter_Hy_line(Y.pa, Y.pb)
+			table.insert(t, z1)
+			table.insert(t, z2)
+		elseif X.subtype == "ellipse" then
+			local z1, z2 = intersection_le(Y, X)
+			table.insert(t, z1)
+			table.insert(t, z2)
+		end
+	end
 
-   end
-
-   return table.unpack(t)
+	return table.unpack(t)
 end

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_lines.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_lines.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_lines.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,12 +1,12 @@
 -- tkz_elements_functions_lines.lua
--- date 2025/02/26
--- version 3.32
+-- date 2025/03/04
+-- version 3.34c
 -- Copyright 2025  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
+-- 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”.
@@ -16,158 +16,153 @@
 --                 Lines
 ---------------------------------------------------------------------------
 function normalize_(a, b)
-    return a + (b - a) / point.mod(b - a)
+	return a + (b - a) / point.mod(b - a)
 end
 
-
 function ortho_from_(p, a, b)
-    return p + (b - a) * point(0, 1)
+	return p + (b - a) * point(0, 1)
 end
 
-function ll_from_ ( p , a , b )
-	return  p + b - a
+function ll_from_(p, a, b)
+	return p + b - a
 end
 
-function slope_ (a,b)
-  return angle_normalize_ (point.arg(b-a))
+function slope_(a, b)
+	return angle_normalize_(point.arg(b - a))
 end
 
-function gold_segment_ (a,b)
-  return a + (b - a) * tkzinvphi
+function gold_segment_(a, b)
+	return a + (b - a) * tkzinvphi
 end
 
-function online_ (a,b,t)
-   return barycenter_({a,(1-t)},{b,t})
- end
- 
- function mediator_ (a,b) 
-   local m = midpoint_ (a,b)
-   return m , rotation_ (m,math.pi/2,b)
- end
- 
- function midpoint_ (z1 , z2)	
-   return (z1+z2)/2
- end
+function online_(a, b, t)
+	return barycenter_({ a, (1 - t) }, { b, t })
+end
+
+function mediator_(a, b)
+	local m = midpoint_(a, b)
+	return m, rotation_(m, math.pi / 2, b)
+end
+
+function midpoint_(z1, z2)
+	return (z1 + z2) / 2
+end
 -- triangle specific
-function equilateral_tr_ (a,b)
-   return rotation_ (a,math.pi/3,b)
+function equilateral_tr_(a, b)
+	return rotation_(a, math.pi / 3, b)
 end
 
 function isosceles_right_tr(a, b)
-    local pt = rotation_(a, math.pi / 4, b)
-    return a + (pt - a) * math.sin(math.pi / 4)
+	local pt = rotation_(a, math.pi / 4, b)
+	return a + (pt - a) * math.sin(math.pi / 4)
 end
 
-
 function gold_tr(a, b)
-    local pt = rotation_(a, math.pi / 2, b)
-    return a + (pt - a) * tkzinvphi
+	local pt = rotation_(a, math.pi / 2, b)
+	return a + (pt - a) * tkzinvphi
 end
 
-
-function euclide_tr (a,b)
-     return rotation_ (a,math.pi/5,b)
+function euclide_tr(a, b)
+	return rotation_(a, math.pi / 5, b)
 end
 
-function golden_tr (a,b)
-   local  pt = rotation_ (a,2*math.pi/5,b)
-   return a + (pt-a) * tkzphi
+function golden_tr(a, b)
+	local pt = rotation_(a, 2 * math.pi / 5, b)
+	return a + (pt - a) * tkzphi
 end
 
-function div_harmonic_int_(a,b,n)
-  local k = point.abs(a-n)/point.abs(b-n)
-  return barycenter_ ( {a,1} , {b,k} )
+function div_harmonic_int_(a, b, n)
+	local k = point.abs(a - n) / point.abs(b - n)
+	return barycenter_({ a, 1 }, { b, k })
 end
 
-function div_harmonic_ext_(a,b,n)
-  local k = point.abs(a-n)/point.abs(b-n)
-  return barycenter_ ( {a,1} , {b,-k} )
+function div_harmonic_ext_(a, b, n)
+	local k = point.abs(a - n) / point.abs(b - n)
+	return barycenter_({ a, 1 }, { b, -k })
 end
 
-function div_harmonic_both_(a,b,k)
-  return barycenter_ ( {a,1} , {b,k} ) , barycenter_ ( {a,1} , {b,-k} )
+function div_harmonic_both_(a, b, k)
+	return barycenter_({ a, 1 }, { b, k }), barycenter_({ a, 1 }, { b, -k })
 end
 
-function golden_ratio_(a,b)
-   local invphi = ( math.sqrt(5) - 1 )/2
-   return   a  + (b-a) * invphi
+function golden_ratio_(a, b)
+	local invphi = (math.sqrt(5) - 1) / 2
+	return a + (b - a) * invphi
 end
 -- projection
-function projection ( Dt,pt )
-  return projection_ ( Dt.pa,Dt.pb,pt )
+function projection(Dt, pt)
+	return projection_(Dt.pa, Dt.pb, pt)
 end
 
 function projection_(pa, pb, pt)
-    if aligned(pa, pb, pt) then
-        return pt
-    else
-        local v = pb - pa
-        local z = ((pt - pa) .. v) / point.norm(v)  -- .. dot product
-        return pa + z * v
-    end
+	if aligned(pa, pb, pt) then
+		return pt
+	else
+		local v = pb - pa
+		local z = ((pt - pa) .. v) / point.norm(v) -- .. dot product
+		return pa + z * v
+	end
 end
 
-function projection_ll ( Dt1,Dt2,pt )
-  return projection_ll_ ( Dt1.pa,Dt1.pb,Dt2.pa,Dt2.pb,pt )
+function projection_ll(Dt1, Dt2, pt)
+	return projection_ll_(Dt1.pa, Dt1.pb, Dt2.pa, Dt2.pb, pt)
 end
 
 function projection_ll_(pa, pb, pc, pd, pt)
-    if aligned(pa, pb, pt) then
-        return pt
-    else
-    local m = ll_from_ (pt, pc, pd)
-    return intersection_ll_(pt,m,pa,pb)
-    end
+	if aligned(pa, pb, pt) then
+		return pt
+	else
+		local m = ll_from_(pt, pc, pd)
+		return intersection_ll_(pt, m, pa, pb)
+	end
 end
 
 function affinity_(pa, pb, pc, pd, k, pt)
-  local p = projection_ll_(pa, pb, pc, pd, pt)
-   return homothety_(p,k,pt)
+	local p = projection_ll_(pa, pb, pc, pd, pt)
+	return homothety_(p, k, pt)
 end
 
-
-function symmetry_axial_(pa,pb,pt)
-    local p = projection_ (pa,pb,pt)
-    return symmetry_(p,pt)
+function symmetry_axial_(pa, pb, pt)
+	local p = projection_(pa, pb, pt)
+	return symmetry_(p, pt)
 end
 
 function set_symmetry_axial_(u, v, ...)
-    local t = {}
-    for _, value in ipairs({...}) do
-        table.insert(t, symmetry_axial_(u, v, value))
-    end
-    return table.unpack(t)
+	local t = {}
+	for _, value in ipairs({ ... }) do
+		table.insert(t, symmetry_axial_(u, v, value))
+	end
+	return table.unpack(t)
 end
 
-
-function square_ (a,b)
-    return rotation_ (b,-math.pi/2,a), rotation_ (a,math.pi/2,b)
+function square_(a, b)
+	return rotation_(b, -math.pi / 2, a), rotation_(a, math.pi / 2, b)
 end
 
 function in_segment_(a, b, pt)
-    return point.mod(pt - a) + point.mod(pt - b) - point.mod(b - a) <= tkz_epsilon
+	return point.mod(pt - a) + point.mod(pt - b) - point.mod(b - a) <= tkz_epsilon
 end
 
 function report_(za, zb, d, pt)
-    local len = point.mod(zb - za)
-    local t = d / len
-    local result = barycenter_({za, 1 - t}, {zb, t})
-    
-    if pt then
-        return result + pt - za
-    else
-        return result
-    end
+	local len = point.mod(zb - za)
+	local t = d / len
+	local result = barycenter_({ za, 1 - t }, { zb, t })
+
+	if pt then
+		return result + pt - za
+	else
+		return result
+	end
 end
 
 function colinear_at_(za, zb, pt, k)
-    if k then
-        return pt + k * (zb - za)
-    else
-        return pt + (zb - za)
-    end
+	if k then
+		return pt + k * (zb - za)
+	else
+		return pt + (zb - za)
+	end
 end
--- orthonormal cartesian coordinate system 
+-- orthonormal cartesian coordinate system
 -- function occs_(p,za,zb)
 --   local x = report_(za,zb,1,p)
 --   local y = ortho_from_(p,p,x)

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_maths.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_maths.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_maths.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,12 +1,12 @@
 -- tkz_elements_functions_maths.lua
--- date 2025/02/26
--- version 3.32
+-- date 2025/03/04
+-- version 3.34c
 -- Copyright 2025  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
+-- 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”.
@@ -13,121 +13,112 @@
 -- The Current Maintainer of this work is Alain Matthes.
 
 -- constant
-tkzphi      = (1+math.sqrt(5))/2
-tkzinvphi   = (math.sqrt(5)-1)/2
-tkzsqrtphi  =  math.sqrt(tkzphi)
+tkzphi = (1 + math.sqrt(5)) / 2
+tkzinvphi = (math.sqrt(5) - 1) / 2
+tkzsqrtphi = math.sqrt(tkzphi)
 ---------------------------------------------------------------------------
 function round(num, idp)
-  return topoint(string.format("%." .. (idp or 0) .. "f", num))
+	return topoint(string.format("%." .. (idp or 0) .. "f", num))
 end
 
-function tkzround( num, idp )
-	local mult = 10 ^ ( idp or 0 )
-	return math.floor( num * mult + 0.5 ) / mult
-end  
+function tkzround(num, idp)
+	local mult = 10 ^ (idp or 0)
+	return math.floor(num * mult + 0.5) / mult
+end
 
-function dot_product (a,b,c)
-   return (b-a)..(c-a)
+function dot_product(a, b, c)
+	return (b - a) .. (c - a)
 end
 
-function Cramer33(a1,a2,a3,b1,b2,b3,c1,c2,c3)
-  return a1*b2*c3+a3*b1*c2+a2*b3*c1-a3*b2*c1-a1*b3*c2-a2*b1*c3
+function Cramer33(a1, a2, a3, b1, b2, b3, c1, c2, c3)
+	return a1 * b2 * c3 + a3 * b1 * c2 + a2 * b3 * c1 - a3 * b2 * c1 - a1 * b3 * c2 - a2 * b1 * c3
 end
 
-function Cramer22(a1,a2,b1,b2)
-  return a1*b2-a2*b1
+function Cramer22(a1, a2, b1, b2)
+	return a1 * b2 - a2 * b1
 end
 
 function aligned(m, a, b)
-    local z
-    z = (b - a) / (m - b)
-    if math.abs(z.im) < tkz_epsilon then
-        return true
-    else
-        return false
-    end
+	local z
+	z = (b - a) / (m - b)
+	if math.abs(z.im) < tkz_epsilon then
+		return true
+	else
+		return false
+	end
 end
 
 function islinear(z1, z2, z3)
-    local dp
-    dp = (z2 - z1) ^ (z3 - z1)
-    if math.abs(dp) < tkz_epsilon then
-        return true
-    else
-        return false
-    end
+	local dp
+	dp = (z2 - z1) ^ (z3 - z1)
+	if math.abs(dp) < tkz_epsilon then
+		return true
+	else
+		return false
+	end
 end
 is_linear = islinear
 
-function isortho (z1,z2,z3) --modif
-   local dp = (z2-z1) .. (z3-z1)
-   if math.abs(dp) < tkz_epsilon 
-    then 
-        return true
-    else 
-        return false
-    end
+function isortho(z1, z2, z3) --modif
+	local dp = (z2 - z1) .. (z3 - z1)
+	if math.abs(dp) < tkz_epsilon then
+		return true
+	else
+		return false
+	end
 end
 
 is_ortho = isortho
 
-function parabola (a,b,c) --bug local
-   local xa,xb,xc,ya,yb,yc
-   xa = a.re
-   ya = a.im
-   xb = b.re
-   yb = b.im
-   xc = c.re
-   yc = c.im
-   local D = (xa-xb)*(xa-xc)*(xb-xc)
-   local A = (xc*(yb-ya) + xb*(ya-yc)+xa*(yc-yb))/D
-   local B = (xc*xc*(ya-yb)+xb*xb*(yc-ya)+xa*xa*(yb-yc))/D
-   local C = (xb*xc*(xb-xc)*ya + xc*xa*(xc-xa)*yb +xa*xb*(xa-xb)*yc)/D
-   return A,B,C
+function parabola(a, b, c) --bug local
+	local xa, xb, xc, ya, yb, yc
+	xa = a.re
+	ya = a.im
+	xb = b.re
+	yb = b.im
+	xc = c.re
+	yc = c.im
+	local D = (xa - xb) * (xa - xc) * (xb - xc)
+	local A = (xc * (yb - ya) + xb * (ya - yc) + xa * (yc - yb)) / D
+	local B = (xc * xc * (ya - yb) + xb * xb * (yc - ya) + xa * xa * (yb - yc)) / D
+	local C = (xb * xc * (xb - xc) * ya + xc * xa * (xc - xa) * yb + xa * xb * (xa - xb) * yc) / D
+	return A, B, C
 end
 
-function parabola_ (xa,ya,xb,yb,xc,yc) -- added
-   local D = (xa-xb)*(xa-xc)*(xb-xc)
-   local A = (xc*(yb-ya) + xb*(ya-yc)+xa*(yc-yb))/D
-   local B = (xc*xc*(ya-yb)+xb*xb*(yc-ya)+xa*xa*(yb-yc))/D
-   local C = (xb*xc*(xb-xc)*ya + xc*xa*(xc-xa)*yb +xa*xb*(xa-xb)*yc)/D
-   return A,B,C
+function parabola_(xa, ya, xb, yb, xc, yc) -- added
+	local D = (xa - xb) * (xa - xc) * (xb - xc)
+	local A = (xc * (yb - ya) + xb * (ya - yc) + xa * (yc - yb)) / D
+	local B = (xc * xc * (ya - yb) + xb * xb * (yc - ya) + xa * xa * (yb - yc)) / D
+	local C = (xb * xc * (xb - xc) * ya + xc * xa * (xc - xa) * yb + xa * xb * (xa - xb) * yc) / D
+	return A, B, C
 end
 
-function value (v)
-   return scale * v
+function get_angle(a, b, c)
+	return angle_normalize_(get_angle_(a, b, c))
 end
 
-function real (v)
-   return v/scale
+function get_angle_(a, b, c)
+	return point.arg((c - a) / (b - a))
 end
 
-function get_angle (a,b,c)
-  return angle_normalize_(get_angle_( a,b,c ))
-end 
-   
-function get_angle_( a,b,c )
-	 return point.arg ((c-a)/(b-a))
+function angle_normalize(a)
+	return angle_normalize_(a)
 end
 
-function angle_normalize (a)
-return angle_normalize_ (a)
+function angle_normalize_(a)
+	while a < 0 do
+		a = a + 2 * math.pi
+	end
+	while a >= 2 * math.pi do
+		a = a - 2 * math.pi
+	end
+	return a
 end
 
-function angle_normalize_ (a)
-    while a < 0 do
-        a = a + 2*math.pi
-    end
-    while a >= 2*math.pi do
-        a = a - 2*math.pi
-    end
-    return a
+function barycenter(...)
+	return barycenter_(...)
 end
 
-function barycenter (...)
-   return barycenter_ (...)
-end
-
 -- function swap(a,b)
 --    local t=a
 --    a=b
@@ -136,104 +127,108 @@
 -- end
 -- real func
 function is_integer(x)
-    return x == math.round(x)
+	return x == math.round(x)
 end
 
 function near_integer(x)
-  local i,r  = math.modf  (x)
-  if is_zero (r) then 
-   return  true
- end
-    return false
+	local i, r = math.modf(x)
+	if is_zero(r) then
+		return true
+	end
+	return false
 end
 
-function residue (x)
-  dp,ip =  math.modf (x)
-  return ip
+function residue(x)
+	dp, ip = math.modf(x)
+	return ip
 end
 
-function is_zero (x)
- return math.abs(x) < tkz_epsilon 
-end 
+function is_zero(x)
+	return math.abs(x) < tkz_epsilon
+end
 
-function set_zero (x)
-  if is_zero (x) then x=0 end
-  return x
+function set_zero(x)
+	if is_zero(x) then
+		x = 0
+	end
+	return x
 end
 
 function math.round(num)
-  return math.floor(num + 0.5)
+	return math.floor(num + 0.5)
 end
 
 function checknumber(x)
-   if type(x) == 'table' then 
-      return x 
-   else
-     if string.find(x, "e") then
-        return string.format("%.12f",x)
-      else
-          return x
-      end
-   end
+	if type(x) == "table" then
+		return x
+	else
+		if string.find(x, "e") then
+			return string.format("%.12f", x)
+		else
+			return x
+		end
+	end
 end
 
-function decimal (x)
-   if string.find(x, "e") then
-      return string.format("%.12f",x)
-   else
-      return x
-   end
+function decimal(x)
+	if string.find(x, "e") then
+		return string.format("%.12f", x)
+	else
+		return x
+	end
 end
 
 function format_number(number, dcpl)
-  if type(number) == 'table' then return number 
-  else
-    local format_string = string.format("%%.%df", dcpl)
-    return string.format(format_string, number)
-  end
+	if type(number) == "table" then
+		return number
+	else
+		local format_string = string.format("%%.%df", dcpl)
+		return string.format(format_string, number)
+	end
 end
 
 function get_sign(number)
-  local sgn
-     if math.abs(number) < tkz_epsilon then
-         sgn = ""
-     elseif number > 0 then
-         sgn = "+"
-     else
-        sgn = "-"
-     end
-     return sgn
+	local sgn
+	if math.abs(number) < tkz_epsilon then
+		sgn = ""
+	elseif number > 0 then
+		sgn = "+"
+	else
+		sgn = "-"
+	end
+	return sgn
 end
 
 function solve_quadratic(a, b, c)
-  local root1, root2, delta , sqrtdelta
-  if (type(a) == "number") and (type(b) == "number") and  (type(c) == "number") 
-  then
-     delta = b*b - 4*a*c
-     if math.abs(delta)<tkz_epsilon then delta=0 end
-    if delta < 0 then
-       root1, root2 =  false,false --solve_cx_quadratic(a, b, c)
-      elseif delta == 0 then
-         root1 = -b / (2*a)
-         root2 = -b / (2*a)
-       else
-          sqrtdelta = math.sqrt(delta)
-           
-         root1 = (-b + sqrtdelta) / (2*a)
-         root2 = (-b - sqrtdelta) / (2*a)     
-       end
-  else 
-    root1, root2 = solve_cx_quadratic(a, b, c)
-  end
-   return root1, root2 -- Two real roots
+	local root1, root2, delta, sqrtdelta
+	if (type(a) == "number") and (type(b) == "number") and (type(c) == "number") then
+		delta = b * b - 4 * a * c
+		if math.abs(delta) < tkz_epsilon then
+			delta = 0
+		end
+		if delta < 0 then
+			root1, root2 = false, false --solve_cx_quadratic(a, b, c)
+		elseif delta == 0 then
+			root1 = -b / (2 * a)
+			root2 = -b / (2 * a)
+		else
+			sqrtdelta = math.sqrt(delta)
+
+			root1 = (-b + sqrtdelta) / (2 * a)
+			root2 = (-b - sqrtdelta) / (2 * a)
+		end
+	else
+		root1, root2 = solve_cx_quadratic(a, b, c)
+	end
+	return root1, root2 -- Two real roots
 end
 
 function solve_cx_quadratic(a, b, c)
-    local d     = b*b - 4*a*c
-    local dcx   = point.sqrt(d)  
-    local root1 = (- b + dcx) / (2*a)
-    local root2 = (- b - dcx) / (2*a)  
-    return root1, root2
+	local d = b * b - 4 * a * c
+	local dcx = point.sqrt(d)
+	local root1 = (-b + dcx) / (2 * a)
+	local root2 = (-b - dcx) / (2 * a)
+	return root1, root2
 end
 
 -- function solve_cubic(a, b, c, d)
@@ -269,62 +264,64 @@
 --        end
 -- end
 
-function display_real (r)
-  local format_string,format_string
-  if r == nil then  return ""
-    else
-      if near_integer ( r ) 
-         then 
-           r = math.round ( r )
-           format_string = string.format("%%.%df", 0)
-         else
-           format_string = string.format("%%.%df", tkz_dc)
-      end
-   local st = string.format(format_string , r)
-   return st
- end
+function display_real(r)
+	local format_string, format_string
+	if r == nil then
+		return ""
+	else
+		if near_integer(r) then
+			r = math.round(r)
+			format_string = string.format("%%.%df", 0)
+		else
+			format_string = string.format("%%.%df", tkz_dc)
+		end
+		local st = string.format(format_string, r)
+		return st
+	end
 end
 
-
-function display_imag (r)
-  local sgn
-  sgn = get_sign (r)
-  r = math.abs(r)
-  if math.abs(r-1) < tkz_epsilon then
-     r = nil
-   elseif near_integer ( r ) then
-     r = math.abs(math.round(r))
-  end
-  st = display_real (r)
-  return sgn,st
+function display_imag(r)
+	local sgn
+	sgn = get_sign(r)
+	r = math.abs(r)
+	if math.abs(r - 1) < tkz_epsilon then
+		r = nil
+	elseif near_integer(r) then
+		r = math.abs(math.round(r))
+	end
+	st = display_real(r)
+	return sgn, st
 end
 
-function display (z)
-  if (type(z) == "number") then return display_real (z)     else
-      local real, imag
-      real = z.re
-      imag = z.im
- if is_zero ( imag ) then
-  return display_real (real)
- else
-   str = display_real (real)
-   sgni,sti = display_imag (imag)
-   if str == "0"  then 
-     str=""
-      sgni = "" end
- local  st = str ..sgni..sti.."i"
-  return st
- end
+function display(z)
+	if type(z) == "number" then
+		return display_real(z)
+	else
+		local real, imag
+		real = z.re
+		imag = z.im
+		if is_zero(imag) then
+			return display_real(real)
+		else
+			str = display_real(real)
+			sgni, sti = display_imag(imag)
+			if str == "0" then
+				str = ""
+				sgni = ""
+			end
+			local st = str .. sgni .. sti .. "i"
+			return st
+		end
+	end
 end
-end
 
-function get_v (L,p) --bug
-  return report_(L.pa,L.pb,1,p)
+function get_v(L, p) --bug
+	return report_(L.pa, L.pb, 1, p)
 end
 
 -- straight line from a through b
-function param_line (xa,ya,xb,yb)
-  return (yb-ya) / (xb-xa), (xb*ya-xa*yb)/(xb-xa)
+function param_line(xa, ya, xb, yb)
+	return (yb - ya) / (xb - xa), (xb * ya - xa * yb) / (xb - xa)
 end
 
 -- intersection line / parabola  good OCCS !! p paramètre de la parabole
@@ -331,89 +328,88 @@
 --  y= x^{2} /2p  with occs S,i,j j same direction KF
 -- m and n parameters of the line
 
-function solve_para_line (p,m,n)
- return solve_quadratic(1,-2*p*m,-2*p*n) 
+function solve_para_line(p, m, n)
+	return solve_quadratic(1, -2 * p * m, -2 * p * n)
 end
 
-function solve_hyper_line (a,b,m,p)
-  local A = a^2/b^2-m^2
-  local B = -2*m*p
-  local C = a^2-p^2
-  return solve_quadratic(A,B,C) 
+function solve_hyper_line(a, b, m, p)
+	local A = a ^ 2 / b ^ 2 - m ^ 2
+	local B = -2 * m * p
+	local C = a ^ 2 - p ^ 2
+	return solve_quadratic(A, B, C)
 end
 
-
-
 -- Fonction pour échanger deux lignes dans une matrice
 function swap_rows(matrix, i, j)
-    matrix[i], matrix[j] = matrix[j], matrix[i]
+	matrix[i], matrix[j] = matrix[j], matrix[i]
 end
 
 -- Fonction pour résoudre un système linéaire par élimination de Gauss
 function gaussian_elimination(A, b)
-    local n = #b
-    local augmented = {}
+	local n = #b
+	local augmented = {}
 
-    -- Créer la matrice augmentée
-    for i = 1, n do
-        augmented[i] = {}
-        for j = 1, n do
-            augmented[i][j] = A[i][j]
-        end
-        augmented[i][n + 1] = b[i]
-    end
+	-- Créer la matrice augmentée
+	for i = 1, n do
+		augmented[i] = {}
+		for j = 1, n do
+			augmented[i][j] = A[i][j]
+		end
+		augmented[i][n + 1] = b[i]
+	end
 
-    -- Élimination de Gauss
-    for i = 1, n do
-        -- Recherche du pivot
-        local max_row = i
-        for k = i + 1, n do
-            if math.abs(augmented[k][i]) > math.abs(augmented[max_row][i]) then
-                max_row = k
-            end
-        end
+	-- Élimination de Gauss
+	for i = 1, n do
+		-- Recherche du pivot
+		local max_row = i
+		for k = i + 1, n do
+			if math.abs(augmented[k][i]) > math.abs(augmented[max_row][i]) then
+				max_row = k
+			end
+		end
 
-        -- Échanger les lignes pour avoir le pivot sur la diagonale
-        swap_rows(augmented, i, max_row)
+		-- Échanger les lignes pour avoir le pivot sur la diagonale
+		swap_rows(augmented, i, max_row)
 
-        -- Normaliser la ligne du pivot
-        local pivot = augmented[i][i]
-        if pivot == 0 then
-            error("Matrice singulière ou système dépendant")
-        end
-        for j = i, n + 1 do
-            augmented[i][j] = augmented[i][j] / pivot
-        end
+		-- Normaliser la ligne du pivot
+		local pivot = augmented[i][i]
+		if pivot == 0 then
+			error("Matrice singulière ou système dépendant")
+		end
+		for j = i, n + 1 do
+			augmented[i][j] = augmented[i][j] / pivot
+		end
 
-        -- Élimination des autres lignes
-        for k = 1, n do
-            if k ~= i then
-                local factor = augmented[k][i]
-                for j = i, n + 1 do
-                    augmented[k][j] = augmented[k][j] - factor * augmented[i][j]
-                end
-            end
-        end
-    end
+		-- Élimination des autres lignes
+		for k = 1, n do
+			if k ~= i then
+				local factor = augmented[k][i]
+				for j = i, n + 1 do
+					augmented[k][j] = augmented[k][j] - factor * augmented[i][j]
+				end
+			end
+		end
+	end
 
-    -- Extraire les solutions
-    local x = {}
-    for i = 1, n do
-        x[i] = augmented[i][n + 1]
-        if math.abs(x[i]) < tkz_epsilon then x[i] = 0 end 
-    end
+	-- Extraire les solutions
+	local x = {}
+	for i = 1, n do
+		x[i] = augmented[i][n + 1]
+		if math.abs(x[i]) < tkz_epsilon then
+			x[i] = 0
+		end
+	end
 
-    return x
+	return x
 end
 
 function angle_between_vectors(a, b, c, d)
-  -- Calcul des vecteurs
-  local zab = b - a
-  local zcd = d - c
+	-- Calcul des vecteurs
+	local zab = b - a
+	local zcd = d - c
 
-  -- Angle entre les vecteurs en utilisant argument du rapport
-  local theta = math.atan2(zab.im * zcd.re - zab.re * zcd.im,
-                           zab.re * zcd.re + zab.im * zcd.im)
+	-- Angle entre les vecteurs en utilisant argument du rapport
+	local theta = math.atan2(zab.im * zcd.re - zab.re * zcd.im, zab.re * zcd.re + zab.im * zcd.im)
 
-  return theta  -- L'angle en radians
+	return theta -- L'angle en radians
 end

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_matrices.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_matrices.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_matrices.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,12 +1,12 @@
 -- tkz_elements_functions_matrices.lua
--- date 2025/02/26
--- version 3.32
+-- date 2025/03/04
+-- version 3.34c
 -- Copyright 2025  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
+-- 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”.
@@ -13,362 +13,373 @@
 -- The Current Maintainer of this work is Alain Matthes.
 
 -- ----------------------------------------------------------------------------
-function print_matrix(m,mstyle)
-  local mstyle = (mstyle or 'bmatrix')
-  local m = (m.type=='matrix' and m.set or m)
-  tex.sprint("$")
-  tex.sprint("\\begin{"..mstyle.."}")
-    for i = 1, #m do
-        for j = 1, #m[1] do 
-          local x = m[i][j]
-          local st = display(x)
-          tex.sprint(st)
-          if j < #m[1] then tex.sprint(" & ")  end
-       end
-       tex.sprint("\\\\")
-    end
-    tex.sprint("\\end{"..mstyle.."}")
-    tex.sprint("$")
+function print_matrix(m, mstyle)
+	local mstyle = (mstyle or "bmatrix")
+	local m = (m.type == "matrix" and m.set or m)
+	tex.sprint("$")
+	tex.sprint("\\begin{" .. mstyle .. "}")
+	for i = 1, #m do
+		for j = 1, #m[1] do
+			local x = m[i][j]
+			local st = display(x)
+			tex.sprint(st)
+			if j < #m[1] then
+				tex.sprint(" & ")
+			end
+		end
+		tex.sprint("\\\\")
+	end
+	tex.sprint("\\end{" .. mstyle .. "}")
+	tex.sprint("$")
 end
 
 function print_array(matrix)
-local mdata = (matrix.type=='matrix' and matrix.set or matrix)
-tex.sprint("\\{%")
-  for i = 1, #mdata do
-    local row = mdata[i]
-    local row_str = "{\\{"
-    for j = 1, #row do
-        row_str = row_str .. " " .. tostring(row[j])
-        if j < #row then
-            row_str = row_str .. "  ,"
-        end
-    end
-    if (i~=#mdata) and (j~=#row) then
-   if i>1 then row_str = row_str .. " \\}}," else row_str = row_str .. " \\}}," end
-    tex.sprint(row_str) 
-else
-  if i>1 then row_str = row_str .. " \\}}" else row_str = row_str .. " \\}}" end
-   tex.sprint(row_str) 
-    end
+	local mdata = (matrix.type == "matrix" and matrix.set or matrix)
+	tex.sprint("\\{%")
+	for i = 1, #mdata do
+		local row = mdata[i]
+		local row_str = "{\\{"
+		for j = 1, #row do
+			row_str = row_str .. " " .. tostring(row[j])
+			if j < #row then
+				row_str = row_str .. "  ,"
+			end
+		end
+		if (i ~= #mdata) and (j ~= #row) then
+			if i > 1 then
+				row_str = row_str .. " \\}},"
+			else
+				row_str = row_str .. " \\}},"
+			end
+			tex.sprint(row_str)
+		else
+			if i > 1 then
+				row_str = row_str .. " \\}}"
+			else
+				row_str = row_str .. " \\}}"
+			end
+			tex.sprint(row_str)
+		end
+	end
+	tex.sprint("\\}")
 end
-tex.sprint("\\}")
-end
 
 function mul_matrix(A, B)
-local adata = (A.type=='matrix' and A.set or A)
-local bdata = (B.type=='matrix' and B.set or B)
-local C = {}
-  for i = 1, #adata do
-      C[i] = {}
-      for j = 1, #bdata[1] do
-          local num = adata[i][1] * bdata[1][j]
-          for k = 2, #adata[1] do
-              num = num + adata[i][k] * bdata[k][j]
-          end
-          C[i][j] = num
-      end
-  end
-  return  matrix : new (C)
+	local adata = (A.type == "matrix" and A.set or A)
+	local bdata = (B.type == "matrix" and B.set or B)
+	local C = {}
+	for i = 1, #adata do
+		C[i] = {}
+		for j = 1, #bdata[1] do
+			local num = adata[i][1] * bdata[1][j]
+			for k = 2, #adata[1] do
+				num = num + adata[i][k] * bdata[k][j]
+			end
+			C[i][j] = num
+		end
+	end
+	return matrix:new(C)
 end
 
-
 function add_matrix(A, B)
-local adata = (A.type=='matrix' and A.set or A)
-local bdata = (B.type=='matrix' and B.set or B)
-    local S = {}
-    for i = 1, #adata do
-        local T = {}
-        S[i] = T
-        for j = 1, #adata[1] do
-            T[j] = adata[i][j] + bdata[i][j]
-        end
-    end
-    return matrix : new (S)
+	local adata = (A.type == "matrix" and A.set or A)
+	local bdata = (B.type == "matrix" and B.set or B)
+	local S = {}
+	for i = 1, #adata do
+		local T = {}
+		S[i] = T
+		for j = 1, #adata[1] do
+			T[j] = adata[i][j] + bdata[i][j]
+		end
+	end
+	return matrix:new(S)
 end
 
 function k_mul_matrix(n, A)
-local adata = (A.type=='matrix' and A.set or A)
-    local S = {}
-    for i = 1, #adata, 1 do
-        local T = {}
-        S[i] = T
-        for j =1, #adata[1], 1 do
-            T[j] = n * adata[i][j]
-        end
-    end
-    return matrix : new (S)
+	local adata = (A.type == "matrix" and A.set or A)
+	local S = {}
+	for i = 1, #adata, 1 do
+		local T = {}
+		S[i] = T
+		for j = 1, #adata[1], 1 do
+			T[j] = n * adata[i][j]
+		end
+	end
+	return matrix:new(S)
 end
 
-
 function transposeMatrix(A)
-local mdata = (A.type=='matrix' and A.set or A)
-  local transposedMatrix = {}
-  for i = 1, #mdata[1] do
-      transposedMatrix[i] = {}
-      for j = 1, #mdata do
-          transposedMatrix[i][j] = mdata[j][i]
-      end
-  end
-  return matrix : new  (transposedMatrix)
+	local mdata = (A.type == "matrix" and A.set or A)
+	local transposedMatrix = {}
+	for i = 1, #mdata[1] do
+		transposedMatrix[i] = {}
+		for j = 1, #mdata do
+			transposedMatrix[i][j] = mdata[j][i]
+		end
+	end
+	return matrix:new(transposedMatrix)
 end
 
 -- Function to calculate the determinant of a square matrix
 function determinant(A)
-   local matrix = (A.type=='matrix' and A.set or A)
-   if #matrix == #matrix[1] then
-    local n = #matrix
-    if n == 1 then
-        return matrix[1][1] -- Base case for 1x1 matrix
-    elseif n == 2 then
-        return matrix[1][1] * matrix[2][2] - matrix[1][2] * matrix[2][1] -- Base case for 2x2 matrix
-    else
-        local det = 0
-        for j = 1, n do
-            local minor = {}
-            for i = 2, n do
-                minor[i - 1] = {}
-                for k = 1, n do
-                    if k ~= j then
-                        minor[i - 1][#minor[i - 1] + 1] = matrix[i][k]
-                    end
-                end
-            end
-            det = det + ((-1)^(j + 1)) * matrix[1][j] * determinant(minor) -- Recursive call for larger matrices
-        end
-        return det
-    end
- else return nil end
+	local matrix = (A.type == "matrix" and A.set or A)
+	if #matrix == #matrix[1] then
+		local n = #matrix
+		if n == 1 then
+			return matrix[1][1] -- Base case for 1x1 matrix
+		elseif n == 2 then
+			return matrix[1][1] * matrix[2][2] - matrix[1][2] * matrix[2][1] -- Base case for 2x2 matrix
+		else
+			local det = 0
+			for j = 1, n do
+				local minor = {}
+				for i = 2, n do
+					minor[i - 1] = {}
+					for k = 1, n do
+						if k ~= j then
+							minor[i - 1][#minor[i - 1] + 1] = matrix[i][k]
+						end
+					end
+				end
+				det = det + ((-1) ^ (j + 1)) * matrix[1][j] * determinant(minor) -- Recursive call for larger matrices
+			end
+			return det
+		end
+	else
+		return nil
+	end
 end
 
-function check_square_matrix (A)
-   local matrix = (A.type=='matrix' and A.set or A)
-   if #matrix == #matrix[1]
-   then
-      return true
-   else
-      return false
-   end
+function check_square_matrix(A)
+	local matrix = (A.type == "matrix" and A.set or A)
+	if #matrix == #matrix[1] then
+		return true
+	else
+		return false
+	end
 end
 
-
-function id_matrix (n)
- local   identityMatrix = {}
-   for i = 1, n do
-       identityMatrix[i] = {}
-       for j = 1, n do
-           if i == j then
-               identityMatrix[i][j] = 1
-           else
-               identityMatrix[i][j] = 0
-           end
-       end
-   end
-   return matrix : new (identityMatrix)
+function id_matrix(n)
+	local identityMatrix = {}
+	for i = 1, n do
+		identityMatrix[i] = {}
+		for j = 1, n do
+			if i == j then
+				identityMatrix[i][j] = 1
+			else
+				identityMatrix[i][j] = 0
+			end
+		end
+	end
+	return matrix:new(identityMatrix)
 end
 
 function inverse_2x2(A)
-     local m = (A.type=='matrix' and A.set or A)
-    local a, b, c, d = m[1][1], m[1][2], m[2][1], m[2][2]
-    local D = A.det
-    if D == 0 then
-        return nil  -- La matrice n'est pas inversible
-    else
-       local inv ={}
-       inv[1]={}
-        inv[1][1] = d / D
-            inv[1][2] = -b / D
-            inv[2]={}
-            inv[2][1] = -c / D
-            inv[2][2] = a / D
-       return matrix : new (inv)
-    end
+	local m = (A.type == "matrix" and A.set or A)
+	local a, b, c, d = m[1][1], m[1][2], m[2][1], m[2][2]
+	local D = A.det
+	if D == 0 then
+		return nil -- La matrice n'est pas inversible
+	else
+		local inv = {}
+		inv[1] = {}
+		inv[1][1] = d / D
+		inv[1][2] = -b / D
+		inv[2] = {}
+		inv[2][1] = -c / D
+		inv[2][2] = a / D
+		return matrix:new(inv)
+	end
 end
 
 function adjugate_(A)
-   local m = (A.type=='matrix' and A.set or A)
-   if #m == 2 then
-     local a,b,c,d = m[2][2],-m[1][2],- m[2][1],m[1][1]
-     return matrix : new ({{a,b},{c,d}})
-   elseif #m == 3 then
-    local a, b, c = m[1][1], m[1][2], m[1][3]
-    local d, e, f = m[2][1], m[2][2], m[2][3]
-    local g, h, i = m[3][1], m[3][2], m[3][3]
-    return transposeMatrix(matrix : new ({
-        {e * i - f * h, -(d * i - f * g), d * h - e * g},
-        {-(b * i - c * h), a * i - c * g, -(a * h - b * g)},
-        {b * f - c * e, -(a * f - c * d), a * e - b * d}
-    }))
-  else  return nil
-  end
+	local m = (A.type == "matrix" and A.set or A)
+	if #m == 2 then
+		local a, b, c, d = m[2][2], -m[1][2], -m[2][1], m[1][1]
+		return matrix:new({ { a, b }, { c, d } })
+	elseif #m == 3 then
+		local a, b, c = m[1][1], m[1][2], m[1][3]
+		local d, e, f = m[2][1], m[2][2], m[2][3]
+		local g, h, i = m[3][1], m[3][2], m[3][3]
+		return transposeMatrix(matrix:new({
+			{ e * i - f * h, -(d * i - f * g), d * h - e * g },
+			{ -(b * i - c * h), a * i - c * g, -(a * h - b * g) },
+			{ b * f - c * e, -(a * f - c * d), a * e - b * d },
+		}))
+	else
+		return nil
+	end
 end
 
 function inverse_3x3(A)
-    local D = A.det
-    if D == 0 then
-        return nil  -- La matrice n'est pas inversible
-    else
-        local adj = adjugate_(A)
-        local m = (adj.type=='matrix' and adj.set or adj)
-         local inv = {}
-         for i = 1, 3 do
-             inv[i] = {}
-             for j = 1, 3 do
-                 inv[i][j] = m[i][j] / D
-             end
-         end
-         return matrix : new (inv)
-    end
+	local D = A.det
+	if D == 0 then
+		return nil -- La matrice n'est pas inversible
+	else
+		local adj = adjugate_(A)
+		local m = (adj.type == "matrix" and adj.set or adj)
+		local inv = {}
+		for i = 1, 3 do
+			inv[i] = {}
+			for j = 1, 3 do
+				inv[i][j] = m[i][j] / D
+			end
+		end
+		return matrix:new(inv)
+	end
 end
 
 -- inverse only for 2x2 or 3x3 matrix
-function inv_matrix (A)
-  if A.det ==0 then tex.print("Matrix not inversible: det = 0") return nil 
-  else
-   local M = (A.type=='matrix' and A.set or A)
-        local n = #M
-     if n == 2 then 
-        local m = (A.type=='matrix' and A.set or A)
-       local a, b, c, d = m[1][1], m[1][2], m[2][1], m[2][2]
-       local D = A.det
-          local inv ={}
-          inv[1]={}
-           inv[1][1] = d / D
-               inv[1][2] = -b / D
-               inv[2]={}
-               inv[2][1] = -c / D
-               inv[2][2] = a / D
-          return matrix : new (inv)
-      else
-        local D = A.det
-            local adj = adjugate_(A)
-            local m = (adj.type=='matrix' and adj.set or adj)
-             local inv = {}
-             for i = 1, 3 do
-                 inv[i] = {}
-                 for j = 1, 3 do
-                     inv[i][j] = m[i][j] / D
-                 end
-             end
-             return matrix : new (inv)
-        end
-       end
+function inv_matrix(A)
+	if A.det == 0 then
+		tex.print("Matrix not inversible: det = 0")
+		return nil
+	else
+		local M = (A.type == "matrix" and A.set or A)
+		local n = #M
+		if n == 2 then
+			local m = (A.type == "matrix" and A.set or A)
+			local a, b, c, d = m[1][1], m[1][2], m[2][1], m[2][2]
+			local D = A.det
+			local inv = {}
+			inv[1] = {}
+			inv[1][1] = d / D
+			inv[1][2] = -b / D
+			inv[2] = {}
+			inv[2][1] = -c / D
+			inv[2][2] = a / D
+			return matrix:new(inv)
+		else
+			local D = A.det
+			local adj = adjugate_(A)
+			local m = (adj.type == "matrix" and adj.set or adj)
+			local inv = {}
+			for i = 1, 3 do
+				inv[i] = {}
+				for j = 1, 3 do
+					inv[i][j] = m[i][j] / D
+				end
+			end
+			return matrix:new(inv)
+		end
+	end
 end
 
-function diagonalize_ (A)
-    local m = (A.type=='matrix' and A.set or A)
-    local trace =  m[1][1] + m[2][2]
-    local a,b = m[1][1],m[1][2]
-    local det = A.det
-    local D = trace * trace - 4 * det
-    if D > 0 then
-      local va1 = (trace + math.sqrt(D)) / 2
-      local va2 = (trace - math.sqrt(D)) / 2
-     return matrix : new ({{va1,0},{0,va2}}),
-            matrix : new ({{1,1},{ (va1 - a )/b, (va2 - a)/b}})
-    else
-      local va1 = point (trace/2 , math.sqrt(-D)/ 2) 
-      local va2 = point (trace/2 , - math.sqrt(-D)/ 2) 
-      return matrix : new ({{va1,0},{0,va2}})--,
-          --   matrix : new ({{1,1},{ (va1 - a )/b, (va2 - a)/b}})
-    end
-  end
+function diagonalize_(A)
+	local m = (A.type == "matrix" and A.set or A)
+	local trace = m[1][1] + m[2][2]
+	local a, b = m[1][1], m[1][2]
+	local det = A.det
+	local D = trace * trace - 4 * det
+	if D > 0 then
+		local va1 = (trace + math.sqrt(D)) / 2
+		local va2 = (trace - math.sqrt(D)) / 2
+		return matrix:new({ { va1, 0 }, { 0, va2 } }), matrix:new({ { 1, 1 }, { (va1 - a) / b, (va2 - a) / b } })
+	else
+		local va1 = point(trace / 2, math.sqrt(-D) / 2)
+		local va2 = point(trace / 2, -math.sqrt(-D) / 2)
+		return matrix:new({ { va1, 0 }, { 0, va2 } }) --,
+		--   matrix : new ({{1,1},{ (va1 - a )/b, (va2 - a)/b}})
+	end
+end
 
-  function isDiagonal_(A)
-     local matrix = (A.type=='matrix' and A.set or A)
-   if  check_square_matrix (A) == true
-   then
-      for i = 1, #matrix do
-          for j = 1, #matrix[1] do
-              if i ~= j and matrix[i][j] ~= 0 then
-                  return false
-              end
-          end
-      end
-      return true
-   else
-      return false
-   end
-  end
+function isDiagonal_(A)
+	local matrix = (A.type == "matrix" and A.set or A)
+	if check_square_matrix(A) == true then
+		for i = 1, #matrix do
+			for j = 1, #matrix[1] do
+				if i ~= j and matrix[i][j] ~= 0 then
+					return false
+				end
+			end
+		end
+		return true
+	else
+		return false
+	end
+end
 
-  function isOrthogonal_(A)
-     local m = (A.type=='matrix' and A.set or A)
-    if  (check_square_matrix (A) == true) and (A.det ~=0)
-    then
-      local mT = transposeMatrix (A)
-      local mI = inv_matrix (A)
-      if mT == mI then return true else  return false end
-    else
-       return false
-    end
-  end
-  
-  
-  function homogenization_ (A)
-    local m = (A.type=='matrix' and A.set or A)
-   if A.cols ~= 1 then
-       return nil
-    else
-      local a,b,c
-      a=m[1][1]
-      b=m[2][1]
-      c= 1
-     return matrix : new ({{a},{b},{c}}) 
-    end
-  end
+function isOrthogonal_(A)
+	local m = (A.type == "matrix" and A.set or A)
+	if (check_square_matrix(A) == true) and (A.det ~= 0) then
+		local mT = transposeMatrix(A)
+		local mI = inv_matrix(A)
+		if mT == mI then
+			return true
+		else
+			return false
+		end
+	else
+		return false
+	end
+end
 
-  function get_element_( A,i,j )
-      local m = (A.type=='matrix' and A.set or A)
-  	if m[i] and m[i][j] then
-  		return m[i][j]
-  	end
-  end   
-  
-  function get_htm_point(A)
-           local m = (A.type=='matrix' and A.set or A)
-       return point : new( m[1][1],m[2][1])
-   end
+function homogenization_(A)
+	local m = (A.type == "matrix" and A.set or A)
+	if A.cols ~= 1 then
+		return nil
+	else
+		local a, b, c
+		a = m[1][1]
+		b = m[2][1]
+		c = 1
+		return matrix:new({ { a }, { b }, { c } })
+	end
+end
 
-  function htm_apply_ (A,z)
-    local     V = homogenization_ ( 1/scale*z.mtx)
-    local     W = A * V
-   return     get_htm_point(W)
-  end
-  
-  function htm_apply_L_ (A,obj)
-    local x,y
-    x = htm_apply_ (A,obj.pa)
-    y = htm_apply_ (A,obj.pb)
-    return line : new  (x,y)
-  end
-    
-  function htm_apply_C_ (A,obj)
-    local x,y
-    x = htm_apply_ (A,obj.center)
-    y = htm_apply_ (A,obj.through)
-    return circle : new  (x,y)
-  end
-  
-  function htm_apply_T_ (A,obj)
-    local x,y,z
-    x = htm_apply_ (A,obj.pa)
-    y = htm_apply_ (A,obj.pb)
-    z = htm_apply_ (A,obj.pc)
-    return triangle : new  (x,y,z)
-  end
-  
-  function htm_apply_Q_ (A,obj)
-    local x,y,z,t
-    x = htm_apply_ (A,obj.pa)
-    y = htm_apply_ (A,obj.pb)
-    z = htm_apply_ (A,obj.pc)
-    t = htm_apply_ (A,obj.pd)
-    if   obj.type    == "square" then 
-      return square : new  (x,y,z,t)
-    elseif  obj.type == "rectangle" then 
-      return rectangle : new  (x,y,z,t)
-    elseif  obj.type == "parallelogram" then 
-      return parallelogram : new  (x,y,z,t)   
-    elseif  obj.type == "quadrilateral"  then  
-      return quadrilateral : new  (x,y,z,t)   
-    end
-  end
\ No newline at end of file
+function get_element_(A, i, j)
+	local m = (A.type == "matrix" and A.set or A)
+	if m[i] and m[i][j] then
+		return m[i][j]
+	end
+end
+
+function get_htm_point(A)
+	local m = (A.type == "matrix" and A.set or A)
+	return point:new(m[1][1], m[2][1])
+end
+
+function htm_apply_(A, z)
+	local V = homogenization_(z.mtx)
+	local W = A * V
+	return get_htm_point(W)
+end
+
+function htm_apply_L_(A, obj)
+	local x, y
+	x = htm_apply_(A, obj.pa)
+	y = htm_apply_(A, obj.pb)
+	return line:new(x, y)
+end
+
+function htm_apply_C_(A, obj)
+	local x, y
+	x = htm_apply_(A, obj.center)
+	y = htm_apply_(A, obj.through)
+	return circle:new(x, y)
+end
+
+function htm_apply_T_(A, obj)
+	local x, y, z
+	x = htm_apply_(A, obj.pa)
+	y = htm_apply_(A, obj.pb)
+	z = htm_apply_(A, obj.pc)
+	return triangle:new(x, y, z)
+end
+
+function htm_apply_Q_(A, obj)
+	local x, y, z, t
+	x = htm_apply_(A, obj.pa)
+	y = htm_apply_(A, obj.pb)
+	z = htm_apply_(A, obj.pc)
+	t = htm_apply_(A, obj.pd)
+	if obj.type == "square" then
+		return square:new(x, y, z, t)
+	elseif obj.type == "rectangle" then
+		return rectangle:new(x, y, z, t)
+	elseif obj.type == "parallelogram" then
+		return parallelogram:new(x, y, z, t)
+	elseif obj.type == "quadrilateral" then
+		return quadrilateral:new(x, y, z, t)
+	end
+end

Added: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_misc.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_misc.lua	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_misc.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -0,0 +1,98 @@
+-- tkz_elements_functions_misc.lua
+-- date 2025/03/04
+-- version 3.34c
+-- Copyright 2025  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.
+-- ----------------------------------------------------------------
+--
+-- ----------------------------------------------------------------
+function get_points(obj)
+	-- Map of object types to their respective point keys
+	local point_map = {
+		line = { "pa", "pb" }, -- Line has two points
+		triangle = { "pa", "pb", "pc" }, -- Triangle has three points
+		circle = { "center", "through" }, -- Circle has center and a point through its circumference
+		ellipse = { "pc", "pa", "pb" }, -- Ellipse has three key points
+		square = { "pa", "pb", "pc", "pd" }, -- Square has four vertices
+		rectangle = { "pa", "pb", "pc", "pd" }, -- Rectangle has four vertices
+		quadrilateral = { "pa", "pb", "pc", "pd" }, -- Quadrilateral has four vertices
+		parallelogram = { "pa", "pb", "pc", "pd" }, -- Parallelogram has four vertices
+	}
+
+	-- Check if the object's type is recognized
+	if point_map[obj.type] then
+		local points = {}
+		-- Iterate over the keys for the given type and extract the corresponding values
+		for _, key in ipairs(point_map[obj.type]) do
+			table.insert(points, obj[key])
+		end
+		-- Return all points as multiple return values
+		return table.unpack(points)
+	end
+end
+
+function set_lua_to_tex(t)
+	for k, v in pairs(t) do
+		token.set_macro(v, _ENV[v], "global")
+	end
+end
+
+function bisector(a, b, c)
+	local i = in_center_(a, b, c)
+	return line:new(a, intersection_ll_(a, i, b, c))
+end
+
+function altitude(a, b, c)
+	local o, p
+	-- Get the orthocenter (which is the point of concurrency of the altitudes)
+	o = ortho_center_(a, b, c)
+
+	-- Get the perpendicular projection of point 'a' onto the line defined by 'b' and 'c'
+	p = projection_(b, c, a)
+
+	-- Return the altitude, which is the line from point 'a' to the point 'p'
+	return line:new(a, p)
+end
+
+function bisector_ext(a, b, c) -- n=1 swap n=2 swap 2
+	local i, p
+	-- Get the incenter of the triangle
+	i = in_center_(a, b, c)
+
+	-- Rotate the incenter by 90 degrees around point 'a' to compute the external bisector
+	p = rotation_(a, math.pi / 2, i)
+
+	-- Return the external bisector as the line passing through points 'a' and 'p'
+	return line:new(a, p)
+end
+
+function equilateral(a, b)
+	return equilateral_tr_(a, b)
+end
+
+function midpoint(a, b)
+	return (a + b) / 2
+end
+
+function midpoints(...)
+	return midpoints_(...)
+end
+
+function length(a, b)
+	return point.abs(a - b)
+end
+
+function reverseTableInPlace(t)
+	local n = #t
+	for i = 1, math.floor(n / 2) do
+		t[i], t[n - i + 1] = t[n - i + 1], t[i]
+	end
+end


Property changes on: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_misc.lua
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_points.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_points.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_points.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,107 +1,117 @@
 -- tkz_elements_functions_points.lua
--- date 2025/02/26
--- version 3.32
+-- date 2025/03/04
+-- version 3.34c
 -- Copyright 2025  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
+-- 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.
 
-function id ()
-for i,k in pairs(z) do
- if _G[i]==k then  else _G[i]=k end
- end
+function id()
+	for i, k in pairs(z) do
+		if _G[i] == k then
+		else
+			_G[i] = k
+		end
+	end
 end
 
-function polar_ (radius, phi)
+function polar_(radius, phi)
 	return point(radius * math.cos(phi), radius * math.sin(phi))
 end
 
-function barycenter_ (...)
-  local cp = table.pack(...)
-  local sum = 0
-  local weight = 0
-  for i = 1, cp.n do
-    sum = sum + cp[i][1] * cp[i][2]
-    weight = weight + cp[i][2]
-  end
-  return sum / weight
+function polar(radius, phi)
+  return polar_(radius, phi)
 end
 
-function rotation_ (c, a, pt)
-  local z = point(math.cos(a), math.sin(a))
-  return z * (pt - c) + c
+function polar_deg(radius, phi)
+  return polar_(radius, phi * math.pi / 180)
 end
 
+function barycenter_(...)
+	local cp = table.pack(...)
+	local sum = 0
+	local weight = 0
+	for i = 1, cp.n do
+		sum = sum + cp[i][1] * cp[i][2]
+		weight = weight + cp[i][2]
+	end
+	return sum / weight
+end
+
+function rotation_(c, a, pt)
+	local z = point(math.cos(a), math.sin(a))
+	return z * (pt - c) + c
+end
+
 -- Define the set_rotation_ function
-function set_rotation_ (c, angle, ...)
-   local tp = table.pack(...)
-   local t = {}
-   for i=1,tp.n do
-         table.insert(t, rotation_(c, angle, tp[i]))
-   end
-   return table.unpack(t)
+function set_rotation_(c, angle, ...)
+	local tp = table.pack(...)
+	local t = {}
+	for i = 1, tp.n do
+		table.insert(t, rotation_(c, angle, tp[i]))
+	end
+	return table.unpack(t)
 end
 
-function symmetry_(c,pt)
-    return 2 * c - pt
+function symmetry_(c, pt)
+	return 2 * c - pt
 end
 
-function set_symmetry_ (c,...)
-   local tp = table.pack(...)
-   local t = {}
-    for i=1,tp.n do
-        table.insert( t , symmetry_ (c , tp[i])  )
-     end
-  return table.unpack ( t )
+function set_symmetry_(c, ...)
+	local tp = table.pack(...)
+	local t = {}
+	for i = 1, tp.n do
+		table.insert(t, symmetry_(c, tp[i]))
+	end
+	return table.unpack(t)
 end
 
-function homothety_(c,t,p)
-    return c + t * (p - c)
+function homothety_(c, t, p)
+	return c + t * (p - c)
 end
 
-function set_homothety_ (c,coeff,...)
-   local tp = table.pack(...)
-   local t = {}
-    for i=1,tp.n do
-        table.insert( t , homothety_ (c, coeff , tp[i]) )
-     end
-   return table.unpack ( t )
+function set_homothety_(c, coeff, ...)
+	local tp = table.pack(...)
+	local t = {}
+	for i = 1, tp.n do
+		table.insert(t, homothety_(c, coeff, tp[i]))
+	end
+	return table.unpack(t)
 end
 
-function translation_(a , p)
-    return a+p
+function translation_(a, p)
+	return a + p
 end
 
-function set_translation_ (u,...)
-   local tp = table.pack(...)
-   local t = {}
-   for i=1,tp.n do
-         table.insert( t ,  (u + tp[i])  )
-   end
-   return table.unpack ( t )
+function set_translation_(u, ...)
+	local tp = table.pack(...)
+	local t = {}
+	for i = 1, tp.n do
+		table.insert(t, (u + tp[i]))
+	end
+	return table.unpack(t)
 end
 
 function random_point_(lower, upper)
-    math.randomseed( tonumber(tostring(os.time()):reverse():sub(1,6)) )
-    x = math.random (lower, upper)
-    y = math.random (lower, upper)
-   return scale * point (x,y)
-end 
+	math.randomseed(tonumber(tostring(os.time()):reverse():sub(1, 6)))
+	x = math.random(lower, upper)
+	y = math.random(lower, upper)
+	return point(x, y)
+end
 
-function midpoints_ (...)
-   local arg = table.pack(...)
-   local n = arg.n
-   local t = {}
-   for i=1, n-1 do
-      table.insert(  t , (arg[i]+arg[i+1])/2 )
-   end
-   table.insert(  t , (arg[n]+arg[1])/2 )
-   return table.unpack ( t )
+function midpoints_(...)
+	local arg = table.pack(...)
+	local n = arg.n
+	local t = {}
+	for i = 1, n - 1 do
+		table.insert(t, (arg[i] + arg[i + 1]) / 2)
+	end
+	table.insert(t, (arg[n] + arg[1]) / 2)
+	return table.unpack(t)
 end
-

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_regular.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_regular.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_regular.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,30 +1,30 @@
 -- tkz_elements_functions_regular.lua
--- date 2025/02/26
--- version 3.32
+-- date 2025/03/04
+-- version 3.34c
 -- Copyright 2025  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
+-- 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.
 
---------------------------------------------------------------------------- 
- --  
---------------------------------------------------------------------------- 
+---------------------------------------------------------------------------
+--
+---------------------------------------------------------------------------
 function regular_(c, th, s)
-    -- Center through side
-    local dep = angle_normalize(point.arg(th - c))
-    local r = point.mod(th - c)
-    local t = {}
-    local angle_step = 2 * math.pi / s
+	-- Center through side
+	local dep = angle_normalize(point.arg(th - c))
+	local r = point.mod(th - c)
+	local t = {}
+	local angle_step = 2 * math.pi / s
 
-    for i = 0, s - 1 do
-        table.insert(t, c + point:polar(r, i * angle_step + dep))
-    end
-
-    return t
-end
\ No newline at end of file
+	for i = 0, s - 1 do
+		table.insert(t, c + point:polar(r, i * angle_step + dep))
+	end
+  
+	return t
+end

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_triangles.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_triangles.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_functions_triangles.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,409 +1,413 @@
 -- tkz_elements_functions_triangles.lua
--- date 2025/02/26
--- version 3.32
+-- date 2025/03/04
+-- version 3.34c
 -- Copyright 2025  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
+-- 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.
 
---------------------------------------------------------------------------- 
- -- triangle center with circle
---------------------------------------------------------------------------- 
+---------------------------------------------------------------------------
+-- triangle center with circle
+---------------------------------------------------------------------------
 ------------------------
 --     Points --
 ------------------------
-function circum_center_ ( a,b,c )
-   local ka = math.sin (2 * get_angle_ ( a,b,c )) 
-   local kb = math.sin (2 * get_angle_ ( b,c,a )) 
-   local kc = math.sin (2 * get_angle_ ( c,a,b ))
-   return  barycenter_ ( {a,ka} , {b,kb} , {c,kc} ) 
+function circum_center_(a, b, c)
+	local ka = math.sin(2 * get_angle_(a, b, c))
+	local kb = math.sin(2 * get_angle_(b, c, a))
+	local kc = math.sin(2 * get_angle_(c, a, b))
+	return barycenter_({ a, ka }, { b, kb }, { c, kc })
 end
 
-function in_center_ ( a,b,c )
-   local ka = point.abs (b-c)
-   local kc = point.abs (b-a)
-   local kb = point.abs (c-a)
-   return    barycenter_ ( {a,ka} , {b,kb} , {c,kc} )
+function in_center_(a, b, c)
+	local ka = point.abs(b - c)
+	local kc = point.abs(b - a)
+	local kb = point.abs(c - a)
+	return barycenter_({ a, ka }, { b, kb }, { c, kc })
 end
 
-function ex_center_ ( a,b,c )
-   local ka  = point.abs (b-c)
-   local kc  = point.abs (b-a)
-   local kb  = point.abs (c-a)
-   return     barycenter_ ( {a,-ka} , {b,kb} , {c,kc} )
- end 
- 
-function centroid_ (a,b,c)
-  return    barycenter_ ( {a,1} , {b,1} , {c,1} )
+function ex_center_(a, b, c)
+	local ka = point.abs(b - c)
+	local kc = point.abs(b - a)
+	local kb = point.abs(c - a)
+	return barycenter_({ a, -ka }, { b, kb }, { c, kc })
 end
+
+function centroid_(a, b, c)
+	return barycenter_({ a, 1 }, { b, 1 }, { c, 1 })
+end
 centroid_center_ = centroid_
 
-function ortho_center_ (a,b,c)
-    local ka = math.tan (get_angle_ ( a,b,c ))
-    local kb = math.tan (get_angle_ ( b,c,a ))
-    local kc = math.tan (get_angle_ ( c,a,b ))
-    return     barycenter_ ( {a,ka} , {b,kb} , {c,kc} )
+function ortho_center_(a, b, c)
+	local ka = math.tan(get_angle_(a, b, c))
+	local kb = math.tan(get_angle_(b, c, a))
+	local kc = math.tan(get_angle_(c, a, b))
+	return barycenter_({ a, ka }, { b, kb }, { c, kc })
 end
 
-function euler_center_ (a,b,c)
-   local ma,mb,mc = medial_tr_ ( a,b,c)
-   return circum_center_ (ma,mb,mc)
+function euler_center_(a, b, c)
+	local ma, mb, mc = medial_tr_(a, b, c)
+	return circum_center_(ma, mb, mc)
 end
 
-function gergonne_point_ (a,b,c)
-   local u,v,w
-   u,v,w = intouch_tr_ (a,b,c)
-   return intersection_ll_ ( a,u , b,v)
+function gergonne_point_(a, b, c)
+	local u, v, w
+	u, v, w = intouch_tr_(a, b, c)
+	return intersection_ll_(a, u, b, v)
 end
 
-function  lemoine_point_(a,b,c)
-local ma,mb,mc,ha,hb,hc,u,v,w
-u = point.abs(c-b)
-v = point.abs(a-c)
-w = point.abs(b-a)
- return   barycenter_ ({a,u*u},{b,v*v},{c,w*w})
+function lemoine_point_(a, b, c)
+	local ma, mb, mc, ha, hb, hc, u, v, w
+	u = point.abs(c - b)
+	v = point.abs(a - c)
+	w = point.abs(b - a)
+	return barycenter_({ a, u * u }, { b, v * v }, { c, w * w })
 end
 
-function nagel_point_ (a, b, c)
-   -- Calculate the excircle tangency points (u, v, w)
-   local u, v, w = extouch_tr_ (a, b, c)
+function nagel_point_(a, b, c)
+	-- Calculate the excircle tangency points (u, v, w)
+	local u, v, w = extouch_tr_(a, b, c)
 
-   -- Find the intersection of lines through a and u, and through b and v
-   return intersection_ll_ (a, u, b, v)
+	-- Find the intersection of lines through a and u, and through b and v
+	return intersection_ll_(a, u, b, v)
 end
 
+function feuerbach_point_(a, b, c)
+	local i, h, e, ma
 
-function feuerbach_point_ (a, b, c)
-   local i, h, e, ma
+	-- Calculate the incenter and some related point (likely the orthocenter or another center)
+	i, h = in_circle_(a, b, c)
 
-   -- Calculate the incenter and some related point (likely the orthocenter or another center)
-   i, h = in_circle_ (a, b, c)
-   
-   -- Calculate the Euler center (center of the nine-point circle)
-   e = euler_center_ (a, b, c)
-   
-   -- Calculate the midpoint of side BC
-   ma = (b + c) / 2
-   
-   -- Find the intersection of the circles at (i, h) and (e, ma), which gives the Feuerbach point
-   return intersection_cc_ (i, h, e, ma)
-end
+	-- Calculate the Euler center (center of the nine-point circle)
+	e = euler_center_(a, b, c)
 
+	-- Calculate the midpoint of side BC
+	ma = (b + c) / 2
 
-function spieker_center_ (a,b,c)
-return in_center_ (medial_tr_ ( a,b,c))
+	-- Find the intersection of the circles at (i, h) and (e, ma), which gives the Feuerbach point
+	return intersection_cc_(i, h, e, ma)
 end
 
-function euler_points_ (a,b,c)
-   local H
-   H = ortho_center_ ( a , b , c )
-   return midpoint_ ( H,a ), midpoint_ ( H,b ), midpoint_ ( H,c )
+function spieker_center_(a, b, c)
+	return in_center_(medial_tr_(a, b, c))
 end
+
+function euler_points_(a, b, c)
+	local H
+	H = ortho_center_(a, b, c)
+	return midpoint_(H, a), midpoint_(H, b), midpoint_(H, c)
+end
 --------------------
 -- lines --
 --------------------
 -- N,G,H,O
-function euler_line_ (a,b,c)
-   check_equilateral_ (a,b,c)
-   local A = math.tan( get_angle_ ( a,b,c )) 
-   local B = math.tan( get_angle_ ( b,c,a )) 
-   local C = math.tan( get_angle_ ( c,a,b ))
-       
-   return     euler_center_ (a,b,c),
-              barycenter_ ( {a,1} , {b,1} , {c,1} ) ,
-              barycenter_ ( {a,A} , {b,B} , {c,C} ) ,
-              barycenter_ ( {a,B+C} , {b,A+C} , {c,A+B} )
+function euler_line_(a, b, c)
+	check_equilateral_(a, b, c)
+	local A = math.tan(get_angle_(a, b, c))
+	local B = math.tan(get_angle_(b, c, a))
+	local C = math.tan(get_angle_(c, a, b))
+
+	return euler_center_(a, b, c),
+		barycenter_({ a, 1 }, { b, 1 }, { c, 1 }),
+		barycenter_({ a, A }, { b, B }, { c, C }),
+		barycenter_({ a, B + C }, { b, A + C }, { c, A + B })
 end
 
-function bisector_ (a,b,c) -- possible intersection bisector with side
-  return in_center_ (a,b,c)
+function bisector_(a, b, c) -- possible intersection bisector with side
+	return in_center_(a, b, c)
 end
 
-function bisector_ext_ (a,b,c)
-   local i
-   i = in_center_ (a,b,c)
-  return rotation_ (a,math.pi/2,i)
+function bisector_ext_(a, b, c)
+	local i
+	i = in_center_(a, b, c)
+	return rotation_(a, math.pi / 2, i)
 end
 
-function mediators_ (a,b,c) 
-  local o = circum_center (a,b,c)
-  return    o ,
-     projection_ (b,c,o) ,
-     projection_ (a,c,o) ,
-     projection_ (a,b,o) 
+function mediators_(a, b, c)
+	local o = circum_center(a, b, c)
+	return o, projection_(b, c, o), projection_(a, c, o), projection_(a, b, o)
 end
 --------------------
 -- circles --
 --------------------
-function circum_circle_ ( a,b,c )
-   local ka = math.sin (2 * get_angle_ ( a,b,c )) 
-   local kb = math.sin (2 * get_angle_ ( b,c,a )) 
-   local kc = math.sin (2 * get_angle_ ( c,a,b ))
-   return barycenter_ ( {a,ka} , {b,kb} , {c,kc} )
+function circum_circle_(a, b, c)
+	local ka = math.sin(2 * get_angle_(a, b, c))
+	local kb = math.sin(2 * get_angle_(b, c, a))
+	local kc = math.sin(2 * get_angle_(c, a, b))
+	return barycenter_({ a, ka }, { b, kb }, { c, kc })
 end
 
-function in_circle_ ( a,b,c )
-   local ka,kb,kc,o
-     ka = point.abs (b-c)
-     kc = point.abs (b-a)
-     kb = point.abs (c-a)
-     o  =   barycenter_ ( {a,ka} , {b,kb} , {c,kc} ) 
-    return    o ,
-              projection_ (b,c,o) ,
-              projection_ (a,c,o) ,
-              projection_ (a,b,o)
+function in_circle_(a, b, c)
+	local ka, kb, kc, o
+	ka = point.abs(b - c)
+	kc = point.abs(b - a)
+	kb = point.abs(c - a)
+	o = barycenter_({ a, ka }, { b, kb }, { c, kc })
+	return o, projection_(b, c, o), projection_(a, c, o), projection_(a, b, o)
 end
 
-function ex_circle_ ( a,b,c )
-     local ka,kb,kc,o
-       ka = point.abs (b-c)
-       kc = point.abs (b-a)
-       kb = point.abs (c-a)
-        o = barycenter_ ( {a,-ka} , {b,kb} , {c,kc} )
-     return      o ,
-                 projection_ (b,c,o) ,
-                 projection_ (a,c,o) ,
-                 projection_ (b,a,o)
+function ex_circle_(a, b, c)
+	local ka, kb, kc, o
+	ka = point.abs(b - c)
+	kc = point.abs(b - a)
+	kb = point.abs(c - a)
+	o = barycenter_({ a, -ka }, { b, kb }, { c, kc })
+	return o, projection_(b, c, o), projection_(a, c, o), projection_(b, a, o)
 end
 
-function euler_circle_ (a, b, c)
-   local o, ma, mb, mc, H, ha, hb, hc
-   -- Compute the Euler center (center of the nine-point circle)
-   o = euler_center_ (a, b, c)
+function euler_circle_(a, b, c)
+	local o, ma, mb, mc, H, ha, hb, hc
+	-- Compute the Euler center (center of the nine-point circle)
+	o = euler_center_(a, b, c)
 
-   -- Calculate the medial triangle (midpoints of the sides)
-   ma, mb, mc = medial_tr_ (a, b, c)
+	-- Calculate the medial triangle (midpoints of the sides)
+	ma, mb, mc = medial_tr_(a, b, c)
 
-   -- Calculate the orthic triangle (feet of the altitudes)
-   ha, hb, hc = orthic_tr_ (a, b, c)
+	-- Calculate the orthic triangle (feet of the altitudes)
+	ha, hb, hc = orthic_tr_(a, b, c)
 
-   -- Get the Euler line and midpoint (H) on the Euler line
-   _, _, H, _ = euler_line_ (a, b, c)
+	-- Get the Euler line and midpoint (H) on the Euler line
+	_, _, H, _ = euler_line_(a, b, c)
 
-   -- Return all relevant geometric elements
-   return 
-      o, ma, mb, mc, ha, hb, hc,
-      midpoint_ (H, a),  -- Midpoint between H and vertex a
-      midpoint_ (H, b),  -- Midpoint between H and vertex b
-      midpoint_ (H, c)   -- Midpoint between H and vertex c
+	-- Return all relevant geometric elements
+	return o,
+		ma,
+		mb,
+		mc,
+		ha,
+		hb,
+		hc,
+		midpoint_(H, a), -- Midpoint between H and vertex a
+		midpoint_(H, b), -- Midpoint between H and vertex b
+		midpoint_(H, c) -- Midpoint between H and vertex c
 end
 
 --------------------
 -- triangles --
 --------------------
-function orthic_tr_ (a,b,c)
-  local o = ortho_center_ (a,b,c)
-    return  projection_ (b,c,o) ,
-            projection_ (a,c,o) ,
-            projection_ (b,a,o)
+function orthic_tr_(a, b, c)
+	local o = ortho_center_(a, b, c)
+	return projection_(b, c, o), projection_(a, c, o), projection_(b, a, o)
 end
 
-function medial_tr_ (a,b,c)
-  return      barycenter_ ( {a,0} , {b,1} , {c,1} ) ,
-              barycenter_ ( {a,1} , {b,0} , {c,1} ) ,
-              barycenter_ ( {a,1} , {b,1} , {c,0} )
+function medial_tr_(a, b, c)
+	return barycenter_({ a, 0 }, { b, 1 }, { c, 1 }),
+		barycenter_({ a, 1 }, { b, 0 }, { c, 1 }),
+		barycenter_({ a, 1 }, { b, 1 }, { c, 0 })
 end
 
-function anti_tr_(a,b,c)
-  return barycenter_ ( {a,-1} , {b,1} , {c,1} ) ,
-         barycenter_ ( {a,1} , {b,-1} , {c,1} ) ,
-         barycenter_ ( {a,1} , {b,1} , {c,-1} )
+function anti_tr_(a, b, c)
+	return barycenter_({ a, -1 }, { b, 1 }, { c, 1 }),
+		barycenter_({ a, 1 }, { b, -1 }, { c, 1 }),
+		barycenter_({ a, 1 }, { b, 1 }, { c, -1 })
 end
 
-function incentral_tr_ (a, b, c)
-    local i, r, s, t
-    -- Compute the incenter (center of the incircle)
-    i = in_center_ (a, b, c)
-    
-    -- Calculate the points of tangency where the incircle touches the sides
-    r = intersection_ll_ (a, i, b, c)  -- Intersection of lines a-i and b-c
-    s = intersection_ll_ (b, i, a, c)  -- Intersection of lines b-i and a-c
-    t = intersection_ll_ (c, i, a, b)  -- Intersection of lines c-i and a-b
-    
-    -- Return the points of tangency that form the incentral triangle
-    return r, s, t
+function incentral_tr_(a, b, c)
+	local i, r, s, t
+	-- Compute the incenter (center of the incircle)
+	i = in_center_(a, b, c)
+
+	-- Calculate the points of tangency where the incircle touches the sides
+	r = intersection_ll_(a, i, b, c) -- Intersection of lines a-i and b-c
+	s = intersection_ll_(b, i, a, c) -- Intersection of lines b-i and a-c
+	t = intersection_ll_(c, i, a, b) -- Intersection of lines c-i and a-b
+
+	-- Return the points of tangency that form the incentral triangle
+	return r, s, t
 end
 
-
 function excentral_tr_(a, b, c)
-    -- Calculate distances between points
-    local ka = point.abs(b - c) -- Distance between b and c
-    local kb = point.abs(c - a) -- Distance between c and a
-    local kc = point.abs(b - a) -- Distance between b and a
+	-- Calculate distances between points
+	local ka = point.abs(b - c) -- Distance between b and c
+	local kb = point.abs(c - a) -- Distance between c and a
+	local kc = point.abs(b - a) -- Distance between b and a
 
-    -- Compute barycentric points
-    local r = barycenter_({a, -ka}, {b, kb}, {c, kc})
-    local s = barycenter_({a, ka}, {b, -kb}, {c, kc})
-    local t = barycenter_({a, ka}, {b, kb}, {c, -kc})
+	-- Compute barycentric points
+	local r = barycenter_({ a, -ka }, { b, kb }, { c, kc })
+	local s = barycenter_({ a, ka }, { b, -kb }, { c, kc })
+	local t = barycenter_({ a, ka }, { b, kb }, { c, -kc })
 
-    -- Return the computed points
-    return r, s, t
+	-- Return the computed points
+	return r, s, t
 end
 
-
-function intouch_tr_ (a,b,c)
-   local i
-   i = in_center_ (a , b , c)
-    return  projection_ (b,c,i),
-            projection_ (a,c,i),
-            projection_ (a,b,i)
+function intouch_tr_(a, b, c)
+	local i
+	i = in_center_(a, b, c)
+	return projection_(b, c, i), projection_(a, c, i), projection_(a, b, i)
 end
 
-function cevian_ (a,b,c,p)
-     return   intersection_ll_ (a,p,b,c),
-              intersection_ll_ (b,p,a,c),
-              intersection_ll_ (c,p,a,b)
+function cevian_(a, b, c, p)
+	return intersection_ll_(a, p, b, c), intersection_ll_(b, p, a, c), intersection_ll_(c, p, a, b)
 end
 
-function extouch_tr_ (a,b,c)
-    local u,v,w
-    u,v,w =  excentral_tr_ (a,b,c)
-    return  projection_ (b,c,u) ,
-            projection_ (a,c,v) ,
-            projection_ (a,b,w)
+function extouch_tr_(a, b, c)
+	local u, v, w
+	u, v, w = excentral_tr_(a, b, c)
+	return projection_(b, c, u), projection_(a, c, v), projection_(a, b, w)
 end
 
-function  tangential_tr_ (a,b,c)
-  local u,v,w,x,y,z,xx,yy,zz
-  u,v,w = orthic_tr_ (a,b,c)
-  x = ll_from_ ( a , v , w )
-  y = ll_from_ ( b , u , w )
-  z = ll_from_ ( c , u , v )
-  xx =  intersection_ll_ (c,z,b,y)
-  yy =  intersection_ll_ (a,x,c,z)
-  zz =  intersection_ll_ (a,x,b,y)
-return  xx,yy,zz
+function tangential_tr_(a, b, c)
+	local u, v, w, x, y, z, xx, yy, zz
+	u, v, w = orthic_tr_(a, b, c)
+	x = ll_from_(a, v, w)
+	y = ll_from_(b, u, w)
+	z = ll_from_(c, u, v)
+	xx = intersection_ll_(c, z, b, y)
+	yy = intersection_ll_(a, x, c, z)
+	zz = intersection_ll_(a, x, b, y)
+	return xx, yy, zz
 end
 
-function feuerbach_tr_ (a,b,c)
-   local e,m,ja,ha,jb,hb,jc,hc
-   e   =  euler_center_ (a,b,c)
-   m = midpoint_( b , c )
-   ja,ha = ex_circle_ ( a , b , c )
-   jb,hb = ex_circle_ ( b , c , a )
-   jc,hc = ex_circle_ ( c  , a , b )
-    return  intersection_cc_ (e,m,ja,ha),
-    intersection_cc_ (e,m,jb,hb),
-    intersection_cc_ (e,m,jc,hc)
+function feuerbach_tr_(a, b, c)
+	local e, m, ja, ha, jb, hb, jc, hc
+	e = euler_center_(a, b, c)
+	m = midpoint_(b, c)
+	ja, ha = ex_circle_(a, b, c)
+	jb, hb = ex_circle_(b, c, a)
+	jc, hc = ex_circle_(c, a, b)
+	return intersection_cc_(e, m, ja, ha), intersection_cc_(e, m, jb, hb), intersection_cc_(e, m, jc, hc)
 end
 
-function similar_ (a,b,c)
-  local x,y,z,g
-   g = centroid_ (a,b,c)
-   x = homothety_ (g,-2,a)
-   y = homothety_ (g,-2,b)
-   z = homothety_ (g,-2,c)
-   return x,y,z
+function similar_(a, b, c)
+	local x, y, z, g
+	g = centroid_(a, b, c)
+	x = homothety_(g, -2, a)
+	y = homothety_(g, -2, b)
+	z = homothety_(g, -2, c)
+	return x, y, z
 end
 
-function orthic_axis_ (a,b,c) 
-  local  ha, hb, hc = orthic_tr_(a, b, c)
-  local z = intersection_ll_ (ha, hb, a, b)
-  local y = intersection_ll_ (ha, hc, a, c)
-  local x = intersection_ll_ (hb, hc, b, c)
-  return x,y,z
+function orthic_axis_(a, b, c)
+	local ha, hb, hc = orthic_tr_(a, b, c)
+	local z = intersection_ll_(ha, hb, a, b)
+	local y = intersection_ll_(ha, hc, a, c)
+	local x = intersection_ll_(hb, hc, b, c)
+	return x, y, z
 end
 --------------------
 -- ellipse --
 --------------------
-function steiner_ (a,b,c)
-   local g = centroid_ (a,b,c)
-   local delta = a*a+b*b+c*c -a*b-a*c-b*c
-   local fa = (a+b+c - point.sqrt(delta))/3
-   local fb = (a+b+c + point.sqrt(delta))/3
-   local m = midpoint_(b,c)
-   local r = (length(fa,m)+length(fb,m))/2
-   return conic : new (EL_bifocal (fb,fa,r))
+function steiner_(a, b, c)
+	local g = centroid_(a, b, c)
+	local delta = a * a + b * b + c * c - a * b - a * c - b * c
+	local fa = (a + b + c - point.sqrt(delta)) / 3
+	local fb = (a + b + c + point.sqrt(delta)) / 3
+	local m = midpoint_(b, c)
+	local r = (length(fa, m) + length(fb, m)) / 2
+	return conic:new(EL_bifocal(fb, fa, r))
 end
 --------------------
 -- miscellanous --
 --------------------
 
-function area_ (a,b,c)
-    return  point.mod(a - projection_(b,c,a))*point.mod (b - c)/2
+function area_(a, b, c)
+	return point.mod(a - projection_(b, c, a)) * point.mod(b - c) / 2
 end
 
 function check_equilateral_(A, B, C)
-  local a, b, c = length(B, C), length(A, C), length(A, B)
+	local a, b, c = length(B, C), length(A, C), length(A, B)
 
-  -- Vérifie que les trois longueurs sont égales à epsilon près
-  if math.abs(a - b) < tkz_epsilon 
-  and math.abs(a - c) < tkz_epsilon 
-  and math.abs(b - c) < tkz_epsilon then
-    return true
-  else
-    return false
-  end
+	-- Vérifie que les trois longueurs sont égales à epsilon près
+	if math.abs(a - b) < tkz_epsilon and math.abs(a - c) < tkz_epsilon and math.abs(b - c) < tkz_epsilon then
+		return true
+	else
+		return false
+	end
 end
 
-function parallelogram_ (a,b,c)
-    local x = c + a - b
-  return  x
+function parallelogram_(a, b, c)
+	local x = c + a - b
+	return x
 end
 
-function barycentric_coordinates_ (a,b,c,pt)
-    local AT,AA,AB,AC,x,y,z
-    AT = area_(a,b,c)
-    AA = area_(pt,b,c)
-    AB = area_(a,pt,c)
-    AC = area_(a,b,pt)
-    x = AA/AT
-    y = AB/AT
-    z = AC/AT
-   return x,y,z
+function barycentric_coordinates_(a, b, c, pt)
+	local AT, AA, AB, AC, x, y, z
+	AT = area_(a, b, c)
+	AA = area_(pt, b, c)
+	AB = area_(a, pt, c)
+	AC = area_(a, b, pt)
+	x = AA / AT
+	y = AB / AT
+	z = AC / AT
+	return x, y, z
 end
 
-function  in_out_ (a,b,c,pt)
-    local cba,cbb,cbc,TT,AT,AA,AB,AC
-    AT = area_(a,b,c)
-    AA = area_(pt,b,c)
-    AB = area_(a,pt,c)
-    AC = area_(a,b,pt)
-    cba = AA/AT
-    cbb = AB/AT
-    cbc = AC/AT
-    if (cba >= 0 and cba <= 1) and (cbb >= 0 and cbb <= 1) and (cbc >= 0 and cbc <= 1)
-     then
-       return true
-    else
-       return false
-    end
+function in_out_(a, b, c, pt)
+	local cba, cbb, cbc, TT, AT, AA, AB, AC
+	AT = area_(a, b, c)
+	AA = area_(pt, b, c)
+	AB = area_(a, pt, c)
+	AC = area_(a, b, pt)
+	cba = AA / AT
+	cbb = AB / AT
+	cbc = AC / AT
+	if (cba >= 0 and cba <= 1) and (cbb >= 0 and cbb <= 1) and (cbc >= 0 and cbc <= 1) then
+		return true
+	else
+		return false
+	end
 end
 
-function soddy_center_ (a,b,c)
-    -- Step 1: Compute the incenter and excircle centers
-    local i,e,f,g = in_circle_ (a,b,c)
-    local ha,hb,hc = orthic_tr_ (a,b,c)
+function soddy_center_(a, b, c)
+	-- Step 1: Compute the incenter and excircle centers
+	local i, e, f, g = in_circle_(a, b, c)
+	local ha, hb, hc = orthic_tr_(a, b, c)
 
-    -- Step 2: Find the intersection points for the tangent lines
-    local x,xp = intersection_lc_ (a,ha,a,g)
-    if (point.mod(ha-x) < point.mod(ha-xp)) then else x,xp = xp,x end
-    
-    local y,yp = intersection_lc_ (b,hb,b,e)
-    if (point.mod(hb-y) < point.mod(hb-yp)) then else y,yp = yp,y end
-    
-    local z,zp = intersection_lc_ (c,hc,c,f)
-    if (point.mod(hc-z) < point.mod(hc-zp)) then else z,zp = zp,z end
-    
-    -- Step 3: Calculate the intersections with the opposite triangle sides
-    local xi,t = intersection_lc_ (xp,e,a,g)
-    if in_out_ (a,b,c,xi) then else xi,t = t,xi end
-    
-    local yi,t = intersection_lc_ (yp,f,b,e)
-    if in_out_ (a,b,c,yi) then else yi,t = t,yi end
-    
-    local zi,t = intersection_lc_ (zp,g,c,f)
-    if in_out_ (a,b,c,zi) then else zi,t = t,zi end
-    
-    -- Step 4: Calculate the circumcenter of the triangle formed by the tangent points
-    local s = circum_center_ (xi,yi,zi)
+	-- Step 2: Find the intersection points for the tangent lines
+	local x, xp = intersection_lc_(a, ha, a, g)
+	if point.mod(ha - x) < point.mod(ha - xp) then
+	else
+		x, xp = xp, x
+	end
 
-    return s,xi,yi,zi -- Return the Soddy center and the tangent points
+	local y, yp = intersection_lc_(b, hb, b, e)
+	if point.mod(hb - y) < point.mod(hb - yp) then
+	else
+		y, yp = yp, y
+	end
+
+	local z, zp = intersection_lc_(c, hc, c, f)
+	if point.mod(hc - z) < point.mod(hc - zp) then
+	else
+		z, zp = zp, z
+	end
+
+	-- Step 3: Calculate the intersections with the opposite triangle sides
+	local xi, t = intersection_lc_(xp, e, a, g)
+	if in_out_(a, b, c, xi) then
+	else
+		xi, t = t, xi
+	end
+
+	local yi, t = intersection_lc_(yp, f, b, e)
+	if in_out_(a, b, c, yi) then
+	else
+		yi, t = t, yi
+	end
+
+	local zi, t = intersection_lc_(zp, g, c, f)
+	if in_out_(a, b, c, zi) then
+	else
+		zi, t = t, zi
+	end
+
+	-- Step 4: Calculate the circumcenter of the triangle formed by the tangent points
+	local s = circum_center_(xi, yi, zi)
+
+	return s, xi, yi, zi -- Return the Soddy center and the tangent points
 end
 
+function square_inscribed_(a, b, c)
+  local d, e = square_(c, b)
+  local m = intersection_ll_(a, d, b, c)
+  local n = intersection_ll_(a, e, b, c)
+  local o, p = square_(m,n)
+  return m,n,o,p
+end
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_line.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_line.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_line.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,12 +1,12 @@
--- tkz_elements_lines.lua
--- date 2025/02/26
--- version 3.32
+-- tkz_elements_line.lua
+-- date 2025/03/04
+-- version 3.34c
 -- Copyright 2025  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
+-- 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”.
@@ -16,31 +16,34 @@
 --                           Lines
 -- -------------------------------------------------------------------------
 line = {}
+-- Function to create a new line object with two points za and zb.
 function line:new(za, zb)
-    local type             = 'line'
-    local mid              = (za+zb)/2
-    local north_pa         = rotation_ (za,math.pi/2,zb)
-    local south_pa         = rotation_ (za,-math.pi/2,zb)
-    local north_pb         = rotation_ (zb,-math.pi/2,za)
-    local south_pb         = rotation_ (zb,math.pi/2,za)
-    local west             = rotation_ (za,math.pi/2,north_pa)
-    local east             = rotation_ (zb,math.pi/2,south_pb)
-    local slope            = angle_normalize_(point.arg(zb-za))
-    local length           = point.mod(zb-za)
-    local vec              = vector : new (za,zb)
-    local li = {pa          = za, 
-               pb          = zb,
-               north_pa    = north_pa, 
-               south_pa    = south_pa,
-               west        = west, 
-               east        = east,
-               north_pb    = north_pb, 
-               south_pb    = south_pb,
-               slope       = slope,
-               mid         = mid, 
-               type        = type, 
-               vec         = vec,
-               length      = length}
+    local type = 'line'
+    local mid = (za + zb) / 2
+    local north_pa = rotation_(za, math.pi / 2, zb)
+    local south_pa = rotation_(za, -math.pi / 2, zb)
+    local north_pb = rotation_(zb, -math.pi / 2, za)
+    local south_pb = rotation_(zb, math.pi / 2, za)
+    local west = rotation_(za, math.pi / 2, north_pa)
+    local east = rotation_(zb, math.pi / 2, south_pb)
+    local slope = angle_normalize_(point.arg(zb - za))
+    local length = point.mod(zb - za)
+    local vec = vector:new(za, zb)
+    local li = {
+        pa = za,
+        pb = zb,
+        north_pa = north_pa,
+        south_pa = south_pa,
+        west = west,
+        east = east,
+        north_pb = north_pb,
+        south_pb = south_pb,
+        slope = slope,
+        mid = mid,
+        type = type,
+        vec = vec,
+        length = length
+    }
     setmetatable(li, self)
     self.__index = self
     return li
@@ -47,110 +50,132 @@
 end
 
 -------------------
--- Result -> real
+-- Résultats -> réel
 -------------------
+
+-- Calculate the distance between a point and a line
 function line:distance(pt)   
-    return point.mod(projection(self,pt)-pt)
+    return point.mod(projection(self, pt) - pt)
 end
 
-function line:slope()
-   return slope_(self.pa,self.pb)
-end
 -------------------
--- Result -> boolean
+-- Résultats -> booléen
 -------------------
+
+-- Vérifie si un point est sur la ligne (hors segment)
 function line:in_out(pt)
     return math.abs((pt - self.pa) ^ (pt - self.pb)) <= tkz_epsilon
 end
 
+-- Vérifie si un point est sur le segment de la ligne
 function line:in_out_segment(pt)
     return point.mod(pt - self.pa) + point.mod(pt - self.pb) - point.mod(self.pb - self.pa) <= tkz_epsilon
 end
 
+-- Vérifie si deux lignes sont parallèles
 function line:is_parallel(L)
     return math.abs(self.slope - L.slope) < tkz_epsilon
 end
 
+-- Vérifie si deux lignes sont orthogonales
 function line:is_orthogonal(L)
- local alpha = angle_between_vectors(self.pa, self.pb, L.pa, L.pb)
-    return math.abs(alpha-math.pi/2) < tkz_epsilon
+    local alpha = angle_between_vectors(self.pa, self.pb, L.pa, L.pb)
+    return math.abs(alpha - math.pi / 2) < tkz_epsilon
 end
 
+-- Vérifie si un point est équidistant des deux points définissant la ligne
 function line:is_equidistant(p)
-    return math.abs( (point.mod(self.pa-p)-(point.mod(self.pb-p)))) < tkz_epsilon
+    return math.abs(point.mod(self.pa - p) - point.mod(self.pb - p)) < tkz_epsilon
 end
 -------------------
--- Result -> point
+-- Résultats -> point
 -------------------
-function line:barycenter(ka,kb)
-    return barycenter_({self.pa,ka},{self.pb,kb})
+
+-- Calcule le barycentre de deux points sur la ligne avec les poids ka et kb
+function line:barycenter(ka, kb)
+    return barycenter_({self.pa, ka}, {self.pb, kb})
 end
 
-function line:point(t) --  t=o A  t=1 B  t = AM / AB 
-    return barycenter_({self.pa,1-t},{self.pb,(t)})
+-- Calcule un point sur la ligne donné t (t=0 -> A, t=1 -> B, t=AM/AB)
+function line:point(t)
+    return barycenter_({self.pa, 1 - t}, {self.pb, t})
 end
 
+-- Calcule le milieu du segment
 function line:midpoint()
-    return (self.pa+self.pb)/2
+    return (self.pa + self.pb) / 2
 end
 
+-- Calcule le point d'intensité harmonique interne à la ligne
 function line:harmonic_int(pt)
-    return div_harmonic_int_(self.pa,self.pb,pt)
+    return div_harmonic_int_(self.pa, self.pb, pt)
 end
 
+-- Calcule le point d'intensité harmonique externe à la ligne
 function line:harmonic_ext(pt)
-    return div_harmonic_ext_(self.pa,self.pb,pt)
+    return div_harmonic_ext_(self.pa, self.pb, pt)
 end
 
+-- Calcule le point d'intensité harmonique des deux côtés à partir du point k
 function line:harmonic_both(k)
-    return div_harmonic_both_(self.pa,self.pb,k)
+    return div_harmonic_both_(self.pa, self.pb, k)
 end
 
+-- Retourne le point correspondant au ratio d'or sur la ligne
 function line:gold_ratio()
-   return self.pa + (self.pb-self.pa)*tkzinvphi
+    return self.pa + (self.pb - self.pa) * tkzinvphi
 end
 
+-- Normalise la ligne (point à une unité de distance)
 function line:normalize()
-   return  self.pa+(self.pb-self.pa)/point.mod(self.pb-self.pa)
+    return self.pa + (self.pb - self.pa) / point.mod(self.pb - self.pa)
 end
 
+-- Normalise inversement la ligne
 function line:normalize_inv()
-   return normalize_ (self.pb,self.pa)
+    return normalize_(self.pb, self.pa)
 end
 
+-- Calcule un point à l'est de la ligne à une distance d spécifiée
 function line:_east(d)
-   local d = d or 1
-   return self.pb+ d/self.length * (self.pb-self.pa)
+    d = d or 1
+    return self.pb + d / self.length * (self.pb - self.pa)
 end
 
+-- Calcule un point à l'ouest de la ligne à une distance d spécifiée
 function line:_west(d)
-   local d = d or 1
-   return self.pa+ d/self.length * (self.pa-self.pb)
+    d = d or 1
+    return self.pa + d / self.length * (self.pa - self.pb)
 end
 
+-- Calcule un point au nord de pa sur la ligne à une distance d
 function line:_north_pa(d)
-   local d = d or 1
-   return d/self.length * ( self.north_pa - self.pa ) + self.pa
+    d = d or 1
+    return d / self.length * (self.north_pa - self.pa) + self.pa
 end
 
+-- Calcule un point au sud de pa sur la ligne à une distance d
 function line:_south_pa(d)
-   local d = d or 1
-   return d/self.length *( self.south_pa - self.pa ) + self.pa
+    d = d or 1
+    return d / self.length * (self.south_pa - self.pa) + self.pa
 end
 
+-- Calcule un point au sud de pb sur la ligne à une distance d
 function line:_south_pb(d)
-   local d = d or 1
-   return d/self.length *( self.south_pb - self.pb ) + self.pb
+    d = d or 1
+    return d / self.length * (self.south_pb - self.pb) + self.pb
 end
 
+-- Calcule un point au nord de pb sur la ligne à une distance d
 function line:_north_pb(d)
-   local d = d or 1
-   return d/self.length *( self.north_pb - self.pb ) + self.pb
+    d = d or 1
+    return d / self.length * (self.north_pb - self.pb) + self.pb
 end
 
+-- Rapporte un point sur la ligne à une distance d de pa (optionnellement modifié par pt)
 function line:report(d, pt)
     if not self.length or self.length == 0 then
-        error("self.length must be non-zero")
+        tex.error("self.length must be non-zero")
     end
     local t = d / self.length
     local result = barycenter_({self.pa, 1 - t}, {self.pb, t})
@@ -161,177 +186,197 @@
     end
 end
 
-
-function line:colinear_at (pt,k)
-   if k == nil  
-      then  
-         return colinear_at_ (self.pa,self.pb,pt,1)
-      else 
-         return colinear_at_ (self.pa,self.pb,pt,k)
-      end
+-- Vérifie la colinéarité d'un point pt par rapport à la ligne (avec un facteur k si spécifié)
+function line:colinear_at(pt, k)
+    if k == nil then
+        return colinear_at_(self.pa, self.pb, pt, 1)
+    else
+        return colinear_at_(self.pa, self.pb, pt, k)
+    end
 end
 
--- function line:occs (pt)
---   return occs_(pt,self.pa,self.pb)
--- end
--------------- transformations -------------
-function line:translation_pt( pt )
-    return translation_ ( self.pb-self.pa,pt )
+-------------------
+-- Transformations
+-------------------
+
+-- Translation d'un point donné selon la direction de la ligne (pb - pa)
+function line:translation_pt(pt)
+    return translation_(self.pb - self.pa, pt)
 end
 
-function line:translation_C( obj )
-  local pa = obj.center
-  local pb = obj.through
-  local x,y = set_translation_( self.pb-self.pa,pa,pb )
-   return circle : new  (x,y)
+-- Translation d'un objet de type cercle selon la direction de la ligne
+function line:translation_C(obj)
+    local pa = obj.center
+    local pb = obj.through
+    local x, y = set_translation_(self.pb - self.pa, pa, pb)
+    return circle:new(x, y)
 end
 
-function line: translation_T( obj )
-  local pa    = obj.pa
-  local pb    = obj.pb
-  local pc    = obj.pc
-  local x,y,z = set_translation_( self.pb-self.pa,pa,pb,pc )
-   return triangle : new  (x,y,z)
+-- Translation d'un objet de type triangle selon la direction de la ligne
+function line:translation_T(obj)
+    local pa = obj.pa
+    local pb = obj.pb
+    local pc = obj.pc
+    local x, y, z = set_translation_(self.pb - self.pa, pa, pb, pc)
+    return triangle:new(x, y, z)
 end
 
-function line: translation_L( obj )
-  local pa = obj.pa
-  local pb = obj.pb
-  local x,y = set_translation_ ( self.pb-self.pa,pa,pb )
-   return line : new  (x,y)
+-- Translation d'un objet de type ligne selon la direction de la ligne
+function line:translation_L(obj)
+    local pa = obj.pa
+    local pb = obj.pb
+    local x, y = set_translation_(self.pb - self.pa, pa, pb)
+    return line:new(x, y)
 end
 
+-- Fonction générale pour effectuer une translation d'un ou plusieurs objets
 function line:translation(...)
- local  tp = table.pack(...)
- local  obj = tp[1]
- local  nb = tp.n
+    local tp = table.pack(...)  -- Regroupe tous les arguments dans une table
+    local obj = tp[1]  -- Le premier objet est récupéré
+    local nb = tp.n  -- Nombre d'objets à traiter
 
-   -- If only one object is passed
-   if nb == 1 then
-      if obj.type == "point" then
-         return translation_(self.pb - self.pa, obj)  -- Translate point
-      elseif obj.type == "line" then
-         return self:translation_L(obj)  -- Translate line
-      elseif obj.type == "triangle" then
-         return self:translation_T(obj)  -- Translate triangle
-      elseif obj.type == "circle" then
-         return self:translation_C(obj)  -- Translate circle
-      else
-         error("Unsupported object type for translation")
-      end
-   else
-      -- If multiple objects are passed, translate each one
-     local  t = {}
-      for i = 1, nb do
-         -- Translate each object using the translation vector
-         table.insert(t, translation_(self.pb - self.pa, tp[i]))
-      end
-      return table.unpack(t)  -- Return the translated objects
-   end
+    -- Si un seul objet est passé
+    if nb == 1 then
+        if obj.type == "point" then
+            return translation_(self.pb - self.pa, obj)  -- Traduction du point
+        elseif obj.type == "line" then
+            return self:translation_L(obj)  -- Traduction de la ligne
+        elseif obj.type == "triangle" then
+            return self:translation_T(obj)  -- Traduction du triangle
+        elseif obj.type == "circle" then
+            return self:translation_C(obj)  -- Traduction du cercle
+        else
+            tex.error("Unsupported object type for translation")
+        end
+    else
+        -- Si plusieurs objets sont passés, on les traduit un par un
+        local t = {}
+        for i = 1, nb do
+            -- Traduction de chaque objet avec le vecteur de translation
+            table.insert(t, translation_(self.pb - self.pa, tp[i]))
+        end
+        return table.unpack(t)  -- Retourne les objets traduits
+    end
 end
 
+-- Fonction pour effectuer une translation d'un objet en utilisant la direction de la ligne
+function line:set_translation(...)
+    return set_translation_(self.pb - self.pa, ...)
+end
 
-function line: set_translation ( ...)
-    return set_translation_ ( self.pb-self.pa,... )
+function line:projection_ll(...)
+  local tp = table.pack(...)
+  local c, d = tp[1].pa, tp[1].pb  -- c et d sont les deux points qui définissent la ligne de projection
+  local obj = tp[2]  -- L'objet à projeter
+  local nb = tp.n  -- Nombre d'objets passés en paramètres
+  
+  if nb == 2 then
+    -- Projection de la ligne sur l'objet
+    return projection_ll_(self.pa, self.pb, c, d, obj)
+  else
+    local t = {}
+    for i = 2, tp.n do
+      -- Projection de chaque objet sur la ligne
+      table.insert(t, projection_ll_(self.pa, self.pb, c, d, tp[i]))
+    end
+    return table.unpack(t)  -- Retourne les résultats de la projection pour tous les objets
+  end
 end
 
+
+function line:set_projection_ll(...)
+  local tp = table.pack(...)
+  local c, d = tp[1].pa, tp[1].pb  -- c et d sont les deux points définissant la ligne de projection
+  local t = {}
+  
+  for i = 2, tp.n do
+    -- Projection de chaque objet sur la ligne
+    table.insert(t, projection_ll_(self.pa, self.pb, c, d, tp[i]))
+  end
+  return table.unpack(t)  -- Retourne les résultats de la projection pour tous les objets
+end
+
+
+
 function line:projection(...)
-   local tp = table.pack(...)
-  local obj = tp[1]
-  local nb = tp.n
+    local tp = table.pack(...)  -- Regroupe les arguments dans une table
+    local obj = tp[1]           -- Récupère le premier objet
+    local nb = tp.n             -- Nombre d'objets à traiter
+    
+    -- Si un seul objet est passé
     if nb == 1 then
-          return projection_ ( self.pa, self.pb, obj )
+        return projection_(self.pa, self.pb, obj)  -- Projette l'objet sur la ligne
     else
-      local  t = {}
-        for i=1,tp.n do
-            table.insert( t , projection_ (self.pa, self.pb, tp[i])  ) 
-         end
-      return table.unpack ( t )      
+        local t = {}
+        -- Si plusieurs objets sont passés, on projette chacun d'eux sur la ligne
+        for i = 1, tp.n do
+            table.insert(t, projection_(self.pa, self.pb, tp[i]))  -- Projection de chaque objet
+        end
+        return table.unpack(t)  -- Retourne les projections
     end
 end
 
 function line:set_projection(...)
-	local tp = table.pack(...)
-	local i
-  local t = {}
-	for i=1,tp.n do
-        table.insert( t , projection_ (self.pa,self.pb , tp[i])  ) 
-	end
-  return table.unpack ( t )
+    local tp = table.pack(...)  -- Regroupe les arguments dans une table
+    local t = {}
+    -- Projette chaque objet sur la ligne
+    for i = 1, tp.n do
+        table.insert(t, projection_(self.pa, self.pb, tp[i]))  -- Projection de chaque objet
+    end
+    return table.unpack(t)  -- Retourne les projections
 end
 
+
 function line:symmetry_axial_L( obj )
   local pa = obj.pa
   local pb = obj.pb
-  local x,y = self:set_reflection(pa, pb)
-   return line : new  (x,y)
+  local x, y = self:set_reflection(pa, pb)
+  return line:new(x, y)
 end
+
 function line:symmetry_axial_T( obj )
-  local pa    = obj.pa
-  local pb    = obj.pb
-  local pc    = obj.pc
-  local x,y,z = self:set_reflection (pa, pb, pc)
-   return triangle : new  (x,y,z)
+  local pa = obj.pa
+  local pb = obj.pb
+  local pc = obj.pc
+  local x, y, z = self:set_reflection(pa, pb, pc)
+  return triangle:new(x, y, z)
 end
 
+
 function line:symmetry_axial_C( obj )
   local pa = obj.center
   local pb = obj.through
-  local x,y = self:set_reflection( pa,pb )
-   return circle : new  (x,y)
+  local x, y = self:set_reflection(pa, pb)
+  return circle:new(x, y)
 end
 
+
 function line:reflection(...)
-  local tp  = table.pack(...)
+  local tp = table.pack(...)
   local obj = tp[1]
-  local nb  = tp.n
-    if nb == 1 then
-       if obj.type == "point" then
-          return symmetry_axial_ ( self.pa,self.pb,obj )
-       elseif  obj.type == "line" then
-          return self: symmetry_axial_L (obj)
-       elseif obj.type == "triangle" then
-          return self: symmetry_axial_T (obj)
-       else
-         return self: symmetry_axial_C (obj)
-       end
+  local nb = tp.n
+  
+  if nb == 1 then
+    if obj.type == "point" then
+      return symmetry_axial_(self.pa, self.pb, obj)
+    elseif obj.type == "line" then
+      return self:symmetry_axial_L(obj)
+    elseif obj.type == "triangle" then
+      return self:symmetry_axial_T(obj)
     else
-      local  t = {}
-        for i=1,tp.n do
-            table.insert( t , symmetry_axial_ ( self.pa,self.pb , tp[i])  ) 
-         end
-      return table.unpack ( t )      
+      return self:symmetry_axial_C(obj)
     end
-end
-
-function line:set_reflection (...)
-    return set_symmetry_axial_ ( self.pb,self.pa,... )
-end
-
-function line:projection_ll(...)
-  local tp = table.pack(...)
-  local c,d = tp[1].pa,tp[1].pb
-  local obj = tp[2]
-  local nb = tp.n
-  if nb == 2 then
-        return projection_ll_(self.pa,self.pb,c,d,obj)
-      else
-        local  t = {}
-        for i=2,tp.n do
-            table.insert( t , projection_ll_ (self.pa, self.pb,c,d, tp[i])  ) 
-         end
-      return table.unpack ( t )      
+  else
+    local t = {}
+    for i = 1, tp.n do
+      table.insert(t, symmetry_axial_(self.pa, self.pb, tp[i]))
     end
+    return table.unpack(t)
+  end
 end
 
-function line:set_projection_ll(...)
-	local tp = table.pack(...)
-  local c,d = tp[1].pa,tp[1].pb
-  local t = {}
-	for i=2,tp.n do
-        table.insert( t , projection_ll_ (self.pa,self.pb ,c,d, tp[i])  ) 
-	end
-  return table.unpack ( t )
+function line:set_reflection(...)
+  return set_symmetry_axial_(self.pb, self.pa, ...)
 end
 
 function line:affinity(...)
@@ -352,69 +397,74 @@
 end
 
 function line:set_affinity(...)
-	local tp = table.pack(...)
-  local c,d = tp[1].pa,tp[1].pb
-  local k = tp[2]
+  local tp = table.pack(...)  -- Rassemble tous les arguments passés dans la table tp
+  local c, d = tp[1].pa, tp[1].pb  -- Extrait les deux points de la ligne de référence (tp[1])
+  local k = tp[2]  -- Le coefficient de l'affinité
   local t = {}
-	for i=3,tp.n do
-        table.insert( t , affinity_ (self.pa,self.pb ,c,d,k, tp[i])  ) 
-	end
-  return table.unpack ( t )
+
+  -- Applique l'affinité pour chaque objet passé en paramètre (à partir du 3ème objet)
+  for i = 3, tp.n do
+    table.insert(t, affinity_(self.pa, self.pb, c, d, k, tp[i]))  -- Applique l'affinité sur chaque objet
+  end
+  
+  return table.unpack(t)  -- Retourne les objets transformés
 end
-
 -------------------
 -- Result -> line
 -------------------
 function line:ll_from( pt )
-	return line : new (pt,pt+self.pb-self.pa) 
+	return line:new(pt, pt + self.pb - self.pa) 
 end
 
 function line:ortho_from( pt )
-	return  line : new (pt+(self.pb-self.pa)*point(0,-1),
-                      pt+(self.pb-self.pa)*point(0,1))
+	return line:new(pt + (self.pb - self.pa) * point(0, -1),
+                  pt + (self.pb - self.pa) * point(0, 1))
 end
 
 function line:mediator() 
-   local m = midpoint_ (self.pa,self.pb)
-  return line : new (rotation_ (m,-math.pi/2,self.pb),rotation_ (m,math.pi/2,self.pb)) 
+   local m = midpoint_(self.pa, self.pb)
+  return line:new(rotation_(m, -math.pi / 2, self.pb), rotation_(m, math.pi / 2, self.pb)) 
 end
 
-function line:perpendicular_bisector ()
-   local  m = midpoint_ (self.pa,self.pb)
-  return line : new (rotation_ (m,-math.pi/2,self.pb),rotation_ (m,math.pi/2,self.pb))
+function line:perpendicular_bisector()
+   local m = midpoint_(self.pa, self.pb)  -- Calcule le milieu de la ligne
+   return line:new(rotation_ (m,-math.pi / 2, self.pb), rotation_(m, math.pi / 2, self.pb))
+   -- Crée une ligne passant par les deux points de la rotation de 90° autour du milieu
 end
 
-function line: swap_line ()
-  self.pa,self.pb = self.pb,self.pa
-  return line : new (self.pa,self.pb)
+function line:swap_line()
+  self.pa, self.pb = self.pb, self.pa  -- Inverse les points pa et pb
+  return line:new(self.pa, self.pb)  -- Crée et retourne la ligne avec les points permutés
 end
+
 -------------------
 -- Result -> circle
 -------------------
+
 function line:circle(swap)
   swap = swap or false
   if swap then
-    return circle:new(self.pb,self.pa)
+    return circle:new(self.pb, self.pa)
   else
-    return circle:new(self.pa,self.pb)
+    return circle:new(self.pa, self.pb)
   end
 end
 
 function line:circle_swap()   
-    return circle : new (self.pb,self.pa)
+    return circle:new(self.pb,self.pa)
 end
 
 function line:diameter()
-   local c = midpoint_(self.pa,self.pb)
-  return circle:new (c,self.pb)
+   local c = midpoint_(self.pa, self.pb)
+  return circle:new(c, self.pb)
 end
 
 function line:apollonius(k)
    local z1,z2,c
-    z1     = barycenter_({self.pa,1},{self.pb,k})
-    z2     = barycenter_({self.pa,1},{self.pb,-k})
-    c      = midpoint_ (z1,z2)
-  return circle : new  (c,z2)
+    z1 = barycenter_({self.pa, 1}, {self.pb, k})
+    z2 = barycenter_({self.pa, 1}, {self.pb, -k})
+    c = midpoint_(z1, z2)
+  return circle:new(c, z2)
 end
 
 function line:test(x,y) 
@@ -430,24 +480,24 @@
   local i = intersection(lab, self) -- Intersection with current line
  
   -- One point on the line  (a)
-   if self : in_out(a)  and not self:in_out(b) 
+   if self:in_out(a) and not self:in_out(b) 
    then
-    local lmed  = lab : mediator()
+    local lmed = lab : mediator()
     local laperp = self:ortho_from(a)
     local o = intersection(lmed,laperp)
     return circle:new(o,a),
-            circle:new(o,a)
+           circle:new(o,a)
     end
       -- One point on the line  (b)
     if self:in_out(b) and not self:in_out(a) then
      local lmed  = lab:mediator()
      local laperp = self:ortho_from(b)
-     local o = intersection(lmed,laperp)
-     return circle:new(o,b),
-            circle:new(o,b)
+     local o = intersection(lmed, laperp)
+     return circle:new(o, b),
+            circle:new(o, b)
     end    
   -- Check: if the intersection exists and lies on the segment [a, b].
-   if i  and lab:in_out_segment(i) then
+   if i and lab:in_out_segment(i) then
     return nil, nil -- No circle is possible
    end
 
@@ -514,8 +564,6 @@
   end
 end
 
-
-
 ----------------------
 -- Result -> triangle
 ----------------------
@@ -528,210 +576,225 @@
     end
 end
 
-function line:isosceles(phi,swap)
-  local pta,ptb
-   swap = swap or false
-  if swap  then 
-     pta = rotation_(self.pa,-phi,self.pb)
-     ptb = rotation_(self.pb,phi,self.pa)
-   return triangle : new (self.pa,self.pb, intersection_ll_(self.pa,pta,self.pb,ptb ))
+function line:isosceles(phi, swap)
+  local pta, ptb
+  swap = swap or false  -- Si 'swap' est nil ou false, il est défini comme false
+  if swap then
+    -- Si 'swap' est vrai, effectuer les rotations dans un sens inverse
+    pta = rotation_(self.pa, -phi, self.pb)
+    ptb = rotation_(self.pb, phi, self.pa)
+    return triangle : new(self.pa, self.pb, intersection_ll_(self.pa, pta, self.pb, ptb))
   else
-    pta = rotation_(self.pa,phi,self.pb)
-    ptb = rotation_(self.pb,-phi,self.pa)
-  return triangle : new (self.pa,self.pb, intersection_ll_ (self.pa,pta,self.pb,ptb ))
+    -- Si 'swap' est faux, effectuer les rotations normales
+    pta = rotation_(self.pa, phi, self.pb)
+    ptb = rotation_(self.pb, -phi, self.pa)
+    return triangle : new(self.pa, self.pb, intersection_ll_(self.pa, pta, self.pb, ptb))
+  end
 end
-end
-line.isosceles_a = line.isosceles
 
-function line:isosceles_s(a,swap)
-     local c1,c2,pta,ptb,pt1,pt2
-  c1 = circle : radius (self.pa,a)
-  c2 = circle : radius (self.pb,a)
-  pta,ptb = intersection_cc (c1,c2)
-   if get_angle(self.pa,self.pb,pta) < get_angle(self.pa,self.pb,ptb) then
-     pt1=pta pt2=ptb
-      else  pt1=ptb pt2=pta end  
-   swap = swap or false
-  if swap  then
-   return triangle : new (self.pa,self.pb,pt2 )
+line.isosceles_a = line.isosceles  -- Alias pour la méthode isosceles
+
+function line:isosceles_s(a, swap)
+  local c1, c2, pta, ptb, pt1, pt2
+  -- Création des cercles de rayon 'a' centrés en self.pa et self.pb
+  c1 = circle : radius (self.pa, a)
+  c2 = circle : radius (self.pb, a)
+  
+  -- Calcul des points d'intersection des deux cercles
+  pta, ptb = intersection_cc(c1, c2)
+  
+  -- On compare les angles pour déterminer lequel des deux points d'intersection est le plus petit
+  if get_angle(self.pa, self.pb, pta) < get_angle(self.pa, self.pb, ptb) then
+    pt1 = pta
+    pt2 = ptb
   else
-  return triangle : new (self.pa,self.pb,pt1)
+    pt1 = ptb
+    pt2 = pta
+  end
+  
+  -- Si 'swap' est vrai, on retourne le triangle avec pt2, sinon avec pt1
+  swap = swap or false
+  if swap then
+    return triangle : new (self.pa, self.pb, pt2)
+  else
+    return triangle : new (self.pa, self.pb, pt1)
+  end
 end
-end
 
-function line:two_angles(alpha,beta,swap)
-   local pta,ptb,pt
-   swap = swap or false
-   if swap  then 
-     pta = rotation_(self.pa,-alpha,self.pb)
-     ptb = rotation_(self.pb,beta,self.pa)
-   else
-   pta = rotation_(self.pa,alpha,self.pb)
-   ptb = rotation_(self.pb,-beta,self.pa)
- end
-   pt = intersection_ll_(self.pa,pta,self.pb,ptb)
-   return triangle:new(self.pa,self.pb,pt)
+function line:two_angles(alpha, beta, swap)
+    local pta, ptb, pt
+    swap = swap or false
+    
+    if swap then
+        pta = rotation_(self.pa, -alpha, self.pb)
+        ptb = rotation_(self.pb, beta, self.pa)
+    else
+        pta = rotation_(self.pa, alpha, self.pb)
+        ptb = rotation_(self.pb, -beta, self.pa)
+    end
+    
+    pt = intersection_ll_(self.pa, pta, self.pb, ptb)
+    return triangle:new(self.pa, self.pb, pt)
 end
 
+
 function line:school(swap)
-   local pta,ptb,pt
+   local pta, ptb, pt
    swap = swap or false
-   if swap  then 
-     pta = rotation_(self.pa,-math.pi/6,self.pb)
-     ptb = rotation_(self.pb,math.pi/3,self.pa)
+
+   if swap then
+       pta = rotation_(self.pa, -math.pi / 6, self.pb)
+       ptb = rotation_(self.pb, math.pi / 3, self.pa)
    else
-   pta = rotation_(self.pa,math.pi/6,self.pb)
-   ptb = rotation_(self.pb,-math.pi/3,self.pa)
+       pta = rotation_(self.pa, math.pi / 6, self.pb)
+       ptb = rotation_(self.pb, -math.pi / 3, self.pa)
    end
-   pt = intersection_ll_(self.pa,pta,self.pb,ptb)
-   return triangle:new(self.pa,self.pb,pt)
+
+   pt = intersection_ll_(self.pa, pta, self.pb, ptb)
+   return triangle:new(self.pa, self.pb, pt)
 end
 
+
 function line:half(swap)
-   local x,pt
-   x  = midpoint_(self.pa,self.pb)
+   local x, pt
+   x = midpoint_(self.pa, self.pb)
    swap = swap or false
-   if swap  then 
-    pt = rotation_(self.pb,math.pi/2,x)  
+
+   if swap then
+       pt = rotation_(self.pb, math.pi / 2, x)
    else
-   pt = rotation_(self.pb,-math.pi/2,x)
-    end
-   return triangle:new(self.pa,self.pb,pt)
+       pt = rotation_(self.pb, -math.pi / 2, x)
+   end
+
+   return triangle:new(self.pa, self.pb, pt)
 end
 
-function line:sss(a,b,swap)
-   local pta,ptb,i,j
+function line:sss(a, b, swap)
+   local pta, ptb, i, j
    swap = swap or false
-    pta = self.pa + point ( a,  0 )
-    ptb = self.pb + point ( -b , 0)
-    i,j = intersection_cc_ (self.pa,pta,self.pb,ptb)
-       if swap  then 
-   return triangle : new (self.pa,self.pb,j)
- else 
-   return triangle : new (self.pa,self.pb,i)
- end
+
+   pta = self.pa + point(a, 0)
+   ptb = self.pb + point(-b, 0)
+
+   i, j = intersection_cc_(self.pa, pta, self.pb, ptb)
+
+   if swap then
+       return triangle:new(self.pa, self.pb, j)
+   else
+       return triangle:new(self.pa, self.pb, i)
+   end
 end
 
-function line:ssa(a, phi,swap)
+function line:ssa(a, phi, swap)
     local x, y, i, j
-     swap = swap or false
+    swap = swap or false
+
     x = rotation_(self.pb, -phi, self.pa)
     y = self.pa + polar_(a, self.slope)
+
     i, j = intersection_lc_(self.pb, x, self.pa, y)
-    if swap  then  
-     return  triangle:new(self.pa, self.pb, j)
+
+    if swap then
+        return triangle:new(self.pa, self.pb, j)
     else
-      return triangle:new(self.pa, self.pb, i)
+        return triangle:new(self.pa, self.pb, i)
     end
 end
 
-function line:sas(a, phi,swap)
+function line:sas(a, phi, swap)
     local x, pt
     swap = swap or false
+
     x = self.pa + polar_(a, self.slope)
-     if swap  then 
-        pt = rotation_(self.pa, -phi, x) 
-     else
-     pt = rotation_(self.pa, phi, x)
-  end
-   return triangle:new(self.pa, self.pb, pt)
+
+    if swap then
+        pt = rotation_(self.pa, -phi, x)
+    else
+        pt = rotation_(self.pa, phi, x)
+    end
+
+    return triangle:new(self.pa, self.pb, pt)
 end
 
-function line:asa(alpha,beta,swap)
-   local pta,ptb,pt
-   swap = swap or false
-    if swap  then 
-      pta = rotation_ (self.pa,-alpha,self.pb)
-      ptb = rotation_ (self.pb,beta,self.pa)
+function line:asa(alpha, beta, swap)
+    local pta, ptb, pt
+    swap = swap or false
+
+    if swap then
+        pta = rotation_(self.pa, -alpha, self.pb)
+        ptb = rotation_(self.pb, beta, self.pa)
     else
-   pta = rotation_ (self.pa,alpha,self.pb)
-   ptb = rotation_ (self.pb,-beta,self.pa)
- end
- pt = intersection_ll_ (self.pa,pta,self.pb,ptb)
-   return triangle : new (self.pa,self.pb,pt)
+        pta = rotation_(self.pa, alpha, self.pb)
+        ptb = rotation_(self.pb, -beta, self.pa)
+    end
+
+    pt = intersection_ll_(self.pa, pta, self.pb, ptb)
+    return triangle:new(self.pa, self.pb, pt)
 end
+
+--------------------------
 ---- sacred triangles ----
+--------------------------
 
 function line:gold(swap)
     local pt
-     swap = swap or false
-     if swap  then  
-        pt = rotation_ (self.pa,-math.pi/2,self.pb)
-      return triangle : new (self.pa,self.pb, self.pa + (pt-self.pa) * tkzinvphi)
+    swap = swap or false
+
+    if swap then  
+        pt = rotation_(self.pa, -math.pi / 2, self.pb)
     else
-         pt = rotation_ (self.pa,math.pi/2,self.pb)
-      return triangle : new (self.pa,self.pb, self.pa + (pt-self.pa) * tkzinvphi)
+        pt = rotation_(self.pa, math.pi / 2, self.pb)
     end
+    
+    return triangle:new(self.pa, self.pb, self.pa + (pt - self.pa) * tkzinvphi)
 end
 
 function line:sublime(swap)
-   local pta,ptb,pt
-   swap = swap or false
-   if swap  then  
-     pta = rotation_(self.pa,-2*math.pi/5,self.pb)
-     ptb = rotation_(self.pb,2*math.pi/5,self.pa)
-     pt = intersection_ll_(self.pa,pta,self.pb,ptb)
-     return triangle:new(self.pa,self.pb,pt)
-   else
-  pta = rotation_(self.pa,2*math.pi/5,self.pb)
-  ptb = rotation_(self.pb,-2*math.pi/5,self.pa)
-  pt = intersection_ll_(self.pa,pta,self.pb,ptb)
-  return triangle:new(self.pa,self.pb,pt)
+    local pta, ptb, pt
+    swap = swap or false
+    local angle = 2 * math.pi / 5
+
+    if swap then  
+        pta = rotation_(self.pa, -angle, self.pb)
+        ptb = rotation_(self.pb, angle, self.pa)
+    else
+        pta = rotation_(self.pa, angle, self.pb)
+        ptb = rotation_(self.pb, -angle, self.pa)
+    end
+
+    pt = intersection_ll_(self.pa, pta, self.pb, ptb)
+    return triangle:new(self.pa, self.pb, pt)
 end
-end
 
 line.euclid = line.sublime
 
-function line:euclide (swap)
-  swap = swap or false
-  if swap  then  
-     return triangle : new (self.pa,self.pb, rotation_(self.pa,-math.pi/5,self.pb))
-  else
-     return triangle : new (self.pa,self.pb, rotation_(self.pa,math.pi/5,self.pb))
-     end
-  end
+function line:euclide(swap)
+    swap = swap or false
+    local angle = math.pi / 5
+    return triangle:new(self.pa, self.pb, rotation_(self.pa, swap and -angle or angle, self.pb))
+end
 
-  function line:divine(swap)
-      local pta, ptb, pt
-      swap = swap or false
-      if swap  then  
-        pta = rotation_(self.pa, -math.pi / 5, self.pb)
-        ptb = rotation_(self.pb, math.pi / 5, self.pa)
-        pt = intersection_ll_(self.pa, pta, self.pb, ptb)
-        return triangle:new(self.pa, self.pb, pt)
-      else
-      pta = rotation_(self.pa, math.pi / 5, self.pb)
-      ptb = rotation_(self.pb, -math.pi / 5, self.pa)
-      pt = intersection_ll_(self.pa, pta, self.pb, ptb)
-      return triangle:new(self.pa, self.pb, pt)
-    end
-  end
+function line:divine(swap)
+    swap = swap or false
+    local angle = math.pi / 5
+    local pta = rotation_(self.pa, swap and -angle or angle, self.pb)
+    local ptb = rotation_(self.pb, swap and angle or -angle, self.pa)
+    local pt = intersection_ll_(self.pa, pta, self.pb, ptb)
+    return triangle:new(self.pa, self.pb, pt)
+end
 
 function line:cheops(swap)
-    local m, n, pt
-    m = midpoint_(self.pa, self.pb)
     swap = swap or false
-    if swap  then 
-      n = rotation_(m, math.pi / 2, self.pa)
-     pt = m + (n - m) * tkzsqrtphi 
-else
-      n = rotation_(m, -math.pi / 2, self.pa)
-     pt = m + (n - m) * tkzsqrtphi
-  end
+    local m = midpoint_(self.pa, self.pb)
+    local n = rotation_(m, swap and math.pi / 2 or -math.pi / 2, self.pa)
+    local pt = m + (n - m) * tkzsqrtphi
     return triangle:new(self.pa, self.pb, pt)
 end
 
-
 function line:egyptian(swap)
-    local n, pt
     swap = swap or false
-    if swap  then 
-      n = rotation_(self.pb, math.pi / 2, self.pa)
-      pt = self.pb + (n - self.pb) / point.mod(n - self.pb) * self.length * 0.75
-   else  
-    n = rotation_(self.pb, -math.pi / 2, self.pa)
-    pt = self.pb + (n - self.pb) / point.mod(n - self.pb) * self.length * 0.75
-  end
+    local n = rotation_(self.pb, swap and math.pi / 2 or -math.pi / 2, self.pa)
+    local pt = self.pb + (n - self.pb) / point.mod(n - self.pb) * self.length * 0.75
     return triangle:new(self.pa, self.pb, pt)
 end
 
@@ -741,17 +804,11 @@
 line.golden_gnomon = line.divine
 
 ------------------------------
--- Result -> square
+-- Résultat -> carré
 ------------------------------
-function line:square (swap)
-   swap = swap or false
-   if swap  
-   then
-      return square : side (self.pa,self.pb,indirect)
-   else
-        return square : side (self.pa,self.pb)
-   
-   end
+function line:square(swap)
+    swap = swap or false
+    return square:side(self.pa, self.pb, swap and indirect or nil)
 end
 
 

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_main.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_main.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_main.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,18 +1,18 @@
--- tkz_elements-main.lua
--- date 2025/02/26
--- version 3.32
+-- tkz_elements_main.lua
+-- date 2025/03/04
+-- version 3.34c
 -- Copyright 2025  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
+-- 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.
 
--- loads module
+-- Load modules
 require "tkz_elements_point.lua"
 require "tkz_elements_line.lua"
 require "tkz_elements_circle.lua"
@@ -25,10 +25,10 @@
 require "tkz_elements_quadrilateral.lua"
 require "tkz_elements_rectangle.lua"
 require "tkz_elements_square.lua"
-require "tkz_elements_misc.lua"
 require "tkz_elements_vector.lua"
 require "tkz_elements_occs.lua"
 
+require "tkz_elements_functions_misc.lua"
 require "tkz_elements_functions_maths.lua"
 require "tkz_elements_functions_intersections.lua"
 require "tkz_elements_functions_points.lua"
@@ -40,21 +40,26 @@
 require "tkz_elements_matrices.lua"
 require "tkz_elements_functions_conics.lua"
 
-function init_elements ()
-  scale=1
-  z={}
-  C={}
-  L={}
-  M={}
-  P={}
-  Q={}
-  R={}
-  RP={}
-  S={}
-  T={}
-  V={}
-  CO={}
-  EL={}
-  PA={}
-  HY={}
-end  
\ No newline at end of file
+-- Initialize elements
+function init_elements()
+    z = {}
+    C = {}
+    L = {}
+    M = {}
+    P = {}
+    Q = {}
+    R = {}
+    RP = {}
+    S = {}
+    T = {}
+    V = {}
+    CO = {}
+    EL = {}
+    PA = {}
+    HY = {}
+    tkz_epsilon  = 1e-8
+    tkz_dc       = 2
+    indirect     = true
+    inside       = true
+    swap         = true
+end

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_matrices.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_matrices.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_matrices.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,12 +1,12 @@
 -- tkz_elements_matrices.lua
--- date 2025/02/26
--- version 3.32
+-- date 2025/03/04
+-- version 3.34c
 -- Copyright 2025  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
+-- 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”.
@@ -13,74 +13,73 @@
 -- The Current Maintainer of this work is Alain Matthes.
 
 -- ----------------------------------------------------------------------------
-matrix={}
-function matrix: new (value)
-    local type          = 'matrix'
-    local rows          = #value
-    local cols          = #value[1]
-    local set           = value
-    local det           = determinant(value)
-    local o =  {set    = set,
-                rows   = rows,
-                cols   = cols,
-                det    = det,
-                type   = type }
-    setmetatable(o, self)
-    self.__index = self
-    return o
+matrix = {}
+function matrix:new(value)
+	local type = "matrix"
+	local rows = #value
+	local cols = #value[1]
+	local set = value
+	local det = determinant(value)
+	local o = { set = set, rows = rows, cols = cols, det = det, type = type }
+	setmetatable(o, self)
+	self.__index = self
+	return o
 end
 
-function matrix.__mul(m1,m2)
-  if getmetatable(m1) ~= matrix then return  k_mul_matrix(m1, m2) end  
-  if getmetatable(m2) ~= matrix then return  k_mul_matrix(m2, m1) end
-  return mul_matrix(m1,m2)
+function matrix.__mul(m1, m2)
+	if getmetatable(m1) ~= matrix then
+		return k_mul_matrix(m1, m2)
+	end
+	if getmetatable(m2) ~= matrix then
+		return k_mul_matrix(m2, m1)
+	end
+	return mul_matrix(m1, m2)
 end
 
-function matrix.__add(m1,m2)
-  return add_matrix(m1,m2)
+function matrix.__add(m1, m2)
+	return add_matrix(m1, m2)
 end
 
-function matrix.__sub(m1,m2)
-  return add_matrix(m1,k_mul_matrix(-1, m2))
+function matrix.__sub(m1, m2)
+	return add_matrix(m1, k_mul_matrix(-1, m2))
 end
 
 function matrix.__pow(m, num)
-   -- Handle transpose (when num is 'T')
-   if num == 'T' then
-      return transposeMatrix(m)
-   end
+	-- Handle transpose (when num is 'T')
+	if num == "T" then
+		return transposeMatrix(m)
+	end
 
-   -- Handle exponentiation by 0 (returns the identity matrix)
-   if num == 0 then
-      return matrix:new(#m, "I")  -- Identity matrix
-   end
+	-- Handle exponentiation by 0 (returns the identity matrix)
+	if num == 0 then
+		return matrix:new(#m, "I") -- Identity matrix
+	end
 
-   -- Handle negative exponents (invert the matrix)
-   if num < 0 then
-      local inv_matrix, err = inv_matrix(m)
-      if not inv_matrix then 
-         return nil, err  -- Return nil and the error if matrix is non-invertible
-      end
-      num = -num  -- Make exponent positive for easier handling
-      m = inv_matrix  -- Now use the inverted matrix
-   end
+	-- Handle negative exponents (invert the matrix)
+	if num < 0 then
+		local inv_matrix, err = inv_matrix(m)
+		if not inv_matrix then
+			return nil, err -- Return nil and the error if matrix is non-invertible
+		end
+		num = -num -- Make exponent positive for easier handling
+		m = inv_matrix -- Now use the inverted matrix
+	end
 
-   -- Now handle the positive exponentiation
-   local result = m
-   for i = 2, num do
-      result = mul_matrix(result, m)  -- Repeated multiplication
-   end
+	-- Now handle the positive exponentiation
+	local result = m
+	for i = 2, num do
+		result = mul_matrix(result, m) -- Repeated multiplication
+	end
 
-   return result
+	return result
 end
 
-
-function matrix.__tostring( A )
-  local mt = (A.type=='matrix' and A.set or A)
+function matrix.__tostring(A)
+	local mt = (A.type == "matrix" and A.set or A)
 	local k = {}
-	for i = 1,#mt do
+	for i = 1, #mt do
 		local n = {}
-		for j = 1,#mt[1] do
+		for j = 1, #mt[1] do
 			n[j] = display(mt[i][j])
 		end
 		k[i] = table.concat(n, " ")
@@ -88,9 +87,9 @@
 	return table.concat(k)
 end
 
-function matrix.__eq( A , B )
-  local mt1 = (A.type=='matrix' and A.set or A)
-  local mt2 = (B.type=='matrix' and B.set or B)
+function matrix.__eq(A, B)
+	local mt1 = (A.type == "matrix" and A.set or A)
+	local mt2 = (B.type == "matrix" and B.set or B)
 	if A.type ~= B.type then
 		return false
 	end
@@ -99,8 +98,8 @@
 		return false
 	end
 
-	for i = 1,#mt1 do
-		for j = 1,#mt1[1] do
+	for i = 1, #mt1 do
+		for j = 1, #mt1[1] do
 			if mt1[i][j] ~= mt2[i][j] then
 				return false
 			end
@@ -109,122 +108,123 @@
 	return true
 end
 
-function matrix : square(n,...)
-   local m = {}
-   local t = table.pack(...)
-   if n*n == #t then
-      for i = 1, n do
-           m[i] = {}
-          for j = 1, n do
-                  m[i][j] = t[n*(i-1)+j]
-          end
-      end
-      return matrix : new (m)
-   else
-      return nil
-   end
+function matrix:square(n, ...)
+	local m = {}
+	local t = table.pack(...)
+	if n * n == #t then
+		for i = 1, n do
+			m[i] = {}
+			for j = 1, n do
+				m[i][j] = t[n * (i - 1) + j]
+			end
+		end
+		return matrix:new(m)
+	else
+		return nil
+	end
 end
 
-function matrix: vector (...)
-  local m = {}
-  local t = table.pack(...)
-  for i = 1, #t do
-       m[i] = {}
-      m[i][1] = t[i]
-  end
-  return matrix : new (m)
+function matrix:vector(...)
+	local m = {}
+	local t = table.pack(...)
+	for i = 1, #t do
+		m[i] = {}
+		m[i][1] = t[i]
+	end
+	return matrix:new(m)
 end
 
-function matrix : homogenization ()
-  return homogenization_ (self)
+function matrix:homogenization()
+	return homogenization_(self)
 end
 
-function matrix : htm_apply (...)
-  local obj,nb,t
-  local tp = table.pack(...)
-  obj = tp[1]
-  nb = tp.n
-  if nb == 1 then 
-     if obj.type == "point" then
-        return htm_apply_ ( self,obj )
-     elseif    obj.type == "line" then 
-           return  htm_apply_L_ (self,obj)
-     elseif    obj.type == "triangle" then
-          return   htm_apply_T_ (self,obj)
-     elseif    obj.type == "circle" then
-        return     htm_apply_C (self,obj)
-      elseif   obj.type == "square"
-            or obj.type == "rectangle"
-            or obj.type == "quadrilateral"
-            or obj.type == "parallelogram" then
-        return     htm_apply_Q (self,obj)
-      end
-  else
-    t = {}
-     for i=1,tp.n do
-    table.insert(t , htm_apply_ ( self , tp[i])) 
-       end
-    return table.unpack ( t )      
-  end
+function matrix:htm_apply(...)
+	local obj, nb, t
+	local tp = table.pack(...)
+	obj = tp[1]
+	nb = tp.n
+	if nb == 1 then
+		if obj.type == "point" then
+			return htm_apply_(self, obj)
+		elseif obj.type == "line" then
+			return htm_apply_L_(self, obj)
+		elseif obj.type == "triangle" then
+			return htm_apply_T_(self, obj)
+		elseif obj.type == "circle" then
+			return htm_apply_C(self, obj)
+		elseif
+			obj.type == "square"
+			or obj.type == "rectangle"
+			or obj.type == "quadrilateral"
+			or obj.type == "parallelogram"
+		then
+			return htm_apply_Q(self, obj)
+		end
+	else
+		t = {}
+		for i = 1, tp.n do
+			table.insert(t, htm_apply_(self, tp[i]))
+		end
+		return table.unpack(t)
+	end
 end
 
-function matrix: k_mul (n)
-  return k_mul_matrix(n, self)
+function matrix:k_mul(n)
+	return k_mul_matrix(n, self)
 end
 
-function matrix : get (i,j)
-  return get_element_( self,i,j )
+function matrix:get(i, j)
+	return get_element_(self, i, j)
 end
 
-function matrix: inverse ()
-  return inv_matrix (self)
+function matrix:inverse()
+	return inv_matrix(self)
 end
 
-function matrix: adjugate ()
-  return adjugate_ (self)
+function matrix:adjugate()
+	return adjugate_(self)
 end
 
-function matrix: transpose ()
-  return transposeMatrix (self)
+function matrix:transpose()
+	return transposeMatrix(self)
 end
 
-function matrix: is_diagonal ()
-  return isDiagonal_ (self)
+function matrix:is_diagonal()
+	return isDiagonal_(self)
 end
 
-function matrix: is_orthogonal ()
-  return isOrthogonal_ (self)
+function matrix:is_orthogonal()
+	return isOrthogonal_(self)
 end
 
-function matrix: diagonalize () -- return two matrices D and P
-  return diagonalize_ (self)
+function matrix:diagonalize() -- return two matrices D and P
+	return diagonalize_(self)
 end
 
-function matrix: print (style,fmt)
-  local style = (style or 'bmatrix')
-  local fmt  = (fmt or 0)
-  return print_matrix (self,style,fmt)
+function matrix:print(style, fmt)
+	local style = (style or "bmatrix")
+	local fmt = (fmt or 0)
+	return print_matrix(self, style, fmt)
 end
 
-function matrix: identity (n)
-  return id_matrix (n)
+function matrix:identity(n)
+	return id_matrix(n)
 end
 
 -------------------------
 -- homogeneous transformation matrix
-function matrix : htm (phi,a,b,sx,sy)
-  local tx = (a or 0)
-  local ty = (b or 0)
-  local sx = (sx or 1)
-  local sy = (sy or 1)
-  local phi = (phi or 0)
-  return matrix : square (3,sx*math.cos(phi),-math.sin(phi),tx,math.sin(phi),sy*math.cos(phi),ty,0,0,1)
+function matrix:htm(phi, a, b, sx, sy)
+	local tx = (a or 0)
+	local ty = (b or 0)
+	local sx = (sx or 1)
+	local sy = (sy or 1)
+	local phi = (phi or 0)
+	return matrix:square(3, sx * math.cos(phi), -math.sin(phi), tx, math.sin(phi), sy * math.cos(phi), ty, 0, 0, 1)
 end
 -------------------------
 
-function matrix: is_orthogonal ()
-  return isOrthogonal_ (self)
+function matrix:is_orthogonal()
+	return isOrthogonal_(self)
 end
 
 return matrix
-

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_occs.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_occs.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_occs.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,12 +1,12 @@
 -- tkz_elements_occs.lua
--- date 2025/02/26
--- version 3.32
+-- date 2025/03/04
+-- version 3.34c
 -- Copyright 2025  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
+-- 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”.
@@ -13,37 +13,36 @@
 -- The Current Maintainer of this work is Alain Matthes.
 
 occs = {}
-function occs: new (L,zO)
-   local type              = 'occs'
-   local origin            = zO
-   local y                 = get_v(L,zO)
-   local x                 = rotation_(zO,-math.pi/2,y)
-   local abscissa          = line : new (zO,x)
-   local ordinate          = line : new (zO,y)
-   local o = { origin      = origin,
-               x           = x,
-               y           = y,
-               abscissa    = abscissa, 
-               ordinate    = ordinate,
-               type        = type }
-    setmetatable(o, self)
-    self.__index = self
-    return o
+function occs:new(L, zO)
+	local type = "occs"
+	local origin = zO
+	local y = get_v(L, zO)
+	local x = rotation_(zO, -math.pi / 2, y)
+	local abscissa = line:new(zO, x)
+	local ordinate = line:new(zO, y)
+	local o = { origin = origin, 
+  x = x, 
+  y = y, 
+  abscissa = abscissa, 
+  ordinate = ordinate, 
+  type = type }
+	setmetatable(o, self)
+	self.__index = self
+	return o
 end
 -----------------------
-function occs : coordinates  (pt) -- S,U,V orthonormé
-  local xs  = self.origin.re
-  local ys  = self.origin.im
-  local x   = pt.re
-  local y   = pt.im
-  local xsu = (self.x-self.origin).re
-  local ysu = (self.x-self.origin).im
-  local xsv = (self.y-self.origin).re
-  local ysv = (self.y-self.origin).im
-  local xxs = x-xs
-  local yys = y-ys
- return checknumber(xsu * xxs + ysu * yys),
-        checknumber(xsv * xxs + ysv * yys)
+function occs:coordinates(pt) -- S,U,V orthonormé
+	local xs = self.origin.re
+	local ys = self.origin.im
+	local x = pt.re
+	local y = pt.im
+	local xsu = (self.x - self.origin).re
+	local ysu = (self.x - self.origin).im
+	local xsv = (self.y - self.origin).re
+	local ysv = (self.y - self.origin).im
+	local xxs = x - xs
+	local yys = y - ys
+	return checknumber(xsu * xxs + ysu * yys), checknumber(xsv * xxs + ysv * yys)
 end
 
-return occs
\ No newline at end of file
+return occs

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_parallelogram.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_parallelogram.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_parallelogram.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,12 +1,12 @@
 -- tkz_elements_parallelogram.lua
--- date 2025/02/26
--- version 3.32
+-- date 2025/03/04
+-- version 3.34c
 -- Copyright 2025  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
+-- 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”.
@@ -16,40 +16,44 @@
 ---------------------------------------------------------------------------
 
 parallelogram = {}
-function parallelogram: new (za, zb, zc, zd)
-   local d
-   local zi = midpoint_ (za,zc)
-   local zj = midpoint_ (zb,zd)
-   if point.abs (zj-zi) < tkz_epsilon  then  else error ("it's not a parallelogram")    
-   end
-   local type              = 'parallelogram'
-   local center                 = midpoint_ (za,zc)
-   local ab                 = line : new (za,zb)
-   local bc                 = line : new (zb,zc)
-   local cd                 = line : new (zc,zd)
-   local da                 = line : new (zd,za)
-   local ac                 = line : new (za,zc)
-   local bd                 = line : new (zb,zd)
-   local o  = {   pa       = za, 
-                  pb       = zb, 
-                  pc       = zc,
-                  pd       = zd,
-                  ab       = ab,
-                  ac       = ac,
-                  bc       = bc,
-                  da       = da,
-                  cd       = cd,
-                  bd       = bd,
-                  center   = center,
-                  type     = type  }
-    setmetatable(o, self)
-    self.__index = self
-    return o
+function parallelogram:new(za, zb, zc, zd)
+	local d
+	local zi = midpoint_(za, zc)
+	local zj = midpoint_(zb, zd)
+	if point.abs(zj - zi) < tkz_epsilon then
+	else
+		error("it's not a parallelogram")
+	end
+	local type = "parallelogram"
+	local center = midpoint_(za, zc)
+	local ab = line:new(za, zb)
+	local bc = line:new(zb, zc)
+	local cd = line:new(zc, zd)
+	local da = line:new(zd, za)
+	local ac = line:new(za, zc)
+	local bd = line:new(zb, zd)
+	local o = {
+		pa = za,
+		pb = zb,
+		pc = zc,
+		pd = zd,
+		ab = ab,
+		ac = ac,
+		bc = bc,
+		da = da,
+		cd = cd,
+		bd = bd,
+		center = center,
+		type = type,
+	}
+	setmetatable(o, self)
+	self.__index = self
+	return o
 end
 
-function parallelogram : fourth (za,zb,zc)
-   local zd = zc + (za-zb)
-   return parallelogram : new (za, zb, zc, zd)
-end 
+function parallelogram:fourth(za, zb, zc)
+	local zd = zc + (za - zb)
+	return parallelogram:new(za, zb, zc, zd)
+end
 
-return parallelogram
\ No newline at end of file
+return parallelogram

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_point.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_point.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_point.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,12 +1,12 @@
 -- tkz_elements_point.lua
--- date 2025/02/26
--- version 3.32
+-- date 2025/03/04
+-- version 3.34c
 -- Copyright 2025  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
+-- 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”.
@@ -13,238 +13,269 @@
 -- The Current Maintainer of this work is Alain Matthes.
 
 -- point.lua
-require 'tkz_elements_class'
+require("tkz_elements_class")
 
-point = class(function(p,re,im)
-       if type(re) == 'number' then 
-         p.re     = re
-         p.im     = im
-       else       
-         p.re     = re.re
-         p.im     = re.im
-       end
-       p.type     = 'point'
-       p.argument = math.atan(p.im, p.re)
-       p.modulus  = math.sqrt(p.re * p.re  + p.im * p.im)
-       p.mtx      = matrix : new {{p.re},{p.im}}
+point = class(function(p, re, im)
+	if type(re) == "number" then
+		p.re = re
+		p.im = im
+	else
+		p.re = re.re
+		p.im = re.im
+	end
+	p.type = "point"
+	p.argument = math.atan(p.im, p.re)
+	p.modulus = math.sqrt(p.re * p.re + p.im * p.im)
+	p.mtx = matrix:new({ { p.re }, { p.im } })
 end)
 
 local sqrt = math.sqrt
-local cos  = math.cos
-local sin  = math.sin
-local exp  = math.exp
+local cos = math.cos
+local sin = math.sin
+local exp = math.exp
 local atan = math.atan
-local min  = math.min
-local max  = math.max
-local abs  = math.abs
+local min = math.min
+local max = math.max
+local abs = math.abs
 
-local function topoint (z1)
-   if (type(z1) == "number") then return point(z1,0) else return z1 end
+local function topoint(z1)
+	if type(z1) == "number" then
+		return point(z1, 0)
+	else
+		return z1
+	end
 end
 
-local function check(z1,z2)
-  if     type(z1) == 'number' then return point(z1,0),z2
-  elseif type(z2) == 'number' then return z1,point(z2,0) 
-  else return z1,z2
-  end
+local function check(z1, z2)
+	if type(z1) == "number" then
+		return point(z1, 0), z2
+	elseif type(z2) == "number" then
+		return z1, point(z2, 0)
+	else
+		return z1, z2
+	end
 end
 -- -------------------------------------------------------------------
 -- metamethods
 -- -------------------------------------------------------------------
 -- redefine arithmetic operators!
-function point.__add(z1,z2)
-  local c1,c2 = check(z1,z2)
-  return point(c1.re + c2.re, c1.im + c2.im)
+function point.__add(z1, z2)
+	local c1, c2 = check(z1, z2)
+	return point(c1.re + c2.re, c1.im + c2.im)
 end
 
-function point.__sub(z1,z2)
-  local c1,c2 = check(z1,z2)
-  return point(c1.re - c2.re, c1.im - c2.im)
+function point.__sub(z1, z2)
+	local c1, c2 = check(z1, z2)
+	return point(c1.re - c2.re, c1.im - c2.im)
 end
 
 function point.__unm(z)
-    local z = topoint(z)
-  return point(-z.re, -z.im)
+	local z = topoint(z)
+	return point(-z.re, -z.im)
 end
 
-function point.__mul(z1,z2)
-  local c1,c2 = check(z1,z2)
-  return point(c1.re*c2.re - c1.im*c2.im, c1.im*c2.re + c1.re*c2.im)
+function point.__mul(z1, z2)
+	local c1, c2 = check(z1, z2)
+	return point(c1.re * c2.re - c1.im * c2.im, c1.im * c2.re + c1.re * c2.im)
 end
 
--- dot product is '..'  (a+ib) (c-id) = ac+bd + i(bc-ad) 
-function point.__concat(z1,z2)
-    local z
-    z = z1 * point.conj(z2)
-  return z.re
+-- dot product is '..'  (a+ib) (c-id) = ac+bd + i(bc-ad)
+function point.__concat(z1, z2)
+	local z
+	z = z1 * point.conj(z2)
+	return z.re
 end
 
 -- determinant  is '^'   (a-ib) (c+id) = ac+bd + i(ad - bc)
-function point.__pow(z1,z2)
-    local z
-    z = point.conj(z1) * z2
-   return z.im
+function point.__pow(z1, z2)
+	local z
+	z = point.conj(z1) * z2
+	return z.im
 end
 
-function point.__div(x,y)
-   local xx = topoint(x); local yy = topoint(y)
-   return point(
-      (xx.re * yy.re + xx.im * yy.im) / (yy.re * yy.re + yy.im * yy.im),
-      (xx.im * yy.re - xx.re * yy.im) / (yy.re * yy.re + yy.im * yy.im)
-   )
+function point.__div(x, y)
+	local xx = topoint(x)
+	local yy = topoint(y)
+	return point(
+		(xx.re * yy.re + xx.im * yy.im) / (yy.re * yy.re + yy.im * yy.im),
+		(xx.im * yy.re - xx.re * yy.im) / (yy.re * yy.re + yy.im * yy.im)
+	)
 end
 
 function point.__tostring(z)
-  local real = z.re
-  local imag = z.im
-   if (real == 0) then
-      if (imag == 0) then 
-         return "0"
-      else
-         if  (imag == 1) then
-            return ""  .. "i"
-         else
-            if  (imag == -1) then
-               return ""  .. "-i"
-            else
-            local  imag = string.format( "%."..tkz_dc.."f",imag)
-         return "" .. imag .. "i"
-      end
-      end
-      end
-   else
-      if (imag > 0) then
-        if  (imag ==1) then 
-            if is_integer (real) then real = math.round(real) else
-            real = string.format( "%."..tkz_dc.."f",real) end
-           return "" .. real .. "+"  .. "i"
-        else
-          if is_integer (real) then real = math.round(real) else
-          real = string.format( "%."..tkz_dc.."f",real) end
-            imag = string.format( "%."..tkz_dc.."f",imag)
-         return "" .. real .. "+" .. imag .. "i"
-     end
-      elseif (imag < 0) then
-         if  (imag == -1) then
-           if is_integer (real) then real = math.round(real) else
-           real = string.format( "%."..tkz_dc.."f",real) end
-             imag = string.format( "%."..tkz_dc.."f",imag)
-            return "" .. real .. "-"  .. "i"
-         else
-           if is_integer (real) then real = math.round(real) else
-           real = string.format( "%."..tkz_dc.."f",real) end
-             imag = string.format( "%."..tkz_dc.."f",imag)
-         return "" .. real .. imag .. "i"
-      end
-      else
-        if is_integer (real) then real = math.round(real) else
-        real = string.format( "%."..tkz_dc.."f",real) end
-         return "" .. real
-
-      end
-   end
+	local real = z.re
+	local imag = z.im
+	if real == 0 then
+		if imag == 0 then
+			return "0"
+		else
+			if imag == 1 then
+				return "" .. "i"
+			else
+				if imag == -1 then
+					return "" .. "-i"
+				else
+					local imag = string.format("%." .. tkz_dc .. "f", imag)
+					return "" .. imag .. "i"
+				end
+			end
+		end
+	else
+		if imag > 0 then
+			if imag == 1 then
+				if is_integer(real) then
+					real = math.round(real)
+				else
+					real = string.format("%." .. tkz_dc .. "f", real)
+				end
+				return "" .. real .. "+" .. "i"
+			else
+				if is_integer(real) then
+					real = math.round(real)
+				else
+					real = string.format("%." .. tkz_dc .. "f", real)
+				end
+				imag = string.format("%." .. tkz_dc .. "f", imag)
+				return "" .. real .. "+" .. imag .. "i"
+			end
+		elseif imag < 0 then
+			if imag == -1 then
+				if is_integer(real) then
+					real = math.round(real)
+				else
+					real = string.format("%." .. tkz_dc .. "f", real)
+				end
+				imag = string.format("%." .. tkz_dc .. "f", imag)
+				return "" .. real .. "-" .. "i"
+			else
+				if is_integer(real) then
+					real = math.round(real)
+				else
+					real = string.format("%." .. tkz_dc .. "f", real)
+				end
+				imag = string.format("%." .. tkz_dc .. "f", imag)
+				return "" .. real .. imag .. "i"
+			end
+		else
+			if is_integer(real) then
+				real = math.round(real)
+			else
+				real = string.format("%." .. tkz_dc .. "f", real)
+			end
+			return "" .. real
+		end
+	end
 end
 
 function point.__tonumber(z)
-  if (z.im == 0) then
-    return z.re
-  else
-    return nil
-  end
+	if z.im == 0 then
+		return z.re
+	else
+		return nil
+	end
 end
 
-function point.__eq(z1,z2)
-  return z1.re==z2.re and z1.im==z2.im
+function point.__eq(z1, z2)
+	return z1.re == z2.re and z1.im == z2.im
 end
--- -------------------------------------------------------------------   
+-- -------------------------------------------------------------------
 local function pyth(a, b)
-	if a == 0 and b == 0 then return 0 end
+	if a == 0 and b == 0 then
+		return 0
+	end
 	a, b = abs(a), abs(b)
-	a, b = max(a,b), min(a,b)
-	return a * sqrt(1 + (b / a)^2)
+	a, b = max(a, b), min(a, b)
+	return a * sqrt(1 + (b / a) ^ 2)
 end
 
 function point.conj(z)
-    local cx = topoint(z)
-  return point(cx.re,-cx.im)
+	local cx = topoint(z)
+	return point(cx.re, -cx.im)
 end
 
 function point.mod(z)
-  local cx = topoint(z)
-  local function sqr(x) return x*x end
-  return pyth (cx.re,cx.im)
+	local cx = topoint(z)
+	local function sqr(x)
+		return x * x
+	end
+	return pyth(cx.re, cx.im)
 end
 
-function point.abs (z) 
-  local cx = topoint(z)
-  local function sqr(x) return x*x end
-  return sqrt(sqr(cx.re)  + sqr(cx.im))
+function point.abs(z)
+	local cx = topoint(z)
+	local function sqr(x)
+		return x * x
+	end
+	return sqrt(sqr(cx.re) + sqr(cx.im))
 end
 
-function point.norm (z)
- local cx = topoint(z)
- local function sqr(x) return x*x end
-   return (sqr(cx.re)  + sqr(cx.im))
+function point.norm(z)
+	local cx = topoint(z)
+	local function sqr(x)
+		return x * x
+	end
+	return (sqr(cx.re) + sqr(cx.im))
 end
 
-function point.power (z,n)
-  if type(z) == number then return z^n
-  else
-    local m = (z.modulus)^n
-    local a = angle_normalize((z.argument)*n)   
-   return scale * polar_ (m,a)
- end
+function point.power(z, n)
+	if type(z) == number then
+		return z ^ n
+	else
+		local m = z.modulus ^ n
+		local a = angle_normalize(z.argument * n)
+		return polar_(m, a)
+	end
 end
 
-function point.arg (z)
-  cx = topoint(z)
-  return math.atan(cx.im, cx.re)
+function point.arg(z)
+	cx = topoint(z)
+	return math.atan(cx.im, cx.re)
 end
 
 function point.get(z)
-   return z.re, z.im
+	return z.re, z.im
 end
 
 function point.sqrt(z)
-  local cx = topoint(z)
-  local len = math.sqrt( (cx.re)^2+(cx.im)^2 )
-  local sign = (cx.im < 0 and -1 ) or 1
-  return point(math.sqrt((cx.re+len)/2), sign*math.sqrt((len-cx.re)/2) )
+	local cx = topoint(z)
+	local len = math.sqrt(cx.re ^ 2 + cx.im ^ 2)
+	local sign = (cx.im < 0 and -1) or 1
+	return point(math.sqrt((cx.re + len) / 2), sign * math.sqrt((len - cx.re) / 2))
 end
 
 -- methods ---
 
-function point: new (a, b)
-  return scale * point (a ,b)
+function point:new(a, b)
+	return point(a, b)
 end
 
-function point: polar ( radius, phi )
-  return point: new (radius * math.cos(phi), radius * math.sin(phi))
+function point:polar(radius, phi)
+	return point:new(radius * math.cos(phi), radius * math.sin(phi))
 end
 
-function point: polar_deg ( radius, phi )
-	return scale * polar_ ( radius, phi * math.pi/180 )
+function point:polar_deg(radius, phi)
+	return polar_(radius, phi * math.pi / 180)
 end
 
-function point: north(d)
-  local d = d or 1
-   return self+ polar_ ( d ,  math.pi/2 )
+function point:north(d)
+	local d = d or 1
+	return self + polar_(d, math.pi / 2)
 end
 
-function point: south(d)
-  local d = d or 1
-    return self + polar_ ( d , 3 * math.pi/2 )
+function point:south(d)
+	local d = d or 1
+	return self + polar_(d, 3 * math.pi / 2)
 end
-   
-function point: east(d)
-  local d = d or 1
-  return self+ polar_( d ,  0 )
+
+function point:east(d)
+	local d = d or 1
+	return self + polar_(d, 0)
 end
 
-function point: west(d)
-    local d = d or 1
-      return self + polar_ ( d , math.pi )
-   end
+function point:west(d)
+	local d = d or 1
+	return self + polar_(d, math.pi)
+end
 -- ----------------------------------------------------------------
 -- transformations
 -- ----------------------------------------------------------------
@@ -253,119 +284,123 @@
 -- end
 
 function point:symmetry(...)
-   local tp = table.pack(...)  -- Pack arguments into a table
-   local nb = tp.n  -- Number of arguments
-   local obj = tp[1]  -- The first object in the arguments
+	local tp = table.pack(...) -- Pack arguments into a table
+	local nb = tp.n -- Number of arguments
+	local obj = tp[1] -- The first object in the arguments
 
-   if nb == 1 then  -- If there's only one argument
-      if obj.type == "point" then
-         return symmetry_(self, obj)  -- Apply symmetry on the point
-      elseif obj.type == "line" then
-         return line:new(set_symmetry_(self, obj.pa, obj.pb))  -- Create a new line
-      elseif obj.type == "circle" then
-         return circle:new(set_symmetry_(self, obj.center, obj.through))  -- Create a new circle
-      else
-         return triangle:new(set_symmetry(self, obj.pa, obj.pb, obj.pc))  -- Create a new triangle
-      end
-   else  -- If there are multiple arguments
-      local results = {}  -- Initialize a table to store results
-      for i = 1, nb do
-         table.insert(results, symmetry_(self, tp[i]))  -- Apply symmetry on each object
-      end
-      return table.unpack(results)  -- Return the results as separate values
-   end
+	if nb == 1 then -- If there's only one argument
+		if obj.type == "point" then
+			return symmetry_(self, obj) -- Apply symmetry on the point
+		elseif obj.type == "line" then
+			return line:new(set_symmetry_(self, obj.pa, obj.pb)) -- Create a new line
+		elseif obj.type == "circle" then
+			return circle:new(set_symmetry_(self, obj.center, obj.through)) -- Create a new circle
+		else
+			return triangle:new(set_symmetry(self, obj.pa, obj.pb, obj.pc)) -- Create a new triangle
+		end
+	else -- If there are multiple arguments
+		local results = {} -- Initialize a table to store results
+		for i = 1, nb do
+			table.insert(results, symmetry_(self, tp[i])) -- Apply symmetry on each object
+		end
+		return table.unpack(results) -- Return the results as separate values
+	end
 end
 
-function point: set_symmetry (...)
- return set_symmetry_ ( self,... )
+function point:set_symmetry(...)
+	return set_symmetry_(self, ...)
 end
 
-function point: rotation_pt(angle , pt)
-    return rotation_(self,angle,pt)
+function point:rotation_pt(angle, pt)
+	return rotation_(self, angle, pt)
 end
 
-function point:set_rotation (angle,...)
- return set_rotation_ ( self,angle,... )
+function point:set_rotation(angle, ...)
+	return set_rotation_(self, angle, ...)
 end
 
 function point:rotation(angle, ...)
-   local tp = table.pack(...)  -- Pack arguments into a table
-   local nb = tp.n  -- Number of arguments
-   local obj = tp[1]  -- The first object in the arguments
+	local tp = table.pack(...) -- Pack arguments into a table
+	local nb = tp.n -- Number of arguments
+	local obj = tp[1] -- The first object in the arguments
 
-   if nb == 1 then  -- If there's only one argument
-      if obj.type == "point" then
-         return rotation_(self, angle, obj)  -- Rotate the point
-      elseif obj.type == "line" then
-         return line:new(set_rotation_(self, angle, obj.pa, obj.pb))  -- Rotate the line
-      elseif obj.type == "triangle" then
-         return triangle:new(set_rotation_(self, angle, obj.pa, obj.pb, obj.pc))  -- Rotate the triangle
-      elseif obj.type == "circle" then
-         return circle:new(set_rotation_(self, angle, obj.center, obj.through))  -- Rotate the circle
-      else  -- For other shapes like square
-         return square:new(set_rotation_(self, angle, obj.pa, obj.pb, obj.pc, obj.pd))  -- Rotate the square
-      end
-   else  -- If there are multiple arguments
-      local results = {}  -- Initialize a table to store results
-      for i = 1, nb do
-         table.insert(results, rotation_(self, angle, tp[i]))  -- Rotate each object
-      end
-      return table.unpack(results)  -- Return the results as separate values
-   end
+	if nb == 1 then -- If there's only one argument
+		if obj.type == "point" then
+			return rotation_(self, angle, obj) -- Rotate the point
+		elseif obj.type == "line" then
+			return line:new(set_rotation_(self, angle, obj.pa, obj.pb)) -- Rotate the line
+		elseif obj.type == "triangle" then
+			return triangle:new(set_rotation_(self, angle, obj.pa, obj.pb, obj.pc)) -- Rotate the triangle
+		elseif obj.type == "circle" then
+			return circle:new(set_rotation_(self, angle, obj.center, obj.through)) -- Rotate the circle
+		else -- For other shapes like square
+			return square:new(set_rotation_(self, angle, obj.pa, obj.pb, obj.pc, obj.pd)) -- Rotate the square
+		end
+	else -- If there are multiple arguments
+		local results = {} -- Initialize a table to store results
+		for i = 1, nb do
+			table.insert(results, rotation_(self, angle, tp[i])) -- Rotate each object
+		end
+		return table.unpack(results) -- Return the results as separate values
+	end
 end
 
 function point:homothety(coeff, ...)
-    local tp = table.pack(...)  -- Pack arguments into a table
-    local nb = tp.n  -- Number of arguments
-    local obj = tp[1]  -- The first object in the arguments
-    local t = {}  -- Initialize a table to store results
+	local tp = table.pack(...) -- Pack arguments into a table
+	local nb = tp.n -- Number of arguments
+	local obj = tp[1] -- The first object in the arguments
+	local t = {} -- Initialize a table to store results
 
-    if nb == 1 then  -- If there's only one argument
-        if obj.type == "point" then
-            return homothety_(self, coeff, obj)  -- Apply homothety to the point
-        elseif obj.type == "line" then
-            return line:new(set_homothety_(self, coeff, obj.pa, obj.pb))  -- Apply homothety to the line
-        elseif obj.type == "triangle" then
-            return triangle:new(set_homothety_(self, coeff, obj.pa, obj.pb, obj.pc))  -- Apply homothety to the triangle
-        elseif obj.type == "circle" then
-            return circle:new(set_homothety_(self, coeff, obj.center, obj.through))  -- Apply homothety to the circle
-        else  -- For other shapes like square
-            return square:new(set_homothety_(self, coeff, obj.pa, obj.pb, obj.pc, obj.pd))  -- Apply homothety to the square
-        end
-    else  -- If there are multiple arguments
-        for i = 1, nb do
-            table.insert(t, homothety_(self, coeff, tp[i]))  -- Apply homothety to each object
-        end
-        return table.unpack(t)  -- Return the results as separate values
-    end
+	if nb == 1 then -- If there's only one argument
+		if obj.type == "point" then
+			return homothety_(self, coeff, obj) -- Apply homothety to the point
+		elseif obj.type == "line" then
+			return line:new(set_homothety_(self, coeff, obj.pa, obj.pb)) -- Apply homothety to the line
+		elseif obj.type == "triangle" then
+			return triangle:new(set_homothety_(self, coeff, obj.pa, obj.pb, obj.pc)) -- Apply homothety to the triangle
+		elseif obj.type == "circle" then
+			return circle:new(set_homothety_(self, coeff, obj.center, obj.through)) -- Apply homothety to the circle
+		else -- For other shapes like square
+			return square:new(set_homothety_(self, coeff, obj.pa, obj.pb, obj.pc, obj.pd)) -- Apply homothety to the square
+		end
+	else -- If there are multiple arguments
+		for i = 1, nb do
+			table.insert(t, homothety_(self, coeff, tp[i])) -- Apply homothety to each object
+		end
+		return table.unpack(t) -- Return the results as separate values
+	end
 end
 
-function point: normalize()
-    local d = point.abs(self)
-   return point(self.re/d,self.im/d)
+function point:normalize()
+	local d = point.abs(self)
+	return point(self.re / d, self.im / d)
 end
 
+function point:normalize_from(p)
+  local u = (self - p)
+	local d = point.abs(u)
+	return point(u.re / d, u.im / d) + p
+end
+
 function point:identity(pt)
-  return point.abs(self - pt) < tkz_epsilon
+	return point.abs(self - pt) < tkz_epsilon
 end
 
 function point:orthogonal(d)
-   local m
-   if d == nil then
-      -- If no scaling factor d is provided, return the point rotated 90 degrees counterclockwise
-      return point(-self.im, self.re)
-   else
-      -- If a scaling factor d is provided, scale the orthogonal point
-      m = point.mod(self)  -- Get the modulus (magnitude) of the current point
-      return point(-self.im * d / m, self.re * d / m)  -- Return the scaled orthogonal point
-   end
+	local m
+	if d == nil then
+		-- If no scaling factor d is provided, return the point rotated 90 degrees counterclockwise
+		return point(-self.im, self.re)
+	else
+		m = point.mod(self) -- Get the modulus (magnitude) of the current point
+		return point(-self.im * d / m, self.re * d / m) -- Return the scaled orthogonal point
+	end
 end
 
+function point:at(z)
+	return point(self.re + z.re, self.im + z.im)
+end
 
-function point : at (z)
-   return point(self.re+z.re,self.im+z.im)
+function point:print()
+	tex.print(tostring(self))
 end
-
-function point : print ()
-    tex.print(tostring(self))
-end
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_quadrilateral.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_quadrilateral.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_quadrilateral.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,12 +1,12 @@
 -- tkz_elements_quadrilateral.lua
--- date 2025/02/26
--- version 3.32
+-- date 2025/03/04
+-- version 3.34c
 -- Copyright 2025  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
+-- 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”.
@@ -13,49 +13,53 @@
 -- The Current Maintainer of this work is Alain Matthes.
 
 quadrilateral = {}
-function quadrilateral: new (za, zb, zc, zd)
-   local type        = 'quadrilateral'
-   local a           = point.abs ( zb - za )
-   local b           = point.abs ( zc - zb )
-   local c           = point.abs ( zd - zc )
-   local d           = point.abs ( za - zd ) 
-   local ab          = line : new (za,zb)
-   local bc          = line : new (zb,zc)
-   local cd          = line : new (zc,zd)
-   local da          = line : new (zd,za)
-   local ac          = line : new (za,zc)
-   local bd          = line : new (zb,zd)
-   local i           = intersection_ll_ (za,zc,zb,zd)
-   local g           = barycenter_ ( {za,1} , {zb,1} , {zc,1} ,{ zd ,1 } )
-   local o = { pa    = za, 
-               pb    = zb, 
-               pc    = zc,
-               pd    = zd,
-               a     = a,
-               b     = b,
-               c     = c,
-               d     = d,
-               ab    = ab,
-               bc    = bc,
-               cd    = cd,
-               da    = da,
-               ac    = ac,
-               bd    = bd,
-               i     = i,
-               g     = g,
-               type  = type }
-    setmetatable(o, self)
-    self.__index = self
-    return o
+function quadrilateral:new(za, zb, zc, zd)
+	local type = "quadrilateral"
+	local a = point.abs(zb - za)
+	local b = point.abs(zc - zb)
+	local c = point.abs(zd - zc)
+	local d = point.abs(za - zd)
+	local ab = line:new(za, zb)
+	local bc = line:new(zb, zc)
+	local cd = line:new(zc, zd)
+	local da = line:new(zd, za)
+	local ac = line:new(za, zc)
+	local bd = line:new(zb, zd)
+	local i = intersection_ll_(za, zc, zb, zd)
+	local g = barycenter_({ za, 1 }, { zb, 1 }, { zc, 1 }, { zd, 1 })
+	local o = {
+		pa = za,
+		pb = zb,
+		pc = zc,
+		pd = zd,
+		a = a,
+		b = b,
+		c = c,
+		d = d,
+		ab = ab,
+		bc = bc,
+		cd = cd,
+		da = da,
+		ac = ac,
+		bd = bd,
+		i = i,
+		g = g,
+		type = type,
+	}
+	setmetatable(o, self)
+	self.__index = self
+	return o
 end
 -----------------------
-function quadrilateral : iscyclic ()
-   local d
-   local alpha = point.arg ((self.pd-self.pa) / (self.pb-self.pa))
-   local beta  = point.arg ((self.pb-self.pc) / (self.pd-self.pc))
-   if math.abs (alpha+beta-math.pi) < tkz_epsilon then return true
-   else return false
-   end
-end 
+function quadrilateral:iscyclic()
+	local d
+	local alpha = point.arg((self.pd - self.pa) / (self.pb - self.pa))
+	local beta = point.arg((self.pb - self.pc) / (self.pd - self.pc))
+	if math.abs(alpha + beta - math.pi) < tkz_epsilon then
+		return true
+	else
+		return false
+	end
+end
 
-return quadrilateral
\ No newline at end of file
+return quadrilateral

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_rectangle.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_rectangle.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_rectangle.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,12 +1,12 @@
--- tkz_elements-rectangle.lua
--- date 2025/02/26
--- version 3.32
+-- tkz_elements_rectangle.lua
+-- date 2025/03/04
+-- version 3.34c
 -- Copyright 2025  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
+-- 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”.
@@ -16,115 +16,121 @@
 ---------------------------------------------------------------------------
 
 rectangle = {}
-function rectangle: new (za, zb,zc,zd)
-   local d
-   local zi = midpoint_ (za,zc)
-   local zj = midpoint_ (zb,zd)
-   if point.abs (zj-zi) < tkz_epsilon  then  else error ("it's not a rectangle")    
-   end
-   if math.abs(point.abs (zc-za)-point.abs (zd-zb)) < tkz_epsilon  then  else error ("it's not a rectangle")    
-   end
-   local type                   = 'rectangle'
-   local center                 = midpoint_ (za,zc)
-   local circumradius           = point.abs (center-za)
-   local ab                     = line : new (za,zb)
-   local bc                     = line : new (zb,zc)
-   local cd                     = line : new (zc,zd)
-   local da                     = line : new (zd,za)
-   local ac                     = line : new (za,zc)
-   local bd                     = line : new (zb,zd)
-   local length                 = point.mod (zb-za)
-   local width                  = point.mod (zd-za)
-   local diagonal               = point.abs (zc-za)
-   local o  = {   pa            = za, 
-                  pb            = zb, 
-                  pc            = zc,
-                  pd            = zd,
-                  ab            = ab,
-                  ac            = ac,
-                  bc            = bc,
-                  da            = da,
-                  cd            = cd,
-                  bd            = bd,
-                  diagonal      = diagonal,
-                  circumradius  = circumradius,
-                  center        = center,
-                  length        = length,
-                  width         = width,
-                  type          = type  }
-    setmetatable(o, self)
-    self.__index = self
-    return o
+function rectangle:new(za, zb, zc, zd)
+	local d
+	local zi = midpoint_(za, zc)
+	local zj = midpoint_(zb, zd)
+	if point.abs(zj - zi) < tkz_epsilon then
+	else
+		error("it's not a rectangle")
+	end
+	if math.abs(point.abs(zc - za) - point.abs(zd - zb)) < tkz_epsilon then
+	else
+		error("it's not a rectangle")
+	end
+	local type = "rectangle"
+	local center = midpoint_(za, zc)
+	local circumradius = point.abs(center - za)
+	local ab = line:new(za, zb)
+	local bc = line:new(zb, zc)
+	local cd = line:new(zc, zd)
+	local da = line:new(zd, za)
+	local ac = line:new(za, zc)
+	local bd = line:new(zb, zd)
+	local length = point.mod(zb - za)
+	local width = point.mod(zd - za)
+	local diagonal = point.abs(zc - za)
+	local o = {
+		pa = za,
+		pb = zb,
+		pc = zc,
+		pd = zd,
+		ab = ab,
+		ac = ac,
+		bc = bc,
+		da = da,
+		cd = cd,
+		bd = bd,
+		diagonal = diagonal,
+		circumradius = circumradius,
+		center = center,
+		length = length,
+		width = width,
+		type = type,
+	}
+	setmetatable(o, self)
+	self.__index = self
+	return o
 end
 
-function rectangle : angle (zi,za,an)
-   local zb,zc,zd
-   local zc = symmetry_ (zi,za)
-   local zb = rotation_(zi,-an,zc)
-   local zd = symmetry_ (zi,zb)
-   return rectangle : new (za,zb,zc,zd)
+function rectangle:angle(zi, za, an)
+	local zb, zc, zd
+	local zc = symmetry_(zi, za)
+	local zb = rotation_(zi, -an, zc)
+	local zd = symmetry_(zi, zb)
+	return rectangle:new(za, zb, zc, zd)
 end
 
-function rectangle : gold  (za,zb,swap)
- local zc,zd
- local a     = point.arg (zb-za)
- local d     = point.abs(zb-za)/tkzphi
- swap = swap or false
- if swap  then 
-     zc    = zb : south (d/scale)
-     zc    = rotation_ (zb,a,zc)
-     zd    = za : south (d/scale)
-     zd    = rotation_ (za,a,zd)
-    return rectangle : new (za,zb,zc,zd)   
- else
-    zc    = zb : north (d/scale)
-    zc    = rotation_ (zb,a,zc)
-    zd    = za : north (d/scale)
-    zd    = rotation_ (za,a,zd)
- return rectangle : new (za,zb,zc,zd)
- end
+function rectangle:gold(za, zb, swap)
+	local zc, zd
+	local a = point.arg(zb - za)
+	local d = point.abs(zb - za) / tkzphi
+	swap = swap or false
+	if swap then
+		zc = zb:south(d)
+		zc = rotation_(zb, a, zc)
+		zd = za:south(d)
+		zd = rotation_(za, a, zd)
+		return rectangle:new(za, zb, zc, zd)
+	else
+		zc = zb:north(d)
+		zc = rotation_(zb, a, zc)
+		zd = za:north(d)
+		zd = rotation_(za, a, zd)
+		return rectangle:new(za, zb, zc, zd)
+	end
 end
 
-function rectangle : diagonal  (za,zc,swap)
-   local zb,zd
-    swap = swap or false
-   if swap  then 
-      zd   = point (zc.re,za.im)
-      zb   = point (za.re,zc.im)
-     return rectangle : new (za,zb,zc,zd) 
-   else
-    zb   = point (zc.re,za.im)
-    zd   = point (za.re,zc.im)
-   return rectangle : new (za,zb,zc,zd)
+function rectangle:diagonal(za, zc, swap)
+	local zb, zd
+	swap = swap or false
+	if swap then
+		zd = point(zc.re, za.im)
+		zb = point(za.re, zc.im)
+		return rectangle:new(za, zb, zc, zd)
+	else
+		zb = point(zc.re, za.im)
+		zd = point(za.re, zc.im)
+		return rectangle:new(za, zb, zc, zd)
+	end
 end
-end
 
-function rectangle : side  (za,zb,d,swap)
-   local a,zc,zd
-    a  = point.arg (zb-za)
-     swap = swap or false
-    if swap  then 
-       zc = zb : south (d/scale)
-       zc = rotation_ (zb,a,zc)
-       zd = za : south (d/scale)
-       zd = rotation_ (za,a,zd)
-      return rectangle : new (za,zb,zc,zd)
-     else
-    zc = zb : north (d/scale)
-    zc = rotation_ (zb,a,zc)
-    zd = za : north (d/scale)
-   zd = rotation_ (za,a,zd)
-   return rectangle : new (za,zb,zc,zd)
+function rectangle:side(za, zb, d, swap)
+	local a, zc, zd
+	a = point.arg(zb - za)
+	swap = swap or false
+	if swap then
+		zc = zb:south(d)
+		zc = rotation_(zb, a, zc)
+		zd = za:south(d)
+		zd = rotation_(za, a, zd)
+		return rectangle:new(za, zb, zc, zd)
+	else
+		zc = zb:north(d)
+		zc = rotation_(zb, a, zc)
+		zd = za:north(d)
+		zd = rotation_(za, a, zd)
+		return rectangle:new(za, zb, zc, zd)
+	end
 end
-end
 
 -------------------
-function rectangle : get_lengths ()
-   local a = self.pa
-   local b = self.pb
-   local c = self.pc
-   local d = self.pd
-  return point.mod(b-a),point.mod(c-b),point.mod(d-c),point.mod(a-d)
+function rectangle:get_lengths()
+	local a = self.pa
+	local b = self.pb
+	local c = self.pc
+	local d = self.pd
+	return point.mod(b - a), point.mod(c - b), point.mod(d - c), point.mod(a - d)
 end
 
 return rectangle

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_regular.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_regular.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_regular.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,12 +1,12 @@
 -- tkz_elements_regular.lua
--- date 2025/02/26
--- version 3.32
+-- date 2025/03/04
+-- version 3.34c
 -- Copyright 2025  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
+-- 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”.
@@ -13,35 +13,37 @@
 -- The Current Maintainer of this work is Alain Matthes.
 -- za = center zb a vertex
 regular_polygon = {}
-function regular_polygon: new (za, zb ,nb)
-   local type              = 'regular_polygon'
-   local vertices          = regular_ (za , zb , nb)
-   local center            = za
-   local through           = zb
-   local angle             = 2 * math.pi/nb
-   local circumradius      = point.abs (zb-za)
-   local circle            = circle : new (za,zb)
-   local inradius          = circumradius * math.cos(math.pi/nb)
-   local side              = circumradius * math.sin(math.pi/nb)
-   local proj              = projection_ (vertices[1],vertices[2],za)
-   local perimeter         = nb * side
-   local area              = (perimeter * inradius)/2
-   local regular = { type        = type, 
-                     center      = center, 
-                     through     = through,
-                     circumradius= circumradius, 
-                     inradius    = inradius,
-                     vertices    = vertices, 
-                     circle      = circle, 
-                     nb          = nb,
-                     angle       = angle, 
-                     side        = side, 
-                     proj        = proj,
-                     perimeter   = perimeter,
-                     area        = area}
-    setmetatable(regular, self)
-    self.__index = self
-    return regular
+function regular_polygon:new(za, zb, nb)
+	local type = "regular_polygon"
+	local vertices = regular_(za, zb, nb)
+	local center = za
+	local through = zb
+	local angle = 2 * math.pi / nb
+	local circumradius = point.abs(zb - za)
+	local circle = circle:new(za, zb)
+	local inradius = circumradius * math.cos(math.pi / nb)
+	local side = circumradius * math.sin(math.pi / nb)
+	local proj = projection_(vertices[1], vertices[2], za)
+	local perimeter = nb * side
+	local area = (perimeter * inradius) / 2
+	local regular = {
+		type = type,
+		center = center,
+		through = through,
+		circumradius = circumradius,
+		inradius = inradius,
+		vertices = vertices,
+		circle = circle,
+		nb = nb,
+		angle = angle,
+		side = side,
+		proj = proj,
+		perimeter = perimeter,
+		area = area,
+	}
+	setmetatable(regular, self)
+	self.__index = self
+	return regular
 end
 -----------------------
 -- points --
@@ -52,9 +54,8 @@
 -----------------------
 -- circles --
 -----------------------
-function regular_polygon : incircle ()
-   return circle : new ( self.center ,
-           projection_ (self.vertices[1],self.vertices[2],self.center))  
+function regular_polygon:incircle()
+	return circle:new(self.center, projection_(self.vertices[1], self.vertices[2], self.center))
 end
 -------------------
 -- Result -> triangle
@@ -63,10 +64,10 @@
 -------------------
 -- Result -> miscellaneous
 -------------------
-function regular_polygon : name (nm)
-     for k,v in ipairs(self.vertices) do
-         z[nm..k] = v
-      end
+function regular_polygon:name(nm)
+	for k, v in ipairs(self.vertices) do
+		z[nm .. k] = v
+	end
 end
 
-return regular_polygon
\ No newline at end of file
+return regular_polygon

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_square.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_square.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_square.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,12 +1,12 @@
--- tkz_elements-square.lua
--- date 2025/02/26
--- version 3.32
+-- tkz_elements_square.lua
+-- date 2025/03/04
+-- version 3.34c
 -- Copyright 2025  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
+-- 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”.
@@ -16,80 +16,88 @@
 ---------------------------------------------------------------------------
 
 square = {}
-function square: new (za, zb,zc,zd)
-   local d
-   local zi = midpoint_ (za,zc)
-   local zj = midpoint_ (zb,zd)
-   if point.abs (zj-zi) < tkz_epsilon  then  else error ("it's not a square (center)")
-   end
-   if math.abs(point.abs (zc-za) - point.abs (zd-zb)) < tkz_epsilon  then  else error ("it's not a square (diagonal)")
-   end
-   if math.abs(point.abs (zb-za) - point.abs (zd-za)) < tkz_epsilon  then  else error ("it's not a square (side)")
-   end
+function square:new(za, zb, zc, zd)
+	local d
+	local zi = midpoint_(za, zc)
+	local zj = midpoint_(zb, zd)
+	if point.abs(zj - zi) < tkz_epsilon then
+	else
+		tex.error("it's not a square (center)")
+	end
+	if math.abs(point.abs(zc - za) - point.abs(zd - zb)) < tkz_epsilon then
+	else
+		tex.error("it's not a square (diagonal)")
+	end
+	if math.abs(point.abs(zb - za) - point.abs(zd - za)) < tkz_epsilon then
+	else
+		tex.error("it's not a square (side)")
+	end
 
-   local type                  = 'square'
-   local side                  = point.abs ( zb - za )
-   local pc                    = rotation_ (zb,-math.pi/2,za)
-   local pd                    = rotation_ (za,math.pi/2,zb)
-   local center                = midpoint_ (za,zc)
-   local circumradius          = point.abs (center-za)
-   local inradius              = circumradius * math.cos(math.pi/4)
-   local diagonal              = math.sqrt(2) * side
-   local proj                  = projection_ (za,zb,center)
-   local ab                    = line : new (za,zb)
-   local bc                    = line : new (zb,zc)
-   local cd                    = line : new (zc,zd)
-   local da                    = line : new (zd,za)
-   local bd                    = line : new (zb,zd)
-   local ac                    = line : new (za,zc)
-   local area                  = side * side
-   local perimeter             = 4 * side
-   local o  = {   pa           = za, 
-                  pb           = zb, 
-                  pc           = zc,
-                  pd           = zd,
-                  side         = side,
-                  center       = center,
-                  circumradius = circumradius,
-                  inradius     = inradius,
-                  diagonal     = diagonal,
-                  proj         = proj,
-                  ab           = ab,
-                  ac           = ac,
-                  bc           = bc,
-                  da           = da,
-                  cd           = cd,
-                  bd           = bd,
-                  type         = type,
-                  area         = area,
-                  perimeter    = perimeter  }
-    setmetatable(o, self)
-    self.__index = self
-    return o
+	local type = "square"
+	local side = point.abs(zb - za)
+	local pc = rotation_(zb, -math.pi / 2, za)
+	local pd = rotation_(za, math.pi / 2, zb)
+	local center = midpoint_(za, zc)
+	local circumradius = point.abs(center - za)
+	local inradius = circumradius * math.cos(math.pi / 4)
+	local diagonal = math.sqrt(2) * side
+	local proj = projection_(za, zb, center)
+	local ab = line:new(za, zb)
+	local bc = line:new(zb, zc)
+	local cd = line:new(zc, zd)
+	local da = line:new(zd, za)
+	local bd = line:new(zb, zd)
+	local ac = line:new(za, zc)
+	local area = side * side
+	local perimeter = 4 * side
+	local o = {
+		pa = za,
+		pb = zb,
+		pc = zc,
+		pd = zd,
+		side = side,
+		center = center,
+		circumradius = circumradius,
+		inradius = inradius,
+		diagonal = diagonal,
+		proj = proj,
+		ab = ab,
+		ac = ac,
+		bc = bc,
+		da = da,
+		cd = cd,
+		bd = bd,
+		type = type,
+		area = area,
+		perimeter = perimeter,
+	}
+	setmetatable(o, self)
+	self.__index = self
+	return o
 end
 
-function square : rotation (zi,za)
-   local zb = rotation_ (zi,math.pi/2,za)
-   local zc = rotation_ (zi,math.pi/2,zb)
-   local zd = rotation_ (zi,math.pi/2,zc)
-   return square : new (za,zb,zc,zd)
+function square:rotation(zi, za)
+	local zb = rotation_(zi, math.pi / 2, za)
+	local zc = rotation_(zi, math.pi / 2, zb)
+	local zd = rotation_(zi, math.pi / 2, zc)
+	return square:new(za, zb, zc, zd)
 end
 
 function square:side(za, zb, swap)
-   swap = swap or false
-   if swap  then
-      -- Rotate zb clockwise around za to get zc
-      local zc = rotation_(zb, math.pi / 2, za)
-      -- Rotate za counterclockwise around zb to get zd
-      local zd = rotation_(za, -math.pi / 2, zb)
-      return square:new(za, zb, zc, zd)
-    else
-      -- Rotate zb counterclockwise around za to get zc
-      local zc = rotation_(zb, -math.pi / 2, za)
-      -- Rotate za clockwise around zb to get zd
-      local zd = rotation_(za, math.pi / 2, zb)
-      return square:new(za, zb, zc, zd)
-   end
+	swap = swap or false
+	if swap then
+		-- Rotate zb clockwise around za to get zc
+		local zc = rotation_(zb, math.pi / 2, za)
+		-- Rotate za counterclockwise around zb to get zd
+		local zd = rotation_(za, -math.pi / 2, zb)
+		return square:new(za, zb, zc, zd)
+	else
+		-- Rotate zb counterclockwise around za to get zc
+		local zc = rotation_(zb, -math.pi / 2, za)
+		-- Rotate za clockwise around zb to get zd
+		local zd = rotation_(za, math.pi / 2, zb)
+		return square:new(za, zb, zc, zd)
+	end
 end
 
-return square
\ No newline at end of file
+return square

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_triangle.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_triangle.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_triangle.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,12 +1,12 @@
 -- tkz_elements_triangles.lua
--- date 2025/02/26
--- version 3.32
+-- date 2025/03/04
+-- version 3.34c
 -- Copyright 2025  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
+-- 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”.
@@ -13,338 +13,360 @@
 -- The Current Maintainer of this work is Alain Matthes.
 
 triangle = {}
-function triangle: new (za, zb ,zc)
-   local type          = 'triangle'
-   local circumcenter  = circum_center_ (za , zb , zc)
-   local centroid      = barycenter_ ( {za,1} , {zb,1} , {zc,1} )
-   local incenter      = in_center_ (za , zb , zc)
-   local orthocenter   = ortho_center_  (za , zb , zc)
-   local eulercenter   = euler_center_  (za , zb , zc)
-   local spiekercenter = spieker_center_  (za , zb , zc)
-   local c             = point.abs(zb-za)
-   local a             = point.abs(zc-zb)
-   local b             = point.abs(za-zc)
-   local alpha         = angle_normalize_(point.arg ((zc-za) / (zb-za)))
-   local beta          = angle_normalize_(point.arg ((za-zb) / (zc-zb)))
-   local gamma         = angle_normalize_(point.arg ((zb-zc) / (za-zc)))
-   local ab            = line:new(za, zb)
-   local ca            = line:new(zc, za)
-   local bc            = line:new(zb, zc)
-   local semiperimeter = (a + b + c) / 2
-   local area          = math.sqrt((semiperimeter)*(semiperimeter-a)*(semiperimeter-b)*(semiperimeter-c))
-   local inradius                = area / semiperimeter
-   local circumradius            = (a * b * c) / (4 * area)
-   local tr = { pa               = za, 
-                pb               = zb, 
-                pc               = zc, 
-                type             = type,
-                circumcenter     = circumcenter, 
-                centroid         = centroid,
-                incenter         = incenter, 
-                eulercenter      = eulercenter,      
-                orthocenter      = orthocenter, 
-                spiekercenter    = spiekercenter,
-                a                = a, 
-                b                = b, 
-                c                = c, 
-                ab               = ab, 
-                ca               = ca, 
-                bc               = bc,
-                alpha            = alpha, 
-                beta             = beta, 
-                gamma            = gamma,
-                semiperimeter    = semiperimeter,
-                area             = area,
-                inradius         = inradius,
-                circumradius     = circumradius}
-    setmetatable(tr, self)
-    self.__index = self
-    return tr
+function triangle:new(za, zb, zc)
+	local type = "triangle"
+	local circumcenter = circum_center_(za, zb, zc)
+	local centroid = barycenter_({ za, 1 }, { zb, 1 }, { zc, 1 })
+	local incenter = in_center_(za, zb, zc)
+	local orthocenter = ortho_center_(za, zb, zc)
+	local eulercenter = euler_center_(za, zb, zc)
+	local spiekercenter = spieker_center_(za, zb, zc)
+	local c = point.abs(zb - za)
+	local a = point.abs(zc - zb)
+	local b = point.abs(za - zc)
+	local alpha = angle_normalize_(point.arg((zc - za) / (zb - za)))
+	local beta = angle_normalize_(point.arg((za - zb) / (zc - zb)))
+	local gamma = angle_normalize_(point.arg((zb - zc) / (za - zc)))
+	local ab = line:new(za, zb)
+	local ca = line:new(zc, za)
+	local bc = line:new(zb, zc)
+	local semiperimeter = (a + b + c) / 2
+	local area = math.sqrt(semiperimeter * (semiperimeter - a) * (semiperimeter - b) * (semiperimeter - c))
+	local inradius = area / semiperimeter
+	local circumradius = (a * b * c) / (4 * area)
+	local tr = {
+		pa = za,
+		pb = zb,
+		pc = zc,
+		type = type,
+		circumcenter = circumcenter,
+		centroid = centroid,
+		incenter = incenter,
+		eulercenter = eulercenter,
+		orthocenter = orthocenter,
+		spiekercenter = spiekercenter,
+		a = a,
+		b = b,
+		c = c,
+		ab = ab,
+		ca = ca,
+		bc = bc,
+		alpha = alpha,
+		beta = beta,
+		gamma = gamma,
+		semiperimeter = semiperimeter,
+		area = area,
+		inradius = inradius,
+		circumradius = circumradius,
+	}
+	setmetatable(tr, self)
+	self.__index = self
+	return tr
 end
 -----------------------
 -- points --
 -----------------------
-function triangle: trilinear (a,b,c)
-   return barycenter_ ({self.pa,a*self.a},{self.pb,b*self.b},{self.pc,c*self.c})
+function triangle:trilinear(a, b, c)
+	return barycenter_({ self.pa, a * self.a }, { self.pb, b * self.b }, { self.pc, c * self.c })
 end
 
-function triangle: barycentric (a,b,c)
-   return barycenter_ ({self.pa,a},{self.pb,b},{self.pc,c})
+function triangle:barycentric(a, b, c)
+	return barycenter_({ self.pa, a }, { self.pb, b }, { self.pc, c })
 end
 
-function triangle: bevan_point ()
-   return circum_center_ ( excentral_tr_ ( self.pa , self.pb , self.pc))
+function triangle:bevan_point()
+	return circum_center_(excentral_tr_(self.pa, self.pb, self.pc))
 end
 
-function triangle: mittenpunkt_point ()
-   return lemoine_point_ ( excentral_tr_ ( self.pa , self.pb , self.pc))
+function triangle:mittenpunkt_point()
+	return lemoine_point_(excentral_tr_(self.pa, self.pb, self.pc))
 end
 
-function triangle: gergonne_point ()
-   return gergonne_point_ ( self.pa , self.pb , self.pc)
+function triangle:gergonne_point()
+	return gergonne_point_(self.pa, self.pb, self.pc)
 end
 
-function triangle: nagel_point ()
-return   nagel_point_ ( self.pa , self.pb , self.pc)
+function triangle:nagel_point()
+	return nagel_point_(self.pa, self.pb, self.pc)
 end
 
-function triangle: feuerbach_point ()
-return   feuerbach_point_ ( self.pa , self.pb , self.pc)
+function triangle:feuerbach_point()
+	return feuerbach_point_(self.pa, self.pb, self.pc)
 end
 
-function triangle: lemoine_point()
-   return lemoine_point_ ( self.pa , self.pb , self.pc)
+function triangle:lemoine_point()
+	return lemoine_point_(self.pa, self.pb, self.pc)
 end
 
-function triangle: symmedian_point()
-   return lemoine_point_ ( self.pa , self.pb , self.pc)
+function triangle:symmedian_point()
+	return lemoine_point_(self.pa, self.pb, self.pc)
 end
 
 triangle.lemoine_point = triangle.symmedian_point
 triangle.grebe_point = triangle.symmedian_point
 
-function triangle: spieker_center()
-return spieker_center_ ( self.pa , self.pb , self.pc )
+function triangle:spieker_center()
+	return spieker_center_(self.pa, self.pb, self.pc)
 end
 
-function triangle: barycenter (ka,kb,kc)
- return   barycenter_ ({self.pa,ka},{self.pb,kb},{self.pc,kc})
+function triangle:barycenter(ka, kb, kc)
+	return barycenter_({ self.pa, ka }, { self.pb, kb }, { self.pc, kc })
 end
 
-function triangle: base (u,v) -- (ab,ac) base coord u,v
-    return barycenter_ ({self.pa,(1-u-v)},{self.pb,u},{self.pc,v})
+function triangle:base(u, v) -- (ab,ac) base coord u,v
+	return barycenter_({ self.pa, (1 - u - v) }, { self.pb, u }, { self.pc, v })
 end
 
-function triangle: euler_points ()
-   H = self.orthocenter
-   return midpoint_ ( H,self.pa ), midpoint_ ( H,self.pb ), midpoint_ ( H,self.pc )
+function triangle:euler_points()
+	H = self.orthocenter
+	return midpoint_(H, self.pa), midpoint_(H, self.pb), midpoint_(H, self.pc)
 end
 
 function triangle:nine_points()
-    local ma, mb, mc, ha, hb, hc
-    -- Calculate the medial triangle
-    ma, mb, mc = medial_tr_(self.pa, self.pb, self.pc)
-    -- Calculate the orthic triangle
-    ha, hb, hc = orthic_tr_(self.pa, self.pb, self.pc)
-    -- Calculate the orthocenter
-    H = self.orthocenter   
-    -- Return the points of the nine-point circle
-    return ma, mb, mc, ha, hb, hc,
-           midpoint_(H, self.pa), midpoint_(H, self.pb), midpoint_(H, self.pc)
+	local ma, mb, mc, ha, hb, hc
+	-- Calculate the medial triangle
+	ma, mb, mc = medial_tr_(self.pa, self.pb, self.pc)
+	-- Calculate the orthic triangle
+	ha, hb, hc = orthic_tr_(self.pa, self.pb, self.pc)
+	-- Calculate the orthocenter
+	H = self.orthocenter
+	-- Return the points of the nine-point circle
+	return ma, mb, mc, ha, hb, hc, midpoint_(H, self.pa), midpoint_(H, self.pb), midpoint_(H, self.pc)
 end
 
+function triangle:point(t)
+	local p = 2 * self.semiperimeter
+	local t1 = self.a / p
+	local t2 = (self.a + self.b) / p
+	if t <= t1 then
+		return self.ab:point(t / t1)
+	elseif t <= t2 then
+		return self.bc:point((t * p - self.a) / self.b)
+	else
+		return self.ca:point((t * p - self.c - self.b) / self.a)
+	end
+end
 
-function triangle : point (t)
-  local p = 2* self.semiperimeter
-  local t1 = self.a / p
-  local t2 = (self.a + self.b) / p
-   if t<= t1 then  
-      return self.ab : point (t/t1) 
-   elseif t <= t2 then
-      return self.bc : point ((t*p-self.a)/self.b)
-   else
-      return self.ca : point ((t*p-self.c-self.b)/self.a)
-   end
+function triangle:soddy_center()
+	return soddy_center_(self.pa, self.pb, self.pc)
 end
 
-function triangle :  soddy_center ()
-   return soddy_center_ (self.pa,self.pb,self.pc)
+function triangle:conway_points()
+	local a1 = report_(self.pb, self.pa, length(self.pb, self.pc), self.pa)
+	local a2 = report_(self.pc, self.pa, length(self.pb, self.pc), self.pa)
+	local b1 = report_(self.pa, self.pb, length(self.pa, self.pc), self.pb)
+	local b2 = report_(self.pc, self.pb, length(self.pa, self.pc), self.pb)
+	local c1 = report_(self.pb, self.pc, length(self.pb, self.pa), self.pc)
+	local c2 = report_(self.pa, self.pc, length(self.pb, self.pa), self.pc)
+	return a1, a2, b1, b2, c1, c2
 end
 
-function triangle :  conway_points ()
-   local  a1 =      report_ (self.pb,self.pa,length(self.pb,self.pc),self.pa)
-   local  a2 =      report_ (self.pc,self.pa,length(self.pb,self.pc),self.pa)
-   local  b1 =      report_ (self.pa,self.pb,length(self.pa,self.pc),self.pb)
-   local  b2 =      report_ (self.pc,self.pb,length(self.pa,self.pc),self.pb)
-   local  c1 =      report_ (self.pb,self.pc,length(self.pb,self.pa),self.pc)
-   local  c2 =      report_ (self.pa,self.pc,length(self.pb,self.pa),self.pc)
-     return a1,a2,b1,b2,c1,c2
-  end
-  
-  function triangle : kimberling (n)
-    local cos,sin,tan = math.cos,math.sin,math.tan
-    local A,B,C = self.alpha,self.beta,self.gamma
-    local a,b,c = self.a,self.b,self.c
-    local pi = math.pi
-        if n == 1 then return self : trilinear(1,1,1)     -- incenter
-    elseif n == 2 then return self : barycentric (1,1,1)  -- centroid
-    elseif n == 3 then return self : trilinear (cos(A),cos(B),cos(C))  --circumcenter
-    elseif n == 4 then return self : barycentric (tan(A),tan(B),tan(C)) -- orthocenter
-    elseif n == 5 then return self : trilinear(cos(B - C),cos(C - A),cos(A - B))  --nine
-    elseif n == 6 then return self : trilinear (a,b,c)   -- lemoine
-    elseif n == 7 then return self : barycentric (1/(b+c-a),1/(a+c-b),1/(a+b-c))-- gergonne
-    elseif n == 8 then return self : barycentric(b+c-a,a+c-b,a+b-c) -- nagel
-    elseif n == 0 then return self : barycentric(a*(b+c-a),b*(a+c-b),c*(a+b-c)) -- mittenpunkt 
-    elseif n == 10 then return self : barycentric(b+c,a+c,a+b) -- spieker 
-    elseif n == 11 then return self : trilinear(1-cos(B - C),1-cos(C - A),1-cos(A - B))   -- feuerbach  
-    elseif n == 13 then return self : trilinear(1/sin(A+pi/3),1/sin(B+pi/3),1/sin(C+pi/3))   -- first fermat
-    elseif n == 14 then return self : trilinear(1/sin(A-pi/3),1/sin(B-pi/3),1/sin(C-pi/3))   -- second fermat
-    elseif n == 19 then return self : trilinear(tan(A),tan(B),tan(C)) -- clawson
-    elseif n == 20 then return self : barycentric(tan(B)+tan(C)-tan(A),tan(A)+tan(C)-tan(B),tan(A)+tan(B)-tan(C)) --de Longchamps
-    elseif n == 110 then return self : trilinear( a/(b^2 - c^2),
-      b/(c^2 - a^2),
-      c/(a^2 - b^2)) -- kiepert parabola
-    elseif n == 115 then return self : barycentric( (b^2 - c^2)^2,(c^2 - a^2)^2,(a^2 - b^2)^2) -- kiepert hyperbola
-    end
-  end
-  
-  function triangle : isogonal (pt)
-    local pa  = self.bc : reflection (pt)
-    local pb  = self.ca : reflection (pt)
-    local pc  = self.ab : reflection (pt)
-    return circum_center_ (pa,pb,pc)   
-  end
-  
-  function triangle: first_fermat_point ()
-    local x = equilateral_tr_(self.pb,self.pa)
-    local y = equilateral_tr_(self.pa,self.pc)
-    return intersection_ll_(x,self.pc,y,self.pb)
-  end
+function triangle:kimberling(n)
+	local cos, sin, tan, pi = math.cos, math.sin, math.tan, math.pi
+	local A, B, C = self.alpha, self.beta, self.gamma
+	local a, b, c = self.a, self.b, self.c
+	local pi = math.pi
+	if n == 1 then
+		return self:trilinear(1, 1, 1) -- incenter
+	elseif n == 2 then
+		return self:barycentric(1, 1, 1) -- centroid
+	elseif n == 3 then
+		return self:trilinear(cos(A), cos(B), cos(C)) --circumcenter
+	elseif n == 4 then
+		return self:barycentric(tan(A), tan(B), tan(C)) -- orthocenter
+	elseif n == 5 then
+		return self:trilinear(cos(B - C), cos(C - A), cos(A - B)) --nine
+	elseif n == 6 then
+		return self:trilinear(a, b, c) -- lemoine
+	elseif n == 7 then
+		return self:barycentric(1 / (b + c - a), 1 / (a + c - b), 1 / (a + b - c)) -- gergonne
+	elseif n == 8 then
+		return self:barycentric(b + c - a, a + c - b, a + b - c) -- nagel
+	elseif n == 0 then
+		return self:barycentric(a * (b + c - a), b * (a + c - b), c * (a + b - c)) -- mittenpunkt
+	elseif n == 10 then
+		return self:barycentric(b + c, a + c, a + b) -- spieker
+	elseif n == 11 then
+		return self:trilinear(1 - cos(B - C), 1 - cos(C - A), 1 - cos(A - B)) -- feuerbach
+	elseif n == 13 then
+		return self:trilinear(1 / sin(A + pi / 3), 1 / sin(B + pi / 3), 1 / sin(C + pi / 3)) -- first fermat
+	elseif n == 14 then
+		return self:trilinear(1 / sin(A - pi / 3), 1 / sin(B - pi / 3), 1 / sin(C - pi / 3)) -- second fermat
+	elseif n == 19 then
+		return self:trilinear(tan(A), tan(B), tan(C)) -- clawson
+	elseif n == 20 then
+		return self:barycentric(tan(B) + tan(C) - tan(A), tan(A) + tan(C) - tan(B), tan(A) + tan(B) - tan(C)) --de Longchamps
+    	elseif n == 55 then
+    return self:trilinear(a * (b + c - a) , b * (c + a - b) , c * (a + b - c))     
+	elseif n == 56 then
+  return self:trilinear(  a / (b + c - a) , b / (c + a - b) , c / (a + b - c))   
+	elseif n == 110 then
+		return self:trilinear(a / (b ^ 2 - c ^ 2), b / (c ^ 2 - a ^ 2), c / (a ^ 2 - b ^ 2)) -- kiepert parabola
+	elseif n == 115 then
+		return self:barycentric((b ^ 2 - c ^ 2) ^ 2, (c ^ 2 - a ^ 2) ^ 2, (a ^ 2 - b ^ 2) ^ 2) -- kiepert hyperbola
+    elseif n == 371 then
+      return self:trilinear( cos(A - pi / 4), cos(B - pi / 4), cos(C - pi / 4))
+	end
+end
 
-  function triangle: second_fermat_point ()
-    local x = equilateral_tr_(self.pa,self.pb)
-    local y = equilateral_tr_(self.pc,self.pa)
-    return intersection_ll_(x,self.pc,y,self.pb)
-  end
- 
-  function triangle : orthic_axis_points () 
-    return orthic_axis_(self.pa,self.pb,self.pc)
-  end 
+function triangle:isogonal(pt)
+	local pa = self.bc:reflection(pt)
+	local pb = self.ca:reflection(pt)
+	local pc = self.ab:reflection(pt)
+	return circum_center_(pa, pb, pc)
+end
+
+function triangle:first_fermat_point()
+	local x = equilateral_tr_(self.pb, self.pa)
+	local y = equilateral_tr_(self.pa, self.pc)
+	return intersection_ll_(x, self.pc, y, self.pb)
+end
+
+function triangle:second_fermat_point()
+	local x = equilateral_tr_(self.pa, self.pb)
+	local y = equilateral_tr_(self.pc, self.pa)
+	return intersection_ll_(x, self.pc, y, self.pb)
+end
+
+function triangle:orthic_axis_points()
+	return orthic_axis_(self.pa, self.pb, self.pc)
+end
+
+function triangle:kenmotu_point()
+  return self:kimberling(371)
+end
 -------------------
 -- Result -> line
 -------------------
 -- N,H,G,O -- check_equilateral_ (a,b,c)
-function triangle: euler_line ()
-  if  check_equilateral_(self.pa,self.pb,self.pc) 
-     then 
-        tex.error("An error has occurred", {"No euler line with equilateral triangle"})
-     else
-       local a,b,c = orthic_axis_(self.pa,self.pb,self.pc)
-       local x = projection_(a,c,self.eulercenter)
-        return  line : new (self.eulercenter,x)
-     end
+function triangle:euler_line()
+	if check_equilateral_(self.pa, self.pb, self.pc) then
+		tex.error("An error has occurred", { "No euler line with equilateral triangle" })
+	else
+		local a, b, c = orthic_axis_(self.pa, self.pb, self.pc)
+		local x = projection_(a, c, self.eulercenter)
+		return line:new(self.eulercenter, x)
+	end
 end
 
-function triangle : fermat_axis ()
-  local x = self: first_fermat_point ()
-   local y = self: second_fermat_point ()
-   return line : new (x,y)
+function triangle:fermat_axis()
+	local x = self:first_fermat_point()
+	local y = self:second_fermat_point()
+	return line:new(x, y)
 end
 
-function triangle : brocard_axis ()
-  return line : new (self.circumcenter,self: lemoine_point())  
+function triangle:brocard_axis()
+	return line:new(self.circumcenter, self:lemoine_point())
 end
 
-function triangle : simson_line (pt) -- pt on circumcircle
-  local x = self.ab : projection (pt)
-  local y = self.bc : projection (pt)
-  return   line : new (x,y)
+function triangle:simson_line(pt) -- pt on circumcircle
+	local x = self.ab:projection(pt)
+	local y = self.bc:projection(pt)
+	return line:new(x, y)
 end
 
-function triangle: symmedian_line (n)
-   local a = self.pa
-   local b = self.pb
-   local c = self.pc
-   local l = self : lemoine_point ()
-   if n==1 then 
-           return line : new (b,intersection_ll_ (b,l,a,c)) 
-    elseif n==2 then
-           return line : new (c,intersection_ll_ (c,l,a,b))
-     else
-           return line : new (a,intersection_ll_ (a,l,b,c))
-    end
+function triangle:symmedian_line(n)
+	local a = self.pa
+	local b = self.pb
+	local c = self.pc
+	local l = self:lemoine_point()
+	if n == 1 then
+		return line:new(b, intersection_ll_(b, l, a, c))
+	elseif n == 2 then
+		return line:new(c, intersection_ll_(c, l, a, b))
+	else
+		return line:new(a, intersection_ll_(a, l, b, c))
+	end
 end
 
 -- with pt on the circumcircle
-function triangle:steiner_line (pt)
-  local u = symmetry_axial_(self.pa,self.pb,pt)
-  local v = symmetry_axial_(self.pa,self.pc,pt)
-  return line : new (u,v) 
+function triangle:steiner_line(pt)
+	local u = symmetry_axial_(self.pa, self.pb, pt)
+	local v = symmetry_axial_(self.pa, self.pc, pt)
+	return line:new(u, v)
 end
 
-
-function triangle: altitude (n)
-   local a,b,c,o,p
-   a = self.pa
-   b = self.pb
-   c = self.pc
-   o = self.orthocenter
-   if n==1 then 
-        p = projection_ (a,c,b)
-           return line : new (b,p)
-    elseif n==2 then
-        p = projection_ (a,b,c)
-           return line : new (c,p)
-     else
-        p = projection_ (b,c,a)
-           return  line : new (a,p) 
-    end
+function triangle:altitude(n)
+	local a, b, c, o, p
+	a = self.pa
+	b = self.pb
+	c = self.pc
+	o = self.orthocenter
+	if n == 1 then
+		p = projection_(a, c, b)
+		return line:new(b, p)
+	elseif n == 2 then
+		p = projection_(a, b, c)
+		return line:new(c, p)
+	else
+		p = projection_(b, c, a)
+		return line:new(a, p)
+	end
 end
 
-function triangle: bisector (n)
-    local  a = self.pa
-    local  b = self.pb
-    local  c = self.pc
-    local  i = self.incenter
-      if n==1 then
-              return line : new (b,intersection_ll_ (b,i,a,c))
-       elseif n==2 then
-              return line : new (c,intersection_ll_ (c,i,a,b))
-        else
-              return  line : new (a,intersection_ll_ (a,i,b,c))
-       end
+function triangle:bisector(n)
+	local a = self.pa
+	local b = self.pb
+	local c = self.pc
+	local i = self.incenter
+	if n == 1 then
+		return line:new(b, intersection_ll_(b, i, a, c))
+	elseif n == 2 then
+		return line:new(c, intersection_ll_(c, i, a, b))
+	else
+		return line:new(a, intersection_ll_(a, i, b, c))
+	end
 end
 
-function triangle: bisector_ext(n)   -- n =1 swap n=2 2 swap
- local  a = self.pa
- local  b = self.pb
- local  c = self.pc
- if n==1 then -- ac
-         return line : new (b,bisector_ext_ (b,c,a))
-  elseif n==2 then -- ab
-     
-         return line : new (c,bisector_ext_ (c,a,b))
-   else -- bc
-         return line : new (a,bisector_ext_ (a,b,c))
-  end
+function triangle:bisector_ext(n) -- n =1 swap n=2 2 swap
+	local a = self.pa
+	local b = self.pb
+	local c = self.pc
+	if n == 1 then -- ac
+		return line:new(b, bisector_ext_(b, c, a))
+	elseif n == 2 then -- ab
+		return line:new(c, bisector_ext_(c, a, b))
+	else -- bc
+		return line:new(a, bisector_ext_(a, b, c))
+	end
 end
 
-function triangle: antiparallel(pt,n)   -- n = 1 swap ; n= 2 2 swap
-local a,b,c,i,u,v,w
-   a = self.pa
-   b = self.pb
-   c = self.pc
-   i = self.incenter
- if n==1 then
-    u = symmetry_axial_ (b,i,a)
-    v = symmetry_axial_ (b,i,c)
-    w = ll_from_ ( pt , u , v )
-    intersection_ll_ (pt,w,a,b)
-        return line : new (intersection_ll_ (pt,w,c,b),intersection_ll_ (pt,w,a,b))
-  elseif n==2 then
-     u = symmetry_axial_ (c,i,a)
-     v = symmetry_axial_ (c,i,b)
-     w = ll_from_ ( pt , u , v )
-     intersection_ll_ (pt,w,a,c)
-         return line : new (intersection_ll_ (pt,w,b,c),intersection_ll_ (pt,w,a,c))
-   else
-      u = symmetry_axial_ (a,i,b)
-      v = symmetry_axial_ (a,i,c)
-      w = ll_from_ ( pt , u , v )
-      intersection_ll_ (pt,w,b,c)
-          return line : new (intersection_ll_ (pt,w,c,a),intersection_ll_ (pt,w,b,a))
-  end
+function triangle:antiparallel(pt, n) -- n = 1 swap ; n= 2 2 swap
+	local a, b, c, i, u, v, w
+	a = self.pa
+	b = self.pb
+	c = self.pc
+	i = self.incenter
+	if n == 1 then
+		u = symmetry_axial_(b, i, a)
+		v = symmetry_axial_(b, i, c)
+		w = ll_from_(pt, u, v)
+		intersection_ll_(pt, w, a, b)
+		return line:new(intersection_ll_(pt, w, c, b), intersection_ll_(pt, w, a, b))
+	elseif n == 2 then
+		u = symmetry_axial_(c, i, a)
+		v = symmetry_axial_(c, i, b)
+		w = ll_from_(pt, u, v)
+		intersection_ll_(pt, w, a, c)
+		return line:new(intersection_ll_(pt, w, b, c), intersection_ll_(pt, w, a, c))
+	else
+		u = symmetry_axial_(a, i, b)
+		v = symmetry_axial_(a, i, c)
+		w = ll_from_(pt, u, v)
+		intersection_ll_(pt, w, b, c)
+		return line:new(intersection_ll_(pt, w, c, a), intersection_ll_(pt, w, b, a))
+	end
 end
 
-function triangle : lemoine_axis () -- revoir car problème
-  local C = self : circum_circle ()
-  local pl = self : lemoine_point()
-  return C : polar (pl)
+function triangle:lemoine_axis() -- revoir car problème
+	local C = self:circum_circle()
+	local pl = self:lemoine_point()
+	return C:polar(pl)
 end
 
-function triangle : orthic_axis () 
-  local x,y,z = orthic_axis_(self.pa,self.pb,self.pc)
-  return line : new (x,z)
+function triangle:orthic_axis()
+	local x, y, z = orthic_axis_(self.pa, self.pb, self.pc)
+	return line:new(x, z)
 end
 
 -----------------------
@@ -351,345 +373,363 @@
 --- Result -> circles --
 -----------------------
 function triangle:euler_circle()
-   return circle : new (euler_center_ ( self.pa , self.pb , self.pc),midpoint_( self.pb , self.pc))
+	return circle:new(euler_center_(self.pa, self.pb, self.pc), midpoint_(self.pb, self.pc))
 end
 
 function triangle:circum_circle()
-return   circle : new (circum_circle_ ( self.pa , self.pb , self.pc), self.pa )
+	return circle:new(circum_circle_(self.pa, self.pb, self.pc), self.pa)
 end
 
 function triangle:in_circle()
-return  circle : new  (self.incenter, projection_ (self.pb , self.pc,self.incenter) )
+	return circle:new(self.incenter, projection_(self.pb, self.pc, self.incenter))
 end
 
-function triangle:ex_circle (n)   -- n =1 swap n=2 2 swap
-   local a,b,c,o
-   a = self.pa
-   b = self.pb
-   c = self.pc
- if n==1 then 
-    o = ex_center_ (b,c,a) 
-     return circle : new (o ,   projection_ (c,a,o))
-  elseif n==2 then
-     o = ex_center_ (c,a,b) 
-      return circle : new (o ,   projection_ (a,b,o))
-   else
-      o = ex_center_ (a,b,c) 
-     return  circle : new (o ,   projection_ (b,c,o)) 
-  end
+function triangle:ex_circle(n) -- n =1 swap n=2 2 swap
+	local a, b, c, o
+	a = self.pa
+	b = self.pb
+	c = self.pc
+	if n == 1 then
+		o = ex_center_(b, c, a)
+		return circle:new(o, projection_(c, a, o))
+	elseif n == 2 then
+		o = ex_center_(c, a, b)
+		return circle:new(o, projection_(a, b, o))
+	else
+		o = ex_center_(a, b, c)
+		return circle:new(o, projection_(b, c, o))
+	end
 end
 
-function triangle: first_lemoine_circle()
-local lc,oc
-   lc = self: lemoine_point()
-   oc = self.circumcenter
-return circle : new( midpoint_ (lc,oc),intersection_ll_ (lc,ll_from_ (lc,self.pa,self.pb),self.pa,self.pc))
+function triangle:first_lemoine_circle()
+	local lc, oc
+	lc = self:lemoine_point()
+	oc = self.circumcenter
+	return circle:new(midpoint_(lc, oc), intersection_ll_(lc, ll_from_(lc, self.pa, self.pb), self.pa, self.pc))
 end
 
-function triangle: second_lemoine_circle()
-local lc,a,b,c,r,th
-   lc = self: lemoine_point()
-    a = point.abs(self.pc-self.pb)
-    b = point.abs(self.pa-self.pc)
-    c = point.abs(self.pb-self.pa)
-    r = ( a*b*c) / (a*a+b*b+c*c)
-    th = lc + point(r,0)
-  return   circle : new (lc, th )
+function triangle:second_lemoine_circle()
+	local lc, a, b, c, r, th
+	lc = self:lemoine_point()
+	a = point.abs(self.pc - self.pb)
+	b = point.abs(self.pa - self.pc)
+	c = point.abs(self.pb - self.pa)
+	r = (a * b * c) / (a * a + b * b + c * c)
+	th = lc + point(r, 0)
+	return circle:new(lc, th)
 end
 
-function triangle: spieker_circle()
-local ma,mb,mc,sp
-      ma,mb,mc =  medial_tr_ ( self.pa , self.pb , self.pc)
-      sp       = in_center_ (ma,mb,mc)
-return circle : new (sp,projection_ (ma,mb,sp))
+function triangle:spieker_circle()
+	local ma, mb, mc, sp
+	ma, mb, mc = medial_tr_(self.pa, self.pb, self.pc)
+	sp = in_center_(ma, mb, mc)
+	return circle:new(sp, projection_(ma, mb, sp))
 end
 
+function triangle:soddy_circle()
+	local s, i = soddy_center_(self.pa, self.pb, self.pc)
+	return circle:new(s, i)
+end
 
-function triangle :  soddy_circle ()
-  local s,i = soddy_center_ (self.pa,self.pb,self.pc)
-   return circle : new ( s , i )
+function triangle:cevian_circle(p)
+	local pta, ptb, ptc = cevian_(self.pa, self.pb, self.pc, p)
+	return circle:new(circum_circle_(pta, ptb, ptc), pta)
 end
 
-function triangle :  cevian_circle (p)
-    local pta,ptb,ptc = cevian_  (self.pa,self.pb,self.pc,p)
-     return circle : new (circum_circle_ (pta,ptb,ptc),pta)
-  end
+function triangle:symmedial_circle()
+	local pta, ptb, ptc, p
+	p = lemoine_point_(self.pa, self.pb, self.pc)
+	pta, ptb, ptc = cevian_(self.pa, self.pb, self.pc, p)
+	return circle:new(circum_circle_(pta, ptb, ptc), pta)
+end
 
-function triangle :  symmedial_circle ()
-  local pta,ptb,ptc,p
-   p = lemoine_point_ ( self.pa , self.pb , self.pc)
-   pta,ptb,ptc = cevian_  (self.pa,self.pb,self.pc,p)
-   return circle : new (circum_circle_ (pta,ptb,ptc),pta)
+function triangle:conway_circle()
+	local t
+	t = report_(self.pb, self.pa, length(self.pb, self.pc), self.pa)
+	return circle:new(self.incenter, t)
 end
-  
-function triangle :  conway_circle ()
-  local t
-   t =      report_ (self.pb,self.pa,length(self.pb,self.pc),self.pa)
-   return circle : new (self.incenter,t)
+
+function triangle:pedal_circle(pt)
+	local x, y, z, c
+	x = projection_(self.pb, self.pc, pt)
+	y = projection_(self.pa, self.pc, pt)
+	z = projection_(self.pa, self.pb, pt)
+	c = circum_center_(x, y, z)
+	return circle:new(c, x)
 end
 
-function triangle :  pedal_circle (pt)
-  local x,y,z,c
-  x = projection_ (self.pb,self.pc,pt)
-  y = projection_ (self.pa,self.pc,pt)
-  z = projection_ (self.pa,self.pb,pt)
-  c = circum_center_ (x,y,z)
-  return circle : new (c,x)
-end    
-
-function triangle: bevan_circle ()
-   local o,r,s,t
-   o = circum_center_ ( excentral_tr_ ( self.pa , self.pb , self.pc))
-   r,s,t = excentral_tr_ ( self.pa , self.pb , self.pc)
-return  circle : new  (o, r)
+function triangle:bevan_circle()
+	local o, r, s, t
+	o = circum_center_(excentral_tr_(self.pa, self.pb, self.pc))
+	r, s, t = excentral_tr_(self.pa, self.pb, self.pc)
+	return circle:new(o, r)
 end
 
 function triangle:taylor_points()
-  local a,b,c = orthic_tr_(self.pa,self.pb,self.pc)
-  return 
-         projection_(self.pa, self.pc, a),
-         projection_(self.pa, self.pb, a),
-         projection_(self.pb, self.pa, b),
-         projection_(self.pb, self.pc, b),
-         projection_(self.pc, self.pb, c),
-         projection_(self.pc, self.pa, c)
+	local a, b, c = orthic_tr_(self.pa, self.pb, self.pc)
+	return projection_(self.pa, self.pc, a),
+		projection_(self.pa, self.pb, a),
+		projection_(self.pb, self.pa, b),
+		projection_(self.pb, self.pc, b),
+		projection_(self.pc, self.pb, c),
+		projection_(self.pc, self.pa, c)
 end
 
-function triangle : taylor_circle ()
-  local a,b,c = orthic_tr_(self.pa,self.pb,self.pc)
-   local d = projection_(self.pa, self.pb, a)
-   local e = projection_(self.pb, self.pc, b)
-   local f = projection_(self.pc, self.pa, c)
-   return  circle : new ( circum_circle_ (d,e,f),d)
+function triangle:taylor_circle()
+	local a, b, c = orthic_tr_(self.pa, self.pb, self.pc)
+	local d = projection_(self.pa, self.pb, a)
+	local e = projection_(self.pb, self.pc, b)
+	local f = projection_(self.pc, self.pa, c)
+	return circle:new(circum_circle_(d, e, f), d)
 end
+
+function triangle:kenmotu_circle()
+    local a, b, c = self.a, self.b, self.c
+    local area = self.area
+    local rho = (math.sqrt(2) * a * b * c) / (4 * area + (a^2 + b^2 + c^2))
+    local center = self:kimberling(371)
+    return circle:new(through(center, rho))
+end
 -------------------
 -- Result -> triangle
 -------------------
-function triangle: orthic()
-return   triangle : new (orthic_tr_ ( self.pa , self.pb , self.pc))
+function triangle:orthic()
+	return triangle:new(orthic_tr_(self.pa, self.pb, self.pc))
 end
 
-function triangle: medial()
-return    triangle : new (medial_tr_ ( self.pa , self.pb , self.pc))
+function triangle:medial()
+	return triangle:new(medial_tr_(self.pa, self.pb, self.pc))
 end
 
-function triangle: incentral()
-    return   triangle : new (incentral_tr_ ( self.pa , self.pb , self.pc))
+function triangle:incentral()
+	return triangle:new(incentral_tr_(self.pa, self.pb, self.pc))
 end
 
-function triangle: excentral()
-    return   triangle : new (excentral_tr_ ( self.pa , self.pb , self.pc))
+function triangle:excentral()
+	return triangle:new(excentral_tr_(self.pa, self.pb, self.pc))
 end
 
-function triangle: intouch()
-    return  triangle : new  (intouch_tr_ ( self.pa , self.pb , self.pc))
+function triangle:intouch()
+	return triangle:new(intouch_tr_(self.pa, self.pb, self.pc))
 end
 
-function triangle: contact()
-    return  triangle : new  (intouch_tr_ ( self.pa , self.pb , self.pc))
+function triangle:contact()
+	return triangle:new(intouch_tr_(self.pa, self.pb, self.pc))
 end
 
-function triangle: extouch()
-    return  triangle : new  (extouch_tr_ ( self.pa , self.pb , self.pc))
+function triangle:extouch()
+	return triangle:new(extouch_tr_(self.pa, self.pb, self.pc))
 end
 
-function triangle: feuerbach()
-    return   triangle : new (feuerbach_tr_ (self.pa , self.pb , self.pc))
+function triangle:feuerbach()
+	return triangle:new(feuerbach_tr_(self.pa, self.pb, self.pc))
 end
 
-function triangle: anti ()
-     return  triangle : new (anti_tr_  (self.pa,self.pb,self.pc))
+function triangle:anti()
+	return triangle:new(anti_tr_(self.pa, self.pb, self.pc))
 end
 
 triangle.anticomplementary = triangle.anti
 
-function triangle: tangential ()
-     return triangle : new  (tangential_tr_  (self.pa,self.pb,self.pc))
+function triangle:tangential()
+	return triangle:new(tangential_tr_(self.pa, self.pb, self.pc))
 end
 
-function triangle: cevian (p)
-   return triangle : new  (cevian_  (self.pa,self.pb,self.pc,p))
+function triangle:cevian(p)
+	return triangle:new(cevian_(self.pa, self.pb, self.pc, p))
 end
 
-function triangle: symmedian ()
-   local p = lemoine_point_ ( self.pa , self.pb , self.pc)
-   return triangle : new  (cevian_  (self.pa,self.pb,self.pc,p))
+function triangle:symmedian()
+	local p = lemoine_point_(self.pa, self.pb, self.pc)
+	return triangle:new(cevian_(self.pa, self.pb, self.pc, p))
 end
 
-function triangle: symmedial ()
-   local p = lemoine_point_ ( self.pa , self.pb , self.pc)
-   return triangle : new  (cevian_  (self.pa,self.pb,self.pc,p))
+function triangle:symmedial()
+	local p = lemoine_point_(self.pa, self.pb, self.pc)
+	return triangle:new(cevian_(self.pa, self.pb, self.pc, p))
 end
 
-function triangle: euler ()
-   return triangle : new  (euler_points_ (self.pa,self.pb,self.pc) )
+function triangle:euler()
+	return triangle:new(euler_points_(self.pa, self.pb, self.pc))
 end
 
-function triangle: pedal (pt)
-   return triangle : new  (self : projection (pt))
+function triangle:pedal(pt)
+	return triangle:new(self:projection(pt))
 end
 
-function triangle: similar ()
-   return triangle : new  (similar_ (self.pa,self.pb,self.pc) )
+function triangle:similar()
+	return triangle:new(similar_(self.pa, self.pb, self.pc))
 end
 -------------------
+-- Result -> square
+-------------------
+
+-- Method for inscribing a square in a triangle with vertex rotation
+function triangle:square_inscribed(permutation)
+  -- Set a default value for rotation if not supplied
+   permutation = permutation or 0
+   permutation = permutation + 1
+   local vertices = {self.pa, self.pb, self.pc}
+   local i = (permutation - 1) % 3 + 1
+   local j = i % 3 + 1
+   local k = j % 3 + 1
+    local a = vertices[i]
+    local b = vertices[j]
+    local c = vertices[k]
+    return square:new(square_inscribed_(a,b,c))
+end
+-------------------
 -- Result -> conic
 -------------------
-function triangle: steiner_inellipse ()
-   return steiner_ (self.pa,self.pb,self.pc)
+function triangle:steiner_inellipse()
+	return steiner_(self.pa, self.pb, self.pc)
 end
 
-function triangle: steiner_circumellipse ()
-   local e =  steiner_ (self.pa,self.pb,self.pc)
-   local v =  report_(e.center,e.vertex,e.a,e.vertex)
-   local cv = report_(e.center,e.covertex,e.b,e.covertex)
-   return conic : new ( EL_points (e.center,v,cv))
+function triangle:steiner_circumellipse()
+	local e = steiner_(self.pa, self.pb, self.pc)
+	local v = report_(e.center, e.vertex, e.a, e.vertex)
+	local cv = report_(e.center, e.covertex, e.b, e.covertex)
+	return conic:new(EL_points(e.center, v, cv))
 end
 
-function triangle: euler_ellipse ()
-   if  self : check_acutangle ()
-   then
-    local  x,y  = intersection_lc_ (self.orthocenter,self.circumcenter,
-                        self.eulercenter,self.ab.mid)
-    local a =.5 * length(x,y)
-  return conic : new ( EL_bifocal (self.orthocenter,self.circumcenter,a))
-   end
+function triangle:euler_ellipse()
+	if self:check_acutangle() then
+		local x, y = intersection_lc_(self.orthocenter, self.circumcenter, self.eulercenter, self.ab.mid)
+		local a = 0.5 * length(x, y)
+		return conic:new(EL_bifocal(self.orthocenter, self.circumcenter, a))
+	end
 end
 
 --  kiepert ellipse
-function triangle : kiepert_hyperbola ()
-    -- center
-    local center    = self : kimberling (115)
-    local O         = self.circumcenter
-    local G         = self.centroid
-    --  Brocard axis
-    local L         = self : brocard_axis ()
-    local M,N       = intersection_lc_ (L.pa,L.pb,O,self.pa)
-     -- simson lines
-    local Lsa       = self : simson_line (M)
-    local Lsb       = self : simson_line (N)
-    local axis      = bisector (center,Lsa.pa,Lsb.pa)
-   -- new frame system
-    local U         = report_(axis.pa,axis.pb,-1,center)
-    local V         = rotation_ (center,math.pi/2,U)
-    -- 
-    local  minor = axis : ortho_from (center)
-    local sys       = occs : new (minor  ,center)
-    local x,y       = sys : coordinates (self.pa)
-     -- x=-x
-     -- y=-y
-   -- local x,y       = newcoordinates (self.pa,center,U,V)
-    local a         = math.sqrt(x^2 - y^2)
-    local c         = math.sqrt(2) * a
-    local Fa        = report_(center,axis.pb,-c,    center)
-    local Fb        = report_(center,axis.pb, c,    center)
-    local K         = report_(center,axis.pb,-a^2/c,center)
-    local directrix = axis : ortho_from (K)
-    return conic : new (Fa,directrix,math.sqrt(2))
-  end
-  --  kiepert parabola
-  function triangle : kiepert_parabola ()
-    if (self.a == self.b) or (self.a == self.c) or (self.c == self.b)
-    then 
-      tex.error("An error has occurred", {"No X(110)"})
-    else
-      L = self : euler_line ()
-      F = self : kimberling (110)
-      return conic : new (F,L,1)
-    end
-  end
+function triangle:kiepert_hyperbola()
+	-- center
+	local center = self:kimberling(115)
+	local O = self.circumcenter
+	local G = self.centroid
+	--  Brocard axis
+	local L = self:brocard_axis()
+	local M, N = intersection_lc_(L.pa, L.pb, O, self.pa)
+	-- simson lines
+	local Lsa = self:simson_line(M)
+	local Lsb = self:simson_line(N)
+	local axis = bisector(center, Lsa.pa, Lsb.pa)
+	-- new frame system
+	local U = report_(axis.pa, axis.pb, -1, center)
+	local V = rotation_(center, math.pi / 2, U)
+	--
+	local minor = axis:ortho_from(center)
+	local sys = occs:new(minor, center)
+	local x, y = sys:coordinates(self.pa)
+	-- x=-x
+	-- y=-y
+	-- local x,y       = newcoordinates (self.pa,center,U,V)
+	local a = math.sqrt(x ^ 2 - y ^ 2)
+	local c = math.sqrt(2) * a
+	local Fa = report_(center, axis.pb, -c, center)
+	local Fb = report_(center, axis.pb, c, center)
+	local K = report_(center, axis.pb, -a ^ 2 / c, center)
+	local directrix = axis:ortho_from(K)
+	return conic:new(Fa, directrix, math.sqrt(2))
+end
+--  kiepert parabola
+function triangle:kiepert_parabola()
+	if (self.a == self.b) or (self.a == self.c) or (self.c == self.b) then
+		tex.error("An error has occurred", { "No X(110)" })
+	else
+		L = self:euler_line()
+		F = self:kimberling(110)
+		return conic:new(F, L, 1)
+	end
+end
 -------------------
 -- Result -> miscellaneous
 -------------------
-function triangle: get_angle (n)
-   local a,b,c
-   a = self.pa
-   b = self.pb
-   c = self.pc
-   if n==1 then
-          return  point.arg  ((a-b)/(c-b))
-    elseif n==2 then
-          return  point.arg  ((b-c)/(a-c))
-     else
-          return  point.arg  ((c-a)/(b-a))
-    end
+function triangle:get_angle(n)
+	local a, b, c
+	a = self.pa
+	b = self.pb
+	c = self.pc
+	if n == 1 then
+		return point.arg((a - b) / (c - b))
+	elseif n == 2 then
+		return point.arg((b - c) / (a - c))
+	else
+		return point.arg((c - a) / (b - a))
+	end
 end
 
-function triangle: projection (p)
-  local  x = projection_ (self.pb,self.pc,p)
-  local  y = projection_ (self.pa,self.pc,p)
-  local  z = projection_ (self.pa,self.pb,p)
-  return   x,y,z
+function triangle:projection(p)
+	local x = projection_(self.pb, self.pc, p)
+	local y = projection_(self.pa, self.pc, p)
+	local z = projection_(self.pa, self.pb, p)
+	return x, y, z
 end
 
-function triangle: parallelogram ()
-    local x = self.pc + self.pa - self.pb
-  return  x
+function triangle:parallelogram()
+	local x = self.pc + self.pa - self.pb
+	return x
 end
 
-function triangle: area () -- obsolete
-    return area_(self.pa,self.pb,self.pc)
+function triangle:area() -- obsolete
+	return area_(self.pa, self.pb, self.pc)
 end
 
-function triangle: barycentric_coordinates (pt)
-   return barycentric_coordinates_ (self.pa,self.pb,self.pc,pt)
+function triangle:barycentric_coordinates(pt)
+	return barycentric_coordinates_(self.pa, self.pb, self.pc, pt)
 end
 
-function triangle: in_out (pt)
- return in_out_ (self.pa,self.pb,self.pc,pt)
+function triangle:in_out(pt)
+	return in_out_(self.pa, self.pb, self.pc, pt)
 end
 
-function triangle: check_equilateral ()
- return check_equilateral_ (self.pa,self.pb,self.pc)
+function triangle:check_equilateral()
+	return check_equilateral_(self.pa, self.pb, self.pc)
 end
 
-function triangle: check_acutangle()
-    local asq = self.a * self.a
-    local bsq = self.b * self.b
-    local csq = self.c * self.c
-    if asq + bsq > csq and bsq + csq > asq and csq + asq > bsq then
-        return true
-    else
-        return false
-    end
+function triangle:check_acutangle()
+	local asq = self.a * self.a
+	local bsq = self.b * self.b
+	local csq = self.c * self.c
+	if asq + bsq > csq and bsq + csq > asq and csq + asq > bsq then
+		return true
+	else
+		return false
+	end
 end
 
 -- Circle tangent to two straight lines passing through a given point
 function triangle:c_ll_p(p)
-  
-  -- Compute the bisector of the triangle 
-  local lbi = bisector(self.pa, self.pb,self.pc)
+	-- Compute the bisector of the triangle
+	local lbi = bisector(self.pa, self.pb, self.pc)
 
-  if lbi:in_out(p) then
-    -- Orthogonal projection of p onto the bisector
-    local lp = lbi:ortho_from(p)
+	if lbi:in_out(p) then
+		-- Orthogonal projection of p onto the bisector
+		local lp = lbi:ortho_from(p)
 
-    -- Intersection of line from p to its projection with self.pa and self.pb
-    local i = intersection_ll_(p, lp.pb, self.pa, self.pb)
+		-- Intersection of line from p to its projection with self.pa and self.pb
+		local i = intersection_ll_(p, lp.pb, self.pa, self.pb)
 
-    -- Intersection points of the line with the circle defined by (i, p)
-    local t1, t2 = intersection_lc_(self.pa, self.pb, i, p)
+		-- Intersection points of the line with the circle defined by (i, p)
+		local t1, t2 = intersection_lc_(self.pa, self.pb, i, p)
 
-    -- Create the main line and find orthogonal projections from t1 and t2
-    local lab = line:new(self.pa, self.pb)
-    local x = lab:ortho_from(t1).pb
-    local y = lab:ortho_from(t2).pb
+		-- Create the main line and find orthogonal projections from t1 and t2
+		local lab = line:new(self.pa, self.pb)
+		local x = lab:ortho_from(t1).pb
+		local y = lab:ortho_from(t2).pb
 
-    -- Return two circles based on the orthogonal projections and points t1, t2
-    return circle:new(intersection_ll_(x, t1, self.pa, p), t1),
-           circle:new(intersection_ll_(y, t2, self.pa, p), t2)
-  else
-     local lab = line:new(self.pa, self.pb)
-    -- Reflection of p across the bisector
-    local q = lbi : reflection (p)
+		-- Return two circles based on the orthogonal projections and points t1, t2
+		return circle:new(intersection_ll_(x, t1, self.pa, p), t1), circle:new(intersection_ll_(y, t2, self.pa, p), t2)
+	else
+		local lab = line:new(self.pa, self.pb)
+		-- Reflection of p across the bisector
+		local q = lbi:reflection(p)
 
-    -- Compute circles from the Wallis construction
-    local c1, c2 = lab:c_l_pp(p, q)
+		-- Compute circles from the Wallis construction
+		local c1, c2 = lab:c_l_pp(p, q)
 
-    -- Return two circles with centers and points on their circumference
-    return  c1,c2
-  end
+		-- Return two circles with centers and points on their circumference
+		return c1, c2
+	end
 end
 
-
-return triangle
\ No newline at end of file
+return triangle

Modified: trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_vector.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_vector.lua	2025-03-05 02:42:44 UTC (rev 74456)
+++ trunk/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_vector.lua	2025-03-05 21:31:22 UTC (rev 74457)
@@ -1,12 +1,12 @@
 -- tkz_elements_vectors.lua
--- date 2025/02/26
--- version 3.32
+-- date 2025/03/04
+-- version 3.34c
 -- Copyright 2025  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
+-- 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”.



More information about the tex-live-commits mailing list.