当图形保存为PDF时,为什么Matlab使用Latex在文章中放置文本空间?

时间:2017-07-31 19:16:37

标签: matlab pdf latex matlab-figure legend

我试图在Matlab中添加一个包含Latex中符号的图例。当我绘制图形时,图例看起来很好。但是,当我将图形导出为PDF时,图例会将空格放入其中。我不知道为什么会这样。示例代码如下:

set(groot,'defaultLineLineWidth',2,'defaultAxesFontSize',...
    12,'defaultAxesFontName','timesnewroman',...
    'defaulttextinterpreter','latex')
x0 = 8;
y0 = 5;
width = 5;
height = 4;
kappa1 = 0.1;
kappa2 = 0.5;
f = linspace(0,2*pi,1000);
y1 = sin(f+kappa1*f.^2);
y2 = sin(f+kappa2*f.^2);

figure(1)
hold on
plot(f,y1,'k')
plot(f,y2,'b')
xlabel('Frequency (MHz)')
ylabel('Amplitude')
legend(strcat('\kappa = 0.1 MHz/','\mu','s'),...
    strcat('\kappa = 0.5 MHz/','\mu','s'))
grid on;
set(gcf,'units','inches','Position',[x0,y0,width,height],...
    'PaperPositionMode','Auto','PaperUnits','Inches',...
    'PaperSize',[width, height]);
saveas(gcf,'legendtest.pdf')

将文件另存为PDF时,似乎发生了错误。它保存为JPG就好了。以下是我得到的两张照片。 jpg是:

testlegendjpg

但我得到的PDF是:

enter image description here

我在运行OS 10.12.5的Mac上使用Matlab版本R2017a。在此先感谢您的帮助!

2 个答案:

答案 0 :(得分:6)

这是一个已知的错误。请参阅bug report,因为它会影响从R2014b到R2017a的版本。该错误报告中还建议了一种解决方法,即通过将Renderer设置为opengl来生成pdf文件,即

set(gcf,'Renderer','opengl');

但是生成的pdf文件包含像素图形而不是矢量图形。

更好的方法是使用相应的unicode值来生成矢量图形。即。

legend([char(954), ' = 0.1 MHz/',char(956),'s'],...
    [char(954), ' = 15 MHz/',char(956),'s']); %char(954) equals 'κ', char(956) equals 'μ'

如果您想使用斜体字符,也可以使用unicode字符。

legend([char([55349,57093]), ' = 0.1 MHz/',char([55349,57095]),'s'],...
    [char([55349,57093]), ' = 15 MHz/',char([55349,57095]),'s']); 
%char([55349,57093]) equals '' (italic κ), char([55349,57095]) equals '' (italic μ)

答案 1 :(得分:5)

另一种解决方法是使用Latex解释整个图例文本:

$

它需要一些基本的乳胶知识,例如你必须用strcat包裹所有数学符号(kappa,mu),并注意是否要使用任何特殊的非英语字符。稍微改变了图例的外观,但可以说是更好。

顺便说一下,你可以跳过h = legend('$\kappa$ = 0.1 MHz/$\mu$s',... '$\kappa$ = 0.5 MHz/$\mu$s') set(h,'Interpreter','latex') ,它没有任何用途。

{{1}}

同样适用于非乳胶版本。