能否将Matlab绘图的字体转换为与LaTeX字体相同?例如,我可以通过以下方式修改绘图的字体:
x = -pi:.1:pi;
y = sin(x);
plot(x,y)
set(gca,'FontName','Helvetica');
是否可以针对LaTeX字体做同样的事情(我说LaTeX字体是因为我不确定LaTeX使用的基本字体的实际名称)。
能否将Matlab绘图的字体转换为与LaTeX字体相同?例如,我可以通过以下方式修改绘图的字体:
x = -pi:.1:pi;
y = sin(x);
plot(x,y)
set(gca,'FontName','Helvetica');
是否可以针对LaTeX字体做同样的事情(我说LaTeX字体是因为我不确定LaTeX使用的基本字体的实际名称)。
我建议在你的脚本/函数开头将默认解释器设置为LaTex:
set(0,'defaulttextinterpreter','latex')
你还可以下载计算机现代字体(LaTeX字体系列)并将其安装到您的电脑上。如果您使用的是Windows或Mac,则可能会有所不同,在Mac上,您需要下载OTF版本并将其添加到FontBook中(Cmd-Space:FontBook)。 set(0,'DefaultTextFontname', 'CMU Serif')
set(0,'DefaultAxesFontName', 'CMU Serif')
这是一个不错的解决方案,可以在你的刻度标签中使用固定字体,尽管它在某些格式下有导出问题。
您可以在LaTeX字符串中定义字体。例如,要在衬线字体(Roman)和无衬线字体(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')
.eps
格式,您可以使用简单的文本编辑器编辑图形,并在其中交换字体。这有点麻烦,但很有效。您还可以单独更改每个字符的间距(因为其位置是硬编码的)。.eps
文件的人来说,编辑它们并不是一件简单的事情。 - jvriesem免责声明:我不是专家。
然而,在linux中,命令fc-list
列出了系统上的所有字体,我认为Matlab支持它们全部。
在Ubuntu(以及可能其他发行版)中,latex字体称为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
命令找到它们所有。
要在图中获得latex字体,只需执行:
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。
此外,如果您想更改字体,更改解释器似乎有些过度。