我在 Windows 7 上使用 64 位 matlab r2010a(如果这是一个模糊的渲染错误,这可能是相关的)
这显然是一个奇怪的错误,当文本解释器是 latex 时会出现
set(0, 'DefaultTextInterpreter', 'Latex');
此代码将生成一个带有黑色边框的蓝色框和轴外的图例
cla reset;
patch ([0.5 0.5 0.75 0.75 0.5], [0.5 0.75 0.75 0.5 0.5], 'b', 'FaceAlpha',1);
xlim([0 1]);
ylim([0 1])
legend ('blah', 'Location', 'bestOutside')
如果我更改代码,使补丁具有非不透明的 alpha 值,
cla reset;
patch ([0.5 0.5 0.75 0.75 0.5], [0.5 0.75 0.75 0.5 0.5], 'b', 'FaceAlpha',0.5);
xlim([0 1]);
ylim([0 1]);
legend ('blah', 'Location', 'bestOutside')
我得到一个空的黑框而不是一个填充的黑框,并且轴的大小已正确调整以将图例放在外面但没有图例。
如果我将所有代码运行到图例,补丁也会消失,然后单击图形菜单上的“编辑绘图”。取消选中“编辑图”后,补丁不会重新出现。在单击和取消单击“编辑图”之前和之后,图形和轴属性(分别使用 get(gcf) 和 get(gca))是相同的
调整图形窗口的大小不会导致面片消失。从命令行调整轴的大小:
p = get(gca, 'Position');p(3) = p(3)/2;set (gca, 'Position', p)
不会导致补丁消失。
我已经尝试将 opengl 设置为硬件和软件模式(使用 opengl 硬件,opengl 软件),但没有发现任何区别。
最佳答案
感谢 rasman 尝试重现错误但失败了。这帮助我弄清楚问题是 latex 解释器和 openGL 之间的交互。这显然与 MATLAB 错误 359330 有关
解决方案是单独设置对象的文本属性,而不是使用默认渲染选项(这很痛苦)
总结
使用 OpenGL 将 defaultTextInterpreter 图属性设置为 'latex' 会导致 MATLAB 在打印到 PostScript 时进行 SEGV 或断言 说明
使用 OpenGL 渲染器时,将图窗的 defaultTextInterpreter 属性设置为“latex”,然后打印到 PostScript 或封装的 PostScript 可能会导致 MATLAB 崩溃或断言。例如这段代码,
figure;
axes;
set(gcf,'defaultTextInterpreter','latex');
set(gcf,'renderer','openGL');
print figure.eps;
可能会导致崩溃或断言。在其他时候,MATLAB 命令窗口中可能会出现以下错误:
??? Error using ==> strcat Not enough input arguments.
Error in ==> tex>localCheckValidString at 138 strchk = strcat(str{:});
Error in ==> tex at 111 [err] = localCheckValidString(str);
解决方法
使用 OpenGL 时,不要将 defaultTextInterpreter 属性设置为“latex”。相反,将文本对象的解释器属性单独设置为“latex”。
关于MATLAB:当 faceAlpha 不为 1 时,补丁会在各种情况下消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6218715/