Safe Haskell | Safe-Inferred |
---|

A simple interface to create Ti*k*Z graphics. Just build pictures using
the `Figure`

data constructors, and get the Ti*k*Z script using the function
`figuretikz`

. Use the function `tikzpicture`

to insert the Ti*k*Z script in
the LaTeX document. And do not forget to import the `tikz`

package in the
preamble.

Please, note that this module is not intended to be imported in the same module
than Text.LaTeX.Packages.TikZ. This module is itself a self-contained *alternative*
of that module. If you still want to use both modules, please, use qualified imports
to avoid name clashes.

In the *Examples* directory of the source distribution, the file `tikzsimple.hs`

contains a complete example of usage of this module with several pictures.
Below you can see a picture along with the code it came from.

myFigure :: Figure myFigure = Scale 2 $ Figures [ RectangleFilled (0,0) 1 1 , Colored Green $ RectangleFilled (-1,1) 1 1 , Colored Red $ RectangleFilled ( 0,2) 1 1 , Colored Blue $ RectangleFilled ( 1,1) 1 1 ]

- tikz :: PackageName
- data Figure
- = Line [Point]
- | Polygon [Point]
- | PolygonFilled [Point]
- | Rectangle Point Double Double
- | RectangleFilled Point Double Double
- | Circle Point Double
- | CircleFilled Point Double
- | Ellipse Point Double Double
- | EllipseFilled Point Double Double
- | Text Point LaTeX
- | Colored Color Figure
- | LineWidth Measure Figure
- | Scale Double Figure
- | Rotate Double Figure
- | Figures [Figure]

- type Point = (Double, Double)
- data Color
- pathImage :: Double -> (Double, Double) -> (Double -> Point) -> Figure
- figuretikz :: Figure -> TikZ
- (->>) :: TikZ -> TikZ -> TikZ
- tikzpicture :: LaTeXC l => TikZ -> l

# Documentation

Import the `tikz`

package to use the functions exported
by this module. For example, adding this line to your
document preamble:

usepackage [] tikz

# Figures

A figure in the plane.

Line [Point] | Line along a list of points. |

Polygon [Point] | Line along a list of points, but the last point will be joined with the first one. |

PolygonFilled [Point] | Same as |

Rectangle Point Double Double | Rectangle with top-right corner at the given point and width and height given by the other parameters. |

RectangleFilled Point Double Double | Same as |

Circle Point Double | Circle centered at the given point with the given radius. |

CircleFilled Point Double | As in |

Ellipse Point Double Double | Ellipse centered at the given point with width and height given by the other parameters. |

EllipseFilled Point Double Double | Same as |

Text Point LaTeX | Insert some |

Colored Color Figure | Color for the given |

LineWidth Measure Figure | Line width for the given |

Scale Double Figure | Scaling of the given |

Rotate Double Figure | Rotate a |

Figures [Figure] | A figure composed by a list of figures. |

*In the future we will accept colors other than the basic ones.*

Basic colors.

# Additional functions

:: Double | Precision argument, ε. |

-> (Double, Double) | Interval, |

-> (Double -> Point) | Path function, |

-> Figure | Output figure. |

The figure of a *path*. A *path* (in this context) means a function from an interval to
the plane. The image of such a function is what this function returns as a `Figure`

.
An additional argument is needed to set the precision of the curve.

The actual implementation builds a spline of degree one joining different points of the
image. Given that the interval is *(a,b)* and the precision argument is ε, the points
in the spline will be *f(a)*, *f(a+*ε*)*, *f(a+2*ε*)*, and so on, until reaching *f(b)*.
The smaller is ε, the closer is the figure to the original image.

Here is an example with a logarithmic spiral.

spiral :: Figure spiral = LineWidth (Pt 2) $ pathImage 0.01 (0,4) $ \t -> ( a * exp t * cos (b*t) , a * exp t * sin (b*t) ) where a = 0.1 ; b = 4

# Figure scripting

tikzpicture :: LaTeXC l => TikZ -> lSource

Transform a Ti*k*Z script to a `LaTeX`

block.