summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib/liftarm/liftarm.tex
blob: 8619b58f2d1f6b27e0a4468607181e76e22058c1 (plain)
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
%Documentation for the liftarm package
%Draw liftarms with TikZ
%(c) Matthias Floré
%This program can be redistributed and/or modified under the terms of the LaTeX Project Public License Distributed from CTAN archives on http://www.latex-project.org/lppl.txt.
\documentclass[a4paper,english,dvipsnames]{ltxdoc}
\usepackage[english]{babel}
\usepackage{graphicx}
\usepackage[a4paper,left=2.25cm,right=2.25cm,top=2.5cm,bottom=2.5cm,nohead]{geometry}
\usepackage{parskip}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{mathtools}
\usepackage{amssymb}
\allowdisplaybreaks
\usepackage{multicol}
\usepackage{animate}
\usepackage{liftarm}
\input{pgfmanual-en-macros.tex}
\usepackage[page]{totalcount}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\headrulewidth}{0pt}
\cfoot{\iftotalpages\begin{tikzpicture}\liftarm[mark holes=\thepage-1]{0,0}{\totalpages-2}{0}\end{tikzpicture}\fi}%\liftarm{0,0}{\thepage}{0}
\fancyhead{}
\usepackage{imakeidx}
\makeindex[program=makeindex,columns=2,intoc=true]
\indexsetup{othercode={\thispagestyle{fancy}}}
\usepackage[linktoc=all,pdfstartview=FitH,colorlinks=true,linkcolor=Mahogany,citecolor=ForestGreen,urlcolor=MidnightBlue,bookmarksnumbered=true]{hyperref}
\hypersetup{pdftitle={The liftarm package},pdfauthor={Matthias Flor\'e},pdfsubject={Manual},pdfkeywords={liftarm}}
\setcounter{tocdepth}{2}
\setcounter{secnumdepth}{2}
\DeclareMathOperator{\atan}{atan}
\title{The \texttt{liftarm} package\\[12pt]\large Draw liftarms with \tikzname}
\author{Matthias Flor\'e}
\date{2022-03-08}
\begin{document}
\maketitle
\thispagestyle{fancy}
\begin{abstract}
\noindent This package is based on the package |tikz| (see \cite{TtTaPGFp}) and can be used to draw liftarms with \tikzname. It provides several options for the appearance of the liftarms, a command which connects two liftarms and an environment to describe a construction. This is the manual for version 1.0.
\end{abstract}
\tableofcontents
\section{Usage}
The package |liftarm| can be used by putting

|\usepackage{liftarm}|

in the preamble.

The package |liftarm| loads the packages |etoolbox|, |xcolor| with the option |dvipsnames|, |tikz| and the \tikzname{} library |calc|. Since |xcolor| is loaded with the option |dvipsnames|, packages such as |pgfplots| and |tcolorbox| must be loaded \emph{after} |liftarm|.
\section{Drawing liftarms}
\begin{command}{\liftarm\opt{\oarg{options}}\marg{point}\marg{length}\marg{angle}}
This command can be placed inside a |tikzpicture| environment. It draws a liftarm of \meta{length} starting at \meta{point}. The angle between the liftarm and the $x$-axis can be specified by \meta{angle} in degrees. The distance between the holes is $1$.
\begin{codeexample}[width=10cm]
\begin{tikzpicture}
\liftarm{1,2}{3}{20}
\end{tikzpicture}
\end{codeexample}
Note that the number of holes is $\meta{length}+1$. The \meta{options} can be given with the following keys.
\begin{key}{/liftarm/axle holes=\marg{values}}
This key defines the holes in the liftarm where axle holes will be drawn.
\begin{codeexample}[width=10cm]
\begin{tikzpicture}
\liftarm[axle holes={0,4}]{0,1}{4}{0}
\end{tikzpicture}
\end{codeexample}
\end{key}
\begin{key}{/liftarm/brick=\opt{\meta{boolean}} (default true, initially false)}
If true, a brick will be drawn instead of a liftarm.
\begin{codeexample}[width=10cm]
\begin{tikzpicture}
\liftarm[brick]{0,1}{2}{0}
\end{tikzpicture}
\end{codeexample}
\end{key}
\begin{key}{/liftarm/color=\marg{name}}
This key defines the color of the liftarm. The color can also be specified without key.
\begin{codeexample}[width=10cm]
\begin{tikzpicture}
\liftarm[color=Green]{0,1}{4}{0}
\liftarm[Blue]{0,2}{3}{0}
\end{tikzpicture}
\end{codeexample}
\end{key}
\begin{key}{/liftarm/color 0=\marg{name} (initially Gray)}
\end{key}
\begin{key}{/liftarm/color 1=\marg{name} (initially darkgray)}
\end{key}
\begin{key}{/liftarm/color 2=\marg{name} (initially Yellow)}
\end{key}
\begin{key}{/liftarm/color 3=\marg{name} (initially Orange)}
\end{key}
\begin{key}{/liftarm/color 4=\marg{name} (initially Red)}
\end{key}
\begin{key}{/liftarm/color 5=\marg{name} (initially Green)}
\end{key}
\begin{key}{/liftarm/color 6=\marg{name} (initially Blue)}
\end{key}
\begin{key}{/liftarm/color 7=\marg{name} (initially Brown)}
These keys define the colors of the liftarms which have as their length the number following |color|.
\end{key}
\begin{key}{/liftarm/color modulo=\marg{number} (initially 8)}
The default colors of the liftarms are determined by computing the length of the liftarm modulo the value of this key and selecting the color from the previous keys.
\begin{codeexample}[width=10cm]
\begin{tikzpicture}[scale=0.5]
\foreach\n in {0,...,16}{
    \liftarm{0,-\n}{\n}{0}
}
\end{tikzpicture}
\end{codeexample}
\begin{codeexample}[width=10cm]
\begin{tikzpicture}[scale=0.5]
\pgfkeys{
    /liftarm,
    color 0=Yellow,
    color 1=Red,
    color 2=Green,
    color 3=Blue,
    color modulo=4
}
\foreach\n in {0,...,8}{
    \liftarm{0,-\n}{\n}{0}
}
\end{tikzpicture}
\end{codeexample}
\end{key}
\begin{key}{/liftarm/contour=\opt{\meta{boolean}} (default true, initially false)}
If true, a contour will be drawn around the liftarm.
\begin{codeexample}[width=10cm]
\begin{tikzpicture}
\liftarm[contour]{0,1}{4}{0}
\liftarm[brick,contour]{1,2}{2}{0}
\end{tikzpicture}
\end{codeexample}
\end{key}
\begin{key}{/liftarm/coordinate=\marg{number 1/name 1}\dots}
This key defines coordinates with name \meta{name i} at hole \meta{number i} of the liftarm.
\begin{codeexample}[width=10cm]
\begin{tikzpicture}
\liftarm[
    coordinate={1/A,3/B}
]{0,1}{6}{40}
\liftarm{A}{3}{0}
\liftarm{B}{2}{180}
\end{tikzpicture}
\end{codeexample}
\end{key}
\begin{key}{/liftarm/hole radius=\marg{value} (initially 0.3)}
The \meta{value} of this key, multiplied with the \meta{value} of the key |scalefactor| defines the radius of the holes.
\begin{codeexample}[width=10cm]
\begin{tikzpicture}
\liftarm[hole radius=0.1]{0,0}{5}{0}
\end{tikzpicture}
\end{codeexample}
\end{key}
\begin{key}{/liftarm/liftarm thickness=\marg{value} (initially 0.92)}
The \meta{value} of this key, multiplied with the \meta{value} of the key |scalefactor| defines the thickness of the liftarm.
\begin{codeexample}[width=10cm]
\begin{tikzpicture}
\liftarm[
    hole radius=0.1,
    liftarm thickness=0.3
]{0,0}{5}{0}
\end{tikzpicture}
\end{codeexample}
\end{key}
\begin{key}{/liftarm/mark color=\marg{name} (initially Black)}
\end{key}
\begin{key}{/liftarm/mark holes=\marg{values}}
The key |mark holes| defines the holes in the liftarm which will be marked. The key |mark color| defines the color of these marks.
\begin{codeexample}[width=10cm]
\begin{tikzpicture}
\liftarm[
    mark holes={0,1,3}
]{0,0}{5}{0}
\liftarm[
    mark holes={1,2,4},
    mark color=Blue
]{0,1}{4}{0}
\end{tikzpicture}
\end{codeexample}
\end{key}
\begin{key}{/liftarm/origin=\marg{number} (initially 0)}
This key defines the number of the hole which will be placed at the coordinate given as argument to the liftarm.
\begin{codeexample}[width=10cm]
\begin{tikzpicture}
\liftarm{-2,0}{4}{0}
\liftarm[origin=1]{0,0}{6}{30}
\liftarm[origin=2]{0,0}{5}{60}
\end{tikzpicture}
\end{codeexample}
\end{key}
\begin{key}{/liftarm/scalefactor=\marg{value} (initially 0.5)}
The \meta{value} of this key defines the factor which scales the thickness of the liftarm and the radius of the holes.
\begin{codeexample}[width=10cm]
\begin{tikzpicture}
\liftarm[scalefactor=1]{0,0}{4}{0}
\liftarm[brick,scalefactor=1]{1,2}{2}{0}
\end{tikzpicture}
\end{codeexample}
\end{key}
\begin{key}{/liftarm/screw color=\marg{name} (initially Black)}
\end{key}
\begin{key}{/liftarm/screw holes=\marg{values}}
\end{key}
\begin{key}{/liftarm/screw holes angle=\marg{angle} (initially 45)}
The key |screw holes| defines the holes in the liftarm where a screw will be drawn. The key |screw color| defines the color of these screws. The key |screw holes angle| defines the angle in degrees around which the screws are drawn.
\begin{codeexample}[width=10cm]
\begin{tikzpicture}
\liftarm[
    screw holes={0,1,3}
]{0,0}{5}{0}
\liftarm[
    screw holes={1,2,4},
    screw color=Blue,
    screw holes angle=0
]{0,1}{4}{0}
\end{tikzpicture}
\end{codeexample}
\end{key}
\end{command}
\section{Connecting liftarms}
\begin{command}{\liftarmconnect\opt{\oarg{options}}\marg{point1}\marg{length1}\marg{point2}\marg{length2}}
This command can be placed inside a |tikzpicture| environment. It draws a liftarm of \meta{length1} starting at \meta{point1} and a liftarm of \meta{length2} starting at \meta{point2} in such a way that their last holes have the same coordinate in case that such a point exists. If such a point does not exist then nothing is drawn. In case that there exist 2 such points then this point is chosen counterclockwise. In that case, the other configuration of the 2 liftarms can be obtained by simply swapping \marg{point1}\marg{length1} and \marg{point2}\marg{length2}. The keys for the command |\liftarm| can be given to the \meta{options}. In this case these keys will be passed to both liftarms.
\begin{codeexample}[width=9cm]
\begin{tikzpicture}
\coordinate (A) at (0,0);
\coordinate (B) at (4,2);
\coordinate (C) at (1,-3);
\coordinate (D) at (5,-1);
\liftarmconnect[Yellow]{A}{2}{B}{3}
\liftarmconnect[Red]{B}{3}{A}{2}
\liftarmconnect[Green]{C}{3}{D}{2}
\liftarmconnect[Blue]{D}{2}{C}{3}
\foreach\coord in {A,B,C,D}{
    \node at (\coord) {{\small $\coord$}};
}
\end{tikzpicture}
\end{codeexample}
Additionally, the \meta{options} can be given with the following keys.
\begin{key}{/liftarm/connect coordinate=\marg{name}}
This key defines a coordinate with name \meta{name} at the connection point of both liftarms.
\begin{codeexample}[width=10cm]
\begin{tikzpicture}
\liftarm{-3,0}{5}{0}
\liftarmconnect[
    connect coordinate=A
]{2,0}{2}{-2,0}{3}
\liftarm{A}{4}{180}
\end{tikzpicture}
\end{codeexample}
\end{key}
\begin{key}{/liftarm/connect reverse=\opt{\meta{boolean}} (default true, initially false)}
If true, the first liftarm of |\liftarmconnect| will be drawn second and the second liftarm will be drawn first. This option can be used to change the appearance at the connection point of both liftarms.
\begin{codeexample}[width=10cm]
\begin{tikzpicture}
\liftarmconnect{2,0}{1}{0,0}{2}
\liftarmconnect[
    connect reverse
]{5,0}{1}{3,0}{2}
\end{tikzpicture}
\end{codeexample}
\end{key}
\begin{stylekey}{/liftarm/liftarm 1=\marg{options} (initially \normalfont empty)}
\end{stylekey}
\begin{stylekey}{/liftarm/liftarm 2=\marg{options} (initially \normalfont empty)}
These keys accept a list of keys which will be applied to the first respectively second liftarm. These lists of keys accept the same options as the command |\liftarm|. Additionally, the key |connect| below can be given.
\begin{key}{/liftarm/connect=\marg{number}}
This key defines the number of the hole which will be connected to the matching liftarm. If this key is not given then the last hole of the liftarm is taken as the connecting point.
\begin{codeexample}[width=10cm]
\begin{tikzpicture}
\liftarm{0,-7}{10}{90}
\liftarmconnect[
    connect coordinate=A,
    liftarm 1={
        origin=1,
        connect=5
    },
    liftarm 2={
        origin=2,
        connect=6
    }
]{0,2}{6}{0,0}{7}
\liftarmconnect[
    liftarm 1={
        origin=2,
        connect=8
    },
    liftarm 2={
        origin=1,
        connect=5,
        coordinate=4/B
    }
]{A}{9}{0,-6}{6}
\liftarm[origin=1]{B}{4}{70}
\end{tikzpicture}
\end{codeexample}
\end{key}
\end{stylekey}
\end{command}
\section{Describing a construction}
If a construction involves many liftarms then it is convenient to describe this construction in separate steps and |tikzpicture|s. Then the content of previous |tikzpicture|s would need to be copied in each new |tikzpicture|. This process can be automated by using the |liftarmconstruction| environment and the command |\liftarmconstruct| below.
\begin{environment}{{liftarmconstruction}\opt{\oarg{options}}}
This environment is in fact an |enumerate| environment with the addition that it resets the content of the |tikzpicture| which is displayed by the command |\liftarmconstruct| below. Thus in particular, |\item| can be used inside the |liftarmconstruction| environment. The \meta{options} will be passed to each |tikzpicture| drawn by the command |\liftarmconstruct| inside this environment. The following command can be used inside this environment.
\begin{command}{\liftarmconstruct\opt{\oarg{options}}\marg{text}\marg{commands}}
This command starts an |\item| and shows \meta{text}. Then it displays a |tikzpicture| containing \meta{commands} and also the \meta{commands} of previous |\liftarmconstruct| commands inside the same |liftarmconstruction| environment. The \meta{options} will be added to this |tikzpicture| but \emph{only} in the current step.

As an example, we describe below the construction of a regular pentagon from \cite{Tmm1}.
\begin{codeexample}[width=10cm]
\begin{minipage}{0.5\linewidth}%only for
%usage in this manual%\linewidth-6pt
%\begin{multicols}{2}%only for
%usage in this manual
\begin{liftarmconstruction}[scale=0.75]
\liftarmconstruct[
    {\node[left,align=left]
        at (-0.5,-1.3)
        {Rectangular triangle.\\
        This text is only\\
        visible in this step.};}
]{
    We start with 3 liftarms to form
    a rectangular triangle.
}{
\liftarm{-3,0}{4}{0}
\liftarmconnect[
    liftarm 1={
        origin=2,
        mark holes={2,6}
    },
    liftarm 2={
        mark holes=0
    }
]{0,0}{6}{-3,0}{5}}
\item An |\item| can be added since this
    is an |enumerate| environment.
\liftarmconstruct{
    Now we add 2 liftarms of length $3$.
}{\liftarmconnect[
    connect coordinate=A,
    liftarm 1={
        mark holes={0,3}
    },
    liftarm 2={
        mark holes=0
    }
]{0,-2}{3}{0,2}{3}}
\liftarmconstruct{
    In this step we construct the first
    side of the regular pentagon.
}{\liftarmconnect[
    connect coordinate=B,
    liftarm 2={
        mark holes={0,2}
    }
]{A}{2}{1,0}{2}}
\liftarmconstruct{
    Now we finish the construction
    of the regular pentagon.
}{\liftarmconnect[
    liftarm 2={
        mark holes={0,2}
    }
]{B}{2}{-1,0}{2}
\liftarmconnect[
    liftarm 1={
        mark holes=2
    }
]{-1,0}{2}{A}{2}}
\end{liftarmconstruction}
%\end{multicols}
\end{minipage}
\end{codeexample}
\end{command}
\end{environment}
\section{Additional examples}
The following example shows a regular hexagon.
\begin{codeexample}[width=9cm]
\begin{tikzpicture}
\def\r{3}
\foreach\n in {1,...,6}{
    \liftarmconnect{0,0}{\r}{\n*60:\r}{\r}
}
\end{tikzpicture}
\end{codeexample}
The following example illustrates that $2\atan(\frac{1}{2})=\atan(\frac{4}{3})$.
\begin{codeexample}[width=9cm]
\begin{tikzpicture}
\liftarm{0,0}{3}{0}
\liftarm{0,0}{5}{atan(4/3)}
\liftarm{3,0}{4}{90}
\liftarm{2,0}{1}{90}
\liftarm{2,1}{1}{0}
\liftarm{2,1}{1}{90+atan(4/3)}
\end{tikzpicture}
\end{codeexample}
Below is an example of an angled liftarm.
\begin{codeexample}[width=9cm]
\begin{tikzpicture}
\pgfkeys{
    /liftarm,
    scalefactor=1,
    Blue
}
\liftarm[axle holes=0]{0,0}{3}{0}
\liftarm[axle holes=5]{3,0}{5}{atan(4/3)}
\end{tikzpicture}
\end{codeexample}
The following example illustrates an angle bisection.
\begin{codeexample}[width=9cm]
\begin{tikzpicture}
\def\ang{40}
\def\r{3}
\liftarm[mark holes={0,\r}]{0,0}{2*\r}{0}
\liftarm[mark holes=\r]{0,0}{2*\r}{\ang}
\liftarm[
    mark holes=\r,
    mark color=Red
]{\r,0}{\r}{\ang}
\liftarm{\ang:\r}{\r}{0}
\end{tikzpicture}
\end{codeexample}
The following example illustrates that $7^{2}+4^{2}=8^{2}+1^{2}$.
\begin{codeexample}[width=9cm]
\begin{tikzpicture}[scale=0.75]
\def\a{4}
\def\b{7}
\def\c{1}
\def\d{8}
%\liftarm{0,0}{\b}{0}
%\liftarm{\b,0}{\a}{90}
\liftarmconnect{0,0}{\b}{\b,\a}{\a}
%\liftarm{\b,\a}{1}{atan(\a/\b)+atan(\c/\d)+90}
%\liftarm{0,0}{\d}{atan(\a/\b)+atan(\c/\d)}
\liftarmconnect{\b,\a}{\c}{0,0}{\d}
\end{tikzpicture}
\end{codeexample}
Below is an animation of the Peaucellier-Lipkin linkage, see e.g.~\cite{Koagmopermbl}.
\begin{codeexample}[width=9cm]
\newcommand{\PLlinkage}[1]{
\begin{tikzpicture}[scale=0.75]
\def\a{3}
\def\b{4}
\def\c{9}
\pgfmathsetmacro{\x}{
    2*\a+((\c^2-\b^2-(2*\a)^2)/(2*\a))
}
\useasboundingbox (-0.23,-6) rectangle
    ({\x+0.23},6);
\draw (\x,-5)--(\x,5);
\liftarm{0,0}{\a}{0}
\liftarm[coordinate=\a/A]{\a,0}{\a}{#1}
\liftarmconnect[
    connect coordinate=B,
    connect reverse
]{A}{\b}{0,0}{\c}
\liftarmconnect[
    connect coordinate=C
]{0,0}{\c}{A}{\b}
\liftarmconnect{C}{\b}{B}{\b}
\end{tikzpicture}
}
\begin{animateinline}[
    autoplay,
    controls,
    loop
]{30}
\multiframe{80}{rXmax=-40+1}{
    \PLlinkage{\rXmax}
}
\newframe
\multiframe{80}{rXmax=-40+1}{
    \PLlinkage{-\rXmax}
}
\end{animateinline}
\end{codeexample}
Below is an animation of Kempe's trisector, as shown in \cite{Tmm3}.
\begin{codeexample}[]
\newcommand{\trisector}[1]{
\begin{tikzpicture}[scale=0.33]
\useasboundingbox (-27.3,-0.5) rectangle (21.2,37);
\liftarm[coordinate=8/A]{0,0}{27}{180}
\liftarm[coordinate=12/B]{0,0}{27}{180-(#1)}
\liftarm[coordinate=18/C]{0,0}{27}{180-2*(#1)}
\liftarm[coordinate=27/D]{0,0}{27}{180-3*(#1)}
\liftarmconnect{C}{27}{D}{18}
\liftarmconnect[liftarm 2={connect=8}]{A}{12}{B}{18}
\end{tikzpicture}
}
\begin{animateinline}[autoplay,controls,loop]{5}
\multiframe{20}{rXmax=0+1}{
\trisector{15+\rXmax}
}
\newframe
\multiframe{20}{rXmax=0+1}{
\trisector{35-\rXmax}
}
\end{animateinline}
\end{codeexample}
Below is an animation of Chebyshev's Lambda Mechanism.
\begin{codeexample}[width=10cm]
\newcommand{\CL}[1]{
\begin{tikzpicture}[scale=0.8]
\def\r{1}
\useasboundingbox (-2*\r-0.5,-2*\r-0.5)
    rectangle (10*\r-0.5,10*\r+0.5);
\liftarm{0,0}{4*\r}{0}
\liftarm[
    mark holes={0,2*\r}
]{0,0}{2*\r}{#1}
\liftarmconnect[
    liftarm 1={mark holes={0,5*\r}},
    liftarm 2={
        connect=5*\r,
        mark holes=10*\r,
        mark color=Red
    }
]{4*\r,0}{5*\r}{#1:2*\r}{10*\r}
\end{tikzpicture}
}
\begin{animateinline}[
    autoplay,
    controls,
    loop
]{60}
\multiframe{360}{rXmax=0+1}{
    \CL{\rXmax}
}
\end{animateinline}
\end{codeexample}
\begin{thebibliography}{9}
\bibitem{Tmm1}
Gerard 't Hooft,
\emph{Meccano Math I},\\
\url{https://webspace.science.uu.nl/~hooft101/lectures/meccano.pdf},
2006.
\bibitem{Tmm2}
Gerard 't Hooft,
\emph{Meccano Math II},\\
\url{https://webspace.science.uu.nl/~hooft101/lectures/meccano2.pdf},
2008.
\bibitem{Tmm3}
Gerard 't Hooft,
\emph{Meccano Math III},\\
\url{https://webspace.science.uu.nl/~hooft101/lectures/meccano3.pdf},
2014.
\bibitem{Koagmopermbl}
Alfred Bray Kempe,
\emph{On a general method of producing exact rectilinear motion by linkwork},
1875.
\bibitem{TtTaPGFp}
Till Tantau,
\emph{The \tikzname{} and {\upshape\pgfname} Packages},
Manual for version 3.1.9a,
\url{https://www.ctan.org/pkg/pgf},
2021.
\end{thebibliography}
\printindex
\end{document}