如何在sprintf中更改文本解释器

时间:2013-07-12 15:21:16

标签: matlab

我正在编写一个脚本,该脚本读入文件目录,处理它们,然后将结果写回磁盘。由于这是一个很长的操作(通常是4000个或更多文件),我使用waitbar函数来显示进度:

files = dir('*.bin');
h = waitbar(0,sprintf('Processing (0/%u)',K));
K = numel(files);
for k = 1:K
    filename = files(k).name;
    waitbar(k/K,h,sprintf('Processing %s (%u/%u)',filename,k,K));
    % do stuff to file and save
end
delete(h);

这一切都很好,除了文件名都包含下划线,因此当sprintf呈现waitbar标签时,TeX解释器会将它们全部更改为下标。如果我使用text命令来表示数字,我会指定'Interpreter','none',但sprintf似乎没有该选项。

我知道我可以全局更改解释器,但是我在循环的其他部分使用TeX解释器来在图上显示带注释的数据,所以我更愿意只在本地更改它。有没有办法只为我的等候栏标题更改解释器?

2 个答案:

答案 0 :(得分:4)

sprintf没有解释器,因为它与显示无关。您需要注意的是waitbar

更改解释器的替代方法是将_的任何实例替换为\_ - 也就是说,使用转义字符。

这可以这样做:

waitbar(k/K,h,strrep(sprintf('Processing %s (%u/%u)',filename,k,K), '_', '\_'));

答案 1 :(得分:0)

@Alan指出,sprintf与文本显示无关。您可以将显示文本对象的Interpreter属性设置为none

waitbar案例中,感兴趣的文本对象是其title对象:

hw = waitbar(0, 'Example');
ht = get(get(hw, 'CurrentAxes'), 'title');
set(ht, 'Interpreter', 'none');
waitbar(1, hw, 'Please \do not_interpret me!');