-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtikz-bayesnet.sty
128 lines (117 loc) · 3.66 KB
/
tikz-bayesnet.sty
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
117
118
119
120
121
122
123
124
125
126
127
128
% Load other libraries
\usetikzlibrary{shapes}
\usetikzlibrary{fit}
\usetikzlibrary{chains}
\usetikzlibrary{arrows}
% Latent node
\tikzstyle{latent} = [circle,fill=white,draw=black,inner sep=1pt,
minimum size=20pt, font=\fontsize{10}{10}\selectfont, node distance=1]
% Observed node
\tikzstyle{obs} = [latent,fill=gray!25]
% Constant node
\tikzstyle{const} = [rectangle, inner sep=0pt, node distance=1]
% Factor node
\tikzstyle{factor} = [rectangle, fill=black,minimum size=5pt, inner
sep=0pt, node distance=0.4]
% Deterministic node
\tikzstyle{det} = [latent, diamond]
% Plate node
\tikzstyle{plate} = [draw, rectangle, rounded corners, fit=#1]
% Invisible wrapper node
\tikzstyle{wrap} = [inner sep=0pt, fit=#1]
% Gate
\tikzstyle{gate} = [draw, rectangle, dashed, fit=#1]
% Caption node
\tikzstyle{caption} = [font=\footnotesize, node distance=0] %
\tikzstyle{plate caption} = [caption, node distance=0, inner sep=0pt,
below left=5pt and 0pt of #1.south east] %
\tikzstyle{factor caption} = [caption] %
\tikzstyle{every label} += [caption] %
%\pgfdeclarelayer{b}
%\pgfdeclarelayer{f}
%\pgfsetlayers{b,main,f}
% \factoredge [options] {inputs} {factors} {outputs}
\newcommand{\factoredge}[4][]{ %
% Connect all nodes #2 to all nodes #4 via all factors #3.
\foreach \f in {#3} { %
\foreach \x in {#2} { %
\path (\x) edge[-,#1] (\f) ; %
%\draw[-,#1] (\x) edge[-] (\f) ; %
} ;
\foreach \y in {#4} { %
\path (\f) edge[->, >={triangle 45}, #1] (\y) ; %
%\draw[->,#1] (\f) -- (\y) ; %
} ;
} ;
}
% \edge [options] {inputs} {outputs}
\newcommand{\edge}[3][]{ %
% Connect all nodes #2 to all nodes #3.
\foreach \x in {#2} { %
\foreach \y in {#3} { %
\path (\x) edge [->, >={triangle 45}, #1] (\y) ;%
%\draw[->,#1] (\x) -- (\y) ;%
} ;
} ;
}
% \factor [options] {name} {caption} {inputs} {outputs}
\newcommand{\factor}[5][]{ %
% Draw the factor node. Use alias to allow empty names.
\node[factor, label={[name=#2-caption]#3}, name=#2, #1,
alias=#2-alias] {} ; %
% Connect all inputs to outputs via this factor
\factoredge {#4} {#2-alias} {#5} ; %
}
% \plate [options] {name} {fitlist} {caption}
\newcommand{\plate}[4][]{ %
\node[wrap=#3] (#2-wrap) {}; %
\node[plate caption=#2-wrap] (#2-caption) {#4}; %
\node[plate=(#2-wrap)(#2-caption), #1] (#2) {}; %
}
% \gate [options] {name} {fitlist} {inputs}
\newcommand{\gate}[4][]{ %
\node[gate=#3, name=#2, #1, alias=#2-alias] {}; %
\foreach \x in {#4} { %
\draw [-*,thick] (\x) -- (#2-alias); %
} ;%
}
% \vgate {name} {fitlist-left} {caption-left} {fitlist-right}
% {caption-right} {inputs}
\newcommand{\vgate}[6]{ %
% Wrap the left and right parts
\node[wrap=#2] (#1-left) {}; %
\node[wrap=#4] (#1-right) {}; %
% Draw the gate
\node[gate=(#1-left)(#1-right)] (#1) {}; %
% Add captions
\node[caption, below left=of #1.north ] (#1-left-caption)
{#3}; %
\node[caption, below right=of #1.north ] (#1-right-caption)
{#5}; %
% Draw middle separation
\draw [-, dashed] (#1.north) -- (#1.south); %
% Draw inputs
\foreach \x in {#6} { %
\draw [-*,thick] (\x) -- (#1); %
} ;%
}
% \hgate {name} {fitlist-top} {caption-top} {fitlist-bottom}
% {caption-bottom} {inputs}
\newcommand{\hgate}[6]{ %
% Wrap the left and right parts
\node[wrap=#2] (#1-top) {}; %
\node[wrap=#4] (#1-bottom) {}; %
% Draw the gate
\node[gate=(#1-top)(#1-bottom)] (#1) {}; %
% Add captions
\node[caption, above right=of #1.west ] (#1-top-caption)
{#3}; %
\node[caption, below right=of #1.west ] (#1-bottom-caption)
{#5}; %
% Draw middle separation
\draw [-, dashed] (#1.west) -- (#1.east); %
% Draw inputs
\foreach \x in {#6} { %
\draw [-*,thick] (\x) -- (#1); %
} ;%
}