鉴于Simulink框图(模型),我想制作一个稍后将在LaTeX文档中使用的“屏幕截图”。我希望这个截图是PDF(矢量图形, - > pdflatex),带有一个紧密的边界框,我的意思是图表周围没有不必要的空白区域。
我搜索了网络,搜索了stackexchange,搜索了matlab doc。但到目前为止没有成功。一些说明:
pdfcrop
等其他软件的解决方案。 print
modelName = 'vdp'; % example system
load_system(modelName); % load in background
% print to file as pdf and as jpeg
print(['-s',modelName],'-dpdf','pdfOutput1')
print(['-s',modelName],'-djpeg','jpegOutput1')
JPEG看起来不错,边框很紧。 PDF以一个看起来像A4或usletter的页面为中心。不是我想要的。
打印程序框图有几个参数。请参阅Simulink参考页面http://www.mathworks.com/help/simulink/slref/model-parameters.html。让我们摘一些:
modelName = 'vdp'; % example system
load_system(modelName); % load in background
PaperPositionMode = get_param(modelName,'PaperPositionMode');
PaperUnits = get_param(modelName,'PaperUnits');
PaperPosition = get_param(modelName,'PaperPosition');
PaperSize = get_param(modelName,'PaperSize');
根据文档,PaperPosition
包含四个元素向量[left, bottom, width, height]
。最后两个元素指定边界框,前两个指定边界框左下角与纸张左下角的距离。
现在,当我打印PDF输出并使用标尺进行测量时,我发现边界框和左下角位置的值都是完全错误的(是的,我已在PaperUnits
中测量过)。那是一个真正的无赖。我本可以计算边距以剪掉要在\includegraphics[clip=true,trim=...]{pdfpage}
中使用的纸张。
当然我最初想要的是已经裁剪过的PDF。有一个数字的解决方案,它是这样的:你将边界框移动到纸张的左下角,然后将纸张大小更改为边界框的大小。
oldPaperPosition = get_param(modelName,'PaperPosition');
set_param(modelName,'PaperPositionMode','manual');
set_param(modelName,'PaperPosition',[0 0 oldPaperPosition(3:4)]);
set_param(modelName,'PaperSize',oldPaperPosition(3:4));
对于simulink模型,这有两个问题。 PaperSize
是模型的只读参数。更改PaperPosition
对输出完全没有影响。
我的想法真的没用了。
编辑----------------------------------
好的,为了让您了解最新消息:我与Matlab的支持人员讨论过此事。
答案 0 :(得分:1)
您可以尝试export_fig
导出数据。所见即所得!由于媒体制作的高质量和便携性,此功能特别适合出口用于出版物和演示文稿的数字。
答案 1 :(得分:1)
为什么你不喜欢使用pdfcrop?
我的代码完美无缺,一切都在Matlab中:
function prints(name)
%%Prints Print current simulink model screen and save as eps and pdf
print('-s', '-depsc','-tiff', name)
print('-s', '-dpdf','-tiff', name)
dos(['pdfcrop ' name '.pdf ' name '.pdf &']);
end
你只需要使用" dos"来调用 pdfcrop 。命令,它的工作正常!
答案 2 :(得分:0)
在 2021a 上,您有导出图形。 漂亮的pdf图片。
figure(3);
plot(Time.Data,wSOHO_KpKi.Data,'-',Time.Data,Demanded_Speed.Data,'--');
grid;
xlh = xlabel('$\mathrm{t\left [ s \right ]}$','interpreter','latex',"FontSize",15);
ylh = ylabel('$\mathrm{\omega _{m}\left [ rads/s \right ]}$','interpreter','latex',"FontSize",15);
xlh.Position(2) = xlh.Position(2) - abs(xlh.Position(2) * 0.05);
ylh.Position(1) = ylh.Position(1) - abs(ylh.Position(1) * 0.01);
exportgraphics(figure(3),'Grafico de Escalon Inicial velocidad estimada por algoritmo SOHO-KpKi.pdf');