如何在MATLAB中为自定义数据提示使用TeX/LaTeX格式?

如何在MATLAB中为自定义数据提示使用TeX/LaTeX格式?,matlab,latex,symbols,string-formatting,datatipfunction,Matlab,Latex,Symbols,String Formatting,Datatipfunction,我试图用标有“R:…,θ:…”的数据提示来注释极坐标图,其中θ实际上是希腊符号,而不是拼写出来的单词。我熟悉使用“\theta”生成符号的字符串格式,但在这种情况下不起作用。有没有办法将LaTeX解释器应用于数据提示?以下是我目前掌握的情况: f1=figure; t=pi/4; r=1; polar(t,r,'.'); dcm_obj = datacursormode(f1); set(dcm_obj,'UpdateFcn',@polarlabel) info_struct = getCurs

我试图用标有“R:…,θ:…”的数据提示来注释极坐标图,其中θ实际上是希腊符号,而不是拼写出来的单词。我熟悉使用“\theta”生成符号的字符串格式,但在这种情况下不起作用。有没有办法将LaTeX解释器应用于数据提示?以下是我目前掌握的情况:

f1=figure;
t=pi/4;
r=1;
polar(t,r,'.');
dcm_obj = datacursormode(f1);
set(dcm_obj,'UpdateFcn',@polarlabel)
info_struct = getCursorInfo(dcm_obj);
datacursormode on
其中,polarlabel的定义如下:

function txt = polarlabel(empt,event_obj)
pos = get(event_obj,'Position');
x=pos(1);
y=pos(2);
[th,r]=cart2pol(x,y);
txt = {['R: ',num2str(r)],...
    ['\Theta: ',num2str(th*180/pi)]};

更新:此解决方案主要适用于R2014a及更高版本,因为对于较新版本,尤其是R2014b及更高版本,它似乎无法使用。对于使用新手柄图形系统的较新版本,可以找到解决方案


出于某种奇怪的原因,MATLAB中的强制设置数据提示文本以逐字显示,而不是使用TeX/LaTeX解释(即使用户同意这样做)。似乎也无法通过数据光标模式对象属性直接设置文本属性

然而,我找到了一个解决办法。如果将以下内容添加到
polarlabel
函数的末尾,则文本应正确显示:

set(0,'ShowHiddenHandles','on');                       % Show hidden handles
hText = findobj('Type','text','Tag','DataTipMarker');  % Find the data tip text
set(0,'ShowHiddenHandles','off');                      % Hide handles again
set(hText,'Interpreter','tex');                        % Change the interpreter
解释 在图形中创建的每个图形对象都必须具有一个。对象有时设置为“关闭”,因此它们的句柄不会显示在其父对象的子对象列表中,从而使它们更难找到。解决此问题的一种方法是将的设置为
'on'
。这将允许您使用查找具有特定属性的图形对象的句柄。(注意:您也可以使用而不用担心
'ShowHiddenHandles'
设置)

打开并单击绘图将创建一个,其中一个子项是显示的文本的子项。上面的代码找到此文本对象,并将更改为
'tex'
,以便正确显示θ符号


从技术上讲,上述代码只需调用一次,而不是每次调用
polarlabel
。但是,文本对象直到您第一次单击绘图以显示数据提示(即第一次调用
polarlabel
)时才存在,因此代码必须进入数据光标模式对象的
UpdateFcn
,以便显示的第一个数据提示具有正确的文本格式。

感谢gnovice,这个解决方案非常有效!很好的解释。您可以将
findobj
替换为
findall
,无论
ShowHiddenHandles
属性如何,它都可以工作。对于记录,这似乎在R2015a中已被打破。现在就来看看。答案就在这里,对于使用hg2的新版本