是否可以将 matlab 绘图的字体转换为与乳胶字体相同的字体。例如,我可以通过以下方式修改绘图的字体:
x = -pi:.1:pi;
y = sin(x);
plot(x,y)
set(gca,'FontName','Helvetica');
是否可以对乳胶字体做同样的事情(我说乳胶字体,因为我不确定乳胶用作其基本字体的字体的实际名称)。
我建议在脚本/函数的开头将默认解释器设置为 LaTex:
set(0,'defaulttextinterpreter','latex')
您还可以下载一个版本的 Computer Modern(LaTeX 字体系列)并将其安装到您的机器上。如果您运行的是 windows 或 mac,技术可能会有所不同,对于 Mac,您需要下载 OTF 版本并将其添加到 FontBook(Cmd-Space:FontBook)
接下来,重启Matlab
最后,您可以在 Matlab 中使用 LaTeX 字体:
set(0,'DefaultTextFontname', 'CMU Serif')
set(0,'DefaultAxesFontName', 'CMU Serif')
这是在刻度标签中使用常量字体的一个很好的解决方法,尽管它在以某些格式导出时会遇到一些问题。
您可以在乳胶字符串中定义字体。例如,要在衬线字体(罗马)和无衬线字体(我猜是 Helvetica)之间切换:
text(0.5, 0.8, '\textsf{sans serif}','interpreter','latex')
text(0.5, 0.7, '\textrm{roman}','interpreter','latex')
text(0.5, 0.6, '$$\mathsf{math\,\,mode\,\,sans\,\,serif}$$','interpreter','latex')
text(0.5, 0.5, '$$\mathrm{math\,\,mode\,\,roman}$$','interpreter','latex')
为了真正匹配字体(包括 LaTeX 风格的字距调整、连字等),Matlab 图中的文本需要用 LaTeX 排版。使用psfrag的laprint 脚本是执行此操作的直接方法。
如果您导出到.eps
您可以在之后使用简单的文本编辑器编辑图形并在那里交换字体。这有点繁琐,但可以解决问题。您还可以单独更改每个字符的字距(因为它的位置是硬编码的)。
也可以单独更改每个字符的字体(我有时会这样做,如果需要来自 Latex 的符号(即 Computer Modern),但又需要 Helvetica 中的其余标签)
免责声明:我不是专家。
但是,linux的命令fc-list
列出了您系统上的所有字体,我认为它们都是Matlab支持的。
在 ubuntu(可能还有其他发行版)中,乳胶字体被称为Latin Modern或简称 lm。您可以通过以下方式找到它们:
# fc-list | grep lmroman
/usr/share/texmf/fonts/opentype/public/lm/lmroman10-bold.otf: Latin Modern Roman,LM Roman 10:style=10 Bold,Bold
/usr/share/texmf/fonts/opentype/public/lm/lmroman7-italic.otf: Latin Modern Roman,LM Roman 7:style=7 Italic,Italic
... etc etc...
在冒号和第一个逗号之间写着拉丁现代罗马,这是拉丁现代罗马字体的名称,还有:
\textrm
我认为当您在数学模式的乳胶中调用(罗马)、\textsf
(衬线)等时会使用这些字体。当然,您可以通过fc-list
命令找到它们。
要在绘图中获取乳胶字体,只需执行:
plot(rand(10), 'o');
xlabel('index', 'FontName', 'Latin Modern Roman', 'FontSize', 25);
ylabel('value', 'FontName', 'Latin Modern Roman', 'FontSize', 25);
set(gca, 'FontName', 'Latin Modern Roman', 'FontSize', 25);
结果很好:
PS:Latin Modern 与 Computer Modern 并不完全相同,但它们看起来很相似,我不知道它们到底有多大不同。
关于 Matlab 的解释器选项,据我所知,它并不适用于绘图的所有文本元素,例如斧头标签:
>> plot(rand(10), '.'); set(gca, 'Interpreter', 'latex');
Error using hg.axes/set
The name 'Interpreter' is not an accessible property for an instance of class 'axes'.
不幸的是,matlab 的print
功能存在缺陷,因为它无法将字体嵌入到 eps 或 pdf 文件中。因此,即使在同一系统上,生成的文件也可能具有替换字体。为了解决这个问题,这个库允许你嵌入字体: http: //www.mathworks.com/matlabcentral/fileexchange/23629-export-fig
确保在导出之前将图形的背景设置为白色,并注意库可能会占用大量内存,因为它调用了 ghostscript。
此外,如果您想更改字体,更改解释器似乎有点过头了。
如果您打算将 MATLAB 图形导出到 LaTeX 并想要一致的外观(包括字体),您应该使用matlab2tikz(我曾经开始的一个项目)。