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
|
# File 'lib/texlab/plot.rb', line 13
def plot *args
opts = args.
title = args[0]
placement = opts.delete(:placement) || (opts[:label] ? "htbp" : "H")
width = opts.delete(:width) || "17cm"
height = opts.delete(:height) || "10cm"
cmd = opts.delete(:cmd) || "plot"
label = opts.delete(:label)
debug = opts.delete(:debug)
env :figure, "[#{placement}]" do
env :center do
@_datasets = []
yield
@_datasets
gnuplot = Gnuplot.gnuplot(true) or raise "gnuplot not found"
Open3.popen3(gnuplot) do |gp, out, err, external|
gp = STDERR if debug
gp <<<<-GP
set terminal latex size #{width}, #{height}
GP
Gnuplot::Plot.new(gp, cmd) do |plot|
opts.each do |key, value|
case value
when true
plot.send key
when false
gp << "unset #{key}\n"
else
plot.send key, value.to_s.gsub(/([\\])/, "\\\\\\1")
end
end
@_datasets.each do |ds|
plot.data << ds
end
end
gp.close
$_erbout << out.readlines.join("\n")
if not external.value.success?
errlines = err.readlines
raise "could not plot:\n" + errlines.join("\n")
end
end
end
$_erbout << "\\caption{#{title}}" if title
$_erbout << "\\label{#{label}}" if label
end
end
|