From 2c266513a7d7727e1adbcbfca59d5e7dbfdfd2e0 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sun, 25 Sep 2011 22:22:25 +0000 Subject: petri-nets non-update to generic git-svn-id: svn://tug.org/texlive/trunk@24088 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/tex/generic/petri-nets/pndraw.sty | 152 +++++ .../texmf-dist/tex/generic/petri-nets/pndraw.tex | 623 +++++++++++++++++++++ Master/texmf-dist/tex/generic/petri-nets/pnets.sty | 7 + Master/texmf-dist/tex/generic/petri-nets/pnets.tex | 5 + .../texmf-dist/tex/generic/petri-nets/pntext.sty | 70 +++ .../texmf-dist/tex/generic/petri-nets/pntext.tex | 75 +++ .../tex/generic/petri-nets/pnversion.tex | 1 + 7 files changed, 933 insertions(+) create mode 100644 Master/texmf-dist/tex/generic/petri-nets/pndraw.sty create mode 100644 Master/texmf-dist/tex/generic/petri-nets/pndraw.tex create mode 100644 Master/texmf-dist/tex/generic/petri-nets/pnets.sty create mode 100644 Master/texmf-dist/tex/generic/petri-nets/pnets.tex create mode 100644 Master/texmf-dist/tex/generic/petri-nets/pntext.sty create mode 100644 Master/texmf-dist/tex/generic/petri-nets/pntext.tex create mode 100644 Master/texmf-dist/tex/generic/petri-nets/pnversion.tex (limited to 'Master/texmf-dist/tex/generic') diff --git a/Master/texmf-dist/tex/generic/petri-nets/pndraw.sty b/Master/texmf-dist/tex/generic/petri-nets/pndraw.sty new file mode 100644 index 00000000000..5d9c82585fa --- /dev/null +++ b/Master/texmf-dist/tex/generic/petri-nets/pndraw.sty @@ -0,0 +1,152 @@ +% This file is part of the Petri-nets packages. See file README for +% copyright notice. + +\ProvidesPackage{pndraw} + +\newenvironment{petrinet}{\beginnet}{\endnet} + +%% +%% running standard LaTeX +%% + +\usepackage{ifpdf} + +\ifpdf + \relax +\else + \input pndraw.tex + \endinput +\fi + +%% +%% running pdfLaTeX +%% + +\message{ ** Petri-nets / draw commands ** } + +\input pnversion + +\usepackage{graphicx} + +\newcounter{pncount} +\setcounter{pncount}{1} + +\catcode`\:=11 + +%% +%% check for write18 +%% + +\begingroup + \edef\test{\jobname.\the\year\the\month\the\day\the\time} + \immediate\write18{pn2pdf --test \test} + \IfFileExists\test{ + \global\def\pnpdf:run ##1{\immediate\write18{pn2pdf ##1}} + \pnpdf:run{--delete \test} + }{ + \newwrite\pnpdf:batch + \immediate\openout\pnpdf:batch=\jobname.bpn + \global\def\pnpdf:run ##1{\immediate\write\pnpdf:batch{pn2pdf ##1}} + \AtEndDocument{\pnpdf:run{--delete \jobname.bpn}} + } +\endgroup + +\let\pnpdf:warn=\relax + +\newwrite\pnpdf:stream + +\def\pnpdf:open:always{% + \edef\pnpdf:file{\jobname-fig\thepncount.pn}% + \immediate\openout\pnpdf:stream=\pnpdf:file + \global\let\pnpdf:open=\relax} +\global\let\pnpdf:open=\pnpdf:open:always + +\def\pnpdf:write #1{\pnpdf:open + \immediate\write\pnpdf:stream{#1}} + +\begingroup + \catcode`|=0 + \catcode`[=1 + \catcode`]=2 + \catcode`\{=12 + \catcode`\}=12 + \catcode`\\=12 + |long|gdef|pnpdf:read #1\end{petrinet}[|pnpdf:write[#1]|end[petrinet]] +|endgroup + +{\catcode`\^^M=\active % +\gdef\pnpdf:catcodes{\bgroup % + \catcode`\{=12 \catcode`\}=12 \catcode`\$=12 % + \catcode`\&=12 \catcode`\#=12 \catcode`\^=12 % + \catcode`\%=12 \catcode`\ =12 \catcode`\_=12 % + \catcode`\~=12 \catcode`\\=12 \catcode`\^^M=\active \def^^M{^^J}}} + +{\catcode`\%=12 \catcode`\!=14 \catcode`\^^M=\active ! + \gdef\beginnet{\pnpdf:write{\string\begin{petrinet}\string%}! + \catcode`\^^M=\active\let^^M=\relax ! + \pnpdf:catcodes\pnpdf:read}} + +\def\show:net:always{% + \IfFileExists{\jobname-fig\thepncount.pdf}% + {\includegraphics{\jobname-fig\thepncount.pdf}}% + {\message{}% + \global\def\pnpdf:warn{\typeout{^^J*** Run "pn2pdf + --batch \jobname.bpn" in order to build the + figures^^J}}}} + +\def\endnet{\egroup + \pnpdf:write{\string\end{petrinet}}% + \immediate\closeout\pnpdf:stream + \global\let\pnpdf:open=\pnpdf:open:always + \pnpdf:run{\jobname-fig\thepncount.pn}% + \show:net\addtocounter{pncount}{1}} + +\let\show:net=\show:net:always +\def\savenet{\global\def\show:net{\global\let\show:net\show:net:always}} + +\def\shownet{\addtocounter{pncount}{-1}\show:net:always + \addtocounter{pncount}{1}} + +\def\everynet{\begingroup\afterassignment\endgroup\toks0} +\def\everylabel{\begingroup\afterassignment\endgroup\toks0} +\def\psset #1{} +\def\nodessize #1{} +\def\placesize{\begingroup\afterassignment\endgroup\dimen0} +\def\transsize{\begingroup\afterassignment\endgroup\dimen0} +\def\storesize{\begingroup\afterassignment\endgroup\dimen0} +\def\modulesize{\begingroup\afterassignment\endgroup\dimen0} +\def\sourcesize{\begingroup\afterassignment\endgroup\dimen0} + +\AtBeginDocument{ + \def\everynet{\bgroup\afterassignment\everynet:next\toks0} + \def\everynet:next{\pnpdf:write{\string\everynet{\expandafter + \noexpand\the\toks0}}\egroup} + \def\everylabel{\bgroup\afterassignment\everylabel:next\toks0} + \def\everylabel:next{\pnpdf:write{\string\everylabel{\expandafter + \noexpand\the\toks0}}\egroup} + \def\psset{\bgroup\afterassignment\psset:next\toks0} + \def\psset:next{\pnpdf:write{\string\psset{\expandafter + \noexpand\the\toks0}}\egroup} + \def\nodessize{\bgroup\afterassignment\nodessize:next\toks0} + \def\nodessize:next{\pnpdf:write{\string\nodessize{\expandafter + \noexpand\the\toks0}}\egroup} + \def\placesize{\bgroup\afterassignment\placesize:next\dim0} + \def\placesize:next{\edef\command{{\string\placesize=\the\dim0}}% + \expandafter\pnpdf:write\command} + \def\transsize{\bgroup\afterassignment\transsize:next\dim0} + \def\transsize:next{\edef\command{{\string\transsize=\the\dim0}}% + \expandafter\pnpdf:write\command} + \def\storesize{\bgroup\afterassignment\storesize:next\dim0} + \def\storesize:next{\edef\command{{\string\storesize=\the\dim0}}% + \expandafter\pnpdf:write\command} + \def\modulesize{\bgroup\afterassignment\modulesize:next\dim0} + \def\modulesize:next{\edef\command{{\string\modulesize=\the\dim0}}% + \expandafter\pnpdf:write\command} + \def\sourcesize{\bgroup\afterassignment\sourcesize:next\dim0} + \def\sourcesize:next{\edef\command{{\string\sourcesize=\the\dim0}}% + \expandafter\pnpdf:write\command}} + +\AtEndDocument{\pnpdf:run{--delete \jobname.pre} + \pnpdf:warn} + +\catcode`\:=12 diff --git a/Master/texmf-dist/tex/generic/petri-nets/pndraw.tex b/Master/texmf-dist/tex/generic/petri-nets/pndraw.tex new file mode 100644 index 00000000000..9433a4b7190 --- /dev/null +++ b/Master/texmf-dist/tex/generic/petri-nets/pndraw.tex @@ -0,0 +1,623 @@ +% This file is part of the Petri-nets packages. See file README for +% copyright notice. + +\message{ ** Petri-nets / draw commands ** } +\input pnversion + +\input pstricks +\input pst-node + +\let\pst=\relax + +\catcode`\:=11 + +%% +%% option parsing facilities +%% + +\def\expandonce{\expandafter\noexpand} + +\outer\def\newopt #1#2{% group/character (+ params and body) + \expandafter\ifx\csname setcode:#1\endcsname\relax + \expandafter\edef\csname setcode:#1\endcsname{% + \noexpand\catcode`\string#2=12 \relax}% + \expandafter\edef\csname resetcode:#1\endcsname{% + \noexpand\catcode`\string#2=\the\catcode`#2 \relax}% + \else + \expandafter\edef\csname setcode:#1\endcsname{% + \noexpand\catcode`\string#2=12 \relax + \expandafter\expandonce\csname setcode:#1\endcsname}% + \expandafter\edef\csname resetcode:#1\endcsname{% + \noexpand\catcode`\string#2=\the\catcode`#2 \relax + \expandafter\expandonce\csname resetcode:#1\endcsname}% + \fi + \edef\newopt:name{opt:#1\string#2}% + \expandafter\expandafter\def\csname\newopt:name\endcsname} + +\def\getopt #1#2{% group/macro to run after getting options + \def\getopt:end{\csname resetcode:#1\endcsname #2}% + \begingroup + \edef\getopt:group{opt:#1}% + \csname setcode:#1\endcsname + \nextopt} + +\let\endopt=\endgroup + +\def\nextopt{\begingroup + \futurelet\next\getopt:next} + +\def\getopt:next{\ifcat\next\string*% + \aftergroup\getopt:run + \else + \aftergroup\getopt:end + \fi \endgroup} + +\def\getopt:run #1{\edef\getopt:name{\getopt:group\string#1}% + \expandafter\csname\getopt:name\endcsname} + +%% +%% misc setup +%% + +% pstrick tunning +\psset{unit=1cm, + xunit=1cm, + yunit=1cm, + linewidth=.5pt, + doublesep=.5pt, + dimen=iner, + labelsep=2pt, + arcangle=0, + arrowlength=1.4, + arrowinset=0, + arrowsize=2pt 2} + +% nodes sizes +\newdimen\placesize +\newdimen\transsize +\newdimen\storesize +\newdimen\modulesize +\newdimen\sourcesize + +\def\nodessize #1{% + \placesize = #1 + \transsize = #1 + \storesize = #1 + \modulesize = #1 + \sourcesize = #1 + \relax} + +\nodessize{5mm} + +% something to run before when a new net +\newtoks\everynet \everynet={} + +% something to run before typesetting labels +\newtoks\everylabel \everylabel={} + +%% +%% begin/end a net +%% + +\newopt{net}[#1]{\psset{#1}\nextopt} +\newopt{net}(#1)(#2){\pspicture(#1)(#2)% + \def\net:bottom:left{#1}\def\net:top:right{#2}% + % adds white points in order to setup bounding box for a possible + % `dvips -E' + \rput(#1){{\white\vrule width 1sp height 1sp depth 0sp}}% + \rput(#2){{\white\vrule width 1sp height 1sp depth 0sp}}% + \the\everynet} + +{\catcode`\^^M=\active \let^^M=\relax % +\global\def\beginnet{\leavevmode\hbox\bgroup% + \let\place=\net:place% + \let\trans=\net:trans% + \let\store=\net:store% + \let\module=\net:module% + \let\source=\net:source% + \let\text=\net:text% + \let\link=\net:link% + \let\arc=\net:arc% + \let\label=\net:label% + \let\showbb=\net:showbb% + \def\net:s{empty}% + \catcode`\^^M=\active\let^^M=\relax% + \getopt{net}\relax}} + +\let\begin:net=\beginnet + +\def\endnet{\endpspicture\endopt\egroup + \global\let\beginnet=\begin:net} + +\newbox\net:box + +\def\save:net\leavevmode{\global\setbox\net:box} + +\def\savenet{\def\beginnet{\expandafter\save:net\begin:net}} + +\def\shownet{{\setbox0\copy\net:box\unhbox0}} + +%% +%% globally used for labels +%% + +\def\net:math #1\net:endmath{$#1$} + +%% +%% draws net bounding box +%% + +{\catcode`\^^M=\active \let^^M=\relax % +\global\def\net:showbb #1^^M{% options (if any) + {\psframe#1(\net:bottom:left)(\net:top:right)}}} + +%% +%% places +%% + +\newopt{net:place}"{\let\net:math\relax \let\net:endmath\relax \nextopt} +\newopt{net:place}={\psset{doubleline=true}\nextopt} +\newopt{net:place}!{\psset{linewidth=2pt,linecolor=black}\nextopt} +\newopt{net:place}[#1]{\psset{#1}\nextopt} + +\def\net:place{\getopt{net:place}\net:place:draw} + +{\catcode`\^^M=\active \let^^M=\relax % +\global\def\net:place:draw #1(#2,#3)#4^^M{% options/name/x/y/label + \global\edef\net:x{#2}% + \global\edef\net:y{#3}% + \global\def\net:s{circle}% + \cnode(#2,#3){.5\placesize}{#1}% + \rput(#2,#3){\hbox{\net:math\the\everylabel #4\net:endmath}}\endopt}} + +%% +%% source +%% + +\def\net:source{\getopt{net:trans}\net:source:draw} + +{\catcode`\^^M=\active \let^^M=\relax % +\global\def\net:source:draw #1(#2,#3)#4^^M{% name/x/y/label + \placesize=\sourcesize \transsize=\sourcesize% + \place[dimen=outer]#1(#2,#3) + \trans #1(#2,#3)#4 + \endopt}} + +%% +%% transitions +%% + +\newopt{net:trans}"{\let\net:math\relax \let\net:endmath\relax \nextopt} +\newopt{net:trans}={\psset{doubleline=true}\nextopt} +\newopt{net:trans}!{\psset{linewidth=2pt,linecolor=black}\nextopt} +\newopt{net:trans}*{\let\net:trans:draw\net:trans:draw:rectangle + \nextopt} +\newopt{net:trans}[#1]{\psset{#1}\nextopt} + +\def\net:trans{\let\net:trans:draw\net:trans:draw:square + \getopt{net:trans}\net:trans:draw} + +{\catcode`\^^M=\active \let^^M=\relax % +\global\def\net:trans:draw:square #1(#2,#3)#4^^M{% name/x/y/label + \global\edef\net:x{#2}\global\edef\net:y{#3}\global\def\net:s{square}% + \rput(#2,#3){\rnode{#1}{\psframebox[framesep=-\pslinewidth]{% + \hbox to \transsize{\hss\vbox to \transsize{\vss}}}}}% + \rput(#2,#3){\hbox{\net:math\the\everylabel #4\net:endmath}}\endopt}} + +{\catcode`\^^M=\active \let^^M=\relax % +\global\def\net:trans:draw:rectangle #1(#2,#3)#4^^M{% options/name/x/y/label + \global\edef\net:x{#2}\global\edef\net:y{#3}\global\def\net:s{rectangle}% + {\setbox0=\hbox{\net:math\the\everylabel #4\net:endmath}\dimen0=\ht0 % + \advance\dimen0 by \dp0 \advance\dimen0 by 4pt % + \global\edef\net:h{\the\dimen0}\dimen0=\wd0 % + \advance\dimen0 by 4pt \global\edef\net:w{\the\dimen0}}% + \rput(#2,#3){\rnode{#1}{\psframebox[framesep=2pt]{% + \hbox{\net:math\the\everylabel #4\net:endmath}}}}\endopt}} + +%% +%% module +%% + +\def\net:module{\getopt{net:trans}\net:module:draw} + +{\catcode`\^^M=\active \let^^M=\relax % +\global\def\net:module:draw #1(#2,#3)#4^^M{% name/x/y/label + \psclip{\rput(#2,#3){\rnode{#1}{\psframebox[framesep=-\pslinewidth]{% + \hbox to \modulesize{\hss\vbox to \modulesize{\vss}}}}}}% + \pscustom{\moveto(#2,#3)% + \rlineto(-.2\modulesize,-.2\modulesize)% + \movepath(.5\modulesize,-.3\modulesize)}% + \endpsclip% + \transsize=\modulesize\trans #1(#2,#3)#4 + \endopt}} + +%% +%% store +%% + +\def\net:store{\getopt{net:place}\net:store:draw} + +{\catcode`\^^M=\active \let^^M=\relax % +\global\def\net:store:draw #1(#2,#3)#4^^M{% name/x/y/label + \placesize=\storesize% + \psclip{\cnode(#2,#3){.5\placesize}{ }}% + \pscustom{\moveto(#2,#3)% + \rlineto(.5\storesize,.5\storesize)% + \rlineto(-\storesize,-\storesize)% + \stroke\moveto(#2,#3)% + \rlineto(.5\storesize,-.5\storesize)% + \rlineto(-\storesize,\storesize)}% + \endpsclip% + \place #1(#2,#3) + \endopt}} + +%% +%% free text +%% + +\newopt{net:text}"{\let\net:math\relax \let\net:endmath\relax \nextopt} +\newopt{net:text}[#1]{\psset{#1}\nextopt} + +\def\net:text{\getopt{net:text}\net:text:draw} + +{\catcode`\^^M=\active \let^^M=\relax % +\global\def\net:text:draw #1(#2,#3)#4^^M{% options/name/x/y/label + \global\edef\net:x{#2}\global\edef\net:y{#3}% + \global\def\net:s{rectangle}% + {\setbox0=\hbox{\net:math\the\everylabel #4\net:endmath}\dimen0=\ht0 % + \advance\dimen0 by \dp0 \advance\dimen0 by 4pt % + \global\edef\net:h{\the\dimen0}\dimen0=\wd0 % + \advance\dimen0 by 4pt \global\edef\net:w{\the\dimen0}}% + \rput(#2,#3){\rnode{#1}{\hbox{\net:math\the\everylabel % + #4\net:endmath}}}\endopt}} + +%% +%% links +%% + +\newopt{net:link}"{\let\net:math\relax \let\net:endmath\relax \nextopt} +\newopt{net:link}^{\def\net:link:put{\aput}\nextopt} +\newopt{net:link}_{\def\net:link:put{\bput}\nextopt} +\newopt{net:link}*{\def\net:link:put{\lput*}\nextopt} +\newopt{net:link}={\psset{doubleline=true}\nextopt} +\newopt{net:link}!{\psset{linewidth=2pt,linecolor=black}\nextopt} +\newopt{net:link}<#1>{\def\net:link:pos{(#1)}\nextopt} +\newopt{net:link}[#1]{\psset{#1}\nextopt} +\newopt{net:link}/#1/{\def\net:link:arrows{{#1}}\nextopt} + +\def\net:link{\def\net:link:put{\aput}\def\net:s{link}% + \def\net:link:arrows{{-}}% + \def\net:link:pos{(.5)}\def\net:link:opt{}% + \getopt{net:link}\net:link:draw} + +{\catcode`\^^M=\active \let^^M=\relax % +\global\def\net:link:draw #1#2#3^^M{% from/to/label + \expandafter\ncarc\net:link:arrows{#1}{#2}% + \expandafter\net:link:put\net:link:pos{% + \hbox{\net:math\the\everylabel #3\net:endmath}}\endopt}} + +\def\net:arc{\link/->/} + +%% +%% additional labels +%% + +% calls the right label macro + +\newopt{net:label}"{\let\net:math\relax \let\net:endmath\relax \nextopt} + +\def\net:label{\getopt{net:label}\net:label:call} + +\def\net:label:call{\edef\net:label:shape{net:label:\net:s}% + \expandafter\csname\net:label:shape\endcsname} + +% if no node or link has been drawn, we just ignore the label + +{\catcode`\^^M=\active \let^^M=\relax % +\global\def\net:label:empty #1^^M{}} + +% calculates angle which can be an integer, one or two letters. + +\def\net:setangle #1{\relax + \expandafter\ifx\csname net:angle:#1\endcsname\relax + \edef\net:angle{#1}% + \else\edef\net:angle{\csname net:angle:#1\endcsname}\fi} + +\def\net:angle:r{0} +\def\net:angle:tr{45} \let\net:angle:rt=\net:angle:tr +\def\net:angle:t{90} +\def\net:angle:tl{135} \let\net:angle:lt=\net:angle:tl +\def\net:angle:l{180} +\def\net:angle:bl{225} \let\net:angle:lb=\net:angle:b +\def\net:angle:b{270} +\def\net:angle:br{315} \let\net:angle:rb=\net:angle:br + +% for a circle + +{\catcode`\^^M=\active \let^^M=\relax % +\global\def\net:label:circle #1#2^^M{% pos/text + \net:setangle{#1}% + \advance\placesize by \labelsep% + \uput{.5\placesize}[\net:angle](\net:x,\net:y){% + \hbox{\net:math\the\everylabel #2\net:endmath}}\endopt}} + +% for a square + +{\catcode`\^^M=\active \let^^M=\relax % +\global\def\net:label:square #1#2^^M{% pos/text + \net:setangle{#1}% + \begingroup \dimen0=\net:angle pt% + \loop \ifdim\dimen0<-45pt \advance\dimen0 by 90pt \repeat% + \loop \ifdim\dimen0>45pt \advance\dimen0 by -90pt \repeat% + \edef\tmp{\expandafter\clear\the\dimen0}% + \cossin\cos\sin\tmp% + \realdiv\tmp=\sin/\cos% + \realmul\tmp=\tmp*\tmp% + \realadd\tmp=1+\tmp% + \realsqrt\tmp\tmp% + \realmul\tmp=.65*\tmp% + \uput{\tmp\transsize}[\net:angle](\net:x,\net:y){% + \hbox{\net:math\the\everylabel #2\net:endmath}}\endgroup\endopt}} + +% for a rectangle + +{\catcode`\^^M=\active \let^^M=\relax % +\global\def\net:label:rectangle #1#2^^M{% pos/text + \net:setangle{#1}% + \begingroup \dimen0=\net:angle pt% + \loop \ifdim\dimen0<0pt \advance\dimen0 by 360pt \repeat% + \loop \ifdim\dimen0>360pt \advance\dimen0 by -360pt \repeat% + \ifdim\dimen0>180pt \advance\dimen0 by -180pt \fi% + \ifdim\dimen0>90pt \advance\dimen0 by -180pt \dimen0=-\dimen0 \fi% + \edef\tmp{\expandafter\clear\the\dimen0}% + \cossin\cos\sin\tmp% + \edef\w{\expandafter\clear\net:w}% + \edef\h{\expandafter\clear\net:h}% + \realmul\w=.4*\w% the test below is done using \w, this gives it a + \realmul\h=.6*\h% greater importance so is is balanced here. + \realmul\ww=\w*\w% + \realmul\hh=\h*\h% + \realadd\d=\ww+\hh% + \realsqrt\d\d% + \realmul\dcos=\cos*\d% + \ifdim\dcos pt < \w pt % + \realdiv\tmp=\h/\sin% + \else% + \realdiv\tmp=\w/\cos% + \fi% + \realmul\tmp=1.5*\tmp% + \uput{\tmp pt}[\net:angle](\net:x,\net:y){% + \hbox{\net:math\the\everylabel #2\net:endmath}}\endgroup\endopt}} + +% for a link + +\def\net:label:link{\getopt{net:angle}\net:label:link:draw} + +{\catcode`\^^M=\active \let^^M=\relax % +\global\def\net:label:link:draw #1^^M{% from/to/label + \expandafter\net:link:put\net:link:pos{% + \hbox{\net:math\the\everylabel #1\net:endmath}}\endopt\endopt}} + +%% +%% trigonometric and real number stuff +%% + +% absolute value + +\def\realabs #1=|#2|{{% + \dregA=#2pt + \ifdim \dregA<0pt + \dregA=-\dregA + \fi + \global\edef\tmptrigoA{\expandafter\clear\the\dregA}}% + \edef#1{\tmptrigoA}} + +% add two reals + +\def\realadd #1=#2+#3{{% + \dregA=#2pt + \dregB=#3pt + \advance\dregA by\dregB + \global\edef\tmptrigoA{\expandafter\clear\the\dregA}}% + \edef#1{\tmptrigoA}} + +% substract two reals + +\def\realsub #1=#2-#3{% + \realadd#1=#2+{-#3}} + +% multiply two reals + +\def\realmul #1=#2*#3{{% + \dregA=#2pt + \dregA=#3\dregA + \global\edef\tmptrigoA{\expandafter\clear\the\dregA}}% + \edef#1{\tmptrigoA}} + +% divide two reals + +\def\realdiv #1=#2/#3{{% + \dregA=#2pt\cregA=\dregA + \dregA=#3pt\cregB=\dregA + \intdiv\res=\cregA/\cregB + \global\edef\tmptrigoA{\res}}% + \edef#1{\tmptrigoA}} + +% radians -> degrees + +\def\todeg #1#2{% #1=deg(#2) + \realmul#1=#2*{180}% + \realdiv#1=#1/{3.14159265359}} + +% degrees -> radian + +\def\torad #1#2{% #1=rad(#2) + \realmul#1=#2*{3.14159265359}% + \realdiv#1=#1/{180}} + +% cosinus and sinus + +\def\cossin #1#2#3{{% #1=cos(#3) #2=sin(#3) + \dregA=#3pt + % be sure \dregA is in [-180,180] + \loop + \ifdim\dregA<-180pt + \advance\dregA by 360pt + \repeat + \loop + \ifdim\dregA>180pt + \advance\dregA by -360pt + \repeat + % let's go + \ifdim\dregA<-90pt + \advance\dregA by 90pt + \edef\tmptrigoA{\expandafter\clear\the\dregA}% + \torad\rad\tmptrigoA + \cordic\negsin\cos\rad + \global\edef\tmptrigoA{\cos}% + \global\edef\tmptrigoB{-\negsin}% + \else\ifdim\dregA>90pt + \advance\dregA by -90pt + \edef\tmptrigoA{\expandafter\clear\the\dregA}% + \torad\rad\tmptrigoA + \cordic\sin\negcos\rad + \global\edef\tmptrigoA{-\negcos}% + \global\edef\tmptrigoB{\sin}% + \else + \edef\tmptrigoA{\expandafter\clear\the\dregA}% + \torad\rad\tmptrigoA + \cordic\cos\sin\rad + \global\edef\tmptrigoA{\cos}% + \global\edef\tmptrigoB{\sin}% + \fi\fi}% + \edef#1{\tmptrigoA}\edef#2{\tmptrigoB}} + +% square root + +\def\realsqrt #1#2{{% #1=(#2)^{-1/2} + \edef\a{#2}% + \edef\an{#2}% + \loop + \realdiv\anA=\a/\an + \realadd\anB=\an+\anA + \realdiv\anA=\anB/2 + \realsub\err=\an-\anA + \dregA=\err pt + \ifdim \dregA>0.0001pt + \edef\an{\anA}% + \repeat + \global\edef\tmptrigoA{\anA}}% + \edef#1{\tmptrigoA}} + +%% internal stuff + +\newdimen\dregA \newdimen\dregB % \newdimen\dregC +%\newdimen\dregD \newdimen\dregE \newdimen\dregF + +\newcount\cregA \newcount\cregB \newcount\cregC +\newcount\cregD \newcount\cregE % \newcount\cregF + +% arrays of numbers + +\def\setarray #1[#2]=#3{\expandafter + \edef\csname#1[#2]\endcsname{#3}} + +\def\getarray #1=#2[#3]{\edef\tmptrigoA{#2[#3]}% + \edef#1{\expandafter\csname\tmptrigoA\endcsname}} + +% remove trailing `pt' + +{\catcode`\p=12 \catcode`\t=12 +\global\def\clear #1pt{#1}} + +% divide two integers + +\def\intdiv #1=#2/#3{{% + \cregA=#2% + \cregB=#3% + \ifnum\cregB<0 + \cregA=-\cregA + \cregB=-\cregB + \fi + \cregD=1 + \ifnum\cregA<0 + \cregA=-\cregA + \cregD=-1 + \fi + \cregC=\cregA\divide\cregC by\cregB + \cregE=\cregC\multiply\cregE by\cregB + \advance\cregA by-\cregE + \cregE=-1 + \loop + \advance\cregE by1 + \ifnum\cregE<16 + \multiply\cregC by2 + \multiply\cregA by2 + \ifnum\cregA<\cregB\else + \advance\cregC by1 + \advance\cregA by-\cregB + \fi + \repeat + \divide\cregB by2 + \ifnum\cregA<\cregB + \advance\cregC by1 + \fi + \ifnum\cregD<0 + \cregC=-\cregC + \fi + \dregA=\cregC sp + \global\edef\tmptrigoA{\expandafter\clear\the\dregA}}% + \edef#1{\tmptrigoA}} + +% cordic algorithm to compute cos and sin + +\def\cordic #1#2#3{{% #1=cos(#3) #2=sin(#3) with #3 \in [-\pi/2,\pi/2] + % prepared values + \setarray e[0]={.785398163397448}% + \setarray e[1]={.463647609000806}% + \setarray e[2]={.244978663126864}% + \setarray e[3]={.124354994546761}% + \setarray e[4]={.0624188099959574}% + \setarray e[5]={.0312398334302683}% + \setarray e[6]={.0156237286204768}% + \setarray e[7]={.00781234106010111}% + \setarray e[8]={.00390623013196697}% + \setarray e[9]={.00195312251647882}% + \setarray e[10]={.000976562189559319}% + \setarray e[11]={.000488281211194898}% + \setarray e[12]={.000244140620149362}% + \setarray e[13]={.00012207031189367}% + % init + \def\xn{.607252935032446}% + \def\yn{0}% + \edef\zn{#3}% + \cregA=0 + \cregB=1 + % cordic loop + \loop + \realdiv\xtmp=\yn/\cregB + \realdiv\ytmp=\xn/\cregB + \getarray\ztmp=e[\the\cregA]% + \dregA=\zn pt + \ifdim\dregA<0pt + \realadd\xn=\xn+\xtmp + \realsub\yn=\yn-\ytmp + \realadd\zn=\zn+\ztmp + \else + \realsub\xn=\xn-\xtmp + \realadd\yn=\yn+\ytmp + \realsub\zn=\zn-\ztmp + \fi + \ifnum\cregA<13 + \advance\cregA by1 + \multiply\cregB by2 + \repeat + % terminating + \global\edef\tmptrigoA{\xn}\global\edef\tmptrigoB{\yn}}% + \edef#1{\tmptrigoA}\edef#2{\tmptrigoB}} + +%% +%% end +%% + +\catcode`\:=12 diff --git a/Master/texmf-dist/tex/generic/petri-nets/pnets.sty b/Master/texmf-dist/tex/generic/petri-nets/pnets.sty new file mode 100644 index 00000000000..5949538e4d7 --- /dev/null +++ b/Master/texmf-dist/tex/generic/petri-nets/pnets.sty @@ -0,0 +1,7 @@ +% This file is part of the Petri-nets packages. See file README for +% copyright notice. + +\ProvidesPackage{pnets} + +\usepackage{pntext} +\usepackage{pndraw} diff --git a/Master/texmf-dist/tex/generic/petri-nets/pnets.tex b/Master/texmf-dist/tex/generic/petri-nets/pnets.tex new file mode 100644 index 00000000000..7e5e26203ed --- /dev/null +++ b/Master/texmf-dist/tex/generic/petri-nets/pnets.tex @@ -0,0 +1,5 @@ +% This file is part of the Petri-nets packages. See file README for +% copyright notice. + +\input pntext +\input pndraw diff --git a/Master/texmf-dist/tex/generic/petri-nets/pntext.sty b/Master/texmf-dist/tex/generic/petri-nets/pntext.sty new file mode 100644 index 00000000000..1f337cfe5d7 --- /dev/null +++ b/Master/texmf-dist/tex/generic/petri-nets/pntext.sty @@ -0,0 +1,70 @@ +% This file is part of the Petri-nets packages. See file README for +% copyright notice. + +\ProvidesPackage{pntext} + +\typeout{ ** Petri-nets / text commands ** } + +% numbers sets + +\usepackage{amsfonts} + +\newcommand{\mathset}[1]{\relax\ifmmode\mathbb #1\else$\mathbb #1$\fi} +\newcommand{\setN}{\mathset{N}} +\newcommand{\setZ}{\mathset{Z}} +\newcommand{\setQ}{\mathset{Q}} +\newcommand{\setR}{\mathset{R}} +\newcommand{\setC}{\mathset{C}} + +% places status + +\newcommand{\placestatus}[1]{{\sf #1}} +\newcommand{\eplace}{\placestatus{e}} +\newcommand{\iplace}{\placestatus{i}} +\newcommand{\xplace}{\placestatus{x}} + +% synchronisation, restriction and tie + +\newcommand{\sy}{\relax + \ifmmode\mathop{\bf sy}\else{\bf sy}\fi} +\newcommand{\rs}{\relax + \ifmmode\mathop{\bf rs}\else{\bf rs}\fi} +\newcommand{\tie}{\relax + \ifmmode\mathop{\bf tie}\else{\bf tie}\fi} + +% scoping + +\newcommand{\lscope}{\relax + \ifmmode\left[\mskip -2.05\thinmuskip\left[\else$\lscope$\fi} +\newcommand{\Lscope}{\relax\ifmmode\left.\left.\fi} +\newcommand{\rscope}{\relax + \ifmmode\right]\mskip -2.05\thinmuskip\right]\else$\rscope$\fi} +\newcommand{\Rscope}{\relax\ifmmode\right.\right.\fi} +\newcommand{\scope}{} % just to test its existence +\def\scope #1#2{\relax + \ifmmode\lscope#1:#2\rscope\else$\lscope#1:#2\rscope$\fi} + +% choice operator + +\newcommand{\choice}{\relax\ifmmode + \mathop{\raise -.2ex\hbox{$\Box$}}\else{\raise -.2ex\hbox{$\Box$}}\fi} + +% B(PB)^2 logo + +\newcommand{\bpn}{\mbox{B(PN)$^2$}} + +% B(PN)^2 syntax + +\newcommand{\bpnkw}[1]{{\bf #1}} % keyword +\newcommand{\bpnnt}[1]{{\sf #1}} % non-terminal + +% Mnet mapping function + +\newcommand{\mnet}{\mbox{\sf Mnet}} + +% Var and Val + +\newcommand{\Val}{\relax\ifmmode{V\mskip-1.6\thinmuskip al}% + \else{\it Val}\fi} +\newcommand{\Var}{\relax\ifmmode{V\mskip-1.5\thinmuskip ar}% + \else{\it Var}\fi} diff --git a/Master/texmf-dist/tex/generic/petri-nets/pntext.tex b/Master/texmf-dist/tex/generic/petri-nets/pntext.tex new file mode 100644 index 00000000000..17e477c00de --- /dev/null +++ b/Master/texmf-dist/tex/generic/petri-nets/pntext.tex @@ -0,0 +1,75 @@ +% This file is part of the Petri-nets packages. See file README for +% copyright notice. + +\message{ ** Petri-nets / text commands ** } +\input pnversion + +% math sets + +\newfam\setfam \def\setfont{\fam\setfam\tenset} +\font\tenset=bbm10 \font\sevenset=bbm7 \font\fiveset=bbm5 +\textfont\setfam=\tenset +\scriptfont\setfam=\sevenset +\scriptscriptfont\setfam=\fiveset + +\def\mathset #1{{\setfont #1}} +\def\setN{{\setfont N}} +\def\setZ{{\setfont Z}} +\def\setQ{{\setfont Q}} +\def\setR{{\setfont R}} +\def\setC{{\setfont C}} + +% places status + +\def\placestatus #1{{\ss #1}} +\def\eplace{\placestatus{e}} +\def\iplace{\placestatus{i}} +\def\xplace{\placestatus{x}} + +% synchronisation, restriction and tie + +\def\sy{\relax + \ifmmode\mathop{\bf sy}\else{\bf sy}\fi} +\def\rs{\relax + \ifmmode\mathop{\bf rs}\else{\bf rs}\fi} +\def\tie{\relax + \ifmmode\mathop{\bf tie}\else{\bf tie}\fi} + +% scoping + +\def\lscope{\relax + \ifmmode\left[\mskip -2.05\thinmuskip\left[\else$\lscope$\fi} +\def\Lscope{\relax\ifmmode\left.\left.\fi} +\def\rscope{\relax + \ifmmode\right]\mskip -2.05\thinmuskip\right]\else$\scope$\fi} +\def\Rscope{\relax\ifmmode\right.\right.\fi} +\def\scope #1#2{\lscope#1:#2\rscope} + +% choice operator + +\def\choice{\relax\ifmmode + \mathbin{\mathpalette\choicebody{}}% + \else${\choice}$\fi} + +\def\choicebody #1#2{\vcenter{\hrule + \hbox{\vrule$#1\phantom{*}$\vrule}\vss\hrule}} + +% B(PB)^2 logo + +\def\bpn{\hbox{B(PN)$^2$}} + +% B(PN)^2 syntax + +\def\bpnkw #1{{\bf #1}} % keyword +\def\bpnnt #1{{\ss #1}} % non-terminal + +% Mnet mapping function + +\def\mnet{\hbox{\sf Mnet}} + +% Var and Val + +\def\Val{\relax\ifmmode{V\mskip-1.6\thinmuskip al}% + \else{\it Val}\fi} +\def\Var{\relax\ifmmode{V\mskip-1.5\thinmuskip ar}% + \else{\it Var}\fi} diff --git a/Master/texmf-dist/tex/generic/petri-nets/pnversion.tex b/Master/texmf-dist/tex/generic/petri-nets/pnversion.tex new file mode 100644 index 00000000000..70a068282d8 --- /dev/null +++ b/Master/texmf-dist/tex/generic/petri-nets/pnversion.tex @@ -0,0 +1 @@ +\def\pnversion{2006-03-02} -- cgit v1.2.3