summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-petri.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-petri.tex')
-rw-r--r--Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-petri.tex264
1 files changed, 264 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-petri.tex b/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-petri.tex
new file mode 100644
index 00000000000..14f7165a3ff
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-petri.tex
@@ -0,0 +1,264 @@
+% Copyright 2006 by Till Tantau
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Free Documentation License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+
+
+\section{Petri-Net Drawing Library}
+
+\begin{tikzlibrary}{petri}
+ This packages provides shapes and styles for drawing Petri nets.
+\end{tikzlibrary}
+
+
+
+\subsection{Places}
+
+The package defines a style for drawing places of Petri nets.
+
+\begin{itemize}
+ \itemstyle{place}
+ This style indicates that a node is a place of a Petri net. Usually,
+ the text of the node should be empty since places do not contain any
+ text. You should use the |label| option to add text outside the node
+ like its name or its capacity. You should use the |tokens| options,
+ explained in Section~\ref{section-tokens}, to add tokens inside the
+ place.
+
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[place,label=above:$p_1$,tokens=2] (p1) {};
+ \node[place,label=below:$p_2\ge1$,right of=p1] (p2) {};
+\end{tikzpicture}
+\end{codeexample}
+
+ \itemstyle{every place}
+ This stype is envoked by the style |place|. To change the
+ appearance of places, you can change this style.
+\begin{codeexample}[]
+\tikzstyle{every place}=[draw=blue,fill=blue!20,thick,minimum size=9mm]
+\begin{tikzpicture}
+ \node[place,tokens=7,label=above:$p_1$] (p1) {};
+ \node[place,structured tokens={3,2,9},
+ label=below:$p_2\ge1$,right of=p1] (p2) {};
+\end{tikzpicture}
+\end{codeexample}
+\end{itemize}
+
+
+
+\subsection{Transitions}
+
+Transitions are also nodes. They should be drawn using the following
+style:
+
+\begin{itemize}
+ \itemstyle{transition}
+ This style indicates that a node is a transition. As for places, the
+ text of a transition should be empty and the |label| option should
+ be used for adding labels.
+
+ To connect a transition to places, you can use the |edge| command as
+ in the following example:
+
+\begin{codeexample}[]
+\begin{tikzpicture}[node distance=2cm]
+ \node[place,tokens=2,label=above:$p_1$] (p1) {};
+ \node[place,label=above:$p_2\ge1$,right of=p1] (p2) {};
+
+ \node[transition,below right of=p1,label=below:$t_1$] {}
+ edge[pre] (p1)
+ edge[post] node[auto] {2} (p2);
+\end{tikzpicture}
+\end{codeexample}
+
+ \itemstyle{every transition}
+ This style is envoked by the style |transition|.
+
+ \itemstyle{pre}
+ This style can be used with paths leading \emph{from} a transition
+ \emph{to} a place to indicate that the place is in the pre-set of
+ the transition. By default, this style is |<-,shorten <=1pt|, but
+ feel free to redefine it.
+
+ \itemstyle{post}
+ This style is also used with paths leading \emph{from} a transition
+ \emph{to} a place, but this time the place is in the post-set of
+ the transition. Again, feel free to redefine it.
+
+ \itemstyle{pre and post}
+ This style is to be used to indicate that a place is both in the
+ pre- and post-set of a transition.
+\end{itemize}
+
+
+\subsection{Tokens}
+\label{section-tokens}
+
+Interestingly, the most complicated aspect of drawing Petri nets in
+\tikzname\ turns out to be the placement of tokens.
+
+Let us start with a single token. They are also nodes and there is a
+simple style for typesetting them.
+
+
+\begin{itemize}
+ \itemstyle{token}
+ This style indicates that a node is a token. By default, this causes
+ the node to be a small black circle. Unlike places and transitions,
+ it \emph{does} make sense to provide text for the token node. Such
+ text will be typeset in a tiny font and in white on black
+ (naturally, you can easily change this by setting the style
+ |every token|).
+
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[place,label=above:$p_1$] (p1) {};
+ \node[token] at (p1) {};
+
+ \node[place,label=above:$p_2$,right of=p1] (p2) {};
+ \node[token] at (p2) {$y$};
+\end{tikzpicture}
+\end{codeexample}
+\end{itemize}
+
+In the above example, it is bothersome that we need an extra command
+for the token node. Worse, when we have \emph{two} tokens on a node,
+it is difficult to place both nodes inside the node without overlap.
+
+The Petri net library offers a solution to this problem: The
+|children are tokens| style.
+
+
+\begin{itemize}
+ \itemstyle{children are tokens}
+ The idea behind this style is to use trees mechanism for placing
+ tokens. Every token lying on a place is treated as a child of the
+ node. Normally this would have the effect that the tokens are placed
+ below the place and they would be connected to the place by an
+ edge. The |children are tokens| style, however, redefines the growth
+ function of trees such that it places the children next to each
+ other inside (or, rather, on top) of the place node. Additionally,
+ the edge from the parent node is not drawn.
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[place,label=above:$p_1$] {}
+ [children are tokens]
+ child {node [token] {1}}
+ child {node [token] {2}}
+ child {node [token] {3}};
+\end{tikzpicture}
+\end{codeexample}
+
+ In detail, what happens is the following: Tree growth functions tell
+ \tikzname\ where it should place the children of nodes. These
+ functions get passed the number of children that a node has an the
+ number of the child that should be placed. The special tree growth
+ function for tokens has a special mapping for each possible number
+ of children up to nine children. This mapping decides for each child
+ where it should be placed on top of the place. For example, a single
+ child is placed directly on top of the place. Two children are
+ placed next to each other, separated by the |token distance|. Three
+ children are placed in a triangle whose side lengths are
+ |token distance|; and so on up to nine tokens. If you wish to place
+ more than nice tokens on a place, you will have to write your own
+ placement code.
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[place,label=above:$p_2$] {}
+ [children are tokens]
+ child {node [token] {1}}
+ child {node [token,fill=red] {2}}
+ child {node [token,fill=red] {2}}
+ child {node [token] {1}};
+\end{tikzpicture}
+\end{codeexample}
+
+ \itemoption{token distance}|=|\meta{distance}
+ This specifies the distance between the centers of the tokens in the
+ arrangements of the option |children are tokens|.
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[place,label=above:$p_3$] {}
+ [children are tokens,token distance=1.1ex]
+ child {node [token] {}}
+ child {node [token,red] {}}
+ child {node [token,blue] {}}
+ child {node [token] {}};
+\end{tikzpicture}
+\end{codeexample}
+\end{itemize}
+
+The |children are tokens| options gives you a lot of flexibility, but
+it is a bit cumbersome to use. For this reason there are some options
+that help in standard situations. They all use |children are tokens|
+internally, so any change to, say, the |every tokens| style will
+affect how these options depict tokens.
+
+\begin{itemize}
+ \itemoption{tokens}|=|\meta{number}
+ This option is given to a |place| node, not to a |token| node. The
+ effect of this option is to add \meta{number} many child nodes to
+ the place, each having the style |token|. Thus, the following two
+ pieces of codes have the same effect:
+\begin{codeexample}[]
+\tikz
+ \node[place] {}
+ [children are tokens]
+ child {node [token] {}}
+ child {node [token] {}}
+ child {node [token] {}};
+\tikz
+ \node[place,tokens=3] {};
+\end{codeexample}
+ It is legal to say |tokens=0|, no tokens are drawn in this
+ case. This option does not handle ten or more tokens correctly. If
+ you need this many tokens, you will have to program your own code.
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \tikzstyle{every place}=[minimum size=9mm]
+
+ \foreach \x/\y/\tokennumber in {0/2/1,1/2/2,2/2/3,
+ 0/1/4,1/1/5,2/1/6,
+ 0/0/7,1/0/8,2/0/9}
+ \node [place,tokens=\tokennumber] at (\x,\y) {};
+\end{tikzpicture}
+\end{codeexample}
+ \itemoption{colored tokens}|=|\meta{color list}
+ This option, which must also be given when a place node is being
+ created, gets a list of colors as parameter. It will then add as
+ many tokens to the place are in this list, each colored with the
+ corresponding color in the list.
+\begin{codeexample}[]
+\tikz \node[place,colored tokens={black,black,red,blue}] {};
+\end{codeexample}
+ \itemoption{structured tokens}|=|\meta{token texts}
+ This option, which must again be passed to a place, gets a list
+ texts for tokens. For each text, another token will be added to the place.
+\begin{codeexample}[]
+\tikz \node[place,structured tokens={$x$,$y$,$z$}] {};
+\end{codeexample}
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \tikzstyle{every place}=[minimum size=9mm]
+
+ \foreach \x/\y/\tokennumber in {0/2/1,1/2/2,2/2/3,
+ 0/1/4,1/1/5,2/1/6,
+ 0/0/7,1/0/8,2/0/9}
+ \node [place,structured tokens={1,...,\tokennumber}] at (\x,\y) {};
+\end{tikzpicture}
+\end{codeexample}
+ If you use lots of structured tokens, consider redefining the
+ |every token| style so that the tokens are larger.
+\end{itemize}
+
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "pgfmanual-pdftex-version"
+%%% End: