LaTeX::TikZ - Perl object model for generating PGF/TikZ code.
VERSION
- Version 0.02
+ Version 0.03
SYNOPSIS
use LaTeX::TikZ;
document.
CONCEPTS
- Traditionally, in TikZ, there are two ways of grouping elements, or
- *ops*, together :
+ Traditionally, in TikZ, there are two ways of grouping paths together :
- * either as a *sequence*, where each element is drawn in its own line
- :
+ * either as a *sequence*, where each path is drawn in its own line :
\draw (0cm,0cm) -- (0cm,1cm) ;
\draw (0cm,0cm) -- (1cm,0cm) ;
- * or as a *path*, where elements are all drawn as one line :
+ * or as an *union*, where paths are all drawn as one line :
\draw (0cm,0cm) -- (0cm,1cm) (0cm,0cm) -- (1cm,0cm) ;
This distinction is important because there are some primitives that
only apply to paths but not to sequences, and vice versa.
- Figures are made of ops, path or sequence *sets* assembled together in a
+ Figures are made of path or sequence *sets* assembled together in a
tree.
*Modifiers* can be applied onto any set to alter the way in which it is
INTERFACE
Containers
- "Tikz->path(@ops)"
- Creates a LaTeX::TikZ::Set::Path object out of the ops @ops.
+ "union"
+ Tikz->union(@kids)
+
+ Creates a LaTeX::TikZ::Set::Union object out of the paths @kids.
# A path made of two circles
- Tikz->path(
+ Tikz->union(
Tikz->circle(0, 1),
Tikz->circle(1, 1),
)
'even odd rule',
);
- "Tikz->seq(@kids)"
- Creates a LaTeX::TikZ::Set::Sequence object out of the sequences, paths
- or ops @kids.
+ "path"
+ Tikz->path(@kids)
+
+ A synonym for "union".
+
+ "join"
+ Tikz->join($connector, @kids)
+
+ Creates a LaTeX::TikZ::Set::Chain object that joins the paths @kinds
+ with the given $connector which can be, according to "connector" in
+ LaTeX::TikZ::Set::Chain, a string, an array reference or a code
+ reference.
+
+ # A stair
+ Tikz->join('-|', map [ $_, $_ ], 0 .. 5);
+
+ "chain"
+ Tikz->chain($kid0, $link0, $kid1, $link1, ... $kidn)
+
+ Creates a LaTeX::TikZ::Set::Chain object that chains $kid0 to $kid1 with
+ the string $link0, $kid1 to $kid2 with $link1, and so on.
+
+ # An heart-like shape
+ Tikz->chain([ 0, 1 ]
+ => '.. controls (-1, 1.5) and (-0.75, 0.25) ..' => [ 0, 0 ]
+ => '.. controls (0.75, 0.25) and (1, 1.5) ..' => [ 0, 1 ]
+ );
+
+ "seq"
+ Tikz->seq(@kids)
+
+ Creates a LaTeX::TikZ::Set::Sequence object out of the sequences or
+ paths @kids.
my $bag = Tikz->seq($sequence, $path, $circle, $raw, $point);
Elements
Those are the building blocks of your geometrical figure.
- "Tikz->point($point)"
+ "point"
+ Tikz->point($point)
+
Creates a LaTeX::TikZ::Set::Point object by coercing $point into a
LaTeX::TikZ::Point. The following rules are available :
LaTeX::TikZ::Meta::TypeConstraint::Autocoerce for the rationale and
LaTeX::TikZ::Point::Math::Complex for an example.
- "Tikz->line($from => $to)"
+ "line"
+ Tikz->line($from => $to)
+
Creates a LaTeX::TikZ::Set::Line object between the points $from and
$to.
my $x_axis = Tikz->line(-5 => 5);
my $y_axis = Tikz->line([ 0, -5 ] => [ 0, 5 ]);
- "Tikz->polyline(@points)"
+ "polyline"
+ Tikz->polyline(@points)
+
Creates a LaTeX::TikZ::Set::Polyline object that links the successive
elements of @points by segments.
Tikz->point(1, 1),
);
- "Tikz->closed_polyline(@points)"
+ "closed_polyline"
+ Tikz->closed_polyline(@points)
+
Creates a LaTeX::TikZ::Set::Polyline object that cycles through
successive elements of @points.
Tikz->point(1, 0),
);
- "Tikz->rectangle($from => $to), Tikz->rectangle($from => { width => $width, height => $height })"
+ "rectangle"
+ Tikz->rectangle($from => $to)
+ Tikz->rectangle($from => { width => $width, height => $height })
+
Creates a LaTeX::TikZ::Set::Rectangle object with opposite corners $from
and $to, or with anchor point $from and dimensions $width and $height.
Tikz->point(2, 1),
);
- "Tikz->circle($center, $radius)"
+ "circle"
+ Tikz->circle($center, $radius)
+
Creates a LaTeX::TikZ::Set::Circle object of center $center and radius
$radius.
my $unit_circle = Tikz->circle(0, 1);
- "Tikz->arc($from => $to, $center)"
+ "arc"
+ Tikz->arc($from => $to, $center)
+
Creates a LaTeX::TikZ::Set structure that represents an arc going from
$from to $to with center $center.
[ 0, 0 ]
);
- "Tikz->arrow($from => $to), Tikz->arrow($from => dir => $dir)"
+ "arrow"
+ Tikz->arrow($from => $to)
+ Tikz->arrow($from => dir => $dir)
+
Creates a LaTeX::TikZ::Set structure that represents an arrow going from
$from towards $to, or starting at $from in direction $dir.
# An horizontal arrow
my $arrow = Tikz->arrow(0 => 1);
- "Tikz->raw($content)"
+ "raw"
+ Tikz->raw($content)
+
Creates a LaTeX::TikZ::Set::Raw object that will instantiate to the raw
TikZ code $content.
"$set->mod($mod)". This method returns the $set object, so it can be
chained.
- "Tikz->clip($path)"
+ "clip"
+ Tikz->clip($path)
+
Creates a LaTeX::TikZ::Mod::Clip object that can be used to clip a given
sequence by the (closed) path $path.
my $set = Tikz->circle(0, 1.5)
->clip(Tikz->rectangle([-1, -1] => [1, 1]));
- "Tikz->layer($name, above => \@above, below => \@below)"
+ "layer"
+ Tikz->layer($name, above => \@above, below => \@below)
+
Creates a LaTeX::TikZ::Mod::Layer object with name $name and optional
relative positions @above and @below.
->mod(Tikz->pattern(class => 'Dots'))
->layer('top');
- "Tikz->width($line_width)"
+ "scale"
+ Tikz->scale($factor)
+
+ Creates a LaTeX::TikZ::Mod::Scale object that scales the sets onto which
+ it apply by the given $factor.
+
+ my $circle_of_radius_2 = Tikz->circle(0 => 1)
+ ->mod(Tikz->scale(2));
+
+ "width"
+ Tikz->width($line_width)
+
Creates a LaTeX::TikZ::Mod::Width object that sets the line width to
$line_width when applied.
my $thick_arrow = Tikz->arrow(0 => 1)
->mod(Tikz->width(5));
- "Tikz->color($color)"
- Creates a LaTeX::TikZ::Mod::Colorobject that sets the line color to
+ "color"
+ Tikz->color($color)
+
+ Creates a LaTeX::TikZ::Mod::Color object that sets the line color to
$color (given in the "xcolor" syntax).
# Paint the previous $thick_arrow in red.
$thick_arrow->mod(Tikz->color('red'));
- "Tikz->fill($color)"
+ "fill"
+ Tikz->fill($color)
+
Creates a LaTeX::TikZ::Mod::Fill object that fills the interior of a
path with the solid color $color (given in the "xcolor" syntax).
my $red_box = Tikz->rectangle(0 => { width => 1, height => 1 })
->mod(Tikz->fill('red'));
- "Tikz->pattern(class => $class, %args)"
+ "pattern"
+ Tikz->pattern(class => $class, %args)
+
Creates a LaTeX::TikZ::Mod::Pattern object of class $class and arguments
%args that fills the interior of a path with the specified pattern.
$class is prepended with "LaTeX::TikZ::Mod::Pattern" when it doesn't
my $hatched_circle = Tikz->circle(0 => 1)
->mod(Tikz->pattern(class => 'Lines'));
- "Tikz->raw_mod($content)"
+ "raw_mod"
+ Tikz->raw_mod($content)
+
Creates a LaTeX::TikZ::Mod::Raw object that will instantiate to the raw
TikZ mod code $content.
->mod(Tikz->raw_mod('->')) # or just ->mod('->')
Helpers
- "Tikz->formatter(%args)"
+ "formatter"
+ Tikz->formatter(%args)
+
Creates a LaTeX::TikZ::Formatter object that can render a
LaTeX::TikZ::Set tree.
my $tikz = Tikz->formatter;
my ($header, $declarations, $seq1_body, $seq2_body) = $tikz->render($set1, $set2);
- "Tikz->functor(@rules)"
+ "functor"
+ Tikz->functor(@rules)
+
Creates a LaTeX::TikZ::Functor anonymous subroutine that can be called
against LaTeX::TikZ::Set trees to clone them according to the given
rules. @rules should be a list of array references whose first element
my $naked = $set->$strip;
DEPENDENCIES
- Any::Moose with Mouse 0.63 or greater.
+ Mouse 0.80 or greater.
Sub::Name.
- Scope::Guard.
-
Math::Complex, Math::Trig.
Scalar::Util, List::Util, Task::Weaken.
perldoc LaTeX::TikZ
COPYRIGHT & LICENSE
- Copyright 2010 Vincent Pit, all rights reserved.
+ Copyright 2010,2011,2012,2013,2014,2015 Vincent Pit, all rights
+ reserved.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.