forked from penlu/cs281-scribe
-
Notifications
You must be signed in to change notification settings - Fork 0
/
tikzlibrarybayesnet.code.tex
137 lines (125 loc) · 3.81 KB
/
tikzlibrarybayesnet.code.tex
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
129
130
131
132
133
134
135
136
137
% tikzlibrary.code.tex
%
% Copyright 2010-2011 by Laura Dietz
% Copyright 2012 by Jaakko Luttinen
%
% The MIT License
%
% See LICENSE file for more details.
% 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); %
} ;%
}