1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
\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.
You can load \tkzname{tkz-euclide} in three different ways. The simplest is |\usepackage[mini]{tkz-euclide}| and you have full access to the package. You also have the option to use the \ItkzPopt{tkz-euclide}{lua} option. This will allow you, if you want to perform calculations outside of \tkzname{\tkznameofpack}, to obtain them using \code{lua}. Finally, the recommended method is to use the \ItkzPopt{tkz-euclide}{mini} option. This allows you to load only the modules necessary for drawing. You can still optionally draw using \TIKZ.
The package \pkg{ifthen} is useful if you need to use some Boolean.
While it's possible to leave the Lua code in the macro |directlua|, 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{minipage}{.5\textwidth}
\begin{Verbatim}
% !TEX TS-program = lualatex
% Created by Alain Matthes on 2024-01-09.
\documentclass[margin = 12pt]{standalone}
\usepackage[mini]{tkz-euclide}
\usepackage{tkz-elements,ifthen}
\begin{document}
\directlua{
scale = 1.25
dofile ("sangaku.lua")
}
\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}
\end{minipage}
\begin{minipage}{.5\textwidth}
\directlua{
init_elements ()
scale = .75
dofile ("sangaku.lua")
}
\begin{center}
\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{center}
\end{minipage}
And here is the code for the \code{Lua} part: the file |ex_sangaku.lua|
\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}
\end{mybox}
\end{minipage}
\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:
\begin{mybox}{}
\begin{verbatim}
scale = 1.5
xB = 8
z.B = point : new ( xB,0 )
\end{verbatim}
\end{mybox}
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) }.
\begin{mybox}{}
\begin{verbatim}
scale = 1.5
xB = value (8)
z.B = point : new ( xB,0 )
\end{verbatim}
\end{mybox}
\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)
|