BoundingBoxの調整

LaTeXに図を取り込む場合,図のサイズがわかるようにBoundingBoxが必要です。

EPSの場合は普通にBoundingBoxが含まれているはずなのですが,時々,おかしな値が書かれていて,図を取り込むとうまく収まらない,ということがあります。そのような場合はgvなどで表示して座標を読み取って手動でBoundingBoxを書き換える,ということも可能ですが,自動でやってくれるありがたいプログラムもあるようです。

ここに紹介されていますが,以下のようにやればよいようです。

epstool --copy --bbox hoge.eps hoge_mod.eps

これは便利です。

epsだとファイルが大きすぎてどうにもならない場合,pngで取り込むことがあります。pngにはBoundingBoxなんてないのでそれを出力するebbというプログラムを使います。

ebb hoge.png

とやるとhoge.bbというファイルが出力されます。このファイルを正しく処理するためには,

\usepackage[dvipdfm]{graphicx}

というようにdvipdfmのオプションをつけたgraphicxを使わなくてはなりません。dvipsなどのドライバ(古い!だけど,個人的にはまだ使うことがある)ではそもそもpngの取り込みができません。
posted by MOR at 17:42Comment(0)General

ファイル名の一部をまとめて変更する

たくさんのファイルがあって,ファイル名の一部だけを系統的に変えたい場合があります。その場合,cshではforeachを使えばよいのですが,拡張子を取り除いたファイル名を使ってファイル名を加工すると便利です。

cshの変数に代入されているファイル名から一部を取り出すには,修飾子を使います。

:r 拡張子を取り除く
:h パス名を取り出す
:e 拡張子を取り出す
:t ファイル名と拡張子を取り出す。

例えば拡張子を取り除くならば以下のようにします。

set name = hoge_fuga.txt
echo $name:r

このときの出力はhoge_fugaです。

ファイル名を一括で変更するためには以下のようにします。%はcshのプロンプト,foreach?はforeachのプロンプトです。

% ls
ARI_TNT_H01_phy.dat
NNA_TNT_H01_phy.dat
OKG_TNT_H01_phy.dat
OKR_TNT_H01_phy.dat
TRY_TNT_H01_phy.dat
%
% foreach I (*phy.dat)
foreach? echo $I
foreach? mv $I $I:r_org.dat
foreach? end
ARI_TNT_H01_phy.dat
NNA_TNT_H01_phy.dat
OKG_TNT_H01_phy.dat
OKR_TNT_H01_phy.dat
TRY_TNT_H01_phy.dat
%
% ls
ARI_TNT_H01_phy_org.dat
NNA_TNT_H01_phy_org.dat
OKG_TNT_H01_phy_org.dat
OKR_TNT_H01_phy_org.dat
TRY_TNT_H01_phy_org.dat
%

という感じです。
posted by MOR at 05:36Comment(0)General

pdfファイルを2upにしてpdfで出力する

古いAcrobat Distillerでは,pdfファイルを印刷するときに,プリンタとしてpdfを選べば,普通にpdfファイルを出力することができました。そのときに,pdfのオプションとして2upを選んでおけば2upにするのもとても簡単でした。

Acrobat Pro DCになってからこれができなくなりました。pdfファイルの印刷出力で出力先にpdfを選ぶと,ファイルメニューから保存を選べ,というメッセージがでて印刷が中止されてしまいます。もちろん,ファイルメニューから「別名で保存」を選べばpdfとして出力できますが,(当たり前ですが)2upなどの印刷用のオプションはまったく使えません。なんとも,ふざけた仕様です。

それでどうしようか,と困っていたのですが,teTeXとかLiveTeXをインストールするといっしょにインストールされているらしいコマンドにConTeXtというなんともダジャレ全開のコマンド群があって,そのなかのtexexecというコマンドがpdfの結合,ページ抽出,面付けなどの機能があるようです。たとえば,ここここにそういう情報があります。

要するに,2upにしたければ,
texexec --pdfcombine --combination=2*1 --paperformat=a3,landscape --nobanner --result=OUTPUT.pdf INPUT.pdf
というふうにオプションを指定すればよいようです。

しかし,ここでFreeBSDのコマンドラインできっちり罠にはまりました。2*1というところに*が入っているのでシェルが横取りして展開しようとして,そんなファイルはありません,という得意のエラーを吐いて終了,というパターンです。クオーテーションマークで挟めばよいという話もありますが,どこをどのように挟めばよいのかよくわからんので,ここはunixなら*ではなく,xだろう,とヤマをはって試して見たら,うまく行きました。なんという適当な...

やりたいことは「pLaTeXのbeamerやprosperを使ってA4 (landscape)に出力したスライドをA4 (ポートレート)に縦に2枚並べて2upで出力する」です。上のコマンドの例では,--combination=2*1となっていますが,これは横に2枚,縦に1枚の面付けをする,という意味なので,やりたいこととマッチしていません。それに気がつくのにかなり時間がかかりました。っていうか,マニュアル見ろよ,って話ですね。すいません。横着しました。

というわけで,目的は,
texexec --pdfcombine --combination=1x2 --paper=a4 --nobanner --result=OUTPUT.pdf INPUT.pdf
というふうにオプションを指定して解決しました。上の例では紙の指定が--paperformatとなっていますが、FreeBSDの古い環境ではそんなオプションは知らないというエラーになるので--paperとしています。ConTeXtのバージョンに依存するのかもしれません。

めでたしめでたし,というかしょーもないことにハマりすぎです。あぁ...。
posted by MOR at 21:09Comment(0)General