如何防止MATLAB打印虚假空间和使用错误的字体?
Matlab 2015a在长字符串中插入μ之前的空格,但不是短字符串(xlabel)。 在某些情况下,可以使用UTF-8字母解决问题,但在其他情况下会失败(请参阅^ 2)
文本的字体应该是Helvetica
但看起来不同。 虽然get Fontname
返回Helvetica
。
这是MATLAB中的一个错误,已经有报道。 我不想等到MATHWORKS修复这个bug。
我怎样才能解决这个错误我自己? 我尝试将渲染器更改为opengl
,但这会混淆更糟糕的所有字体。
plot([2014 2015 2016], [0 1 0])
xlabel('MATLAB (mu)')
ylabel('Space-bugs (mum^2) (µm²) (µm^2)')
title('Number of wrong spaces in MATLAB')
textTT = text(2015-1, 1/2,'ugliest plot bugs ever', 'FontSize', 20, 'FontName', 'Helvetica');
text(2015, 1/3, get(textTT, 'Fontname')) % says Helvetica, but lies.
print -depsc2 -r864 -painters '/tmp/test.eps'
print -dpdf -r864 -painters '/tmp/test.pdf'
代码在Linux 64位上的Matlab 2015a中呈现
在Matlab中呈现的相同代码Windows 64位Luis Mendo:
编辑1:错误仍然存在于2015b和2016a。 该错误显示在Linux版本中,但不在Windows版本中。
编辑2:一些建议使用内部乳胶翻译。 我认为这不是解决方案,因为如果所有字体被替换为现代倾斜(或斜体?)计算机,它会使代码真的难以阅读。 剧情和单位应该有一种字体,标题和标签必须正确书写。
编辑3:错误仍然存在于2017b。
我在Linux机器上使用R2015b,但打印时出现相同的问题。
图表中显示的所有字符串在传递给渲染器之前都会传递给解释器。 解释器'tex' (default)
, 'latex'
和'none'
有三种模式。
更改字体
TeX / LaTeX解释器不会检查您的操作系统字体,但会自带一套显示字体,包括:
C:Program FilesMATLAB<version>sysfontsttfcm
<MATLAB root><version>sysfontsttfcm
对我来说,我有BaKoMa字体集合的第一部分(根据我的自述)。 以下字体是aviable(对我来说):
============================ Basic text fonts ==========================
cmr 5 6 7 8 9 10 12 17
cmbx 5 6 7 8 9 10 12
cmti 7 8 9 10 12
cmsl 8 9 10 12
cmcsc 8* 9* 10
cmtex 8 9 10
cmb 10
cmbxsl 10
cmbxti 10
其中cm = computer modern
(从我可以说)。
所以,即使您告诉matlab将其绘制在Helvetica中,matlab也会将其传递给TeX,而TeX不知道Helvetica是什么,而只是使用其默认字体。 人们可以考虑添加helvetica manualy,但我没有进一步探索。
处理(烦人的)空间
要删除ylabel
中的空格,您可以传递一个乳胶字符串。 对于这个改变
ylabel('Space-bugs (mum^2) (µm²) (µm^2)')
至
ylabel('Space-bugs ($mu m^2$) ($mu m^2$) ($mu m^2$)','interpreter','latex');
但是,这将使用cmr
(计算机现代常规)字体而不是Helvetica,但删除空间错误。
为了避免图中混合字体,可以将所有文本字段的解释器更改为latex
。 除非你的操作系统上具有computer modern
字体,否则你可以简单地在matlab中设置适当的字体类型。
上一篇: How to prevent MATLAB printing false space and use wrong fonts?
下一篇: MATLAB: checkmark in MATLAB figure with LaTeX interpreter