【发布时间】:2015-06-06 18:57:31
【问题描述】:
Matlab 2015a 在长字符串中的 µ 之前插入空格,但不在短字符串中 (xlabel)。在某些情况下,可以使用 UTF-8 字母来解决,但在其他情况下会失败(请参阅 ^2)
文本的字体应该是Helvetica,但看起来不同。虽然get Fontname 返回Helvetica。
这是 MATLAB 中的一个错误,已报告。我不想等几个月直到 MATHWORKS 修复这个错误。
我怎样才能自己修复这个错误?我尝试将渲染器更改为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 渲染的代码
Luis Mendo 在 Matlab Windows 64 位中呈现的相同代码:
编辑 1:该错误在 2015b 和 2016a 中仍然存在。该错误出现在 Linux 版本中,但未出现在 Windows 版本中。
编辑 2:有人建议使用内部乳胶解释器。我认为这不是解决方案,因为如果所有字体都被替换为倾斜(或斜体?)计算机现代,它会使代码非常难以阅读。绘图和单位应使用一种字体,标题和标签必须直立。
编辑 3:该错误在 2017b 中仍然存在。
【问题讨论】:
-
这里的一个问题是,Matlab 字符串是decidedly not Unicode,所以 µ 的工作原理本身就令人惊叹。您可能至少想输入unicode2native。
-
在我的 R2015a(Windows 7、64 位)上,ylabel 没有多余的空间
-
horchler 在这里是正确的,Windows 对 Helvetica 很狡猾,会默默地用 Arial 代替它(Windows 领域深处有一个注册表项,将 Helvetica 别名为 Arial:technet.microsoft.com/en-us/library/cc939628.aspx)。事实上,对于非 MATLAB 的网页设计师来说,这是一个常见的陷阱。
-
@Mike'Pomax'Kamermans 关于您之前的评论,从 R2014b(新的 HG2 图形)开始,MATLAB 可以更好地处理 unicode 字符串,无论是作为字符串还是在绘图中:mathworks.com/products/matlab/matlab-graphics/…。示例:
mu=char(956); text(0.5,0.5,mu); xlabel(mu); title(mu) -
peng 的建议等同于显式指定
Interpreter属性,如:xlabel(str, 'Interpreter','latex')(title和text调用相同):mathworks.com/help/matlab/creating_plots/…。请注意,“tex”和“latex”解释器不是一回事:mathworks.com/help/matlab/creating_plots/…
标签: linux matlab plot fonts spaces