diff options
author | Karl Berry <karl@freefriends.org> | 2008-06-19 00:11:53 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2008-06-19 00:11:53 +0000 |
commit | 6f59b746f74b7ec973b019cd61ed9bf344073fa8 (patch) | |
tree | e5426bbe3d19b724f9fffa16d68c5973c35e4b0d /Master/texmf-dist/tex/latex/tikz-inet/tikz-inet.sty | |
parent | 89bae23c0f3eecdab79cf863ed1af87a05441a12 (diff) |
new package tikz-inet (18jun08)
git-svn-id: svn://tug.org/texlive/trunk@8860 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/tikz-inet/tikz-inet.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/tikz-inet/tikz-inet.sty | 401 |
1 files changed, 401 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/tikz-inet/tikz-inet.sty b/Master/texmf-dist/tex/latex/tikz-inet/tikz-inet.sty new file mode 100644 index 00000000000..69a54dd7217 --- /dev/null +++ b/Master/texmf-dist/tex/latex/tikz-inet/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 |