diff options
Diffstat (limited to 'Master/texmf-dist/doc/latex/petri-nets')
-rw-r--r-- | Master/texmf-dist/doc/latex/petri-nets/README | 19 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/petri-nets/pndoc.pdf | bin | 0 -> 201924 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/petri-nets/pndoc.tex | 1147 |
3 files changed, 1166 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/petri-nets/README b/Master/texmf-dist/doc/latex/petri-nets/README new file mode 100644 index 00000000000..5d6d6481037 --- /dev/null +++ b/Master/texmf-dist/doc/latex/petri-nets/README @@ -0,0 +1,19 @@ +This is Petri-nets: a set of (La)TeX packages for works about Petri nets +and related models. Read pndoc.ps for installation and usage. + + petrinets (C) 1999-2000 Franck Pommereau (pommereau@univ-paris12.fr). + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or any +later version (see file COPYING). + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +USA diff --git a/Master/texmf-dist/doc/latex/petri-nets/pndoc.pdf b/Master/texmf-dist/doc/latex/petri-nets/pndoc.pdf Binary files differnew file mode 100644 index 00000000000..87cfa9642a3 --- /dev/null +++ b/Master/texmf-dist/doc/latex/petri-nets/pndoc.pdf diff --git a/Master/texmf-dist/doc/latex/petri-nets/pndoc.tex b/Master/texmf-dist/doc/latex/petri-nets/pndoc.tex new file mode 100644 index 00000000000..17692ae8674 --- /dev/null +++ b/Master/texmf-dist/doc/latex/petri-nets/pndoc.tex @@ -0,0 +1,1147 @@ +% This file is part of the Petri-nets packages. See file README for +% copyright notice. + +\documentclass[11pt]{article} + +\usepackage{pnets} + +\catcode`\|=\active +\def|{\verb|} + +%% +%% + +\begin{document} + +\title{Petri-nets packages} +\author{Franck Pommereau (pommereau@univ-paris12.fr)} +\date{Last update: \pnversion} +\maketitle + +\begin{abstract}\noindent +This paper describes Petri-nets, a set of \TeX/\LaTeX{} packages about +Petri nets and related models. One package allows to draw Petri-nets +in PostScript or PDF documents. One other defines macros related to +PBC, M-nets and \bpn{} models. A last package just gathers together +the two previous. +\end{abstract} + +\begin{small} +\tableofcontents +\end{small} + +%% +%% + +\section{Introduction} + +Petri-nets is a set of packages I use to write my papers about Petri +nets and related models (essentially: PBC, M-nets and \bpn). It +features three packages: one for drawing net, one other which defines +additional macros for textual purpose (like \bpn's logo) and a last +one for both possibilities. The first package as been designed with a +precise goal: saving me a lot of work when I have to draw nets. This +goal explains some choices I did: typesetting labels in math mode by +default, ending commands with the line, etc. I feel this results in an +intuitive and high-level way to define Petri nets, but if you have +ideas to improve this, don't hesitate to contact me. The text command +package is more classical and if it saves also a lot of typing, its +main goal is to ensure uniformity in the notations. + +All these packages may evolve and grow up and if you (or I) feel that +a feature is missing, you can send me an e-mail explaining your needs +(\TeX{} code is welcome too). Notice I don't pretend being a +specialist in Petri nets and I'm only used to work on three or four +models; so I may ignore particular things in particular models. This +may explain some missing features. + +If you wish to be notified of the updates of these packages, just send +me an email with your request at {\it pommereau@univ-paris12.fr}. + +%% +%% + +\subsection{Installation} + +The last version of the package may be downloaded at {\it http:/\slash +www.univ-paris12.fr\slash lacl\slash pommereau\slash +petrinets.tar.gz\/}, a copy should be available on {\it CTAN\slash +macros\slash generic\slash petri-nets}; the distribution contains the +following files: + +\begin{itemize} +\item |pnets.tex| is the main \TeX{} package; +\item |pnets.sty| is its \LaTeX{} counterpart; +\item |pndraw.tex| and |pndraw.sty| are the \TeX{} and \LaTeX{} + sub-packages for drawing nets; +\item |pntext.tex| and |pntext.sty| are the \TeX{} and \LaTeX{} + sub-packages for text commands; +\item |pnversion.tex| defines macro |\pnversion|; +\item |pndoc.ps| and |pndoc.tex| are the present paper and its source; +\item |COPYING| is the text of the GNU GPL; +\item |Changelog| collects all changes done to Petri-nets; +\item |README| is a short introduction text; +\item |pn2pdf| a Perl script used to produce PDF files with pdf\LaTeX. +\end{itemize} + +In order to have Petri-nets working, you need to copy files |pnets.*|, +|pndraw.*| and |pntext.*| in a place where \TeX{} will be able to find +them. This can be somewhere in the default search path (see your local +\TeX{} documentation) or in a directory included in your |TEXINPUT| +environment variable. + +Packages from Petri-nets have been developed and tested with +te\TeX-0.9 for Linux. \TeX{} packages should work with any \TeX{} +version greater than or equal to 3 (my version is 3.14159). \LaTeX{} +packages have been designed for \LaTeX$2_\varepsilon$ so you may +experiment troubles with an older version. + +In order to typeset symbols for classical sets of numbers (\setN, +\setR, etc.) Petri-nets uses fonts from AMS. So you must have package +|amsfonts| installed for \LaTeX{} or fonts |bbm| for \TeX{} (I think +these conditions are more or less equivalent). + +The drawing basis are provided by package PSTricks, my version is +PST97 but I used only macros described in the manual of version 0.93a +so I hope it should work with it. + +Using PSTricks has an important consequence: actual drawings are done +in PostScript, so, you may not see them directly from the DVI viewer +(at least not correctly); additionally, you must use a PostScript +driver in order to produce your final document (for example, dvips +works well). Support for producing PDF documents with pdf{\LaTeX} is +provided (see section~\ref{sec:pdf}). + +PSTricks conflicts with packages |graphics| and |graphicx|, Petri-nets +thus inherits this conflict. If you wish to use them together, you +should first load package |pstcol|, then Petri-nets and at last, +|graphics| or |graphicx|. The following is quoted from PSTricks' +|README|: + +\begin{quote} +To use the standard `|color|' package (which is available both for +plain \TeX{} and \LaTeX) with PSTricks, you must load the `|pstcol|' +extra package written by David Carlisle, which interface the two +packages, loading them in the right order, and overriding some small +parts of PSTricks to allow it to use the `|color|' package system for +specifying color. We {\it strongly\/} recommend that you use this way +today. + +\LaTeX{} users must also take care that the `|pstcol|' package is +required in place of the `|pstricks|' one if the `|graphics|' or +`|graphicx|' package is also loaded. +\end{quote} + +If you wish to produce PDF files using pdf{\LaTeX}, you also need to +copy the script |pn2pdf| in a directory from which it can be executed. +This script requires a working Perl with the package |Digest::MD5| +installed. Moreover, the script calls the following programs: |latex|, +|dvips| and |epstopdf| which must be installed on your system (there +should be not problem for the first two). + +You can test your installation by recompiling the present manual which +is written in \LaTeX. If it compiles successfully, this means +Petri-nets and also PSTricks have been found by \TeX. If one file is +not found, \TeX{} will complain, giving the file name. Then, running +dvips will ensure that the PostScript headers of PSTricks can be +found. + +If you successfully use Petri-nets under another configuration, feel +free to send me an e-mail at {\it pommereau@univ-paris12.fr}. You may +also send bug reports or comments, they are welcome. Of course, bug +fixes are welcome too. + +%% +%% + +\subsection{Loading the packages} + +From \TeX, you load the package with |\input pnets|, from \LaTeX, you +should put |\usepackage{pnets}| in your document preamble. Since you +may want to use only the drawing macros, you can use |\input pndraw| +or from \LaTeX: |\usepackage{pndraw}|. Similarly, in order to load +only text commands, you can use |\input pntext| or +|\usepackage{pntext}|. + +Both packages define a macro |\pnversion| which gives the date of the +last update of the package. The date is given as a triple of numbers +of the form |year-month-day|. + +%% +%% + +\subsection{Things to do, known bugs and problems} + +In order to draw additional labels at the right position, |pndraw| has +to perform some time consuming floating point computing. I plane in +the future to perform this directly in PostScript, in order to speed-up +\TeX{} compilation stage. + +Only transitions are allowed to change their size according to their +inner label, it may be nice to have this feature for the other +nodes. But it's may be a little bit difficult or quite ugly for some +nodes. + +I also could add looping arcs. This is useless for Petri nets but it +would allow one to use the packages for other purposes, like drawing +automata. + +The script |pn2pdf| does not handle documents spread over multiple +files: if a picture is created in a file which is included, it will be +ignored. + +In a late future, I'd like to make the package independent of +PSTricks, so it would be more portable (but less powerful). + +%% +%% + +\subsection{Legal stuff} + +Petri-nets is \copyright{}opyright 1999--2001 Franck Pommereau ({\it +pommereau@univ-paris12.fr\/}). + +This program is free software; you can redistribute it and/or modify +it under the terms of the {\it GNU General Public License\/} as +published by the Free Software Foundation; either version 2 of the +License, or any later version (see file |COPYING|). + +This program is distributed in the hope that it will be useful, but +{\it without any warranty\/}; without even the implied warranty of +{\it merchantability\/} or {\it fitness for a particular purpose}. +See the {\it GNU General Public License\/} for more details. + +You should have received a copy of the {\it GNU General Public +License\/} along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +USA + +%% +%% + +\subsection{Contributors} + +I am very grateful to all the persons who contributed to my work, in +particular: + +\begin{quote} +Denis Girou, +Hanna Klaudel, +Andr\'e Steenveld. +\end{quote} + +%% +%% + +\section{Text commands: package {\tt pntext}} + +This section lists the commands defined in package |pntext|, they are +all available from \TeX{} as from \LaTeX. + +\paragraph{Math sets.} +% +Command |\mathset{A}| produces symbol \mathset{A} (and of course it +works for any text). Shortcuts are defined: |\setN| for |\mathset{N}| +and similarly for |\setZ|, |\setQ|, |\setR| and |\setC|. + +\paragraph{Status of places.} +% +Commands |\iplace|, |\eplace| and |\xplace| produce respectively +characters \iplace, \eplace{} and \xplace. Command |\placestatus{n}| +typesets character \placestatus{n} (in the case you would like a new +place type). + +\paragraph{Operators for communication.} +% +Synchronization operator (\sy) is available through command |\sy|, in +math mode, this command is surrounded by additional white space as +usual for binary operators. Similar operators are |\rs| for +restriction and |\tie| for asynchronous links. Scoping is available +with commands |\lscope| and |\rscope| which produce respectively a +left and a right double bracket, you may also use |\scope{A}{N}| to +produce \scope{A}{N}. + +If you use |\lscope| (resp. |\rscope|) without the corresponding +|\rscope| (resp. |\lscope|) in the same equation or array cell, \TeX{} +will complain about some missing |\right| (resp. |\left|). In order to +close (resp. open) a scope without drawing the bracket, you may use +macro |\Rscope| (resp. |\Lscope|). + +\paragraph{Choice.} +% +Choice operator \choice{} is produced with command |\choice|. In math +mode, it behaves like any binary operator. + +\paragraph{\bpn.} +% +The logo of \bpn{} is typeset using command |\bpn|. A \bpn{} keyword +(say \bpnkw{program}) is typeset with |\bpnkw{program}| and for a +non-terminal in the syntax (say \bpnnt{scope}) you may use +|\bpnnt{scope}|. Function \mnet{} is defined as |\mnet|. + +\paragraph{Sets of values and variables.} +% +\Var{} and \Val{} are typeset using commands |\Var| and |\Val|. They +are better to use than directly the text they typeset because they +adjust their spacing in math mode: compare ``$Var$'' with ``$\Var$''. + +\paragraph{To be continued\dots} + +%% +%% + +\section{Drawing nets: package {\tt pndraw}} + +%% +%% + +\subsection{Some words about PSTricks} + +Reading PSTricks manual could be a good idea, but if you don't want, +you should know a few things about it in order to use Petri-nets +successfully. + +In PSTricks, any point is designated by two coordinates in a grid, +centered on a reference point which has coordinates $(0,0)$. +Figure~\ref{axis} shows an example. + +\begin{figure}[t] +\begin{center} +\begin{petrinet}(-1.5,-1.5)(5.5,3.5) +\pst\psgrid[subgriddiv=1,griddots=10](-1,-1)(5,3) +\pst\psline{->}(0,-1.5)(0,3.5) +\pst\psline{->}(-1.5,0)(5.5,0) +\pst\psdot(4,2) +\pst\rput[br](4,2){$(4,2)$} +\pst\psdot(0,0) +\pst\rput[br](0,0){$(0,0)$} +\pst\psdot(2.5,-.5) +\pst\rput[l](2.5,-.5){$\,(2.5,-.5)$} +\end{petrinet} +\end{center} +\caption{The Cartesian coordinate system.} +\label{axis} +\end{figure} + +The distance from the origin $(0,0)$ to a point $(x,y)$ depends on +three parameters. |units| is a global scale, if |unit=1.2cm|, $(4,2)$ +becomes an abbreviation for $(4 \times 1.2\hbox{ cm}, 2 \times +1.2\hbox{ cm})$. There's also |xunit| and |yunit| which act +respectively only on horizontal or vertical scale; for example, if +|xunit=20pt| and |yunit=1in|, $(4,2)$ stands for $(4 \times 20\hbox{ +pt}, 2 \times 1\hbox{ in})$. As you can see on these short examples, +|unit|, |xunit| and |yunit| can be affected any value which is a valid +\TeX{} |dimen| (or \LaTeX{} length). + +The default value for all these three parameters is 1~cm; to change +it, you can use the |\psset| command as in |\psset{unit=.5cm}| or in a +combined way as in |\psset{xunit=1cm,yunit=2cm}|. + +Since coordinates are formed as a comma separated couple of numbers, +you {\it must not\/} use comma as decimal separator here: |(4.5,2.3)| +is correct but |(4,5,2,3)| is not. + +Sometime you'll be asked to give an angle value as a macro +parameter. In Petri-nets, angles are measured in degrees; they can be +given as a numerical value or with a one/two letter(s) code as shown +on figure~\ref{angles}. Of course, when you specify an angle by its +numerical value, you can use any number, even negative, and not only +one of the eight values shown on figure~\ref{angles}. + +\begin{figure}[t] +\begin{center} +\begin{petrinet}[unit=2cm](-2,-1.3)(2,1.3) +\pst\pscircle(0,0){1}% +{\count0=0 % + \loop % + \ifnum\count0<360 % + \uput{.95}[\the\count0]{\the\count0}(0,0){\bf--}% + \advance\count0 by 45 % + \repeat} +\pst\uput{1.1}[0](0,0){$0=r$} +\pst\uput{1.1}[45](0,0){$45=tr/rt$} +\pst\uput{1.1}[90](0,0){$90=t$} +\pst\uput{1.1}[135](0,0){$135=tl/lt$} +\pst\uput{1.1}[180](0,0){$180=l$} +\pst\uput{1.1}[225](0,0){$225=bl/lb$} +\pst\uput{1.1}[270](0,0){$270=b$} +\pst\uput{1.1}[315](0,0){$315=br/rb$} +\end{petrinet} +\caption{Translation from angle values to letter code. $r$ is for {\it +right}, $t$ for {\it top}, $l$ for {\it left\/} and $b$ for {\it +bottom}.} +\label{angles} +\end{center} +\end{figure} + +Macro |\psset| is the way to change PSTricks default parameters, it +takes one argument which is a comma-separated list of |name=value| +pairs. For example, |pndraw.tex| itself uses: +\begin{verbatim} +\psset{linewidth=.5pt, + doublesep=.5pt, + labelsep=2pt} +\end{verbatim} + +As you can see, blank spaces before a |name| are ignored. You already +know how to change units, some additional |name|s should be useful for +Petri-nets: + +\begin{itemize} +\item |linewidth| is the default width for {\it any\/} line drawn by + PSTricks; +\item |doubleline| can be |true| or |false|, when set to |true|, any + line drawn is doubled; +\item |doublesep| is the distance between the two lines of a doubled + line; +\item |labelsep| is the distance between an arc and its label(s); +\item |linecolor| is the color used to draw lines, it can be, for + example, |black|, |darkgray|, |gray|, |lightgray|, |white|, + |red|, |blue|, |green|, |cyan|, |magenta| or |yellow|; +\item |fillcolor| is the color used to fill shapes; you can use for it + the same colors as for |linecolor|. +\end{itemize} + +PSTricks recognizes many other parameters and you should refer to its +manual for all details. + +%% +%% + +\subsection{Beginning and ending nets} + +To begin a net, just type |\beginnet| for \TeX{} or |\begin{petrinet}| +under \LaTeX; both this commands are expecting two pairs of +coordinates to give the bottom-left and upper-right extrema of the +net. + +For example, |\begin{petrinet}(-1,-2)(5,3)| starts a net which should +extend in the rectangular area, which we call the {\it bounding box}, +delimited by $(-1,-2)$ at the lower left corner and $(5,3)$ at the +upper right. These coordinates are sensible to current |unit|, |xunit| +and |yunit| values. + +The real effect of these two pairs is to fix the size of the bounding +box which carry the drawn net (it is actually a |\hbox| in horizontal +mode but who cares?). If some stuff in the net extends outside of the +declared bounding box, it will be outside and that's all. In other +words, the bounding box announced just reserves room for the net and +the drawing itself is invisible to \TeX. This allows you to lies on +the real dimension of your drawings: you can declare a bigger or a +smaller bounding box, if you want more or less white space around your +nets. + +Before to give bounding box coordinates for a net, you can give +optional parameters inside square brackets. These parameters are +interpreted as PSTricks options which are applied to the following net +and stay local to it. For example, if we have |unit=1cm| before +starting a net, command |\begin{petrinet}[unit=2cm](0,0)(1,1)| starts +a net with |unit=2cm| for its bounding box and any coordinate given +inside the net. But as the net ends, the old value |unit=1cm| is +restored. + +In order to have bounding boxes drawn in your nets: you may use +command |\showbb|, optionally followed by bracketed options. For +figure~\ref{fig:nodes example}, I added |\showbb| at the beginning of +the net. The starred version of |\showbb| fills its background and so, +command |\showbb*[fillcolor=red]| draws a filled red rectangle over +the bounding box. + +To end the drawing, you should use |\endnet| or |\end{petrinet}| (did +you guess?). All macros between these two ones are interpreted as +PSTricks or Petri-nets commands. From now, we call a {\it net\/} all +the stuff inclosed between |\begin{petrinet}| and |\end{petrinet}| (if +you use \LaTeX). One point has to be remembered: inside a net, the end +of line has a special meaning because it is used to end most +Petri-nets drawing commands. So if you want to use commands on several +lines, you have to end every line but the last with a comment +(|%|). Also notice that if you call |\psset| command inside a net, its +effect will remain local to this particular net. + +If you wish something to be done every time a net begins, you may set +token list |\everynet| to what you want to be inserted between command +|\begin{petrinet}| and your drawing commands. For example, with +|\everynet={\small}|, all the following nets will be set in small +types. + +Except for beginning and ending nets, all the macros in the following +are the same under \TeX{} or \LaTeX. + +%% +%% + +\subsection{Drawing nodes} + +The available node shapes are places, transitions, modules, sources +and stores, see figure~\ref{fig:nodes} for their looking. They are +produced from macros |\place|, |\trans|, |\module|, |\source| and +|\store| respectively. Their size is controlled with dimensions +|\placesize|, |\transsize|, |\modulesize|, |\sourcesize| and +|\storesize| respectively. For instance, |\transsize=8mm| sets the +size of transitions to |8mm|, |\nodessize{5mm}| sets the size of {\it +all\/} nodes to |5mm|. + +\begin{figure} +\begin{center} +\begin{petrinet}[xunit=2cm](-.5,-.5)(4.5,1) +\place{place}(0,0) p +\label"{t}place\strut +\trans{trans}(1,0) t +\label"{t}transition\strut +\module{module}(2,0) m +\label"{t}module\strut +\source{source}(3,0) s +\label"{t}source\strut +\store{store}(4,0) labels are ignored for stores +\label"{t}store\strut +\end{petrinet} +\end{center} +\caption{The nodes available in Petri-nets.} +\label{fig:nodes} +\end{figure} + +Adding a node is made using command ``node\{name\}$(x,y)$label'' +where: +% +\begin{itemize} +\item ``node'' is one of the above node commands; +\item ``name'' is the name of this node which must be unique for a + given net (if not, the new node overwrites the old one). This + name is case sensitive and should not contain any special + characters (as |$|, |\|, etc.); %$ +\item ``$(x,y)$'' are the coordinates of the node's center; +\item ``label'' is the text to typeset inside the node, it + extends until the end of the line. This label is silently + discarded for sources. +\end{itemize} + +For instance, the nodes in figure~\ref{fig:nodes} where set with +commands: +% +\begin{verbatim} +\place{place}(0,0) p +\trans{trans}(1,0) t +\module{module}(2,0) m +\source{source}(3,0) s +\store{store}(4,0) labels are ignored for stores +\end{verbatim} + +By default, labels are typeset in math mode, if you wish a label +typeset in text mode, add option |"| after the node command. Notice +that any space after the coordinates of the node is part of the label, +it has no importance in math mode but in text mode it leads to a label +which starts with a white space. Option |=| sets double-line mode and +so the node is drawn with doubled lines. Option |!| sets the line +width to 2pt so the node appears thicker than usually. PSTricks +options may be given between square brackets, for instance adding +|[linecolor=red,linewidth=1pt]| leads to a red node with 1pt lines. + +For transitions, an additional option |*| may be used in order to have +the boundaries of the transition fitted to the label typeset +inside. By default, the size of the nodes is fixed and the label +overlaps outside if too long, for transitions, with option |*|, the +size is just fine. + +\subsubsection{Additional labels} + +You can add additional labels to a node. Each label is typeset using +macro |\label|% +% +\footnote{For \LaTeX, this means that the well known cross-referencing +{\tt\string\label} macro is not available inside a {\tt petrinet} +environment. But outside, it works as usual.} +% +which has two arguments: the first is an angle indication and the +second, which extends until the end of the line, is the text to +typeset. The angle indication is a numeric value or a code as +explained earlier. Option |"| explained above is also available for +additional labels (and should be given just after |\label|). + +Before I give an example, let me explain a useful parameter for +typesetting label: the token list |\everylabel| is expanded before any +label is typeset. For example, command |\everylabel={\scriptstyle}| +leads to typeset all labels in script style. This works for really any +label, not only for nodes labels. If |\everylabel| is set inside a +net, its effect will remain local to this net. + +The figure~\ref{fig:nodes example} has been typeset using the +following commands: +% +\begin{verbatim} +\begin {petrinet}[xunit=2cm](-.5,-.5)(2.5,.5) +\showbb +\place{p1}(0,0) \bullet +\trans*"{t}(1,0)~transition~ + \label"{70}more text +\place!{p2}(2,0) i + \label{r} \iplace.\left\{ % I can type multi-line + {\textstyle 1, 2, 3 \atop % labels, thanks to comments. + \textstyle 4, 5, 6} \right\} +\end {petrinet} +\end{verbatim} + +\begin{figure} +\begin{center} +\begin{petrinet}[xunit=2cm](-.5,-.5)(2.5,.5) +\showbb +\place{p1}(0,0) \bullet +\trans*"{t}(1,0)~transition~ + \label"{70}more text +\place!{p2}(2,0) i + \label{r} \iplace.\left\{ % I can type multi-line + {\textstyle 1, 2, 3 \atop % labels, thanks to comments. + \textstyle 4, 5, 6} \right\} +\end{petrinet} +\caption{Nodes example. (In the PDF, the outside of the bounding box + is cropped, see section~\ref{sec:pdf}.) } +\label{fig:nodes example} +\end{center} +\end{figure} + +You may notice that the net is not well centered, it extends more on +the right (compare with the caption, which is correctly +centered). This is because I declared a bounding box of $(-.5,-.5)$ to +$(2.5,.5)$ while in fact, the label on place $i$ extends on the right, +outside the bounding box (macro |\showbb| make it visible). + +%% +%% + +\subsubsection{Free text} + +Another kind of node is unboxed text. Macro |\text| is similar to +places and transitions macros but it just typesets the given text, +centered on the given coordinates. Like for other nodes, the text is +typeset in math mode and it can be added labels around with macro +|\label| (which takes care of text's bounding box). + +This macro knows only option |"| which has the usual meaning. + +%% +%% + +\subsection{Linking nodes} + +You can draw links between two arbitrary nodes. The package won't +check if requested links are valid from Petri nets point of +view. Basically, macro |\link| has three parameters: the name of the +starting node, that of the ending node and then text to typeset on the +link (which extends until the end of the line). You can add optional +parameters, before the first node name: +% +\begin{itemize} +\item options inside square brackets are PSTricks options, as usual; +\item a real number, between 0 and 1, enclosed in angle brackets ({\it + e.g.}, |<.3>|) can be used to specify the position of the label, + between starting and ending nodes. Value 0 stands for ``on + starting node'' while 1 means ``on ending node''; the default + value is $.5$ ({\it i.e.}, at the middle of the link); +\item characters |^|, |_| or |*| may be used to specify the side of + the link where the label is typeset. For an link which extends + from the left to the right, |^| means ``above'', |_| means + ``below'' and |*| is for ``over''. If nothing is specified, the + label is placed above the link; +\item options |"|, |=| and |!| have their usual meanings; +\item arrowheads and such can be specified between two |/| signs. + The available values are shown in figure~\ref{fig:arrows}, + default is no arrow. +\end{itemize} + +\begin{figure} +\begin{center} +\begin{petrinet}[yunit=6mm](-.6,-.3)(8,15.3) +\pst\catcode`\|=12 +\text{caption}(3,15)\rlap{none (default)} + \text"{t}(0,15){\tt -} + \text{l}(1,15) + \text{r}(2,15) + \link/-/{l}{r} +\text{caption}(3,14)\rlap{arrowheads} + \text"{t}(0,14){\tt <->} + \text{l}(1,14) + \text{r}(2,14) + \link/<->/{l}{r} +\text{caption}(3,13)\rlap{reverse arrowheads} + \text"{t}(0,13){\tt >-<} + \text{l}(1,13) + \text{r}(2,13) + \link/>-</{l}{r} +\text{caption}(3,12)\rlap{double arrowheads} + \text"{t}(0,12){\tt <{}<->{}>} + \text{l}(1,12) + \text{r}(2,12) + \link/<<->>/{l}{r} +\text{caption}(3,11)\rlap{reverse double arrowheads} + \text"{t}(0,11){\tt >{}>-<{}<} + \text{l}(1,11) + \text{r}(2,11) + \link/>>-<</{l}{r} +\text{caption}(3,10)\rlap{T-bar flush to endpoints} + \text"{t}(0,10){\tt |-|} + \text{l}(1,10) + \text{r}(2,10) + \link/|-|/{l}{r} +\text{caption}(3,9)\rlap{T-bar centred on endpoints} + \text"{t}(0,9){\tt |*-|*} + \text{l}(1,9) + \text{r}(2,9) + \link/|*-|*/{l}{r} +\text{caption}(3,8)\rlap{square brackets} + \text"{t}(0,8){\tt [-]} + \text{l}(1,8) + \text{r}(2,8) + \link/[-]/{l}{r} +\text{caption}(3,7)\rlap{rounded brackets} + \text"{t}(0,7){\tt (-)} + \text{l}(1,7) + \text{r}(2,7) + \link/(-)/{l}{r} +\text{caption}(3,6)\rlap{circles centred on endpoints} + \text"{t}(0,6){\tt o-o} + \text{l}(1,6) + \text{r}(2,6) + \link/o-o/{l}{r} +\text{caption}(3,5)\rlap{circles flush to endpoints} + \text"{t}(0,5){\tt oo-oo} + \text{l}(1,5) + \text{r}(2,5) + \link/oo-oo/{l}{r} +\text{caption}(3,4)\rlap{disks centred on endpoints} + \text"{t}(0,4){\tt *-*} + \text{l}(1,4) + \text{r}(2,4) + \link/*-*/{l}{r} +\text{caption}(3,3)\rlap{disks flush to endpoints} + \text"{t}(0,3){\tt **-**} + \text{l}(1,3) + \text{r}(2,3) + \link/**-**/{l}{r} +\text{caption}(3,2)\rlap{extended rounded ends} + \text"{t}(0,2){\tt c-c} + \text{l}(1,2) + \text{r}(2,2) + \link/c-c/{l}{r} +\text{caption}(3,1)\rlap{flush rounded ends} + \text"{t}(0,1){\tt cc-cc} + \text{l}(1,1) + \text{r}(2,1) + \link/cc-cc/{l}{r} +\text{caption}(3,0)\rlap{extended square ends} + \text"{t}(0,0){\tt C-C} + \text{l}(1,0) + \text{r}(2,0) + \link/C-C/{l}{r} +\end{petrinet} +\end{center} +\caption{The different types of links termination. They can be freely +mixed.} +\label{fig:arrows} +\end{figure} + +The order in which you use these options has no importance, provided +all options are given before the starting node. Additionally, if you +use contradicting options, the last used overrides any previous. For +instance, the two following lines are equivalent: + +|\link_[linecolor=gray,linewidth=5pt]*<.2>^[linewidth=1pt]| + +|\link^<.2>[linecolor=gray,linewidth=1pt]|. + +To draw curved links, you should use PSTricks' |arcangle| option which +is an angle in degrees, measuring the deviation from a straight line +between nodes, at the start and at the end of the link. Try, it's +easy. + +To change the arrowhead appearance, you must change PSTricks' +parameters |arrowsize|, |arrowlength| and |arrowinset|. Petri-nets +uses the following: +% +\begin{verbatim} +\psset{arrowsize=3pt 3, + arrowlength=1.4, + arrowinset=.4} +\end{verbatim} +% +I wont explain how it works, just try, it's easy too. (Or read +PSTricks manual, all details are given.) + +%% +%% + +\subsubsection{Additional labels} + +Like for nodes, links can be added more labels. As usual, this is made +with macro |\label|, but here, its syntax is like for macro |\link|, +except you must not specify starting and ending nodes (but links +options are available). + +%% +%% + +\subsubsection{Arcs} + +Since links are almost always draw with a single arrowhead at the end +(and then called {\it arcs\/}), a shortcut is provided: macro |\arc| +may be used instead of |\link/->/|. + +%% +%% + +\section{Tips, tricks and troubleshooting} + +\paragraph{Error messages.} +% +Sometimes, you'll get an error message such as: + +\begin{verbatim} +! Argument of \net:place:draw has an extra }. +<inserted text> + \par +l.785 \place{i3}(2,0) i_3 + +? +\end{verbatim} + +This usually means that the error was just before the line for which +\TeX{} complains (here line 785 which is correct). And usually, this +error is an omission of one of the arguments of a drawing macro. + +Another kind of message occurs quite often: + +\begin{verbatim} +PSTricks error. See User's Guide for further information. + Type H <return> for immediate help. +! Graphics parameter `rcangle' not defined.. +\@pstrickserr ... immediate help.}\errmessage {#1} + \endgroup +l.794 \arc[rcangle=30] + {ab2}{i3} \bullet +? +\end{verbatim} + +This is because on line 794, you misspelled word ``arcangle'', giving +``rcangle'' instead. This error is detected by PSTricks since +bracketed arguments are sent verbatim to its macros. + +In general, since package |pndraw| uses a lot of tricks in order to +read arguments of commands, you should not trust too much error +messages: just look at the line indicated in the message and seek for +a mistake in the lines before this one. (Actually, this advice can be +used for almost any error message issued by \LaTeX\dots) + +\paragraph{Drawing commands on multiple lines.} +% +Inside a net, label arguments are delimited by the end of the line. To +type an argument which extends on more than one line, you should end +each line but the last with a comment~|%|. + +\paragraph{Empty node.} +% +If you want to draw ``floating'' arcs, {\it i.e.}, arcs wich are not +attached to a place or a transition, you just have to anchor them on +empty texts: the following net is depicted in figure~\ref{empty text}. + +\begin{verbatim} +\begin {petrinet}(0,0)(2,0) +\text{from}(0,0) +\text{to}(2,0) +\arc{from}{to} +\end {petrinet} +\end{verbatim} + +\begin{figure}[t] +\begin{center} +\begin{petrinet}(-.2,-.2)(2.2,.2) +\text{from}(0,0) +\text{to}(2,0) +\arc{from}{to} +\end{petrinet} +\end{center} +\caption{An arc anchored on empty texts} +\label{empty text} +\end{figure} + +\paragraph{Text mode labels.} +% +Take care of the interactions between |\everylabel| and option |"| +which asks a label to be typset in text mode. For example, setting +|\everylabel{\scriptstyle}| leads to an error every time a text mode +label is typeset because |\scriptstyle| is a math command. So you +should prefer the long but safe form: +|\everylabel{\ifmmode\scriptstyle\fi}| which switches to script-style +only if math mode is set. + +\paragraph{Labels at the wrong position.} +% +If the additional labels you add to a node appear centered on it +instead of outside, this may come from the way you visualize your +document. DVI viewers usually do not interpret correctly all of the +PostScript commands used by PSTricks. Trying a PostScript viewer +(GhostView is certainly a good choice) may solve your problem. + +\paragraph{To be continued\dots} + +%% +%% + +\section{Producing PDF documents} +\label{sec:pdf} + +The LaTeX version of |pndraw| provides support for pdf{\LaTeX} through +the Perl script pn2pdf included in the archive. The usage is quite +automated, even completely if you run |pdflatex| with the option +|--shell|. If you don't want to enable this option, run first +``|pn2pdf document|'' (assuming your file is called |document.tex|) +and then run |pdflatex|. Using option |--shell| simply allows +|pdflatex| to run |pn2pdf| for you. + +\relax|pn2pdf| produces a file named |document-fig|$i$|.pdf| for each +environment |petrinet| found in |document.tex|, where $i$ is 1 for the +first found, 2 for the second one, and so on. These files are +automatically included during the compilation. A file |document.sum| +is also produced in order to remember some information which is used +to avoid recreating |-fig|$i$|.pdf| files if not necessary. + +There is several important things you should notice: +% +\begin{enumerate} +\item Everything outside of the bounding box of a Petri nets is + cropped during the creation of the PDF figure. So, take care to + check how your picture is rendered (using |\showbb| for + instance). +\item If you want to use PSTricks commands, you should prefix them + with |\pst| so they will be properly handled by pdf\LaTeX. If + you don't use |\pst|, a helpless error message will be issued. +\item Since each picture is rendered separately, all what you define + in the document has no effect on the figure (except for the + material given before |\begin{document}| which is always used). + You must consider that each picture is a separate document. +\item Only one pass of {\LaTeX} is made on each figure. If you need to + several passes, use |pn2pdf| with options |-f| and |-k|. +\item The script |pn2pdf| will generate a picture for each |petrinet| + environment found in the document, even if it is included, for + instance in a |verbatim| environment. This is why, in this + document, examples are typeset |\begin {petrinet}| $\cdots$ + |\end {petrinet}| in order to avoid the creation of a picture. +\item Notice that {\LaTeX} and {pdf\LaTeX} do not produce identical + rendering of the same document. However, Petri-nets pictures + should be the same since they are always made by \LaTeX. +\end{enumerate} + +To conclude, here is a summary of the options accepted by |pn2pdf| if +you have to run it yourself: +% +\begin{description} +\item{{\tt -k}, {\tt --keep}} don't delete the temporary files. +\item{{\tt -c}, {\tt --clean}} delete these files. +\item{{\tt -f}, {\tt --force}} recreate pictures even if their source +did not change. +\item{{\tt -h}, {\tt --help}} print this help. +\end{description} +% +You may produce pictures for several documents, in this case, each +option applies to all the document given subsequently (in this case, +|-c| may be useful to override the use of |-k|). + +%% +%% + +\newpage +\appendix + +\section{Reference pages} + +\subsection{Text commands: package {\tt pntext}} + +\begin{center} +\begin{tabular}{l@{\qquad}l} +|\bpn| & \bpn \\ +|\bpnkw{key-word}| & \bpnkw{key-word} \\ +|\bpnnt{non-terminal}| & \bpnnt{non-terminal} \\ +|\choice| & \choice \\ +|\eplace| & \eplace \\ +|\iplace| & \iplace \\ +|\lscope| & $\lscope\Rscope$ \\ +|\Lscope| & invisible version of |\lscope| \\ +|\mathset{A}| & \mathset{A} \\ +|\mnet| & \mnet \\ +|\placestatus{d}| & \placestatus{d} \\ +|\pnversion| & \pnversion{} (current version) \\ +|\rs| & \rs \\ +|\rscope| & $\Lscope\rscope$ \\ +|\Rscope| & invisible version of |\rscope| \\ +|\scope{a}{N}| & $\scope{a}{N}$ \\ +|\setC| & \setC \\ +|\setN| & \setN \\ +|\setQ| & \setQ \\ +|\setR| & \setR \\ +|\setZ| & \setZ \\ +|\sy| & \sy \\ +|\tie| & \tie \\ +|\Val| & \Val \\ +|\Var| & \Var \\ +|\xplace| & \xplace \\ +\end{tabular} +\end{center} + +\subsection{Drawing command: package {\tt pndraw}} + +\def\n{$\hookleftarrow$} +\def\<{$\displaystyle\big\langle$} +\def\>{$\displaystyle\big\rangle$} +\newenvironment{options}{\\[5pt]\begin{tabular}{@{\qquad}ll}}{\end{tabular}} + +The parts placed between \<angle brackets\> are the optional ones, the +others are mandatory. Symbol \n{} denotes the end of the line. + +\begin{itemize} +\item |\arc|\<|^_*"=![|options|]<|pos|>|\>|{|node1|}{|node2|}|\<label\>\n\\ +Draws a labelled arc between node1 and node2. +\begin{options} +|^| & label above the arc \\ +|_| & label below the arc \\ +|*| & label on the arc \\ +|"| & label in text mode \\ +|=| & double line \\ +|!| & thick line \\ +|[|options|]| & PSTricks options \\ +|<|pos|>| & position of the label ($0 \leq {}$pos${}\leq 1$) \\ +\end{options} +% +\item |\beginnet|\<|[|options|]|\>$(x_1,y_1)(x_2,y_2)$\n\\ + |\begin{petrinet}|\<|[|options|]|\>$(x_1,y_1)(x_2,y_2)$\n\\ +Begins a net whose bounding box is defined by $(x_1,y_1)$ as +bottom left corner and $(x_2,y_2)$ at top right corner. +\begin{options} +|[|options|]| & PSTricks options \\ +\end{options} +% +\item |\endnet|\\ + |\end{petrinet}|\\ +Ends a net. +% +\item |\everylabel={|\<tokens\>|}|\\ +Expands tokens each time a label is typeset. +% +\item |\everynet={|\<tokens\>|}|\\ +Expands tokens each time a net is started. +% +\item |\label|\<|"{|pos|}|label\>\n\\ +Draws an additional node label. +\begin{options} +|"| & label in text mode \\ +|{|pos|}| & position of the label, an angle (in degrees) \\ + & or a corner code (t,l,b,r,tl,tr,bl,br) \\ +\end{options} +% +\item |\link|\<|^_*"=![|options|]<|pos|>/|arrow|/|\>|{|node1|}{|node2|}|\<label\>\n\\ +Draws a labelled link between node1 and node2. +\begin{options} +|^| & label above the arc \\ +|_| & label below the arc \\ +|*| & label on the arc \\ +|"| & label in text mode \\ +|=| & double line \\ +|!| & thick line \\ +|[|options|]| & PSTricks options \\ +|<|pos|>| & position of the label ($0 \leq {}$pos${}\leq 1$) \\ +|/|arrow|/| & arrows specifications \\ +\end{options} +% +\item |\module|\<|"=![|options|]|\>|{|name|}|$(x,y)$\<label\>\n\\ +Draws a labelled module centered on $(x,y)$. +\begin{options} +|"| & label in text mode \\ +|=| & double line \\ +|!| & thick line \\ +|[|options|]| & PSTricks options \\ +\end{options} +% +\item |\modulesize=|dimen\\ +Sets the size of the modules. +% +\item |\nodessize{|dimen|}|\\ +Sets the size of all nodes. +% +\item |\place|\<|"=![|options|]|\>|{|name|}|$(x,y)$\<label\>\n\\ +Draws a labelled place centered on $(x,y)$. +\begin{options} +|"| & label in text mode \\ +|=| & double line \\ +|!| & thick line \\ +|[|options|]| & PSTricks options \\ +\end{options} +% +\item |\placesize=|dimen\\ +Sets the size of the places. +% +\item |\psset{|name|=|value\<|,...|\>|}|\\ +Sets PSTricks options. +\begin{options} +|arcangle=|angle & angle at the ends of links \\ +|arrowinset=|real & size of arrowheads insets \\ +|arrowlength=|real & length of arrowheads \\ +|arrowsize=|dim integer & size of arrowheads \\ +|doubleline=|boolean & double lines on/off \\ +|doublesep=|dim & distance between double lines \\ +|fillcolor=|color & background color \\ +|labelsep=|dim & distance between labels and nodes \\ +|linecolor=|color & lines color \\ +|linewidth=|dim & lines thickness \\ +|unit=|dim & global scale \\ +|xunit=|dim & horizontal scale \\ +|yunit=|dim & vertical scale\\ +\end{options} +% +\item |\showbb|\<|*[|options|]|\>\n\\ +Draws the bounding box of a net. +\begin{options} +|*| & background filled \\ +|[|options|]| & PSTricks options \\ +\end{options} +% +\item |\source|\<|"=![|options|]|\>|{|name|}|$(x,y)$\<label\>\n\\ +Draws a labelled source centered on $(x,y)$. +\begin{options} +|"| & label in text mode \\ +|=| & double line \\ +|!| & thick line \\ +|[|options|]| & PSTricks options \\ +\end{options} +% +\item |\sourcesize=|dimen\\ +Sets the size of sources. +% +\item |\store|\<|"=![|options|]|\>|{|name|}|$(x,y)$\<label\>\n\\ +Draws a labelled store centered on $(x,y)$. +\begin{options} +|"| & label in text mode \\ +|=| & double line \\ +|!| & thick line \\ +|[|options|]| & PSTricks options \\ +\end{options} +% +\item |\storesize=|dimen\\ +Sets the size of stores. +% +\item |\text|\<|"|\>|{|name|}|$(x,y)$\<label\>\n\\ +Draws an unboxed labelled node centered on $(x,y)$. +\begin{options} +|"| & label in text mode \\ +\end{options} +% +\item |\trans|\<|*"=![|options|]|\>|{|name|}|$(x,y)$\<label\>\n\\ +Draws a labelled transition centered on $(x,y)$. +\begin{options} +|*| & automatic size \\ +|"| & label in text mode \\ +|=| & double line \\ +|!| & thick line \\ +|[|options|]| & PSTricks options \\ +\end{options} +% +\item |\transsize=|dimen\\ +Sets the size of transitions. +\end{itemize} + +\end{document} |