The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{intersections}
\usetikzlibrary{snakes}
\usetikzlibrary{decorations}
\usetikzlibrary{decorations.text}
\usetikzlibrary{shapes}
\usetikzlibrary{arrows}
\usetikzlibrary{automata}
\usetikzlibrary{positioning}
\usetikzlibrary{shadows}
\usetikzlibrary{matrix}
\usetikzlibrary{patterns}
\usepgfmodule{plot}
\title{Silviu's TikZ Test Cases}
\begin{document}
%======================================================================
\section{Environments}
\begingroup % ------ pseudo document ---------
Rectangles
\begin{pgfpicture}
\pgfpathrectangle{\pgfpointorigin}{\pgfpoint{2ex}{1ex}}
\pgfusepath{stroke}
\end{pgfpicture}
and
\begin{pgfpicture}
\pgfpathrectangle{\pgfpoint{0ex}{1ex}}{\pgfpoint{2ex}{1ex}}
\pgfusepath{stroke}
\end{pgfpicture}.
Inline
\tikz{\pgfpathcircle{\pgfpointorigin}{1ex}\pgfusepath{stroke}}.
Hello
%\tikz{
%\pgfsetbaselinepointlater{\pgfpointanchor{X}{base}}
% Note: no shape X, yet
%\node [cross out,draw] (X) {world.};
%}
\endgroup % ----------- end -----------------
%======================================================================
\section{Scopes}
\begingroup % ------ pseudo document ---------
\begin{pgfpicture}
\begin{pgfscope}
{
\pgfsetlinewidth{2pt}
\pgfpathrectangle{\pgfpointorigin}{\pgfpoint{2ex}{2ex}}
\pgfusepath{stroke}
}
\pgfpathrectangle{\pgfpoint{3ex}{0ex}}{\pgfpoint{2ex}{2ex}}
\pgfusepath{stroke}
\end{pgfscope}
\pgfpathrectangle{\pgfpoint{6ex}{0ex}}{\pgfpoint{2ex}{2ex}}
\pgfusepath{stroke}
\end{pgfpicture}
\endgroup % ----------- end -----------------
%======================================================================
\section{Coordinates}
\begingroup % ------ pseudo document ---------
% TODO: Need to deal with color scoping
% TODO: Relevantforpicturesize: should I manually increase a bit by half the size of the text?
%
% Basic coordinate commands
%
Points
% Testing \pgfpoint
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\pgfpathcircle{\pgfpoint{1cm}{1cm}} {2pt}
\pgfpathcircle{\pgfpoint{2cm}{5pt}} {2pt}
\pgfpathcircle{\pgfpoint{0pt}{.5in}}{2pt}
\pgfusepath{fill}
\end{tikzpicture}
% Testing \pgfpointpolar
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\foreach \angle in {0,10,...,90}{
\pgfpathcircle{\pgfpointpolar{\angle}{1cm}}{2pt}}
\pgfusepath{fill}
\end{tikzpicture}
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\foreach \angle in {0,10,...,90}{
\pgfpathcircle{\pgfpointpolar{\angle}{1cm/2cm}}{2pt}}
\pgfusepath{fill}
\end{tikzpicture}
%
2d coordinates
% Testing \pgfpointxy
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\pgfpathmoveto{\pgfpointxy{1}{0}}
\pgfpathlineto{\pgfpointxy{2}{2}}
\pgfusepath{stroke}
\end{tikzpicture}
% Testing \pgfset(x|y)vec
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\pgfpathmoveto{\pgfpointxy{1}{0}}
\pgfpathlineto{\pgfpointxy{2}{2}}
\pgfusepath{stroke}
\color{red}
\pgfsetxvec{\pgfpoint{0.75cm}{0cm}}
\pgfpathmoveto{\pgfpointxy{1}{0}}
\pgfpathlineto{\pgfpointxy{2}{2}}
\pgfusepath{stroke}
\end{tikzpicture}
% Testing \pgfpointpolarxy
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\begin{scope}[x={(1cm,-5mm)},y=1.5cm]
\foreach \angle in {0,10,...,90}{
\pgfpathcircle{\pgfpointpolarxy{\angle}{1}}{2pt}}
\pgfusepath{fill}
\end{scope}
\end{tikzpicture}
3d coordinates
% Testing \pgfpointxyz
\begin{pgfpicture}
\pgfsetarrowsend{to}
\pgfpathmoveto{\pgfpointorigin}
\pgfpathlineto{\pgfpointxyz{0}{0}{1}}
\pgfusepath{stroke}
\pgfpathmoveto{\pgfpointorigin}
\pgfpathlineto{\pgfpointxyz{0}{1}{0}}
\pgfusepath{stroke}
\pgfpathmoveto{\pgfpointorigin}
\pgfpathlineto{\pgfpointxyz{1}{0}{0}}
\pgfusepath{stroke}
\end{pgfpicture}
% Testing \pgfpointcylindrical
\begin{tikzpicture}
\draw [->] (0,0) -- (1,0,0) node [right] {x};
\draw [->] (0,0) -- (0,1,0) node [above] {y};
\draw [->] (0,0) -- (0,0,1) node [below left] {z};
\pgfpathcircle{\pgfpointcylindrical{80}{1}{.5}}{2pt}
\pgfusepath{fill}
\draw[red] (0,0) -- (0,0,.5) -- +(80:1);
\end{tikzpicture}
% Testing \pgfpointspherical
\begin{tikzpicture}
\pgfsetfillcolor{lightgray}
\foreach \latitude in {-90,-75,...,30}{
\foreach \longitude in {0,20,...,360}{
\pgfpathmoveto{\pgfpointspherical{\longitude}{\latitude}{1}}
\pgfpathlineto{\pgfpointspherical{\longitude+20}{\latitude}{1}}
\pgfpathlineto{\pgfpointspherical{\longitude+20}{\latitude+15}{1}}
\pgfpathlineto{\pgfpointspherical{\longitude}{\latitude+15}{1}}
\pgfpathclose
}
\pgfusepath{fill,stroke}
}
\end{tikzpicture}
\endgroup % ----------- end -----------------
\begingroup % ------ pseudo document ---------
Basic manipulation of coordinates
% Testing \pgfpointadd
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\pgfpathcircle{\pgfpointadd{\pgfpoint{1cm}{0cm}}{\pgfpoint{1cm}{1cm}}}{2pt}
\pgfusepath{fill}
\end{tikzpicture}
% Testing \pgfpointscale
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\pgfpathcircle{\pgfpointscale{1.5}{\pgfpoint{1cm}{0cm}}}{2pt}
\pgfusepath{fill}
\end{tikzpicture}
% Testing \pgfpointdiff
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\pgfpathcircle{\pgfpointdiff{\pgfpoint{1cm}{0cm}}{\pgfpoint{1cm}{1cm}}}{2pt}
\pgfusepath{fill}
\end{tikzpicture}
% Testing \pgfointnormalised
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\pgfpathcircle{\pgfpoint{2cm}{1cm}}{2pt}
\pgfpathcircle{\pgfpointscale{20}{\pgfpointnormalised{\pgfpoint{2cm}{1cm}}}}{2pt}
\pgfusepath{fill}
\end{tikzpicture}
Points along lines and curves
% Testing \pgfpointlineattime
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\pgfpathmoveto{\pgfpointorigin}
\pgfpathlineto{\pgfpoint{2cm}{2cm}}
\pgfusepath{stroke}
\foreach \t in {0,0.25,...,1.25}{
\pgftext[at=\pgfpointlineattime{\t}{\pgfpointorigin}{\pgfpoint{2cm}{2cm}}]{\t}}
\end{tikzpicture}
% \pgfpointlineatdistance
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\pgfpathmoveto{\pgfpointorigin}
\pgfpathlineto{\pgfpoint{3cm}{2cm}}
\pgfusepath{stroke}
\foreach \d in {0pt,20pt,40pt,70pt}{
\pgftext[at=\pgfpointlineatdistance{\d}{\pgfpointorigin}{\pgfpoint{3cm}{2cm}}]{\d}}
\end{tikzpicture}
% \pgfpointcurveattime
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\pgfpathmoveto{\pgfpointorigin}
\pgfpathcurveto{\pgfpoint{0cm}{2cm}}{\pgfpoint{0cm}{2cm}}{\pgfpoint{3cm}{2cm}}
\pgfusepath{stroke}
\foreach \t in {0,0.25,0.5,0.75,1}{
\pgftext[at=\pgfpointcurveattime{\t}{
\pgfpointorigin}{\pgfpoint{0cm}{2cm}}{\pgfpoint{0cm}{2cm}}{\pgfpoint{3cm}{2cm}}]{\t}}
\end{tikzpicture}
Points on borders of objects
% \pgfpointborderrectangle
\begin{tikzpicture}
\draw[help lines] (0,0) grid (2,1.5);
\pgfpathrectanglecorners{\pgfpoint{-1cm}{-1.25cm}}{\pgfpoint{1cm}{1.25cm}}
\pgfusepath{stroke}
\pgfpathcircle{\pgfpoint{5pt}{5pt}}{2pt}
\pgfpathcircle{\pgfpoint{-10pt}{5pt}}{2pt}
\pgfusepath{fill}
\color{red}
\pgfpathcircle{\pgfpointborderrectangle{\pgfpoint{5pt}{5pt}}{\pgfpoint{1cm}{1.25cm}}}{2pt}
\pgfpathcircle{\pgfpointborderrectangle{\pgfpoint{-10pt}{5pt}}{\pgfpoint{1cm}{1.25cm}}}{2pt}
\pgfusepath{fill}
\end{tikzpicture}
% \pgfborderellipse
\begin{tikzpicture}
\draw[help lines] (0,0) grid (2,1.5);
\pgfpathellipse{\pgfpointorigin}{\pgfpoint{1cm}{0cm}}{\pgfpoint{0cm}{1.25cm}}
\pgfusepath{stroke}
\pgfpathcircle{\pgfpoint{5pt}{5pt}}{2pt}
\pgfpathcircle{\pgfpoint{-10pt}{5pt}}{2pt}
\pgfusepath{fill}
\color{red}
\pgfpathcircle{\pgfpointborderellipse{\pgfpoint{5pt}{5pt}}{\pgfpoint{1cm}{1.25cm}}}{2pt}
\pgfpathcircle{\pgfpointborderellipse{\pgfpoint{-10pt}{5pt}}{\pgfpoint{1cm}{1.25cm}}}{2pt}
\pgfusepath{fill}
\end{tikzpicture}
Points on intersections of lines
\begin{tikzpicture}
\draw[help lines] (0,0) grid (2,2);
\draw (.5,0) -- (2,2);
\draw (1,2) -- (2,0);
\pgfpathcircle{%
\pgfpointintersectionoflines{\pgfpointxy{.5}{0}}{\pgfpointxy{2}{2}}
{\pgfpointxy{1}{2}}{\pgfpointxy{2}{0}}}{2pt}
\pgfusepath{stroke}
\end{tikzpicture}
%
% Points on intersections of circles
%
\begin{tikzpicture}
\draw[help lines] (0,0) grid (2,2);
\draw (0.5,0) circle (1);
\draw (1.5,1) circle (.8);
\pgfpathcircle{%
\pgfpointintersectionofcircles{\pgfpointxy{.5}{0}}{\pgfpointxy{1.5}{1}}{1cm}{0.8cm}{1}}{2pt}
\pgfusepath{stroke}
\end{tikzpicture}
%
% Points on intersections of paths
%
\begin{pgfpicture}
\pgfintersectionofpaths{
\pgfpathellipse{\pgfpointxy{0}{0}}{\pgfpointxy{1}{0}}{\pgfpointxy{0}{2}}
\pgfgetpath\temppath
\pgfusepath{stroke}
\pgfsetpath\temppath
}
{
\pgftransformrotate{-30}
\pgfpathrectangle{\pgfpointorigin}{\pgfpointxy{2}{2}}
\pgfgetpath\temppath
\pgfusepath{stroke}
\pgfsetpath\temppath
}
\foreach \s in {1,...,\pgfintersectionsolutions}{
\pgfpathcircle{\pgfpointintersectionsolution{\s}}{2pt}}
\pgfusepath{stroke}
\end{pgfpicture}
\endgroup % ----------- end -----------------
%======================================================================
\section{Paths}
\begingroup % ------ pseudo document ---------
% General cooler test
General:
\begin{tikzpicture}[scale=2]
\draw[thick,red]
(0,0) coordinate (a)
-- coordinate (ab)
(1,.5) coordinate (b)
.. coordinate (bc)
controls +(up:1cm) and +(left:1cm)
.. (3,1) coordinate (c)
(0,1) -- (2,1)
-- coordinate (x) (1,2)
-- cycle;
\draw (a) node[below] {start part 1}
(ab) node[below right] {straight segment}
(b) node[right] {end first segment}
(c) node[right] {end part 1}
(x) node[above right] {part 2 (closed)};
\end{tikzpicture}
pgfpath(moveto,lineto,curveto):
\begin{pgfpicture}[scale=2]
\pgfpathmoveto{\pgfpointorigin}
\pgfpathlineto{\pgfpoint{1cm}{1cm}}
\pgfpathlineto{\pgfpoint{2cm}{1cm}}
\pgfpathcurveto{\pgfpoint{1cm}{1cm}}{\pgfpoint{4cm}{1cm}}{\pgfpoint{3cm}{0cm}}
\pgfsetfillcolor{yellow}
\pgfusepath{fill,stroke}
\end{pgfpicture}
pgfclosepath:
\begin{tikzpicture}[scale=2]
\draw[help lines] (0,0) grid (3,2);
\pgfsetlinewidth{5pt}
\pgfpathmoveto{\pgfpoint{1cm}{1cm}}
\pgfpathlineto{\pgfpoint{0cm}{-1cm}}
\pgfpathlineto{\pgfpoint{1cm}{-1cm}}
\pgfpathclose
\pgfpathmoveto{\pgfpoint{2.5cm}{1cm}}
\pgfpathlineto{\pgfpoint{1.5cm}{-1cm}}
\pgfpathlineto{\pgfpoint{2.5cm}{-1cm}}
\pgfpathlineto{\pgfpoint{2.5cm}{1cm}}
\pgfusepath{stroke}
\end{tikzpicture}
pgfpath(arc,arcaxes):
\begin{tikzpicture}[scale=2]
\draw[help lines] (0,0) grid (3,2);
\pgfpathmoveto{\pgfpointorigin}
\pgfpathlineto{\pgfpoint{0cm}{1cm}}
\pgfpatharc{180}{90}{.5cm}
\pgfpathlineto{\pgfpoint{3cm}{1.5cm}}
\pgfpatharc{90}{-45}{.5cm}
\pgfpathmoveto{\pgfpoint{2cm}{5mm}}
\pgfpatharcaxes{0}{90}{\pgfpoint{2cm}{5mm}}{\pgfpoint{0cm}{1cm}}
\pgfusepath{fill}
\end{tikzpicture}
pgfpathellipse:
\begin{tikzpicture}[scale=2]
\draw[help lines] (0,0) grid (3,2);
\pgfpathellipse{\pgfpoint{1cm}{0cm}}{\pgfpoint{1.5cm}{0cm}}{\pgfpoint{0cm}{1cm}}
\pgfusepath{draw}
\color{red}
\pgfpathellipse{\pgfpoint{1cm}{0cm}}{\pgfpoint{1cm}{1cm}}{\pgfpoint{-0.5cm}{0.5cm}}
\pgfusepath{draw}
\end{tikzpicture}
rectangle:
\begin{tikzpicture}[scale=2]
\draw[help lines] (0,0) grid (3,2);
\pgfpathrectangle{\pgfpoint{1cm}{0cm}}{\pgfpoint{1.5cm}{1cm}}
\pgfpathrectangle{\pgfpoint{1.5cm}{0.25cm}}{\pgfpoint{1.5cm}{1cm}}
\pgfpathrectangle{\pgfpoint{2cm}{0.5cm}}{\pgfpoint{1.5cm}{1cm}}
\pgfusepath{draw}
\end{tikzpicture}
grid
\begin{pgfpicture}[scale=2]
\pgfsetlinewidth{0.8pt}
\pgfpathgrid[step={\pgfpoint{1cm}{1cm}}]{\pgfpoint{-3mm}{-3mm}}{\pgfpoint{33mm}{23mm}}
\pgfusepath{stroke}
\pgfsetlinewidth{0.4pt}
\pgfpathgrid[stepx=1mm,stepy=1mm]{\pgfpoint{-1.5mm}{-1.5mm}}{\pgfpoint{31.5mm}{21.5mm}}
\pgfusepath{stroke}
\end{pgfpicture}
pgfpathparabola:
\begin{pgfpicture}[scale=2]
% Half-parabola going ‘‘up and right’’
\pgfpathmoveto{\pgfpointorigin}
\pgfpathparabola{\pgfpointorigin}{\pgfpoint{2cm}{4cm}}
\color{red}
\pgfusepath{stroke}
% Half-parabola going ‘‘down and right’’
\pgfpathmoveto{\pgfpointorigin}
\pgfpathparabola{\pgfpoint{-2cm}{4cm}}{\pgfpointorigin}
\color{blue}
\pgfusepath{stroke}
% Full parabola
\pgfpathmoveto{\pgfpoint{-2cm}{2cm}}
\pgfpathparabola{\pgfpoint{1cm}{-1cm}}{\pgfpoint{2cm}{4cm}}
\color{orange}
\pgfusepath{stroke}
\end{pgfpicture}
sine, cosine:
\begin{tikzpicture}[scale=2]
\draw[help lines] (0,0) grid (3,1);
\pgfpathmoveto{\pgfpoint{1cm}{0cm}}
\pgfpathsine{\pgfpoint{1cm}{1cm}}
\pgfusepath{stroke}
\color{red}
\pgfpathmoveto{\pgfpoint{1cm}{0cm}}
\pgfpathsine{\pgfpoint{-2cm}{-2cm}}
\pgfusepath{stroke}
\end{tikzpicture}
\begin{pgfpicture}[scale=2]
\pgfpathmoveto{\pgfpoint{0cm}{0cm}}
\pgfpathsine{\pgfpoint{1cm}{1cm}}
\pgfpathcosine{\pgfpoint{1cm}{-1cm}}
\pgfpathsine{\pgfpoint{1cm}{-1cm}}
\pgfpathcosine{\pgfpoint{1cm}{1cm}}
% Something is wrong with the "svg brown"
\pgfsetfillcolor{brown}
\pgfusepath{fill,stroke}
\end{pgfpicture}
% plots - see plots
rounded corners
\begin{tikzpicture}[scale=2]
\draw[help lines] (0,0) grid (3,2);
\pgfsetcornersarced{\pgfpoint{10mm}{5mm}}
% 10mm entering,
% 5mm leaving.
\pgfpathmoveto{\pgfpointorigin}
\pgfpathlineto{\pgfpoint{0cm}{2cm}}
\pgfpathlineto{\pgfpoint{3cm}{2cm}}
\pgfpathcurveto{\pgfpoint{3cm}{0cm}}{\pgfpoint{2cm}{0cm}}{\pgfpoint{1cm}{0cm}}
\pgfusepath{stroke}
\end{tikzpicture}
\begin{pgfpicture}[scale=2]
\pgfsetcornersarced{\pgfpoint{4pt}{4pt}}
\pgfpathmoveto{\pgfpointpolar{0}{1cm}}
\pgfpathlineto{\pgfpointpolar{72}{1cm}}
\pgfpathlineto{\pgfpointpolar{144}{1cm}}
\pgfpathlineto{\pgfpointpolar{216}{1cm}}
\pgfpathlineto{\pgfpointpolar{288}{1cm}}
\pgfpathclose
\pgfusepath{stroke}
\end{pgfpicture}
\endgroup % ----------- end -----------------
%======================================================================
\section{Decorations}
\begingroup % ------ pseudo document ---------
\tikz \draw decorate[decoration=zigzag] {(0,0) -- (3,0)};
\endgroup % ----------- end -----------------
\begingroup % ------ pseudo document ---------
% TODO: stuck in loop; (Deep recursion in dimensions?)
%%\tikz \fill [decorate,decoration={text along path,
%% text=This is a text along a path. Note how the path}]
%% [fill=blue!20,draw=blue,thick] (0,0) -- (2,1) arc (90:-90:.5) -- cycle;
% pgfdeclaredecoration
\pgfdeclaredecoration{example}{initial}{
\state{initial}[width=10pt]{
\pgfpathlineto{\pgfpoint{0pt}{5pt}}
\pgfpathlineto{\pgfpoint{5pt}{5pt}}
\pgfpathlineto{\pgfpoint{5pt}{-5pt}}
\pgfpathlineto{\pgfpoint{10pt}{-5pt}}
\pgfpathlineto{\pgfpoint{10pt}{0pt}}
}
\state{final}{
\pgfpathlineto{\pgfpointdecoratedpathlast}
}
}
\tikz[decoration=example]{
\draw [decorate] (0,0) -- (3,0);
\draw [red,decorate] (0,0) to [out=45,in=135] (3,0);
}
\pgfdeclaredecoration{stars}{initial}{
\state{initial}[width=15pt]{
\pgfmathparse{round(rnd*100)}
\pgfsetfillcolor{yellow!\pgfmathresult!orange}
\pgfsetstrokecolor{yellow!\pgfmathresult!red}
\pgfnode{star}{center}{}{}{\pgfusepath{stroke,fill}}
}
\state{final}{
\pgfpathmoveto{\pgfpointdecoratedpathlast}
}
}
\tikz\path[decorate, decoration=stars, star point ratio=2, star points=5,
inner sep=0, minimum size=rnd*10pt+2pt]
(0,0) .. controls (0,2) and (3,2) .. (3,0)
.. controls (3,-3) and (0,0) .. (0,-3)
.. controls (0,-5) and (3,-5) .. (3,-3);
\pgfdeclaredecoration{complicated example decoration}{initial}{
\state{initial}[width=5pt,next state=up]{
\pgfpathlineto{\pgfpoint{5pt}{0pt}} }
\state{up}[width=5pt,next state=down]{
\ifdim\pgfdecoratedremainingdistance>\pgfdecoratedcompleteddistance
% Growing
\pgfpathlineto{\pgfpoint{0pt}{\pgfdecoratedcompleteddistance}}
\pgfpathlineto{\pgfpoint{5pt}{\pgfdecoratedcompleteddistance}}
\pgfpathlineto{\pgfpoint{5pt}{0pt}}
\else
% Shrinking
\pgfpathlineto{\pgfpoint{0pt}{\pgfdecoratedremainingdistance}}
\pgfpathlineto{\pgfpoint{5pt}{\pgfdecoratedremainingdistance}}
\pgfpathlineto{\pgfpoint{5pt}{0pt}}
\fi}
\state{down}[width=5pt,next state=up]{
\ifdim\pgfdecoratedremainingdistance>\pgfdecoratedcompleteddistance
% Growing
\pgfpathlineto{\pgfpoint{0pt}{-\pgfdecoratedcompleteddistance}}
\pgfpathlineto{\pgfpoint{5pt}{-\pgfdecoratedcompleteddistance}}
\pgfpathlineto{\pgfpoint{5pt}{0pt}}
\else
% Shrinking
\pgfpathlineto{\pgfpoint{0pt}{-\pgfdecoratedremainingdistance}}
\pgfpathlineto{\pgfpoint{5pt}{-\pgfdecoratedremainingdistance}}
\pgfpathlineto{\pgfpoint{5pt}{0pt}}
\fi}
\state{final}{
\pgfpathlineto{\pgfpointdecoratedpathlast}
}
}
\begin{tikzpicture}[decoration=complicated example decoration]
\draw decorate{ (0,0) -- (3,0)};
\fill [red!50,rounded corners=2pt]
decorate {(.5,-2) -- ++(2.5,-2.5)} -- (3,-5) -| (0,-2) -- cycle;
\end{tikzpicture}
%\catcode`\|12
%\begin{tikzpicture}
%\draw [help lines] grid (3,2);
%\fill [draw=red,fill=red!20,
%postaction={decorate,decoration={raise=2pt,text along path,
%text=around and around and around and around we go}}]
%(0,1) arc (180:-180:1.5cm and 1cm);
%\end{tikzpicture}
\endgroup % ----------- end -----------------
%======================================================================
\section{More Paths}
% TODO: xlink:href; clipped path (last)
% TODO: arrows
\begingroup % ------ pseudo document ---------
% pgfusepath
fill, stroke
\begin{pgfpicture}[scale=2]
\pgfpathmoveto{\pgfpointorigin}
\pgfpathlineto{\pgfpoint{1cm}{1cm}}
\pgfpathlineto{\pgfpoint{1cm}{0cm}}
\pgfusepath{fill}
\end{pgfpicture}
\begin{pgfpicture}[scale=2]
\pgfpathmoveto{\pgfpointorigin}
\pgfpathlineto{\pgfpoint{1cm}{1cm}}
\pgfpathlineto{\pgfpoint{1cm}{0cm}}
\pgfusepath{stroke}
\end{pgfpicture}
clip
\begin{pgfpicture}[scale=2]
\pgfpathmoveto{\pgfpointorigin}
\pgfpathlineto{\pgfpoint{1cm}{1cm}}
\pgfpathlineto{\pgfpoint{1cm}{0cm}}
\pgfusepath{stroke,clip}
\pgfpathcircle{\pgfpoint{1cm}{1cm}}{0.5cm}
\pgfusepath{fill}
\end{pgfpicture}
% pgfsetlinewidth
\begin{pgfpicture}[scale=2]
\pgfsetlinewidth{1mm}
\pgfpathmoveto{\pgfpoint{0mm}{0mm}}
\pgfpathlineto{\pgfpoint{2cm}{0mm}}
\pgfusepath{stroke}
\pgfsetlinewidth{2\pgflinewidth} % double in size
\pgfpathmoveto{\pgfpoint{0mm}{5mm}}
\pgfpathlineto{\pgfpoint{2cm}{5mm}}
\pgfusepath{stroke}
\end{pgfpicture}
% pgfsetstrokecolor
\begin{pgfpicture}[scale=2]
\pgfsetlinewidth{1pt}
\color{red}
\pgfpathcircle{\pgfpoint{0cm}{0cm}}{3mm} \pgfusepath{fill,stroke}
\pgfsetstrokecolor{black}
\pgfpathcircle{\pgfpoint{1cm}{0cm}}{3mm} \pgfusepath{fill,stroke}
\color{red}
\pgfpathcircle{\pgfpoint{2cm}{0cm}}{3mm} \pgfusepath{fill,stroke}
\end{pgfpicture}
% arrows
\begin{pgfpicture}[scale=2]
\pgfsetarrowsstart{latex}
\pgfsetarrowsend{to}
\pgfpathmoveto{\pgfpointorigin}
\pgfpathlineto{\pgfpoint{1cm}{0cm}}
\pgfusepath{stroke}
\end{pgfpicture}
%
% Filling a path
%
% pgfseteorule
\begin{pgfpicture}[scale=2]
\pgfseteorule
\pgfpathcircle{\pgfpoint{0mm}{0cm}}{7mm}
\pgfpathcircle{\pgfpoint{5mm}{0cm}}{7mm}
\pgfusepath{fill}
\end{pgfpicture}
% pgfsetnonzerorule
\begin{pgfpicture}[scale=2]
\pgfsetnonzerorule
\pgfpathcircle{\pgfpoint{0mm}{0cm}}{7mm}
\pgfpathcircle{\pgfpoint{5mm}{0cm}}{7mm}
\pgfusepath{fill}
\end{pgfpicture}\\
%
% Using a path as a bounding box
%
\begin{pgfpicture}[scale=2]
\pgfpathrectangle{\pgfpointorigin}{\pgfpoint{2ex}{1ex}}
\pgfusepath{use as bounding box} % draws nothing
\pgfpathcircle{\pgfpointorigin}{2ex}
\pgfusepath{stroke}
\end{pgfpicture}% right.
\endgroup % ----------- end -----------------
%======================================================================
\section{Arrows}
\begingroup % ------ pseudo document ---------
\begin{pgfpicture}
\pgfsetarrowsstart{latex}
\pgfsetarrowsend{to}
\pgfpathmoveto{\pgfpointorigin}
\pgfpathlineto{\pgfpoint{1cm}{0cm}}
\pgfusepath{stroke}
\end{pgfpicture}
%
% Declaring an arrow tip kind
%
\pgfarrowsdeclare{arcs’’}{arcs’’}{
\arrowsize=0.2pt
\advance\arrowsize by .5\pgflinewidth
\pgfarrowsleftextend{-4\arrowsize-.5\pgflinewidth}
\pgfarrowsrightextend{.5\pgflinewidth}
}
{
\arrowsize=0.2pt
\advance\arrowsize by .5\pgflinewidth
\pgfsetdash{}{0pt} % do not dash
\pgfsetroundjoin
% fix join
\pgfsetroundcap
% fix cap
\pgfpathmoveto{\pgfpoint{-4\arrowsize}{4\arrowsize}}
\pgfpatharc{180}{270}{4\arrowsize}
\pgfusepathqstroke
\pgfpathmoveto{\pgfpointorigin}
\pgfpatharc{90}{180}{4\arrowsize}
\pgfusepathqstroke
}
%%% Something wrong with -arcs'' ???
% \begin{tikzpicture}[scale=2]
% \draw[help lines] (-2,-1) grid (1,1);
% \draw[line width=10pt,-arcs’’] (-2,0) -- (0,0);
% \draw[line width=2pt,white] (-2,0) -- (0,0);
% \end{tikzpicture}
%
% Declaring a dertived arrow tip kind
%
% pgfarrowsdeclarealias
\pgfarrowsdeclarealias{<}{>}{arcs’’}{arcs’’}%
\begin{tikzpicture}
\pgfsetarrows{<->}
\pgfsetlinewidth{1ex}
\pgfpathmoveto{\pgfpointorigin}
\pgfpathlineto{\pgfpoint{3.5cm}{2cm}}
\pgfusepath{stroke}
\useasboundingbox (-0.25,-0.25) rectangle (3.75,2.25);
\end{tikzpicture}
% pgfarrowsdeclarereversed
\pgfarrowsdeclarereversed{arcs reversed}{arcs reversed}{arcs’’}{arcs’’}%
\begin{tikzpicture}
\pgfsetarrows{arcs reversed-arcs reversed}
\pgfsetlinewidth{1ex}
\pgfpathmoveto{\pgfpointorigin}
\pgfpathlineto{\pgfpoint{3.5cm}{2cm}}
\pgfusepath{stroke}
\useasboundingbox (-0.25,-0.25) rectangle (3.75,2.25);
\end{tikzpicture}
% pgfarrowsdeclarecombined
\pgfarrowsdeclarecombine[\pgflinewidth]{combined}{combined}{arcs’’}{arcs’’}{latex}{latex}%
\begin{tikzpicture}
\pgfsetarrows{combined-combined}
\pgfsetlinewidth{1ex}
\pgfpathmoveto{\pgfpointorigin}
\pgfpathlineto{\pgfpoint{3.5cm}{2cm}}
\pgfusepath{stroke}
\useasboundingbox (-0.25,-0.25) rectangle (3.75,2.25);
\end{tikzpicture}
\pgfarrowsdeclarecombine*[\pgflinewidth]{combined’}{combined’}{arcs’’}{arcs’’}{latex}{latex}%
% Something wrong here too
% \begin{tikzpicture}
% \pgfsetarrows{combined’-combined’}
% \pgfsetlinewidth{1ex}
% \pgfpathmoveto{\pgfpointorigin}
% \pgfpathlineto{\pgfpoint{3.5cm}{2cm}}
% \pgfusepath{stroke}
% \useasboundingbox (-0.25,-0.25) rectangle (3.75,2.25);
% \end{tikzpicture}
% pgfarrowsdeclaretriple
\pgfarrowsdeclaretriple{<<<}{>>>}{arcs’’}{arcs’’}%
\begin{tikzpicture}
\pgfsetarrows{<<<->>>}
\pgfsetlinewidth{1ex}
\pgfpathmoveto{\pgfpointorigin}
\pgfpathlineto{\pgfpoint{3.5cm}{2cm}}
\pgfusepath{stroke}
\useasboundingbox (-0.25,-0.25) rectangle (3.75,2.25);
\end{tikzpicture}
%
% Using an arrow tip kind
%
% pgfsetarrowsstart
\begin{tikzpicture}
\pgfsetarrowsstart{latex}
\pgfsetlinewidth{1ex}
\pgfpathmoveto{\pgfpointorigin}
\pgfpathlineto{\pgfpoint{3.5cm}{2cm}}
\pgfusepath{stroke}
\useasboundingbox (-0.25,-0.25) rectangle (3.75,2.25);
\end{tikzpicture}
% pgfsetarrowsend
\begin{tikzpicture}
\pgfsetarrowsend{latex}
\pgfsetlinewidth{1ex}
\pgfpathmoveto{\pgfpointorigin}
\pgfpathlineto{\pgfpoint{3.5cm}{2cm}}
\pgfusepath{stroke}
\useasboundingbox (-0.25,-0.25) rectangle (3.75,2.25);
\end{tikzpicture}
% pgfsetarrows
\begin{tikzpicture}
\pgfsetarrows{latex-to}
\pgfsetlinewidth{1ex}
\pgfpathmoveto{\pgfpointorigin}
\pgfpathlineto{\pgfpoint{3.5cm}{2cm}}
\pgfusepath{stroke}
\useasboundingbox (-0.25,-0.25) rectangle (3.75,2.25);
\end{tikzpicture}
\endgroup % ----------- end -----------------
%======================================================================
\section{Nodes}
% TODO: Fadings
% TODO: Color in box
% TODO: arrows
\begingroup % ------ pseudo document ---------
\catcode`\@=11\relax
\pgfdeclareshape{document}{
\inheritsavedanchors[from=rectangle] % this is nearly a rectangle
\inheritanchorborder[from=rectangle]
\inheritanchor[from=rectangle]{center}
\inheritanchor[from=rectangle]{north}
\inheritanchor[from=rectangle]{south}
\inheritanchor[from=rectangle]{west}
\inheritanchor[from=rectangle]{east}
% ... and possibly more
\backgroundpath{% this is new
% store lower right in xa/ya and upper right in xb/yb
\southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
\northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
% compute corner of ‘‘flipped page’’
\pgf@xc=\pgf@xb \advance\pgf@xc by-5pt % this should be a parameter
\pgf@yc=\pgf@yb \advance\pgf@yc by-5pt
% construct main path
\pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
\pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@yb}}
\pgfpathlineto{\pgfpoint{\pgf@xc}{\pgf@yb}}
\pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yc}}
\pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@ya}}
\pgfpathclose
% add little corner
\pgfpathmoveto{\pgfpoint{\pgf@xc}{\pgf@yb}}
\pgfpathlineto{\pgfpoint{\pgf@xc}{\pgf@yc}}
\pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yc}}
\pgfpathlineto{\pgfpoint{\pgf@xc}{\pgf@yc}}
}
}\hskip-1.2cm
\begin{tikzpicture}
\node[shade,draw,shape=document,inner sep=2ex] (x) {Remark};
\node[fill=olive,draw,ellipse,double]
at ([shift=(-80:3cm)]x) (y) {Use Case};
\draw[dashed] (x) -- (y);
\end{tikzpicture}
\begin{tikzpicture}[>=stealth',shorten >=1pt,%
auto,node distance=2cm,on grid,semithick,
inner sep=2pt,bend angle=45]
\node[initial,state] (A) {qa};
\node[state] (B) [above right=of A] {qb};
\node[state] (D) [below right=of A] {qd};
\node[state] (C) [below right=of B] {qc};
\node[state] (E) [below=of D] {qe};
\path [every node/.style={font=\footnotesize}]
(A) edge node {0,1,L} (B) edge node {1,1,R} (C)
(B) edge [loop above] node {1,1,L} (B) edge node {0,1,L} (C)
(C) edge node {0,1,L} (D) edge [bend left] node {1,0,R} (E)
(D) edge [loop below] node {1,1,R} (D) edge node {0,1,R} (A)
(E) edge [bend left] node {1,0,R} (A);
\end{tikzpicture}
\endgroup % ----------- end -----------------
\begingroup % ------ pseudo document ---------
%
% Creating nodes
%
% pgfnode
\begin{tikzpicture}[scale=2]
\draw[help lines] (0,0) grid (4,3);
{
\pgftransformshift{\pgfpoint{1.5cm}{1cm}}
\pgfnode{rectangle}{north}{MathML: $\sum_{i=1}^{10} t_i$}{hellonode}{\pgfusepath{stroke}}
}
{
\color{red!20}
\pgftransformrotate{10}
\pgftransformshift{\pgfpoint{3cm}{1cm}}
\pgfnode{rectangle}{center}{\color{black}More: $\int e^{-x}dx$}{hellonode}{\pgfusepath{fill}}
}
\end{tikzpicture}
% pgftransformresetnontranslations
\begin{tikzpicture}[scale=2]
\draw[help lines] (0,0) grid (4,3);
{
\color{red!20}
\pgftransformrotate{10}
\pgftransformshift{\pgfpoint{3cm}{1cm}}
\pgftransformresetnontranslations
\pgfnode{rectangle}{center}{\color{black}$\int_0^\infty e^{-x}dx$}{hellonode}{\pgfusepath{fill}}
}
\end{tikzpicture}
% pgfmultipartnode
\setbox\pgfnodeparttextbox=\hbox{q}
\setbox\pgfnodepartlowerbox=\hbox{01}
\begin{pgfpicture}[scale=2]
\pgfmultipartnode{circle split}{center}{my state}{\pgfusepath{stroke}}
\end{pgfpicture}
% different keys
\begin{tikzpicture}[scale=2]
\draw[help lines] (-2,0) grid (2,1);
\pgfset{minimum width=3cm}
\pgfnode{rectangle}{center}{$\int y dx$}{}{\pgfusepath{stroke}}
\end{tikzpicture}
\begin{tikzpicture}[scale=2]
\draw[help lines] (-2,0) grid (2,1);
\pgfset{outer xsep=.5cm}
\pgfnode{rectangle}{center}{$A_1+A_2+A_3+A_4$}{x}{\pgfusepath{stroke}}
\pgfpathcircle{\pgfpointanchor{x}{north}}{2pt}
\pgfpathcircle{\pgfpointanchor{x}{south}}{2pt}
\pgfpathcircle{\pgfpointanchor{x}{east}}{2pt}
\pgfpathcircle{\pgfpointanchor{x}{west}}{2pt}
\pgfpathcircle{\pgfpointanchor{x}{north east}}{2pt}
\pgfusepath{fill}
\end{tikzpicture}
%
% Using anchors
%
% pgfpointanchor
\begin{pgfpicture}[scale=2]
\pgftransformrotate{30}
\pgfnode{rectangle}{center}{Hello World!}{x}{\pgfusepath{stroke}}
\pgfpathcircle{\pgfpointanchor{x}{north}}{2pt}
\pgfpathcircle{\pgfpointanchor{x}{south}}{2pt}
\pgfpathcircle{\pgfpointanchor{x}{east}}{2pt}
\pgfpathcircle{\pgfpointanchor{x}{west}}{2pt}
\pgfpathcircle{\pgfpointanchor{x}{north east}}{2pt}
\pgfusepath{fill}
\end{pgfpicture}
% pgfpointshapeborder
\begin{pgfpicture}[scale=2]
\begin{pgfscope}
\pgftransformrotate{30}
\pgfnode{rectangle}{center}{Hello World!}{x}{\pgfusepath{stroke}}
\end{pgfscope}
\pgfpathcircle{\pgfpointshapeborder{x}{\pgfpoint{2cm}{1cm}}}{2pt}
\pgfpathcircle{\pgfpoint{2cm}{1cm}}{2pt}
\pgfpathcircle{\pgfpointshapeborder{x}{\pgfpoint{-1cm}{1cm}}}{2pt}
\pgfpathcircle{\pgfpoint{-1cm}{1cm}}{2pt}
\pgfusepath{fill}
\end{pgfpicture}
\endgroup % ----------- end -----------------
%======================================================================
\section{Matrices}
\begingroup % ------ pseudo document ---------
%
% pgfmatrix command
%
\newbox\foo\setbox\foo=\hbox{a}
\begin{tikzpicture}
\pgfmatrix{rectangle}{center}{mymatrix}{\pgfusepath{}}{\pgfpointorigin}{}
{
\node{a};\pgfmatrixendrow
}
\end{tikzpicture}
\endgroup % ----------- end -----------------
%======================================================================
\section{Transformations}
\begingroup % ------ pseudo document ---------
%
% Canvas transformation
%
% pgflowlevelsynccm
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\pgfsetlinewidth{1pt}
\pgftransformscale{5}
\draw (0,0) -- (0.4,.2);
\pgftransformxshift{0.2cm}
\pgflowlevelsynccm
\draw[red] (0,0) -- (0.4,.2);
\end{tikzpicture}
% pgflowlevel
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\pgfsetlinewidth{1pt}
\pgflowlevel{\pgftransformscale{5}}
\draw (0,0) -- (0.4,.2);
\end{tikzpicture}
% pgflowlevelobj
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\pgfsetlinewidth{1pt}
\pgflowlevelobj{\pgftransformscale{5}}
{\draw (0,0) -- (0.4,.2);}
\pgflowlevelobj{\pgftransformxshift{-1cm}}{\draw (0,0) -- (0.4,.2);}
\end{tikzpicture}
% pgflowlevelscope
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\pgfsetlinewidth{1pt}
\begin{pgflowlevelscope}{\pgftransformscale{5}}
\draw (0,0) -- (0.4,.2);
\end{pgflowlevelscope}
\begin{pgflowlevelscope}{\pgftransformxshift{-1cm}}
\draw (0,0) -- (0.4,.2);
\end{pgflowlevelscope}
\end{tikzpicture}
\endgroup % ----------- end -----------------
% TODO: Weird placement of text
\begingroup % ------ pseudo document ---------
%
% Coordinate transformation
%
% pgftransformshift
\begin{tikzpicture}[scale=1.5]
\draw[help lines] (0,0) grid (3,2);
\draw (0,0) -- (2,1) -- (1,0);
\pgftransformshift{\pgfpoint{1cm}{1cm}}
\draw[red] (0,0) -- (2,1) -- (1,0);
\end{tikzpicture}
% pgftransformscale
\begin{tikzpicture}[scale=1.5]
\draw[help lines] (0,0) grid (3,2);
\draw (0,0) -- (2,1) -- (1,0);
\pgftransformscale{.75}
\draw[red] (0,0) -- (2,1) -- (1,0);
\end{tikzpicture}
% pgftransformxslant
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\draw (0,0) -- (2,1) -- (1,0);
\pgftransformxslant{.5}
\draw[red] (0,0) -- (2,1) -- (1,0);
\end{tikzpicture}
% pgftransformrotate
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\draw (0,0) -- (2,1) -- (1,0);
\pgftransformrotate{30}
\draw[red] (0,0) -- (2,1) -- (1,0);
\end{tikzpicture}
% pgftransformtriangle
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\pgftransformtriangle
{\pgfpoint{1cm}{0cm}}
{\pgfpoint{0cm}{2cm}}
{\pgfpoint{3cm}{1cm}}
\draw (0,0) -- (1pt,0pt) -- (0pt,1pt) -- cycle;
\end{tikzpicture}
% pgftransformcm
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\draw (0,0) -- (2,1) -- (1,0);
\pgftransformcm{1}{1}{0}{1}{\pgfpoint{.25cm}{.25cm}}
\draw[red] (0,0) -- (2,1) -- (1,0);
\end{tikzpicture}
% pgftransformarrow
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\draw (0,0) -- (3,1);
\pgftransformarrow{\pgfpointorigin}{\pgfpoint{3cm}{1cm}}
\pgftext{tip}
\end{tikzpicture}
% pgftransformcurveattime
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\draw (0,0) .. controls (0,2) and (1,2) .. (2,1);
\pgfslopedattimetrue
\pgftransformcurveattime{.25}{\pgfpointorigin}
{\pgfpoint{0cm}{2cm}}{\pgfpoint{1cm}{2cm}}{\pgfpoint{2cm}{1cm}}
\pgftext{Hi!}
\end{tikzpicture}
% pgftransformreset
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\pgftransformrotate{30}
\draw (0,0) -- (2,1) -- (1,0);
\pgftransformreset
\draw[red] (0,0) -- (2,1) -- (1,0);
\end{tikzpicture}
%pgftransformresetnontranslations
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\pgftransformscale{2}
\pgftransformrotate{30}
\pgftransformxshift{1cm}{\color{red}\pgftext{rotated}}
\pgftransformresetnontranslations
\pgftext{shifted only}
\end{tikzpicture}
% pgftransforminvert
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\pgftransformrotate{30}
\draw (0,0) -- (2,1) -- (1,0);
\pgftransforminvert
\draw[red] (0,0) -- (2,1) -- (1,0);
\end{tikzpicture}
\endgroup % ----------- end -----------------
%======================================================================
\section{Patterns}
% TODO: Centos6 tikz XKeyVal
\begingroup % ------ pseudo document ---------
%
% Declaring a pattern
%
% pgfdeclarepatternformonly
\pgfdeclarepatternformonly{stars}
{\pgfpointorigin}{\pgfpoint{1cm}{1cm}}
{\pgfpoint{1cm}{1cm}}
{
\pgftransformshift{\pgfpoint{.5cm}{.5cm}}
\pgfpathmoveto{\pgfpointpolar{0}{4mm}}
\pgfpathlineto{\pgfpointpolar{144}{4mm}}
\pgfpathlineto{\pgfpointpolar{288}{4mm}}
\pgfpathlineto{\pgfpointpolar{72}{4mm}}
\pgfpathlineto{\pgfpointpolar{216}{4mm}}
\pgfpathclose%
\pgfusepath{fill}
}
\begin{tikzpicture}
\filldraw[pattern=stars] (0,0) rectangle (1.5,2);
\filldraw[pattern=stars,pattern color=red] (1.5,0) rectangle (3,2);
\end{tikzpicture}
% pgfdeclarepatterninherentlycolored
\pgfdeclarepatterninherentlycolored{green stars}
{\pgfpointorigin}{\pgfpoint{1cm}{1cm}}
{\pgfpoint{1cm}{1cm}}
{
\pgfsetfillcolor{green!50!black}
\pgftransformshift{\pgfpoint{.5cm}{.5cm}}
\pgfpathmoveto{\pgfpointpolar{0}{4mm}}
\pgfpathlineto{\pgfpointpolar{144}{4mm}}
\pgfpathlineto{\pgfpointpolar{288}{4mm}}
\pgfpathlineto{\pgfpointpolar{72}{4mm}}
\pgfpathlineto{\pgfpointpolar{216}{4mm}}
\pgfpathclose%
\pgfusepath{stroke,fill}
}
\begin{tikzpicture}
\filldraw[pattern=green stars] (0,0) rectangle (3,2);
\end{tikzpicture}
% Setting a pattern
%
% pgfsetfillpattern
\begin{tikzpicture}
\pgfsetfillpattern{stars}{red} \filldraw (0,0) rectangle (1.5,2);
\pgfsetfillpattern{green stars}{red} \filldraw (1.5,0) rectangle (3,2);
\end{tikzpicture}
\endgroup % ----------- end -----------------
%======================================================================
\section{Plots}
\begingroup % ------ pseudo document ---------
% pgfplotstream(start|point|end)
\begin{tikzpicture}
\pgfplothandlerlineto
\pgfplotstreamstart
\pgfplotstreampoint{\pgfpointxyz{2}{-5}{1}}
\pgfplotstreampoint{\pgfpointxyz{2}{-.2}{2}}
\pgfplotstreampoint{\pgfpointxyz{2}{-5}{2}}
\pgfplotstreamend
\pgfusepath{stroke}
\end{tikzpicture}
%
% Generating plot streams
%
% pgfplotxyfile
% pgfplotxyzfile
% pgfplotfunction
\begin{tikzpicture}[x=3.8cm/360]
\pgfplothandlerlineto
\pgfplotfunction{\x}{0,5,...,360}{\pgfpointxy{\x}{sin(\x)+sin(3*\x)}}
\pgfusepath{stroke}
\end{tikzpicture}
\begin{tikzpicture}[y=3cm/360]
\pgfplothandlerlineto
\pgfplotfunction{\y}{0,5,...,360}{\pgfpointxyz{sin(2*\y)}{\y}{cos(2*\y)}}
\pgfusepath{stroke}
\end{tikzpicture}
% pgfgnuplot
%
% Plot handlers
%
% pgfplothandlerlineto
\begin{pgfpicture}
\pgfpathmoveto{\pgfpointorigin}
\pgfplothandlerlineto
\pgfplotstreamstart
\pgfplotstreampoint{\pgfpoint{1cm}{0cm}}
\pgfplotstreampoint{\pgfpoint{2cm}{1cm}}
\pgfplotstreampoint{\pgfpoint{3cm}{2cm}}
\pgfplotstreampoint{\pgfpoint{1cm}{2cm}}
\pgfplotstreamend
\pgfusepath{stroke}
\end{pgfpicture}
% pgfsetlinetofirstplotpoint
\begin{pgfpicture}
\pgfpathmoveto{\pgfpointorigin}
\pgfsetlinetofirstplotpoint
\pgfplothandlerlineto
\pgfplotstreamstart
\pgfplotstreampoint{\pgfpoint{1cm}{0cm}}
\pgfplotstreampoint{\pgfpoint{2cm}{1cm}}
\pgfplotstreampoint{\pgfpoint{3cm}{2cm}}
\pgfplotstreampoint{\pgfpoint{1cm}{2cm}}
\pgfplotstreamend
\pgfusepath{stroke}
\end{pgfpicture}
% pgfplothandlerrecord
\begin{pgfpicture}
\pgfplothandlerrecord{\mystream}
\pgfplotstreamstart
\pgfplotstreampoint{\pgfpoint{1cm}{0cm}}
\pgfplotstreampoint{\pgfpoint{2cm}{1cm}}
\pgfplotstreampoint{\pgfpoint{3cm}{1cm}}
\pgfplotstreampoint{\pgfpoint{1cm}{2cm}}
\pgfplotstreamend
\pgfplothandlerlineto
\mystream
\pgfplothandlerclosedcurve
\mystream
\pgfusepath{stroke}
\end{pgfpicture}
\endgroup % ----------- end -----------------
%======================================================================
\section{Layers}
\begingroup % ------ pseudo document ---------
\pgfdeclarelayer{background layer}
\pgfdeclarelayer{foreground layer}
\pgfsetlayers{background layer,main,foreground layer}
\begin{tikzpicture}
% On main layer:
\fill[blue] (0,0) circle (1cm);
\begin{pgfonlayer}{background layer}
\fill[yellow] (-1,-1) rectangle (1,1);
\end{pgfonlayer}
\begin{pgfonlayer}{foreground layer}
\node[white] {foreground};
\end{pgfonlayer}
\begin{pgfonlayer}{background layer}
\fill[black] (-.8,-.8) rectangle (.8,.8);
\end{pgfonlayer}
% On main layer again:
\fill[blue!50] (-.5,-1) rectangle (.5,1);
\end{tikzpicture}
\endgroup % ----------- end -----------------
%======================================================================
\section{Shadings}
\begingroup % ------ pseudo document ---------
% TODO: TO fix: spacing:
% TODO: shading(inside/outside)pgfpicture simply make the constructor svg@pgfsys@sh a macro that modified the picmin/maxs if necessary and theeeen inserts the shapes
\pgfdeclareverticalshading{myshadingG}{100bp}
{color(0bp)=(red); color(25bp)=(green); color(75bp)=(blue);color(100bp)=(black)}
\begin{pgfpicture}
\pgfpathrectangle{\pgfpointorigin}{\pgfpoint{50pt}{20pt}}
\pgfshadepath{myshadingG}{0}
\pgfusepath{stroke}
\pgfpathrectangle{\pgfpoint{3cm}{0cm}}{\pgfpoint{2cm}{1cm}}
\pgfshadepath{myshadingG}{90}
\pgfusepath{stroke}
\pgfpathrectangle{\pgfpoint{6cm}{0cm}}{\pgfpoint{2cm}{1cm}}
\pgfshadepath{myshadingG}{45}
\pgfusepath{stroke}
\end{pgfpicture}
\pgfdeclareverticalshading{rainbow}{100bp}{
color(0bp)=(red); color(25bp)=(red); color(35bp)=(yellow);
color(45bp)=(green); color(55bp)=(cyan); color(65bp)=(blue);
color(75bp)=(violet); color(100bp)=(violet)}
\begin{tikzpicture}[shading=rainbow]
\shade (0,0) rectangle node[white] {\textsc{Awesome!}} (2,1);
\shade[shading angle=90] (3,0) rectangle +(1,2);
\end{tikzpicture}
\endgroup % ----------- end -----------------
% TODO: move color computation from xcolor to font or Util::Color
% TODO: spacing between elements (last 2); text: extend image for visibility (flag to choose)
\begingroup % ------ pseudo document ---------
%
% Declaring shadings
%
% Horizontal shading
\pgfdeclarehorizontalshading{myshadingA}
{1cm}{rgb(0cm)=(1,0,0); color(2cm)=(green); color(4cm)=(blue)}
\pgfuseshading{myshadingA}
% weird color manipulation
\pgfdeclarehorizontalshading[mycolor]{myshadingB}
{1cm}{rgb(0cm)=(1,0,0); color(2cm)=(mycolor)}
\colorlet{mycolor}{green}
\pgfuseshading{myshadingB}
\colorlet{mycolor}{blue}
\pgfuseshading{myshadingB}
% vertical shading
\pgfdeclareverticalshading{myshadingC}
{4cm}{rgb(0cm)=(1,0,0); rgb(1.5cm)=(0,1,0); rgb(2cm)=(0,0,1)}
\pgfuseshading{myshadingC}
% radial shading
\pgfdeclareradialshading{sphere}{\pgfpoint{0.5cm}{0.5cm}}{
rgb(0cm)=(0.9,0,0);
rgb(0.7cm)=(0.7,0,0);
rgb(1cm)=(0.5,0,0);
rgb(1.05cm)=(1,1,1)}
\pgfuseshading{sphere}
% TODO: functional shadings - some post script parser?
% Using shadings
%
% pgfshadepath
\pgfdeclareverticalshading{myshadingF}{100bp}{
color(0bp)=(red); color(25bp)=(green); color(75bp)=(blue); color(100bp)=(black)}
\begin{tikzpicture}
\draw (50bp,50bp) node {\pgfuseshading{myshadingF}};
\draw[white,thick] (25bp,25bp) rectangle (75bp,75bp);
\draw (50bp,0bp) node[below] {first two applications};
\begin{scope}[xshift=5cm]
\draw (50bp,50bp) node{\pgfuseshading{myshadingF}};
\draw[rotate around={45:(50bp,50bp)},white,thick] (25bp,25bp) rectangle (75bp,75bp);
\draw (50bp,0bp) node[below] {third application};
\end{scope}
\begin{scope}[xshift=10cm]
\draw (50bp,50bp) node{\pgfuseshading{myshadingF}};
\draw[white,thick] (50bp,50bp) circle (25bp);
\draw (50bp,0bp) node[below] {fourth application};
\end{scope}
\end{tikzpicture}
\pgfdeclareradialshading{ballshading}{\pgfpoint{-10bp}{10bp}}{
color(0bp)=(red!15!white); color(9bp)=(red!75!white);
color(18bp)=(red!70!black); color(25bp)=(red!50!black); color(50bp)=(black)}
\pgfuseshading{ballshading}
\hskip 1cm
\begin{pgfpicture}
\pgfpathrectangle{\pgfpointorigin}{\pgfpoint{1cm}{1cm}}
\pgfshadepath{ballshading}{0}
\pgfusepath{}
\pgfpathcircle{\pgfpoint{3cm}{0cm}}{1cm}
\pgfshadepath{ballshading}{0}
\pgfusepath{}
\pgfpathcircle{\pgfpoint{6cm}{0cm}}{1cm}
\pgfshadepath{ballshading}{45}
\pgfusepath{}
\end{pgfpicture}
\pgfdeclareverticalshading{myshadingG}{100bp}{
color(0bp)=(red); color(25bp)=(green); color(75bp)=(blue);color(100bp)=(black)}
\begin{pgfpicture}
\pgfpathrectangle{\pgfpointorigin}{\pgfpoint{2cm}{1cm}}
\pgfshadepath{myshadingG}{0}
\pgfusepath{stroke}
\pgfpathrectangle{\pgfpoint{3cm}{0cm}}{\pgfpoint{2cm}{1cm}}
\pgfshadepath{myshadingG}{90}
\pgfusepath{stroke}
\pgfpathrectangle{\pgfpoint{6cm}{0cm}}{\pgfpoint{2cm}{1cm}}
\pgfshadepath{myshadingG}{45}
\pgfusepath{stroke}
\end{pgfpicture}
% \noindent\color{red}red:\convertcolorspec{rgb}{1,0,0}{HTML}{\foo}\foo\\
% \color{green}green:\convertcolorspec{rgb}{0,1,0}{HTML}{\foo}\foo\\
% \color{blue}blue:\convertcolorspec{rgb}{0,0,1}{HTML}{\foo}\foo\\
% \color{brown}brown:\convertcolorspec{rgb}{.75,.5,.25}{HTML}{\foo}\foo\\
% \color{lime}lime:\convertcolorspec{rgb}{.75,1,0}{HTML}{\foo}\foo\\
% \color{orange}orange:\convertcolorspec{rgb}{1,.5,0}{HTML}{\foo}\foo\\
% \color{pink}pink:\convertcolorspec{rgb}{1,.75,.75}{HTML}{\foo}\foo\\
% \color{purple}purple:\convertcolorspec{rgb}{.75,0,.25}{HTML}{\foo}\foo\\
% \color{teal}teal:\convertcolorspec{rgb}{0,.5,.5}{HTML}{\foo}\foo\\
% \color{violet}violet:\convertcolorspec{rgb}{.5,0,.5}{HTML}{\foo}\foo\\
% \color{cyan}cyan:\convertcolorspec{cmyk}{1,0,0,0}{HTML}{\foo}\foo\\
% \color{magenta}magenta:\convertcolorspec{cmyk}{0,1,0,0}{HTML}{\foo}\foo\\
% \color{yellow}yellow:\convertcolorspec{cmyk}{0,0,1,0}{HTML}{\foo}\foo\\
% \color{olive}olive:\convertcolorspec{cmyk}{0,0,1,.5}{HTML}{\foo}\foo\\
% \color{black}black:\convertcolorspec{gray}{0}{HTML}{\foo}\foo\\
% \color{darkgray}darkgray:\convertcolorspec{rgb}{.25,.25,.25}{HTML}{\foo}\foo\\
% \color{gray}gray:\convertcolorspec{rgb}{.5,.5,.5}{HTML}{\foo}\foo\\
% \color{lightgray}lightgray:\convertcolorspec{rgb}{.75,.75,.75}{HTML}{\foo}\foo\\
% \color{white}white:\convertcolorspec{rgb}{1,1,1}{HTML}{\foo}\foo\\
\endgroup % ----------- end -----------------
%======================================================================
\section{Text}
\begingroup % ------ pseudo document ---------
\tikz[scale=2]{\draw[help lines] (-1,-.5) grid (1,.5); \pgftext[left] {text}}
\tikz[scale=2]{\draw[help lines] (-1,-.5) grid (1,.5); \pgftext[right] {text}}
\tikz[scale=2]{\draw[help lines] (-1,-.5) grid (1,.5); \pgftext[top] {text}}
\tikz[scale=2]{\draw[help lines] (-1,-.5) grid (1,.5); \pgftext[top,right] {text}}
\tikz[scale=2]{\draw[help lines] (-1,-.5) grid (1,.5); \pgftext[bottom] {text}}
\tikz[scale=2]{\draw[help lines] (-1,-.5) grid (1,.5); \pgftext[bottom,right] {text}}
\tikz[scale=2]{\draw[help lines] (-1,-.5) grid (1,.5); \pgftext[base] {text}}
\tikz[scale=2]{\draw[help lines] (-1,-.5) grid (1,.5); \pgftext[base,right] {text}}
\tikz[scale=2]{\draw[help lines] (-1,-.5) grid (1,.5);
\pgftext[base,at={\pgfpoint{1cm}{0cm}}] {text}}
\tikz[scale=2]{\draw[help lines] (-1,-.5) grid (1,.5);
\pgftext[base,x=1cm,y=-0.5cm] {text}}
\tikz[scale=2]{\draw[help lines] (-1,-.5) grid (1,.5);
\pgftext[base,x=1cm,y=-0.5cm,rotate=30] {Awesoome!}}
\begin{tikzpicture}[shorten >=1pt,->,
vertex/.style={circle,fill=black!25,minimum size=17pt,inner sep=0pt}]
\foreach \name/\x in {s/1, 2/2, 3/3, 4/4, 15/11, 16/12, 17/13, 18/14, 19/15, t/16}
\node[vertex] (G-\name) at (\x,0) {\name};
\foreach \name/\angle/\text in {P-1/234/5, P-2/162/6, P-3/90/7, P-4/18/8, P-5/-54/9}
\node[vertex,xshift=6cm,yshift=.5cm] (\name) at (\angle:1cm) {\text};
\foreach \name/\angle/\text in {Q-1/234/10, Q-2/162/11, Q-3/90/12, Q-4/18/13, Q-5/-54/14}
\node[vertex,xshift=9cm,yshift=.5cm] (\name) at (\angle:1cm) {\text};
\foreach \from/\to in {s/2,2/3,3/4,3/4,15/16,16/17,17/18,18/19,19/t}
\draw (G-\from) -- (G-\to);
\foreach \from/\to in {1/2,2/3,3/4,4/5,5/1,1/3,2/4,3/5,4/1,5/2}{
\draw (P-\from) -- (P-\to); \draw (Q-\from) -- (Q-\to); }
\draw (G-3) .. controls +(-30:2cm) and +(-150:1cm) .. (Q-1);
\draw (Q-5) -- (G-15);
\end{tikzpicture}
\endgroup % ----------- end -----------------
%======================================================================
\section{Transparency}
\begingroup % ------ pseudo document ---------
%
% Specifying fadings
%
% pgfdeclarefading
\pgfdeclarefading{fading1}{\color{white}Ti\emph{k}Z}
\begin{tikzpicture}
\fill [black!20] (0,0) rectangle (2,2);
\fill [black!30] (0,0) arc (180:0:1);
\pgfsetfading{fading1}{\pgftransformshift{\pgfpoint{1cm}{1cm}}}
\fill [red] (0,0) rectangle (2,2);
\end{tikzpicture}
\pgfdeclareradialshading{myshading}{\pgfpointorigin}{
color(0mm)=(pgftransparent!0);
color(5mm)=(pgftransparent!0);
color(8mm)=(pgftransparent!100);
color(15mm)=(pgftransparent!100)
}
\pgfdeclarefading{fading3}{\pgfuseshading{myshading}}
\begin{tikzpicture}
\fill [black!20] (0,0) rectangle (2,2);
\fill [black!30] (0,0) arc (180:0:1);
\pgfsetfading{fading3}{\pgftransformshift{\pgfpoint{1cm}{1cm}}}
\fill [red] (0,0) rectangle (2,2);
\end{tikzpicture}
% pgfsetfading
\pgfdeclarefading{fading2}{\tikz \shade[left color=pgftransparent!0,
right color=pgftransparent!100] (0,0) rectangle (2,2);}
\begin{tikzpicture}
\fill [black!20] (0,0) rectangle (2,2);
\fill [black!30] (0,0) arc (180:0:1);
\pgfsetfading{fading2}{}
\fill [red] (0,0) rectangle (2,2);
\end{tikzpicture}
\begin{tikzpicture}
\fill [black!20] (0,0) rectangle (2,2);
\fill [black!30] (0,0) arc (180:0:1);
\pgfsetfading{fading2}{\pgftransformshift{\pgfpoint{1cm}{1cm}}
\pgftransformrotate{20}}
\fill [red] (0,0) rectangle (2,2);
\end{tikzpicture}
% pgfsetfadingforcurrentpath
\pgfdeclarehorizontalshading{shading}{100bp}{
color(0pt)=(transparent!0); color(25bp)=(transparent!0);
color(75bp)=(transparent!100); color(100bp)=(transparent!100)}
\pgfdeclarefading{fading}{\pgfuseshading{shading}}
\begin{tikzpicture}
\fill [black!20] (0,0) rectangle (2,2);
\fill [black!30] (0,0) arc (180:0:1);
\pgfpathrectangle{\pgfpointorigin}{\pgfpoint{2cm}{1cm}}
\pgfsetfadingforcurrentpath{fading}{}
\pgfusepath{discard}
\fill [red] (0,0) rectangle (2,1);
\pgfpathrectangle{\pgfpoint{0cm}{1cm}}{\pgfpoint{2cm}{1cm}}
\pgfsetfadingforcurrentpath{fading}{\pgftransformrotate{90}}
\pgfusepath{discard}
\fill [red] (0,1) rectangle (2,2);
\end{tikzpicture}
\endgroup % ----------- end -----------------
% TODO: transparency group
\begingroup % ------ pseudo document ---------
%
% Transparency groups
%
\begin{tikzpicture}
\draw [help lines] (0,0) grid (2,2);
% Stuff outside the picture, but still in a transparency group.
\node [left,overlay] at (0,1) {
\begin{tikzpicture}
\pgfsetfillopacity{0.5}
\pgftransparencygroup
\node at (2,0) [forbidden sign,line width=2ex,draw=red,fill=white]{Smoking};
\endpgftransparencygroup
\end{tikzpicture}
};
\end{tikzpicture}
\endgroup % ----------- end -----------------
\begingroup % ------ pseudo document ---------
%
% Specifying a Uniform Opacity
%
% pgfsetstrokeopacity
\begin{pgfpicture}
\pgfsetlinewidth{5mm}
\color{red}
\pgfpathcircle{\pgfpoint{0cm}{0cm}}{10mm} \pgfusepath{stroke}
\color{black}
\pgfsetstrokeopacity{0.5}
\pgfpathcircle{\pgfpoint{1cm}{0cm}}{10mm} \pgfusepath{stroke}
\end{pgfpicture}
% pgfsetfillopacity
\begin{tikzpicture}
\pgfsetfillopacity{0.5}
\fill[red] (90:1cm) circle (11mm);
\fill[green] (210:1cm) circle (11mm);
\fill[blue] (-30:1cm) circle (11mm);
\end{tikzpicture}
% If you setup a certain opacity for stroking or flling and you
% stroke or fll the same area twice, the effect accumulates (should)
\begin{tikzpicture}
\pgfsetfillopacity{0.5}
\fill[red] (0,0) circle (1);
\fill[red] (1,0) circle (1);
\end{tikzpicture}
\endgroup % ----------- end -----------------
%======================================================================
\section{Quick Commands}
% TODO: looks good: different pictures and they are trimmed; not to get confused by baseline (NOT SAME PICTURE).
\begingroup % ------ pseudo document ---------
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\pgftransformxshift{1cm}
\pgfpathqmoveto{0pt}{0pt} % not transformed
\pgfpathqlineto{1cm}{1cm} % not transformed
\pgfpathlineto{\pgfpoint{2cm}{0cm}}
\pgfusepath{stroke}
\end{tikzpicture}
\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\pgfpathqmoveto{0pt}{0pt}
\pgfpathqcurveto{1cm}{1cm}{2cm}{1cm}{3cm}{0cm}
\pgfusepath{stroke}
\end{tikzpicture}
\begin{tikzpicture}
\draw[help lines] (0,0) grid (1,1);
\pgfpathqcircle{10pt}
\pgfsetfillcolor{olive}
\pgfusepath{stroke,fill}
\end{tikzpicture}
\begin{pgfpicture}
\pgfpathqcircle{5pt}
\pgfusepathqstroke
\end{pgfpicture}
\endgroup % ----------- end -----------------
%======================================================================
\section{Fun Patterns}
% \begingroup % ------ pseudo document ---------
% \begin{tikzpicture}
% \pgfdeclareverticalshading{myshadingF}{100bp}
% {color(0bp)=(red); color(25bp)=(green); color(75bp)=(blue); color(100bp)=(black)}
% \draw (50bp,50bp) node {\pgfuseshading{myshadingF}};
% \draw[white,thick] (25bp,25bp) rectangle (75bp,75bp);
% \draw (50bp,0bp) node[below] {first two applications};
% \begin{scope}[xshift=5cm]
% \draw (50bp,50bp) node{\pgfuseshading{myshadingF}};
% \draw[rotate around={45:(50bp,50bp)},white,thick] (25bp,25bp) rectangle (75bp,75bp);
% \draw (50bp,0bp) node[below] {third application};
% \end{scope}
% \begin{scope}[xshift=10cm]
% \draw (50bp,50bp) node{\pgfuseshading{myshadingF}};
% \draw[white,thick] (50bp,50bp) circle (25bp);
% \draw (50bp,0bp) node[below] {fourth application};
% \end{scope}
% \begin{scope}[xshift=15cm,yshift=1.5cm]
% \pgfsetfillopacity{0.5}
% \fill[red]
% (90:1cm) circle (11mm);
% \fill[green] (210:1cm) circle (11mm);
% \fill[blue] (-30:1cm) circle (11mm);
% \end{scope}
% \begin{scope}[xshift=20cm,yshift=1.5cm]
% \pgfdeclareradialshading{ballshading}{\pgfpoint{-10bp}{10bp}}
% {color(0bp)=(red!15!white); color(9bp)=(red!75!white);
% color(18bp)=(red!70!black); color(25bp)=(red!50!black); color(50bp)=(black)}
% \pgfuseshading{ballshading}
% \end{scope}
% % \begin{scope}[scale=3,yshift=-2cm]
% % \clip (-0.1,-0.2) rectangle (1.1,0.75);
% % \draw[step=.5cm,gray,very thin] (-1.4,-1.4) grid (1.4,1.4);
% % \draw (-1.5,0) -- (1.5,0);
% % \draw (0,-1.5) -- (0,1.5);
% % \draw (0,0) circle (1cm);
% % \shadedraw[left color=gray,right color=green, draw=green!50!black]
% % (0,0) -- (3mm,0mm) arc (0:30:3mm) -- cycle;
% % \end{scope}
% \end{tikzpicture}
% \endgroup % ----------- end -----------------
\begingroup % ------ pseudo document ---------
%\def\foo{bar}
%\def\foa{baz}
%\expandafter\def\expandafter\foo\expandafter{\expandafter\\foa\foo}
%\foo
%\begin{tikzpicture}
\begin{tikzpicture}
\pgfdeclareverticalshading{myshadingF}{100bp}{
color(0bp)=(red); color(25bp)=(green); color(75bp)=(blue); color(100bp)=(black)}%
\pgfdeclareverticalshading{msh2}{100bp}{
color(0bp)=(red); color(25bp)=(green); color(75bp)=(blue); color(100bp)=(black)}%
\node {
\begin{tikzpicture}
\draw (1cm,1cm) node{YAY!\pgfuseshading{msh2}};
\draw(1,1)--(2,2);
\end{tikzpicture}
\pgfuseshading{myshadingF}};%
\end{tikzpicture}
\endgroup % ----------- end -----------------
\end{document}