我在LaTeX中创建了大量图像(主要是pstricks
)。这些图像中的一些形成序列的一部分,显示某些算法的进展。渐进增加或删除图像中的内容,这有效地影响图像大小,从而也影响周围的边界框。
所以我想做的是有一个脚本(在任何命令行可调用语言中),它将提取一个文件的边界框组件(比如FileA.eps
)并用边界框组件替换它们另一个文件(比如FileB.eps
)。有时我想仅针对y
- 组件执行此操作,有时仅针对x
- 组件,有时仅针对单个组件(这取决于显示进度的序列)。例如,考虑使用latex
- > dvips
序列创建的以下两个文件:
FileA.eps
%!PS-Adobe-2.0 EPSF-2.0 %%BoundingBox: 170 378 252 452 %%HiResBoundingBox: 170.340 378.474 251.880 451.626 %%Creator: dvips(k) 5.992 Copyright 2012 Radical Eye Software ...
FileB.eps
%!PS-Adobe-2.0 EPSF-2.0 %%BoundingBox: 148 365 269 478 %%HiResBoundingBox: 148.446 365.940 268.483 477.651 %%Creator: dvips(k) 5.992 Copyright 2012 Radical Eye Software ...
我希望将FileA.eps
更新为
FileA.eps
%!PS-Adobe-2.0 EPSF-2.0 %%BoundingBox: 170 365 252 478 %%HiResBoundingBox: 170.340 365.940 251.880 477.651 %%Creator: dvips(k) 5.992 Copyright 2012 Radical Eye Software ...
其中y
- FileB.eps
坐标用于替换原始y
中的FileA.eps
坐标。请注意,此更改适用于%%BoundingBox
和%%HiResBoundingBox
。
理想情况下,我想要一些使用
调用的通用脚本boundingboxscript
[lang] boundinboxscript FileA.eps FileB.eps
其中[lang]
是语言(如perl
或ruby
),FileA.eps
就地编辑。这个讨论起源于TeX, LaTeX & Friends chat room。我正在运行Windows 7。
答案 0 :(得分: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
的内容。