卒論クラス suribt とその周辺 > その他の Tips

卒論クラス suribt とその周辺: その他の Tips

Tips

図の余白を最適化しよう (BoundingBox に関わるノウハウ)

画像を TeX ファイルに貼り付けるときには,絵の書かれている範囲を指定してやる必要があります. EPS ファイル内部には,境界を記述する (%%BoundingBox: で始まる) 行があり, TeX ファイル中で \includegraphics{foo} (拡張子を省略して図を指定すると,graphicx/graphics を読み込んだときのオプションによって,自動で判別して適切な画像ファイルを用いることができます) として図を取り込んだときに,%%BoundingBox: の記述の通りに図を切り取って,配置してくれます.

図の周りに大きな余白が付いていると,不恰好になったり,図だけが別ページに飛ぶことが多くなったりするので, 適切に境界を求めておいてやることが望まれます. 図では,数学的には幅 0 であるはずの線分も,太さをもって描かれますし,文字にもそれなりの太さがあることから, これらが欠けることのない,ぎりぎりの境界を求めるためには,それなりのアルゴリズム,実装が必要となってきます.

以前は,手軽という理由から, Ghostscript パッケージに含まれる ps2epsi をおすすめしていましたが, 図の端が欠けることが多く,使えるレベルではありませんでした.

その次には,gs の bbox DEVICE を使うという方法を提示していました. この方法は,正しい境界を返してくれますが,原始的なコマンドを使うということで, 多少使い勝手に難がありました.

同じ Ghostscript の産物ながら,境界の質に差があったことは,実装の分量を見ただけでも歴然としています.

今回提案するのは,epstool という, GSview などの作者が手掛けているものです.GSview から切り離されて配布されており, ライセンスが GPL ということで,いろいろなディストリビューションで採用されやすいため, 紹介する価値は十分あると思われます. たとえば,Vine や,Cygwin でもパッケージ管理されています. 使い方は,epstool のページに書いてある通りですが,

epstool --copy --bbox foo.ps foo.eps

として用いるのが,いまの目的に最も適っています. PSTricks など,TeX ファイルだけで図が描ける類の場合は,Makefile (雛型 -> fig.mak) を作って,

make [-f fig.mak] foo.eps

などとすれば,自動的に eps まで作れます. (pdf まで作りたいときは,続けて make [-f fig.mak] foo.pdf とします. ptetex3-20061205 以降の TeX 環境をお使いの場合には,日本語の入った図も綺麗に (= フォントを埋め込まずに) 処理できるので,和文書を Dvipdfmx で pdf へ変換するにも,欧文書を pdfLaTeX で処理するにも,共通に使えます.

御参考まで.

リンク・しおり付きの PDF を作る*[outside]

$TEXMF/doc/latex/hyperref/PDFによる詳細な説明書 (角藤氏) [outside], qa:33459 [outside] などを参考にして,うまく hyperref を呼ぶことで,手間少なく便利な PDF を作ることができます.

下にソース例を示しますが,注目点は {} の使い方です.

\author{NANNO Nanibeh}

といった名前の指定をしたとき,

pdfauthor=\@author

としたのでは,半角空白が詰まってしまいます.

pdfauthor={\@author}

とすることで半角空白が活きます.

pdfauthor={\@author{} (\@supervisor@prefix:{} \@supervisor)}

のように随所に {} を挟んでいるのも,その次の半角空白を活かすためです.

タイトルには,強制改行の \\ や,ベタ打ちでは消えてほしい半角空白を付け加えていることもあるかもしれません.余分な半角空白を消すだけなら,上記のトリックを逆に利用して,

pdftitle=\@title

とすればよいわけです. 強制改行の \\ が入っているときには,usepackage のオプションで指定することは厳しいので,先に hyperref を呼んでから,あとから \hypersetup を加えるとうまくいきます.

\AtBeginDvi{\special{pdf:tounicode EUC-UCS2}} % EUC-JP
%\AtBeginDvi{\special{pdf:tounicode 90ms-RKSJ-UCS2}} % Shift_JIS
%%% マニュアルは $TEXMF/doc/latex/hyperref/ 以下
\RequirePackage[dvipdfm,%
 %%% PDF-specific display options
 bookmarks=true,% しおりの表示 .out ファイルを使う
  % .out ファイルの書き換えを中止するには: \let\WriteBookmarks\relax
  % cf.) 目次ファイルの書き換えを中止するには: \nofiles
 bookmarksopen=true,% しおりを展開した状態にする
  % dvipdfm -E / dvipdfmx -O number と併用する (?)
 bookmarksnumbered=true,% しおりに節番号などを含む
 %%% PDF display and information options
 %% Ctrl+D で出力される「文書のプロパティ」-> 「概要」に載せる情報
% pdftitle=\@title,% タイトル
% pdfsubject={\@subtitle{} (\@belongsto)},% サブタイトル
% pdfauthor={\@author{} (\@supervisor@prefix:{} \@supervisor)},% 作成者
 pdfkeywords={\@keywords},% キーワード
 pdfstartview={FitH -32768},% 「幅に合わせる」で開く
 pdfpagelayout=TwoColumnRight,% 「(連続) 見開きページ」(奇数頁を右側へ) で開く
 pdfdisplaydoctitle=true% ファイル名でなく文書タイトルをバーに表示する
]{hyperref}

\newcommand\org@maketitle{}
\let\org@maketitle\maketitle
\def\maketitle{%
  \pdfstringdefDisableCommands{\let\\\empty}
  \pdfstringdefDisableCommands{\let\and{, }}
  \hypersetup{
    pdftitle={\@title},% タイトル
    pdfsubject={\@subtitle{} (\@belongsto)},% サブタイトル
    pdfauthor={\@author{} (\@supervisor@prefix:{} \@supervisor)}% 作成者
  }%
  \org@maketitle
}

卒論クラス suribt とその周辺 > その他の Tips