X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FLaTeX%2FTikZ.pm;h=0f0e588b65ba38068607b410b51c124c1f888189;hb=1be10f0f8ab18b5c559d8a48270dda1ebd2d78bc;hp=02d9b676c1d39341cd364bd90c175ff98b0206a5;hpb=1055a774ea694509df09ea6bf90747b81699af85;p=perl%2Fmodules%2FLaTeX-TikZ.git diff --git a/lib/LaTeX/TikZ.pm b/lib/LaTeX/TikZ.pm index 02d9b67..0f0e588 100644 --- a/lib/LaTeX/TikZ.pm +++ b/lib/LaTeX/TikZ.pm @@ -9,11 +9,11 @@ LaTeX::TikZ - Perl object model for generating PGF/TikZ code. =head1 VERSION -Version 0.01 +Version 0.02 =cut -our $VERSION = '0.01'; +our $VERSION = '0.02'; =head1 SYNOPSIS @@ -36,7 +36,7 @@ our $VERSION = '0.01'; $octo->clip(Tikz->rectangle(-0.5*(1+i), 2*(1+i))); # Fill it with dots - $octo->mod(Tikz->pattern(class => 'Dots', space_width => 10)); + $octo->mod(Tikz->pattern(class => 'Dots')); # Create a formatter object my $tikz = Tikz->formatter(scale => 5); @@ -53,20 +53,20 @@ It allows you to build structures representing geometrical figures, apply a wide =head1 CONCEPTS -Traditionally, in TikZ, there are two ways of grouping elements, or I, together : +Traditionally, in TikZ, there are two ways of grouping paths together : =over 4 =item * -either as a I, where each element is drawn in its own line : +either as a I, where each path is drawn in its own line : \draw (0cm,0cm) -- (0cm,1cm) ; \draw (0cm,0cm) -- (1cm,0cm) ; =item * -or as a I, where elements are all drawn as one line : +or as an I, where paths are all drawn as one line : \draw (0cm,0cm) -- (0cm,1cm) (0cm,0cm) -- (1cm,0cm) ; @@ -74,7 +74,7 @@ or as a I, where elements are all drawn as one line : 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 I assembled together in a tree. +Figures are made of path or sequence I assembled together in a tree. I can be applied onto any set to alter the way in which it is generated. The two TikZ concepts of I and I have been unified with the modifiers. @@ -83,12 +83,14 @@ The two TikZ concepts of I and I have been unified with the modif =head2 Containers -=head3 C<< Tikz->path(@ops) >> +=head3 C -Creates a L object out of the ops C<@ops>. + Tikz->union(@kids) + +Creates a L object out of the paths C<@kids>. # A path made of two circles - Tikz->path( + Tikz->union( Tikz->circle(0, 1), Tikz->circle(1, 1), ) @@ -97,9 +99,32 @@ Creates a L object out of the ops C<@ops>. 'even odd rule', ); -=head3 C<< Tikz->seq(@kids) >> +=head3 C + + Tikz->join($connector, @kids) + +Creates a L object that joins the paths C<@kinds> with the given C<$connector> which can be, according to L, a string, an array reference or a code reference. + + # A stair + Tikz->join('-|', map [ $_, $_ ], 0 .. 5); + +=head3 C + + Tikz->chain($kid0, $link0, $kid1, $link1, ... $kidn) + +Creates a L object that chains C<$kid0> to C<$kid1> with the string C<$link0>, C<$kid1> to C<$kid2> with C<$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 ] + ); -Creates a L object out of the sequences, paths or ops C<@kids>. +=head3 C + + Tikz->seq(@kids) + +Creates a L object out of the sequences or paths C<@kids>. my $bag = Tikz->seq($sequence, $path, $circle, $raw, $point); @@ -107,7 +132,9 @@ Creates a L object out of the sequences, paths or op Those are the building blocks of your geometrical figure. -=head3 C<< Tikz->point($point) >> +=head3 C + + Tikz->point($point) Creates a L object by coercing C<$point> into a L. The following rules are available : @@ -149,14 +176,18 @@ If C<$point> is a L object, the L by writing your own C class. See L for the rationale and L for an example. -=head3 C<< Tikz->line($from => $to) >> +=head3 C + + Tikz->line($from => $to) Creates a L object between the points C<$from> and C<$to>. my $x_axis = Tikz->line(-5 => 5); my $y_axis = Tikz->line([ 0, -5 ] => [ 0, 5 ]); -=head3 C<< Tikz->polyline(@points) >> +=head3 C + + Tikz->polyline(@points) Creates a L object that links the successive elements of C<@points> by segments. @@ -167,7 +198,9 @@ Creates a L object that links the successive element Tikz->point(1, 1), ); -=head3 C<< Tikz->closed_polyline(@points) >> +=head3 C + + Tikz->closed_polyline(@points) Creates a L object that cycles through successive elements of C<@points>. @@ -178,7 +211,10 @@ Creates a L object that cycles through successive el Tikz->point(1, 0), ); -=head3 C<< Tikz->rectangle($from => $to), Tikz->rectangle($from => { width => $width, height => $height }) >> +=head3 C + + Tikz->rectangle($from => $to) + Tikz->rectangle($from => { width => $width, height => $height }) Creates a L object with opposite corners C<$from> and C<$to>, or with anchor point C<$from> and dimensions C<$width> and C<$height>. @@ -187,13 +223,17 @@ Creates a L object with opposite corners C<$from> a Tikz->point(2, 1), ); -=head3 C<< Tikz->circle($center, $radius) >> +=head3 C + + Tikz->circle($center, $radius) Creates a L object of center C<$center> and radius C<$radius>. my $unit_circle = Tikz->circle(0, 1); -=head3 C<< Tikz->arc($from => $to, $center) >> +=head3 C + + Tikz->arc($from => $to, $center) Creates a L structure that represents an arc going from C<$from> to C<$to> with center C<$center>. @@ -203,14 +243,19 @@ Creates a L structure that represents an arc going from C<$fro [ 0, 0 ] ); -=head3 C<< Tikz->arrow($from => $to), Tikz->arrow($from => dir => $dir) >> +=head3 C + + Tikz->arrow($from => $to) + Tikz->arrow($from => dir => $dir) Creates a L structure that represents an arrow going from C<$from> towards C<$to>, or starting at C<$from> in direction C<$dir>. # An horizontal arrow my $arrow = Tikz->arrow(0 => 1); -=head3 C<< Tikz->raw($content) >> +=head3 C + + Tikz->raw($content) Creates a L object that will instantiate to the raw TikZ code C<$content>. @@ -219,7 +264,9 @@ Creates a L object that will instantiate to the raw TikZ Modifiers are applied onto sets by calling the C<< ->mod >> method, like in C<< $set->mod($mod) >>. This method returns the C<$set> object, so it can be chained. -=head3 C<< Tikz->clip($path) >> +=head3 C + + Tikz->clip($path) Creates a L object that can be used to clip a given sequence by the (closed) path C<$path>. @@ -232,7 +279,9 @@ Clips can also be directly applied to sets with the C<< ->clip >> method. my $set = Tikz->circle(0, 1.5) ->clip(Tikz->rectangle([-1, -1] => [1, 1])); -=head3 C<< Tikz->layer($name, above => \@above, below => \@below) >> +=head3 C + + Tikz->layer($name, above => \@above, below => \@below) Creates a L object with name C<$name> and optional relative positions C<@above> and C<@below>. @@ -243,7 +292,7 @@ Creates a L object with name C<$name> and optional rela The default layer is C
. -Layers are stored into a global hash, so that when you refer to them by their name, you get the existing layer object. +Layers are stored into a global hash, so that when you refer to them by their name, you get the existing layer object. Layers can also be directly applied to sets with the C<< ->layer >> method. @@ -251,28 +300,45 @@ Layers can also be directly applied to sets with the C<< ->layer >> method. ->mod(Tikz->pattern(class => 'Dots')) ->layer('top'); -=head3 C<< Tikz->width($line_width) >> +=head3 C + + Tikz->scale($factor) + +Creates a L object that scales the sets onto which it apply by the given C<$factor>. + + my $circle_of_radius_2 = Tikz->circle(0 => 1) + ->mod(Tikz->scale(2)); + +=head3 C + + Tikz->width($line_width) Creates a L object that sets the line width to C<$line_width> when applied. my $thick_arrow = Tikz->arrow(0 => 1) ->mod(Tikz->width(5)); -=head3 C<< Tikz->color($color) >> +=head3 C + + Tikz->color($color) -Creates a Lobject that sets the line color to C<$color> (given in the C syntax). +Creates a L object that sets the line color to C<$color> (given in the C syntax). # Paint the previous $thick_arrow in red. $thick_arrow->mod(Tikz->color('red')); -=head3 C<< Tikz->fill($color) >> +=head3 C + + Tikz->fill($color) Creates a L object that fills the interior of a path with the solid color C<$color> (given in the C syntax). my $red_box = Tikz->rectangle(0 => { width => 1, height => 1 }) ->mod(Tikz->fill('red')); -=head3 C<< Tikz->pattern(class => $class, %args) >> +=head3 C + + Tikz->pattern(class => $class, %args) Creates a L object of class C<$class> and arguments C<%args> that fills the interior of a path with the specified pattern. C<$class> is prepended with C when it doesn't contain C<::>. @@ -281,7 +347,9 @@ See L and L f my $hatched_circle = Tikz->circle(0 => 1) ->mod(Tikz->pattern(class => 'Lines')); -=head3 C<< Tikz->raw_mod($content) >> +=head3 C + + Tikz->raw_mod($content) Creates a L object that will instantiate to the raw TikZ mod code C<$content>. @@ -290,14 +358,18 @@ Creates a L object that will instantiate to the raw TikZ =head2 Helpers -=head3 C<< Tikz->formatter(%args) >> +=head3 C + + Tikz->formatter(%args) Creates a L object that can render a L tree. my $tikz = Tikz->formatter; my ($header, $declarations, $seq1_body, $seq2_body) = $tikz->render($set1, $set2); -=head3 C<< Tikz->functor(@rules) >> +=head3 C + + Tikz->functor(@rules) Creates a L anonymous subroutine that can be called against L trees to clone them according to the given rules. C<@rules> should be a list of array references whose first element is the class/role to match against and the second the handler to execute. @@ -358,12 +430,10 @@ sub import { =head1 DEPENDENCIES -L with L 0.63 or greater. +L 0.80 or greater. L. -L. - L, L. L, L, L. @@ -391,7 +461,7 @@ You can find documentation for this module with the perldoc command. =head1 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.