如何防止 MATLAB GUI 中的 LATEX 标签变模糊?

8
在我的当前MATLAB GUI项目中,我有两个轴对象。第一个被工作 "uibutton"(我不使用GUIDE)用于显示LaTeX公式(据我所知,只有轴标签能够使用LaTeX,而普通的静态文本字段则不能……)。另一个轴对象用于实际绘制3D函数。
程序步骤如下:
1. 第一个轴创建LATEX公式(例如f(x)=)。 2. 用户在LaTeX公式后的编辑框中输入函数(例如f(x)=a+b)。 3. 用户按下“绘图”按钮。 4. 3D函数在第二个轴对象中绘制。
问题:
一旦绘制3D函数,漂亮渲染的LaTeX公式就会变得模糊。有没有办法防止这种情况发生?

Problem Demonstration

http://i42.tinypic.com/348pq2u.png(查看图片以展示问题)


dieterw,有趣的问题!我能提供的是,如果你想的话,你可以直接在SO上上传你的图片。 - macduff
嘿,麦克达夫,感谢您的快速回复。是的,我也考虑过这个问题,但问题是,如果用户调整窗口大小,图片会变得像素化。如果这些LaTeX字体在调整大小时重新渲染,则不会发生这种情况。 - dieterw
哇!太棒了,你的推理能力真是一流!我相信你在 Stack Overflow 上会走得更远! - macduff
2
MATLAB文档建议您可以直接将普通文本字段转换为LaTeX- http://www.mathworks.com/help/techdoc/creating_plots/f0-4741.html#bq558_t。在您运行的版本中不是这样吗?以这种方式操作可能会避免问题。您还可以使用LaTeX第二次创建轴,以便它们不会出现在第二组“后面”,这可能会干扰渲染器。 - tmpearce
为了日后参考,你是通过直接更改文本字段还是更改轴创建的顺序,取得了什么样的效果? - tmpearce
抱歉,我的反馈不够清晰。我想说的是:
  1. 直接使用LaTeX的参考方法非常完美,因此不再需要使用uibutton-workaround。
  2. 不幸的是,原始问题仍未解决。绘制LaTeX公式后,它们仍然变得模糊。更改创建顺序并没有影响这个问题。
我猜测MATLAB使用不同的方法来呈现LaTeX字体和3D图形。如果我绘制一个2D函数,这个问题就不会出现。 也许需要为不同类型的轴定义不同的渲染器。
- dieterw
1个回答

2

在绘制3D图之前和之后检查您的图形属性

get(gcf, 'renderer')

我的猜测是绘制3D函数会将渲染器从默认的“painters”更改为另一个(可能是OpenGL)。Matlab的Latex渲染似乎与zbuffer或OpenGL不兼容(这些会产生位图而非线条艺术)。如果painters无法正确渲染您的3D图形,则可能会遇到困难,但您可以尝试通过手动将渲染器设置回painters来强制执行。
set(gcf, 'renderer', 'painters')

谢谢回答。我尝试了那个,确实,通过强制绘图器渲染,LaTeX字体保持平滑,但正如您已经猜到的那样,3D图形无法正确渲染。由于无法为一个轴/图形设置不同的渲染器,我的想法是在一个窗口中定义两个不同的图形(一个带有LaTeX标签,一个带有3D图),并为每个图形设置不同的渲染器。 我得尝试一下,也许明天吧。 或者,这是否可能? - dieterw
1
@dieterw 我发现如果你需要从MATLAB获得出版质量的图形,并且你要结合线条和补丁,通常必须单独创建每个组件,然后在图形程序中将它们组合起来,比如Adobe Illustrator。在这里,你也可以直接在Illustrator中添加文本。 - Marc
非常有信息量。我猜线图等于二维图,而补丁则等于三维图?问题是我写的这个程序用于演示一些微观经济学函数,我的教授应该能够在一侧更改参数(因此使用LaTeX标签),并在另一侧查看三维图。如果我想在一个文档中发布两者,我想你的方法可能是最佳的。 - dieterw
好的,两个图形解决方案似乎很合理,但我继续搜索并找到了此帖子,它反过来指向Myaa,该工具可以使用简单的myaa(4)命令对latex标签或图例进行抗锯齿处理。 - alexey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接