2

我在 LaTeX 中创建了大量图像(主要是pstricks)。其中一些图像构成了显示某些算法进程的序列的一部分。进程从图像中添加或删除内容,这有效地影响了图像大小,因此也影响了围绕它的边界框。

所以我想做的是有一个脚本(在任何命令行可调用语言中),它将提取一个文件的边界框组件(例如FileA.eps)并将它们替换为另一个文件的边界框组件(例如FileB.eps)。有时我只想为 -components 执行此操作y,有时仅为 -components执行此操作,有时x仅为单个组件执行此操作(这取决于显示进度的顺序)。例如,考虑以下两个使用latex->dvips序列创建的文件:

FileA.eps

%!PS-Adobe-2.0 EPSF-2.0
%%边界框:170 378 252 452
%%HiResBoundingBox:170.340 378.474 251.880 451.626
%%创建者:dvips(k) 5.992 版权所有 2012 Radical Eye Software
...

FileB.eps

%!PS-Adobe-2.0 EPSF-2.0
%%边界框:148 365 269 478
%%HiResBoundingBox:148.446 365.940 268.483 477.651
%%创建者:dvips(k) 5.992 版权所有 2012 Radical Eye Software
...

我想FileA.eps必须更新到

更新FileA.eps

%!PS-Adobe-2.0 EPSF-2.0
%%边界框:170 365 252 478
%%HiResBoundingBox:170.340 365.940 251.880 477.651
%%创建者:dvips(k) 5.992 版权所有 2012 Radical Eye Software
...

其中y-coordinatesFileB.eps用于替换y原始 中的 -coordinates FileA.eps。请注意,此更改适用于%%BoundingBox%%HiResBoundingBox

理想情况下,我想要一些boundingboxscript使用调用的通用脚本

[lang] boundinboxscript FileA.eps FileB.eps

语言在哪里[lang](如perlor ruby)并且FileA.eps是就地编辑的。这个讨论起源于TeX, LaTeX & Friends 聊天室。我正在运行 Windows 7。

4

1 回答 1

2

我对 perl 一无所知,但也许你可以转换这个 ruby​​ 脚本:

outfile = ARGV[0]
infile = ARGV[1]
opts = ARGV[2]
unless File.read(infile) =~ /%%BoundingBox: (\d+) (\d+) (\d+) (\d+)/
  puts "Invalid input file."
  exit!
else
  x, y, w, h = $1, $2, $3, $4
  eps = File.read(outfile).sub(/%%BoundingBox: (\d+) (\d+) (\d+) (\d+)/) do
    x = $1 unless opts.include? "x"
    y = $2 unless opts.include? "y"
    w = $3 unless opts.include? "w"
    h = $4 unless opts.include? "h"
    "%%BoundingBox: #{x} #{y} #{w} #{h}"
  end
  File.write(outfile, eps)
end

调用:

ruby boundinboxscript.rb FileA.eps FileB.eps xywh

最后一个选项是您要从中获取FileB.eps和放入的内容FileA.eps

于 2012-12-16T13:55:45.317 回答