2

私はLaTeXで多数の画像を作成しています(ほとんどpstricks)。これらの画像の一部は、いくつかのアルゴリズムの進行を示すシーケンスの一部を形成します。プログレッションは、画像にコンテンツを追加または削除します。これは、画像サイズに効果的に影響し、その結果、画像を囲むバウンディングボックスにも影響します。

したがって、私がやりたいのは、あるファイルのバウンディングボックスコンポーネント(たとえば)を抽出し、FileA.epsそれらを別のファイルのバウンディングボックスコンポーネント(たとえば)に置き換えるスクリプト(任意のコマンドライン呼び出し可能言語)を用意することFileB.epsです。これをy-componentsのみに対して、場合によってはx-componentsに対してのみ、場合によっては単一のコンポーネントに対してのみ実行したい場合があります(進行を示すシーケンスによって異なります)。たとえば、latex->dvipsシーケンスを使用して作成された次の2つのファイルについて考えてみます。

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-coordinatesは、元FileB.epsのの-coordinatesを置き換えるために使用されました。この変更はとの両方に当てはまることに注意してください。yFileA.eps%%BoundingBox%%HiResBoundingBox

理想的にboundingboxscriptは、を使用して呼び出される一般的なスクリプトが必要です。

[lang] boundinboxscript FileA.eps FileB.eps

ここ[lang]で、は言語(perlまたはruby)でありFileA.eps、インプレースで編集されます。この議論は、TeX、LaTeX&Friendsのチャットルームから始まりました。私はWindows7を実行しています。

4

1 に答える 1

2

私はperlについて何も知りませんが、多分あなたはこのルビースクリプトを変換することができます:

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 に答える