防止Matlab将CreationDate写入eps文件

4

我正在使用Matlab将图形保存为EPS文件,以在LaTeX中使用,具体操作如下:

print( '-depsc', 'filename.eps');

我将那些eps文件放在版本控制中。由于我一次生成了很多图形,但只更改其中一两个,因此一个特定的eps文件中通常唯一的变化是:

-%%CreationDate: 06/29/2011  17:52:57
+%%CreationDate: 06/30/2011  19:18:03

这并不是有价值的信息。有没有办法阻止Matlab写入CreationDate?

鼓励使用不太优雅的解决方案...


你可以编写一个脚本,在文件创建后覆盖CreationDate行,这是不规范的 - 但是那些信息不是有用的吗?跳过那些没有更改的文件不是更好吗? - Itamar Katz
有用的信息是文件已经不同,版本控制会注意到这一点,而不是它有一个新的创建时间。如果修复这个问题容易的话,我可以避免重新创建那些没有变化的文件,但不像修复这个问题容易。 - Alex
1
所以,正如我所说的那样,您可以使用任何传统工具来丢弃(或更改)输出文件中的那行。如果您正在使用Linux,则可以像这样轻松(而肮脏)地执行:cat input.eps | sed -e '4d' > output.eps(将除第4行之外的所有内容写入output.eps),或者根据您的平台使用任何其他shell命令。当然,您也可以在Matlab中使用文件I/O读取输入文件并将其写入没有问题的行。 - Itamar Katz
1个回答

4

一种解决方案是完全删除该行,并依靠文件系统来跟踪创建/修改日期。可以使用常见的shell工具以许多种方式完成此操作:

# sed
sed -i file.eps '/^%%CreationDate: /d'

或者

# grep
grep -v '^%%CreationDate: ' file.eps > tmp && mv tmp file.eps

如果你使用的是Windows电脑,MATLAB应该自带Perl解释器:

# perl
perl -i -ne 'print if not /^%%CreationDate: /' file.eps

在MATLAB内部,您可以尝试以下方法调用一行Perl程序:

%# construct command, arguments and input filename (with quotes to escape spaces)
cmd = ['"' fullfile(matlabroot, 'sys\perl\win32\bin\perl.exe') '"'];
args = ' -i.bak -ne "print if not /^%%CreationDate: /" ';
fname = ['"' fullfile(pwd,'file.eps') '"'];

%# execute command
system([cmd args fname])

啊,是的,我忘了我可以从Matlab中使用Perl。这很不错。谢谢。 - Alex

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