2010-12-02 3 views
6

Я делаю дюжину сюжетов с Gnuplot на Mac через ruby-gnuplot. Если я снова запустил свой рубиновый скрипт, количество открытых окон с графиками удваивается. Если бы я мог просто выводить все эти графики в PDF, открытом в Preview, тогда файл будет автоматически обновляться после каждого повторного запуска, и мне не нужно беспокоиться о закрытии многочисленных окон.Как создать многостраничный PDF-файл с помощью Gnuplot?

В настоящее время я могу добиться этого только с одним участком в PDF-файл:

Gnuplot.open do |gp| 
    Gnuplot::Plot.new(gp) do |plot| 
    plot.arbitrary_lines << "set terminal pdf \n set output 'figures.pdf'" 
    # ... 
    end 
end 

Как я могу сделать один PDF со всеми моими фигурами Gnuplot?

ответ

7

Хмм, по крайней мере, для gnuplot для UN * x, многостраничный вывод для постскриптума и PDF всегда был по умолчанию - если вы не изменяете тип терминала и не переназначаете выходной файл, все, что вы делаете, заканчивается на новую страницу.

I.e. Вы делаете:

set terminal pdf 
set output "multipageplot.pdf" 
plot x, x*x 
plot sin(x), cos(x) 
set output "" 

и вы в конечном итоге с двух страниц в файле PDF, одна из которых содержит строку/параболы, другой синус/косинус.

Чтобы уточнить: важно выполнить все команды plot без изменения выходного файла или изменения типа терминала. Gnuplot не будет добавляться в существующий файл PDF.

+2

Вы правы - я переназначал вывод между графиками. Спасибо, что открыли мне глаза! – 2010-12-02 14:52:26

0

Я делаю тысячи участков с рубиновым gnuplot и использую драгоценный камень, называемый креветкой, чтобы скомпилировать их в pdf. Ниже приведен фрагмент кода с помощью креветка, которая включает в себя некоторые полезные функции:

require 'prawn' 

def create_pdf 
    toy_catalogue = @toy_catalogue 
    full_output_filename ||= "#{output_path}/#{pre-specified_filename_string}" 
    Prawn::Document.generate(full_output_filename, :page_layout => :portrait, :margin => 5, :skip_page_creation => false, :page_size => [595, 1000]) do 
    toy_catalogue.each do |toy| 
     start_new_page 

     image toy[:plan_view], :at => [0,900], :width => 580 

     image toy[:front_view], :at => [0, 500], :width => 585 

     font_size(20) { draw_text toy[:name], :at => [5, 920] } 

     draw_text "production_date = #{toy[:date]}", :at => [420, 930] 
    end 
    end 
end 

Это должно быть достаточно легко адаптироваться к вашим целям.

Смежные вопросы