21

是否可以将 matlab 绘图的字体转换为与乳胶字体相同的字体。例如,我可以通过以下方式修改绘图的字体:

x = -pi:.1:pi;
y = sin(x);
plot(x,y)
set(gca,'FontName','Helvetica');

是否可以对乳胶字体做同样的事情(我说乳胶字体,因为我不确定乳胶用作其基本字体的字体的实际名称)。

4

7 回答 7

14

对于任何文本对象,您只需将“解释器”属性设置为“乳胶”。所以,例如你可以做

xlabel('$$\int_0^x\!\int_y dF(u,v)$$','Interpreter','latex');

对于刻度标签,它更难,尽管可能有文件可以使它更容易(示例)。

于 2012-06-26T17:19:29.747 回答
9

我建议在脚本/函数的开头将默认解释器设置为 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')

这是在刻度标签中使用常量字体的一个很好的解决方法,尽管它在以某些格式导出时会遇到一些问题。

于 2013-06-04T00:05:00.537 回答
4

您可以在乳胶字符串中定义字体。例如,要在衬线字体(罗马)和无衬线字体(我猜是 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')
于 2012-06-26T18:02:39.450 回答
3

为了真正匹配字体(包括 LaTeX 风格的字距调整、连字等),Matlab 图中的文本需要用 LaTeX 排版。使用psfraglaprint 脚本是执行此操作的直接方法。

于 2012-06-26T19:32:27.723 回答
2

如果您导出到.eps您可以在之后使用简单的文本编辑器编辑图形并在那里交换字体。这有点繁琐,但可以解决问题。您还可以单独更改每个字符的字距(因为它的位置是硬编码的)。

也可以单独更改每个字符的字体(我有时会这样做,如果需要来自 Latex 的符号(即 Computer Modern),但又需要 Helvetica 中的其余标签)

于 2013-11-21T15:59:06.943 回答
2

免责声明:我不是专家。

但是,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...

在冒号和第一个逗号之间写着拉丁现代罗马,这是拉丁现代罗马字体的名称,还有:

  • 拉丁现代Sans
  • 拉丁现代罗马帽
  • 拉丁现代单声道
  • 等等等等

\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。

此外,如果您想更改字体,更改解释器似乎有点过头了。

于 2015-02-24T17:49:19.510 回答
0

如果您打算将 MATLAB 图形导出到 LaTeX 并想要一致的外观(包括字体),您应该使用matlab2tikz(我曾经开始的一个项目)。

于 2013-09-12T16:47:03.723 回答