Если я распечатаю график в формате EPS, содержимое EPS файла полностью занято графиком. Но если я напечатаю сюжет в формате PDF, тогда есть большие поля выше и ниже графика в файле PDF. Как сохранить сюжет в файле PDF без большого запаса вокруг графика?
Мое предположение заключается в том, как автоматически выбрать нужный "бумажный" размер в PDF файле для печати в соответствии с размером графика.
Это вопрос, который я задал в tex.stackexchange.com, где у меня есть ответы, которые в основном пытались решить проблему за пределами MATLAB, и я до сих пор не совсем понимаю единственный ответ, который пытался решить из MATLAB. Поэтому я хотел бы посмотреть, есть ли здесь больше мнений.
Что вы подразумеваете под "правильным размером"? MATLAB цифры похожи на векторную графику, поэтому вы можете в принципе выбрать нужный размер на вашем сюжете.
Вы можете установить размер бумаги и положение фигуры с помощью функции set.
Пример:
plot(epx(1:5));
set(gcf, 'PaperPosition', [0 0 5 5]); %Position plot at left hand corner with width 5 and height 5.
set(gcf, 'PaperSize', [5 5]); %Set the paper to have width 5 and height 5.
saveas(gcf, 'test', 'pdf') %Save figure
Приведенный выше код удалит большую часть границ, но не все. Это связано с тем, что левый угол ([0 0]
в векторе положения) не является "истинным" левым углом. Чтобы удалить больше границ, вы можете отрегулировать векторы PaperPosition
и PaperSize
.
Пример:
plot(exp(1:5))
set(gcf, 'PaperPosition', [-0.5 -0.25 6 5.5]); %Position the plot further to the left and down. Extend the plot to fill entire paper.
set(gcf, 'PaperSize', [5 5]); %Keep the same paper size
saveas(gcf, 'test', 'pdf')
Это работает для отображения целей:
set(gca(), 'LooseInset', get(gca(), 'TightInset'));
Должен работать и для печати.
Размер осей в MATLAB иногда может быть немного сложным. Вы правы, чтобы подозревать свойства бумаги в качестве одной из проблем. Другой - автоматические поля, которые рассчитывает MATLAB. К счастью, есть настраиваемые свойства осей, которые позволяют обойти эти поля. Вы можете reset, чтобы поля были достаточно большими для меток осей, используя комбинацию свойств Position
и TightInset
, которые объясняются здесь. Попробуйте следующее:
>> h = figure; >> axes; >> set(h, 'InvertHardcopy', 'off'); >> saveas(h, 'WithMargins.pdf');
и вы получите PDF файл, который выглядит так: но теперь сделайте следующее:
>> tightInset = get(gca, 'TightInset'); >> position(1) = tightInset(1); >> position(2) = tightInset(2); >> position(3) = 1 - tightInset(1) - tightInset(3); >> position(4) = 1 - tightInset(2) - tightInset(4); >> set(gca, 'Position', position); >> saveas(h, 'WithoutMargins.pdf');
и вы получите:
script в Как избавиться от белого поля в резервных копиях MATLAB или выводах печати делает то, что вы хотите.
Мне кажется, что все подходы (решения для обмена файлами, которые не рассматриваются) здесь не имеют существенного шага или, наконец, приводят к нему через некоторые размытые обходные пути.
Размер фигуры должен быть равен размеру бумаги, а белые поля отсутствуют.
A = hgload('myFigure.fig');
% set desired output size
set(A, 'Units','centimeters')
height = 15;
width = 19;
% the last two parameters of 'Position' define the figure size
set(A, 'Position',[25 5 width height],...
'PaperSize',[width height],...
'PaperPositionMode','auto',...
'InvertHardcopy', 'off',...
'Renderer','painters'... %recommended if there are no alphamaps
);
saveas(A,'printout','pdf')
Дает вам выход в формате pdf, поскольку ваша фигура появится точно в нужном размере. Если вы хотите, чтобы это было еще плотнее, вы можете объединить это решение с ответом b3.
Функция export_fig в обмене файлами MATLAB обрезает пробелы вокруг выходного файла PDF/EPS по умолчанию при экспорте фигуры.
Сохранить в EPS, а затем конвертировать в PDF:
saveas(gcf, 'nombre.eps', 'eps2c')
system('epstopdf nombre.eps') %Needs TeX Live (maybe it works with MiKTeX).
Вам понадобится программное обеспечение, которое преобразует EPS в PDF.
system ('/usr/bin/pdfcrop filename.pdf');