summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib/simplenodes/simplenodes.sty
blob: a8cdeff7286ac1c006ebceff7ee6fa9ebae8ecf5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% simplenodes.sty
%% <https://github.com/user9856749/simplenodes>
%%
%% MIT License
%%
%% Copyright (c) 2022 Bob Vergauwen
%%
%% Permission is hereby granted, free of charge, to any person obtaining a copy
%% of this software and associated documentation files (the "Software"), to deal
%% in the Software without restriction, including without limitation the rights
%% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
%% copies of the Software, and to permit persons to whom the Software is
%% furnished to do so, subject to the following conditions:
%%
%% The above copyright notice and this permission notice shall be included in all
%% copies or substantial portions of the Software.
%%
%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
%% SOFTWARE.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{simplenodes}[2022/03/31 A package that provides simple nodes in four colors.]

\RequirePackage{kvoptions}

\DeclareStringOption[25mm]{width}
\DeclareStringOption[7mm]{minheight}
\DeclareStringOption[center]{align}
\DeclareStringOption[2pt]{innersep}
\DeclareStringOption[0pt]{outersep}
\DeclareStringOption[0.4pt]{thickness}
\ProcessKeyvalOptions*

\RequirePackage{kvoptions}
\RequirePackage{tikz}
\RequirePackage{color}
\usetikzlibrary{math}

% Coordinate manipulations


\newcommand{\gettikzxy}[3]{%
  \tikz@scan@one@point\pgfutil@firstofone#1\relax
  \edef#2{\the\pgf@x}%
  \edef#3{\the\pgf@y}%
}

% Define the main color
\definecolor{InvisibleRed}{rgb}{0.97, 0.92, 0.92}
\definecolor{InvisibleGreen}{rgb}{0.92, 0.97, 0.92}
\definecolor{InvisibleBlue}{rgb}{0.92, 0.92, 0.97}
\definecolor{InvisibleYellow}{rgb}{1.0, 1.0, 0.88}

\definecolor{MediumRed}{rgb}{0.925, 0.345, 0.345}
\definecolor{MediumGreen}{rgb}{0.37, 0.7, 0.66}
\definecolor{MediumBlue}{rgb}{0.015, 0.315, 0.45}
\definecolor{MediumYellow}{rgb}{1.0, 0.75, 0.0}

% Define the node
\newcommand\mynode[2]{
    \tikz[remember picture,baseline]
    \node[
        draw=#1,fill=#2,
        rectangle,
        line width = \simplenodes@thickness,
        align=\simplenodes@align,
        text width=\simplenodes@width,
        inner sep=\simplenodes@innersep,
        outer sep=\simplenodes@outersep,
        minimum height=\simplenodes@minheight,
        ]
}

% Define the line
\newcommand\myline[2]{
    \draw[
        ->,
        line width = \simplenodes@thickness
    ] (#1) to (#2);
}

\newcommand\link[2]{
    \begin{tikzpicture}[remember picture, overlay, >=stealth, shift={(0,0)}]
        \gettikzxy{(#1)}{\ax}{\ay}
        \gettikzxy{(#2)}{\bx}{\by}
        \tikzmath{
            if \ax == \bx then {
                if \ay < \by then {
                    {\myline{#1.north}{#2.south}};
                };
                if \ay > \by then {
                    {\myline{#1.south}{#2.north}};
                };
            };
            if \ax < \bx then {
                {\myline{#1.east}{#2.west}};
            };
            if \ax > \bx then {
                {\myline{#1.west}{#2.east}};
            };
        };
    \end{tikzpicture}
}

% Provide the commands
\newcommand\simplenode[2]{\mynode{MediumBlue}{InvisibleBlue} (#1){#2};}
\newcommand\examplenode[2]{\mynode{MediumGreen}{InvisibleGreen} (#1){#2};}
\newcommand\alertnode[2]{\mynode{MediumRed}{InvisibleRed} (#1){#2};}
\newcommand\warnnode[2]{\mynode{MediumYellow}{InvisibleYellow} (#1){#2};}