【问题标题】:Prevent matlab from writing CreationDate to an eps file防止 matlab 将 CreationDate 写入 eps 文件
【发布时间】:2011-06-30 08:38:29
【问题描述】:

我正在使用 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 的行,这很脏 - 但这些信息不是很有用吗?跳过创建未更改的文件不是更好吗?
  • 有用的信息是文件不同,版本控制会选择,而不是它有新的创建时间。我可以避免重新创建不会更改的文件,但不像修复它那么容易,如果修复它很容易的话。
  • 因此,正如我所说,您可以使用任何常规工具从输出文件中丢弃(或更改)该行。如果您使用的是 Linux,它可以像 cat input.eps | sed -e '4d' > output.eps(写入 output.eps,除了第 4 行)或任何其他 shell 命令一样简单(且肮脏),具体取决于您的平台。当然,您也可以在 Matlab 中执行此操作,使用文件 I/O 读取输入文件并在没有问题行的情况下写入。

标签: matlab eps


【解决方案1】:

一种解决方案是完全删除该行,并依靠文件系统来跟踪创建/修改日期。这可以使用常见的 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。这已经够脏了。谢谢。
猜你喜欢
  • 2011-01-29
  • 2013-02-28
  • 2020-06-11
  • 1970-01-01
  • 2011-11-21
  • 2013-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多