From 66857fcce9159e98ec777a781d8b13b4f37c021d Mon Sep 17 00:00:00 2001
From: ericmarin <maarin.eric@gmail.com>
Date: Wed, 6 May 2026 19:31:37 +0200
Subject: interaction rules subsection 3.1.2

---
 tikz-inet.sty | 401 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 401 insertions(+)
 create mode 100644 tikz-inet.sty

(limited to 'tikz-inet.sty')

diff --git a/tikz-inet.sty b/tikz-inet.sty
new file mode 100644
index 0000000..69a54dd
--- /dev/null
+++ b/tikz-inet.sty
@@ -0,0 +1,401 @@
+% Copyright 2008 by Marc de Falco
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{tikz-inet}[2008/06/02 v0.1 tikz interaction nets library]
+\RequirePackage{tikz}
+\RequirePackage{ifthen}
+
+% We need this to load the \emph{isosceles triangle} shape
+\usetikzlibrary{shapes.geometric}
+\usetikzlibrary{shadows}
+\usetikzlibrary{positioning}
+\usetikzlibrary{matrix}
+\usetikzlibrary{fit}
+
+\pgfkeys{/pgf/.cd,
+    arity/.initial=4,
+}
+
+% The definition of the shape of a cell
+\pgfdeclareshape{cellule}{
+    \savedmacro\arity{%        
+        \pgfmathtruncatemacro\arity{\pgfkeysvalueof{/pgf/arity}}%
+    }
+
+    \inheritsavedanchors[from=isosceles triangle]
+    \inheritanchorborder[from=isosceles triangle]
+    \inheritanchor[from=isosceles triangle]{center}
+    \inheritanchor[from=isosceles triangle]{left corner}
+    \inheritanchor[from=isosceles triangle]{right corner}
+    \inheritanchor[from=isosceles triangle]{south}
+    \inheritanchor[from=isosceles triangle]{west}
+    \inheritanchor[from=isosceles triangle]{north east}
+    \inheritanchor[from=isosceles triangle]{north west}
+    \inheritanchor[from=isosceles triangle]{south east}
+    \inheritanchor[from=isosceles triangle]{south west}
+    \inheritanchor[from=isosceles triangle]{east}
+    \inheritanchor[from=isosceles triangle]{north}
+    \inheritanchor[from=isosceles triangle]{lower left}
+    \inheritanchor[from=isosceles triangle]{apex}
+   
+    \anchor{above pax}{
+        \trianglepoints
+        \pgfmathrotatepointaround{
+            \pgfpointadd{
+                \pgfpointadd{\pgfpoint{-2ex}{0cm}}{
+                    \pgfpointlineattime{0.5}
+                        {\lowerleftanchor}{\lowerrightanchor}
+                    }
+                }
+                {\centerpoint}
+            }{\centerpoint}{\rotate}
+        }
+
+  
+    \anchor{above middle pax}{
+        \trianglepoints
+        \pgfmathrotatepointaround{
+            \pgfpointadd{
+                \pgfpointadd{\pgfpoint{-2ex}{0cm}}{
+                    \pgfpointlineattime{0.5}
+                        {\lowerleftanchor}{\lowerrightanchor}
+                    }
+                }
+                {\centerpoint}
+            }{\centerpoint}{\rotate}
+        }
+
+                    \anchor{pax}{
+                    \trianglepoints
+                    \pgfmathrotatepointaround{
+                    \pgfpointadd{\pgfpointlineattime{0.5}
+                    {\lowerleftanchor}{\lowerrightanchor}}{\centerpoint}}
+                    {\centerpoint}{\rotate}
+                    }
+
+
+                    \anchor{middle pax}{
+                    \trianglepoints
+                    \pgfmathrotatepointaround{
+                    \pgfpointadd{\pgfpointlineattime{0.5}
+                    {\lowerleftanchor}{\lowerrightanchor}}{\centerpoint}}
+                    {\centerpoint}{\rotate}
+                    }
+
+                    \anchor{above left pax}{
+                    \trianglepoints
+                    \pgfmathrotatepointaround{
+                    \pgfpointadd{
+                    \pgfpointadd{\pgfpoint{-2ex}{0cm}}{
+                    \pgfpointlineattime{0.25}
+                    {\lowerleftanchor}{\lowerrightanchor}
+                    }
+                    }
+                    {\centerpoint}
+                    }{\centerpoint}{\rotate}
+                    }
+
+
+                    \anchor{left pax}{
+                    \trianglepoints
+                    \pgfmathrotatepointaround{
+                    \pgfpointadd{\pgfpointlineattime{0.25}
+                    {\lowerleftanchor}{\lowerrightanchor}}{\centerpoint}}
+                    {\centerpoint}{\rotate}
+                    }
+
+    \anchor{above right pax}{
+    \trianglepoints
+    \pgfmathrotatepointaround{
+    \pgfpointadd{
+    \pgfpointadd{\pgfpoint{-2ex}{0cm}}{
+    \pgfpointlineattime{0.75}
+    {\lowerleftanchor}{\lowerrightanchor}
+    }
+    }
+    {\centerpoint}
+    }{\centerpoint}{\rotate}
+    }
+
+
+    \anchor{right pax}{
+    \trianglepoints
+    \pgfmathrotatepointaround{
+    \pgfpointadd{\pgfpointlineattime{0.75}
+    {\lowerleftanchor}{\lowerrightanchor}}{\centerpoint}}
+    {\centerpoint}{\rotate}
+    }
+
+    \anchor{above pal}{
+    \trianglepoints
+    \pgfpointadd{\centerpoint}{
+    \pgfmathrotatepointaround{
+    \pgfpointadd{\pgfpoint{2ex}{0cm}}{\apexanchor}}
+    {\pgfpointorigin}{\rotate}
+    }
+    }
+
+
+    \anchor{pal}{
+    \trianglepoints
+    \pgfpointadd{\centerpoint}{
+    \pgfmathrotatepointaround{
+    \pgfpointadd{\pgfpoint{-0.07cm}{0cm}}{\apexanchor}
+    }{\pgfpointorigin}{\rotate}
+    }
+    }
+
+
+    \backgroundpath{
+        \trianglepoints{
+            \pgftransformshift{\centerpoint}
+            \pgftransformrotate{\rotate}
+            \pgfpathmoveto{\apex}
+            \pgfpathlineto{
+                \pgfpointlineattime{0.8}{\apex}{\lowerleft}
+            }
+            \pgfpathcurveto{
+                \pgfpointlineattime{0.9}{\apex}{\lowerleft}
+            }{
+                \pgfpointlineattime{0.1}{\lowerleft}{\lowerleft\pgf@y-\pgf@y}
+            }{
+    \pgfpointlineattime{0.2}{\lowerleft}{\lowerleft\pgf@y-\pgf@y}
+    }
+    \pgfpathlineto{
+    \pgfpointlineattime{0.8}{\lowerleft}{\lowerleft\pgf@y-\pgf@y}
+    }
+    \pgfpathcurveto{
+    \pgfpointlineattime{0.9}{\lowerleft}{\lowerleft\pgf@y-\pgf@y}
+    }{
+    \pgfpointlineattime{0.1}{\lowerleft\pgf@y-\pgf@y}{\apex}
+    }{
+    \pgfpointlineattime{0.2}{\lowerleft\pgf@y-\pgf@y}{\apex}
+    }
+
+    \pgfpathclose
+    }
+    }
+    
+    \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@cellule\endcsname{%
+		\c@pgf@counta\arity\relax%
+		\pgfmathloop%
+			\ifnum\c@pgf@counta>0\relax%
+				\pgfutil@ifundefined{pgf@anchor@cellule@pax\space\the\c@pgf@counta}{%
+                % I HATE TeX
+				\expandafter\xdef\csname pgf@anchor@cellule@pax\space\the\c@pgf@counta\endcsname{% 
+                \noexpand\pgfmathadd@{\noexpand\arity}{-1}%
+                \noexpand\c@pgf@countb=\noexpand\pgfmathresult%
+                \noexpand\pgfmathadd@{\the\c@pgf@counta}{-1}%
+                \noexpand\pgfmathdivide@{\noexpand\pgfmathresult}%
+                    {\noexpand\the\c@pgf@countb}%
+                \noexpand\pgfmathmultiply@{\noexpand\pgfmathresult}{0.5}%
+                \noexpand\pgfmathadd@{\noexpand\pgfmathresult}{0.25}%
+                \noexpand\let\noexpand\time\noexpand\pgfmathresult%
+                \noexpand\trianglepoints%
+                  \noexpand\pgfmathrotatepointaround{%
+                  \noexpand\pgfpointadd{%
+                    \noexpand\pgfpointlineattime%
+                    {\noexpand\time}%
+                    {\noexpand\lowerleftanchor}%
+                    {\noexpand\lowerrightanchor}%
+                  }{\noexpand\centerpoint}%
+                  }{\noexpand\centerpoint}{\noexpand\rotate}%
+                }%
+                \expandafter\xdef\csname pgf@anchor@cellule@above pax\space\the\c@pgf@counta\endcsname{%
+                \noexpand\pgfmathadd@{\noexpand\arity}{-1}%
+                \noexpand\c@pgf@countb=\noexpand\pgfmathresult%
+                \noexpand\pgfmathadd@{\the\c@pgf@counta}{-1}%
+                \noexpand\pgfmathdivide@{\noexpand\pgfmathresult}%
+                    {\noexpand\the\c@pgf@countb}%
+                \noexpand\pgfmathmultiply@{\noexpand\pgfmathresult}{0.5}%
+                \noexpand\pgfmathadd@{\noexpand\pgfmathresult}{0.25}%
+                \noexpand\let\noexpand\time\noexpand\pgfmathresult%
+                \noexpand\trianglepoints
+                  \noexpand\pgfmathrotatepointaround{%
+                      \noexpand\pgfpointadd{%
+                            \noexpand\pgfpointadd{
+                                \noexpand\pgfpoint{-2ex}{0cm}}{%
+                                    \noexpand\pgfpointlineattime%
+                                        {\noexpand\time}%
+                                        {\noexpand\lowerleftanchor}%
+                                        {\noexpand\lowerrightanchor}%
+                                    }%
+                            }{\noexpand\centerpoint}%
+                    }%
+                    {\noexpand\centerpoint}%
+                    {\noexpand\rotate}%
+                }%
+			}{\c@pgf@counta0\relax}% 
+			\advance\c@pgf@counta-1\relax%
+		\repeatpgfmathloop%	
+	}%
+
+}
+
+\newcommand\inetoptions{\setkeys{inet}}
+\newcommand{\inetcolor}{red}
+\define@key{inet}{color}{\renewcommand{\inetcolor}{#1}}
+\newcommand{\inet@defaultangle}{0}
+\define@key{inet}{defaultangle}{\renewcommand{\inet@defaultangle}{#1}}
+
+\newcount\inet@angle
+\inet@angle=0
+
+\tikzset{wirestyle/.style = {draw, line width=0.15ex, line cap=rect}}
+\tikzset{cellstyle/.style = {
+    draw, line width=0.2ex, fill=white,
+    inner sep=0.2ex,
+    }}
+\tikzset{boxstyle/.style = {draw,line width=0.1ex}}
+\tikzfading[name=inet fading,
+    left color=transparent!0,
+    right color=transparent!100]
+\tikzset{fancywirestyle/.style = {draw, line width=0.15ex,
+    draw=black!50!#1,
+    double=white!50!#1,double distance=0.2ex,
+   }}
+\tikzset{fancycellstyle/.style={%
+    general shadow={fill, shadow scale=1.0,%
+    shadow xshift=0.3ex,shadow yshift=-0.3ex,opacity=0.2},
+    line width=0.15ex,%
+    inner sep=0.2ex,%
+    draw=black!50!#1,%
+    top color=#1,%
+    bottom color=white,%!80!#1,%
+    shading angle=\inet@angle,%
+    }}
+\tikzset{fancyboxstyle/.style = {line width=0.2ex,fill opacity=0.5,
+    fill=white!20!#1,draw=black!30!#1}}
+
+\newif\ifinet@fancy\inet@fancyfalse
+
+\DeclareOption{fancy}{\inet@fancytrue}
+\DeclareOption{nofancy}{\inet@fancyfalse}
+
+\newcommand{\inetfancy}{\inet@fancytrue}
+\newcommand{\inetnofancy}{\inet@fancyfalse}
+
+\newcommand{\inetsetfancycellstyle}[1]{
+    \tikzset{fancycellstyle/.style = {#1}}%
+}
+\newcommand{\inetsetfancywirestyle}[1]{
+    \tikzset{fancycellstyle/.style = {#1}}%
+}
+
+\DeclareOption*{\expandafter\inetoptions\expandafter{\CurrentOption}}
+\ProcessOptions\relax
+
+\pgfdeclarelayer{wire layer}
+\pgfdeclarelayer{box layer}
+\pgfsetlayers{box layer,wire layer,main}
+
+\makeatletter
+
+\newcommand{\inetcellstyle}{%
+    \ifinet@fancy fancycellstyle\else cellstyle\fi%
+}
+
+\newcommand{\inetwirestyle}{%
+    \ifinet@fancy fancywirestyle\else wirestyle\fi%
+}
+
+\newcommand{\inetboxstyle}{%
+    \ifinet@fancy fancyboxstyle\else boxstyle\fi%
+}
+
+
+\newcommand{\inetcell}[1][]{%
+    \@ifnextchar({%
+    \inetcell@ii[#1]%
+    }{%
+    \inetcell@iib[#1]%
+    }%
+}
+
+\def\inetcell@iib[#1]#2{%
+    \inetcell@ii[#1](#2){#2}%
+}
+
+\def\inetcell@ii[#1](#2)#3{%
+    \@ifnextchar[{\inetcell@iii[#1](#2){#3}%
+    }{\inetcell@iii[#1](#2){#3}[\inet@defaultangle]}%
+}
+
+\def\inetcell@iii[#1](#2)#3[#4]{%
+    \ifthenelse{\equal{#4}{U}}{\inet@angle=180}{%
+        \ifthenelse{\equal{#4}{D}}{\inet@angle=0}{%
+            \ifthenelse{\equal{#4}{L}}{\inet@angle=270}{%
+                \ifthenelse{\equal{#4}{R}}{\inet@angle=90}{\inet@angle=#4}%
+            }%
+        }%
+    }%
+    \node[%
+    \inetcellstyle=\inetcolor%
+    ,shape border rotate=\inet@angle-90%
+    ,cellule, isosceles triangle apex angle=60,%
+    shape border uses incircle, #1] (#2) {#3};%
+}
+
+\def\inetwirecoords(#1)(#2){%
+    \begin{pgfonlayer}{wire layer}%
+        \draw[\ifinet@fancy fancywirestyle\else wirestyle\fi=\inetcolor]%
+        (#1) -- (#2);%
+    \end{pgfonlayer}
+}
+
+\def\inetwire{%
+    \@ifnextchar[{\inetwire@i}{\inetwire@i[]}%
+}
+
+\def\inetwire@i[#1](#2.#3)(#4.#5){%
+    \begin{pgfonlayer}{wire layer}%
+        \draw[\inetwirestyle=\inetcolor,#1]%
+        (#2.#3) .. controls (#2.above #3) and (#4.above #5) .. (#4.#5);%
+    \end{pgfonlayer}%
+}
+
+\def\inetwirefree{%
+    \@ifnextchar[{\inetwirefree@i}{\inetwirefree@i[]}%
+}
+\def\inetwirefree@i[#1](#2.#3){%
+    \begin{pgfonlayer}{wire layer}%
+        \draw[\ifinet@fancy fancywirestyle\else wirestyle\fi=\inetcolor,#1]%
+        (#2.#3) -- (#2.above #3);%
+    \end{pgfonlayer}%
+}
+
+\newcommand{\inetloop}[1][]{%
+    \begin{pgfonlayer}{wire layer}%
+        \node[\ifinet@fancy fancywirestyle\else wirestyle\fi=\inetcolor,%
+        #1,circle,inner sep=6pt] {};
+    \end{pgfonlayer}%
+}
+
+\newcommand{\inetbox}[1][]{%
+    \inetbox@i[#1]%
+}
+
+\def\inetbox@i[#1]#2(#3){%
+    \begin{pgfonlayer}{box layer}%
+        \node[\ifinet@fancy fancyboxstyle\else boxstyle\fi=\inetcolor,
+        fit=#2,inner sep=10pt,#1] (#3) {};%
+    \end{pgfonlayer}%
+}
+
+\newcommand{\inetprombox}[1][]{%
+    \inetprombox@i[#1]%
+}
+\def\inetprombox@i[#1]#2(#3){%
+   \inetbox@i[#1]{#2}(b#3)%
+   \inetcell[above=-4ex of b#3.south](#3){$!$}%
+   %\inetcell[above=-4ex of $(b#3.south west)!.75!(b#3.south)$](#3){$!$}%
+}
+
+\makeatother
+
+\endinput
-- 
cgit v1.2.3

