1

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

4

2 回答 2

4

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

更改解释器的另一种方法是替换_with的任何实例\_- 即使用转义字符。

这可以这样做:

waitbar(k/K,h,strrep(sprintf('Processing %s (%u/%u)',filename,k,K), '_', '\_'));
于 2013-07-12T15:26:07.713 回答
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!');
于 2017-10-13T14:06:14.097 回答