matlab中的Latex字体

时间:2012-06-26 16:49:21

标签: matlab latex

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

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

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

7 个答案:

答案 0 :(得分:12)

对于任何文本对象,您只需将“Interpreter”属性设置为“latex”即可。所以,例如你可以做

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

对于刻度标签,它是more difficult,但可能有文件可以使其更容易(example)。

答案 1 :(得分:6)

我建议在脚本/函数的开头将默认解释器设置为LaTex:

set(0,'defaulttextinterpreter','latex')

您也可以download a version of Computer Modern(LaTeX字体系列)并将其安装到您的计算机上。如果您正在运行Windows或Mac,技术可能会有所不同,对于Mac,您需要下载OTF版本并将其添加到FontBook(Cmd-Space:FontBook)

接下来,重启Matlab

最后,您可以在Matlab中使用LaTeX字体:

   set(0,'DefaultTextFontname', 'CMU Serif')
   set(0,'DefaultAxesFontName', 'CMU Serif')

这是一个很好的解决方法,可以在刻度标签although it has some trouble exporting in some formats.

中使用常量字体

答案 2 :(得分:3)

您可以在乳胶字符串中定义字体。例如,要在serif字体(Roman)和sans 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')

答案 3 :(得分:2)

对于字体的真实匹配(包括LaTeX风格的字距调整,连字等),Matlab图中的文本需要使用LaTeX进行排版。使用laprint scriptpsfrag是一种直接的方式。

答案 4 :(得分:2)

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

也可以单独更改每个字符的字体(如果需要来自Latex的符号(即计算机现代版),我有时会这样做,但是希望再次使用Helvetica中的其他标签)

答案 5 :(得分:2)

免责声明:我不是专家。

但是,linux的命令fc-list列出了系统中的所有字体,我认为它们都是Matlab支持的。

在ubuntu(可能还有其他发行版)中, latex font 被称为拉丁现代,或简称为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...

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

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

我认为在mathmode中的latex中调用\textrm(罗马),\textsf(serif)等等时会使用这些字体。当然,您可以通过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);

结果很不错:

example plot

PS:拉丁现代与Computer Modern不完全相同,但它们看起来很像,我不知道它们真正有多大差异。

关于Matlab的解释器选项,据我所知,它不适用于绘图的所有文本元素,如ax标签:

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

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

答案 6 :(得分:0)

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