有没有可能绕过MATLAB';矢量格式文件中字体嵌入的限制?

有没有可能绕过MATLAB';矢量格式文件中字体嵌入的限制?,matlab,matlab-figure,Matlab,Matlab Figure,根据MATLAB手册,当您使用print或选择file | save保存图形时,如果您选择painters渲染器并保存为PDF或EPS矢量格式。有没有办法绕过这个限制 每当我输出图形时,无论是使用print还是export\u fig,字体都会被替换,因此它们不再与我计划将图形放入的文档中的字体匹配。我更喜欢将它们保持为矢量格式,因为我使用LaTeX,因此我希望能够在文档中使用与我的beamer演示文稿相同的图形,并使它们能够在不增加文件大小的情况下进行良好缩放。如果我正确阅读该链接,并不是所有

根据MATLAB手册,当您使用
print
或选择
file | save
保存图形时,如果您选择
painters
渲染器并保存为PDF或EPS矢量格式。有没有办法绕过这个限制


每当我输出图形时,无论是使用
print
还是
export\u fig
,字体都会被替换,因此它们不再与我计划将图形放入的文档中的字体匹配。我更喜欢将它们保持为矢量格式,因为我使用LaTeX,因此我希望能够在文档中使用与我的
beamer
演示文稿相同的图形,并使它们能够在不增加文件大小的情况下进行良好缩放。

如果我正确阅读该链接,并不是所有字体都会被替换。发件人:

下表列出了MATLAB PostScript和Ghostscript驱动程序在使用Painters渲染器(完全矢量化输出)生成时支持的字体。Windows和UNIX都支持相同的字体集:

因此,如果您使用上述字体之一,输出向量格式的图形应保持正确的字体。例如,见:

list_fonts = listfonts
figure('renderer','painters'),
plot(peaks),
xlabel('this font is Helvetica','fontname','Helvetica','fontsize',24)
set(gcf,'paperpositionmode','auto')
print(gcf,'-depsc2','test1.eps')
产生:


因此,从上面的列表中选择一种字体,字体将正确输出。否则,请将演示文稿中的字体更改为与上述字体之一匹配。

我也多次遇到此问题,我有一种简单但有效的方法(在Windows上,需要GSview)

1) 将图另存为PDF

2) 将PDF另存为ps

3) 使用GSview打开ps,然后单击“文件->ps到EPS”,指定文件名并完成


希望这有帮助。

这有两个问题。首先,这些数字是一份科学杂志的,我必须遵循他们的字体指南。第二,我没有那些字体。例如,如果我试图在Illustrator中打开生成的PDF,我会得到一个错误,说Helvetica不可用。显然,它们必须在我的计算机上的某个地方,但我不知道如何使它们对我的计算机的其余部分可见。除此之外,还有更好的字体,特别是如果我想在我的数字中加入数学符号的话。@Craigm一个陪审团操纵的解决方案。。。为什么不使用courier字体(或保证您的计算机可以访问的字体)导出它们,然后在illustrator/inkscape中打开图形并更改字体?或者,导出没有标签的图形,然后在illustrator/inkscape中添加它们?这就是我一直在做的。我希望能想出一个跳过这一步的方法。理想情况下,我将能够有一个脚本,它将获取我的数据,对数据进行任何需要的操作和分析,并吐出一个日志就绪的数字,这样当我需要进行更改时,我只需调整脚本并重新运行它,而不必从头开始修改字体,由于替换字体的大小和间距都与原始字体不同,因此我不能只是搜索和替换,而是必须用记号和轴重新对齐标签。我所在组织的演示模板使用Electra和Avenir字体,内部报告模板也是如此。美国物理学会期刊使用RevTeX,它使用现代计算机。这是除此之外的一点,因为在2013年以及我的组织为MATLAB支付的费用中,我不应该局限于20-30年前硬编码到postscript打印机中的字体。+提供此ListPS文件的是一个文本脚本,您可以尝试通过搜索和替换自己更改字体名称。当我遇到代码页问题时,我不得不这样做。
list_fonts = listfonts
figure('renderer','painters'),
plot(peaks),
xlabel('this font is Helvetica','fontname','Helvetica','fontsize',24)
set(gcf,'paperpositionmode','auto')
print(gcf,'-depsc2','test1.eps')