\section{Introduction}
Luatikz is a graphics library to draw tikz graphics using the Lua programming language.
\example{intro}
{Following code draws two lines by specifying begin and end points. First using intermediatery variables and the second line within a single codeline:}
Following \TeX{} wrapper can be used to compile the luatikz Lua code.
\VerbatimInput{example/wrapper.tex}
Luatikz obviously needs \LuaLaTeX{} to compile.
Note that 2D graphics is a vast topic, functionality to luatikz has been and will be added on a per need basis.
\section{Pointer math}
Mathematical operations are possible with points, adding them with each other or multiplying them with a scalar.
\example{spiral}{This example uses pointer math to create a spiral:}
\newpage
\section{Immutability}
In luatikz pointers like all objects are immutable. That means a object once created in memory can no longer be changed.
However the variable holding an object can be changed to another object with different attributes.
\examplecode{immute1}{Thus following example is invalid:}
\examplecode{immute2}{This on the other hand are two valid methods to change the value of p1}
\newpage
\section{luatikz objects}
\subsection{Bezier (quatratic)}
\example{bezier2}{A quadratic bezier curve is defined by it begin, end and a control point:}
\newpage
\subsection{Bezier (cubic)}
\example{bezier3a}{A cubic bezier curve is defined by it begin, end and two control points:}
\newpage
A cubic bezier has the functions pt and phit that return the point and angle ranging from 0..1 on the curve.
\example{bezier3b}{This example draw 10 normal lines onto the bezier curve:}
\newpage
\subsection{BLine}
\example{blinea}{A bline is defined by it's begin and it's end. Additionally to the standard line it is bend}
\newpage
\subsection{Circle}
\example{circle}{A circle is defined by it's center (``at'') and the circle ``radius'':}
\newpage
\subsection{Curve}
\example{curvea}{A curve is defined by a list of points:}
\newpage
\example{curveb}{A curve can cycle and has a changeable tension:}
\newpage
\subsection{Ellipse}
\example{ellipse}{An ellipse is difined by it's center (``at'') and a x- and yradius:}
\newpage
\subsection{EllipseArc}
\example{ellipseArc}{An ellipse arc is a an ellipse limited by it's ``from'' and ``to'' angle:}
\newpage
\subsection{Line}
\example{linea}{A line is defined by it's begin and it's end. There are two basic variants to define a line:}
\example{lineb}{You can use intersectLine() to find the intersection of a line with another. If there is none ``nil'' will be returned:}
\newpage
\example{linec}{A line can also be defined by it's starting point, angle and length:}
\example{lined}{``length'' and ``phi'' are attributes of a line:}
\newpage
\subsection{Plot}
\example{plota}{A plot uses a function to determine a series of points on a curve. It takes values going ``from''--``to''. The function is to be a lua function that takes the input scalar and returns a point. The whole curve is offset ``at'' a point:}
%\newpage
%\subsection{SuperEllipse}
%\example{superEllipse}{A ``super'' ellipse is just as an ellipse, but additionally has a strength factor ``n'' that ranges from diamond, to ellipse to rectangle:}
\newpage
\subsection{Polyline}
\example{polylinea}{A polyline is a list of points to be connected via straight lines. If the string ``cycle'' is given at the end, it cycles:}
\newpage
\subsection{Rect}
\example{recta}{Rectangles have various creation options. Also they provide a wide range of attributes of their points ``pnw'', ``pne'', ``psw'', ``pse'', ``pn'', ``pe'', ``ps'', ``pw'', ``pc'', ``height'', and ``width'':
}
\newpage
\section{Labels a.k.a Nodes}
Labels are created as nodes. Contrary to all other objects they do not need the ``draw'' command to be printed, but the ``put'' command. This is due any call to ``draw'' is turned into exactly one ``draw'' command to tikz and nodes in tikz are not using the ``draw'' command.
\example{nodea}{In it's simplest form a node is specified by it's position and text. The double square brackets are Lua's way to make string constants that may contain simple blackslashes:}
All constructors options of node are as follows; they correspond to the standard tikz options:
\begin{itemize}
\item above
\item anchor
\item align
\item at
\item below
\item color
\item draw
\item left
\item minimum\_height
\item node\_distance
\item name
\item right
\item rotate
\item text
\item text\_width
\end{itemize}
\newpage
\example{nodeb}{Another node example}
\newpage
\section{Styling}
Styling is applied to draw commands by specifying style options, luatikz autodetects the difference between objects and styles.
\example{stylea}{An example using arrows and dashes}
\newpage
\section{Shades}
The ``shade'' command works analogous to classical tikz.