\section{Work organization} % (fold) \label{sec:work_organization} Here's a sample organization. The line |% !TEX TS-program = lualatex| ensures that you compile with Lua\LATEX{}. The \code{standalone} class is useful, as all you need to do here is create a figure. The package \pkg{ifthen} is useful if you need to use some Boolean. The macro \tkzcname{LuaCodeDebugOn} allows you to try and find errors in Lua code. While it's possible to leave the Lua code in the \tkzNameEnv{tkzelements} environment, externalizing this code has its advantages. The first advantage is that, if you use a good editor, you have a better presentation of the code. Styles differ between \code{Lua} and \LATEX{}, making the code clearer. This is how I proceeded, then reintegrated the code into the main code. Another advantage is that you don't have to incorrectly comment the code. For Lua code, you comment lines with |--| (double minus sign), whereas for \LATEX{}, you comment with |%|. A third advantage is that the code can be reused. \begin{Verbatim} % !TEX TS-program = lualatex % Created by Alain Matthes on 2024-01-09. \documentclass[margin = 12pt]{standalone} \usepackage{tkz-euclide} \usepackage{tkz-elements,ifthen} \begin{document} \LuaCodeDebugOn \begin{tkzelements} scale = 1.25 dofile ("sangaku.lua") \end{tkzelements} \begin{tikzpicture} \tkzGetNodes \tkzDrawCircle(I,F) \tkzFillPolygon[color = purple](A,C,D)% \tkzFillPolygon[color = blue!50!black](A,B,C)% \tkzFillCircle[color = orange](I,F)% \end{tikzpicture} \end{document} \end{Verbatim} And here is the code for the \code{Lua} part: the file |ex_sangaku.lua| \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{tkzelements} scale = 1.25 dofile ("sangaku.lua") \end{tkzelements} \begin{tikzpicture} \tkzGetNodes \tkzDrawCircle(I,F) \tkzFillPolygon[color = purple](A,C,D)% \tkzFillPolygon[color = blue!50!black](A,B,C)% \tkzFillCircle[color = orange](I,F)% \end{tikzpicture} \subsection{Scale problem} % (fold) \label{sub:scale_problem} If necessary, it's better to perform scaling in the \code{Lua} section. This approach tends to be more accurate. However, there is a caveat to be aware of. I've made it a point to avoid using numerical values in my codes whenever possible. Generally, these values only appear in the definition of fixed points. If the \code{scale} option is used, scaling is applied when points are created. Let's imagine you want to organize your code as follows: |scale = 1.5|\\ |xB = 8|\\ |z.B = point : new ( xB,0 )| Scaling would then be ineffective, as the numerical values are not modified, only the point coordinates. To account for scaling, use the function \Igfct{math}{value (v) }. |scale = 1.5|\\ |xB = value (8)|\\ |z.B = point : new ( xB,0 )| \subsection{Code presentation} % (fold) \label{sub:code_presentation} The key point is that, unlike \LATEX{} or \TEX{}, you can insert spaces absolutely anywhere. % subsection code_presentation (end) % subsection scale_problem (end) % section work_organization (end)