如何防止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

在Matlab中呈现的相同代码Windows 64位Luis Mendo: 相同的代码由Luis Mendo在Matlab Windows 64 Bit中呈现

编辑1:错误仍然存​​在于2015b和2016a。 该错误显示在Linux版本中,但不在Windows版本中。

编辑2:一些建议使用内部乳胶翻译。 我认为这不是解决方案,因为如果所有字体被替换为现代倾斜(或斜体?)计算机,它会使代码真的难以阅读。 剧情和单位应该有一种字体,标题和标签必须正确书写。

编辑3:错误仍然存​​在于2017b。


我在Linux机器上使用R2015b,但打印时出现相同的问题。

图表中显示的所有字符串在传递给渲染器之前都会传递给解释器。 解释器'tex' (default)'latex''none'有三种模式。

更改字体

TeX / LaTeX解释器不会检查您的操作系统字体,但会自带一套显示字体,包括:

  • Windows: C:Program FilesMATLAB<version>sysfontsttfcm
  • Linux: <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中设置适当的字体类型。

    链接地址: http://www.djcxy.com/p/33419.html

    上一篇: How to prevent MATLAB printing false space and use wrong fonts?

    下一篇: MATLAB: checkmark in MATLAB figure with LaTeX interpreter