我正在编写一个脚本,该脚本读入文件目录,处理它们,然后将结果写回磁盘。由于这是一个很长的操作(通常是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解释器来在图上显示带注释的数据,所以我更愿意只在本地更改它。有没有办法只为我的等候栏标题更改解释器?
答案 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!');