角藤先生のW32TeXをWindows7上で使っています。
奥村先生の美文書作成入門にも言及のあったmediabbを使ってみようと思い,
http://www.ma.ns.tcu.ac.jp/Pages/TeX/mediabb.sty
からダウンロードをしてusepackageしてみたのですが,
PDFを読み込むに当たってエラーが出て止まってしまいます。
拙い知識ながらmediabb.styを解読したところ,
下から6行目から始まる\write18の中で,
[ ! -z `which '\Gread@ebb@path ebb'` ]
というbashのコマンドが使われている部分でエラーが出ているようでした。
Windowsのコマンドプロンプトでbashは使えないと思うので,
そうするとmediabbがそもそもWindowsでは使えないのかなと考えたのですが,
mediabbに関する記述で「Windowsで使えない」と書いてあるものが見当たらなかったので,
もしかするとその他の原因(読み込み方が悪い?)なのか…と考えています。
そういうわけで,まずはmediabb.styがWindows上で使えるのかをお聞きしたいと思い,こちらに書かせていただきました。
どうぞよろしくお願いいたします。
(dvipdfmx を使用していると仮定します。)
mediabb パッケージは次の 2 つの機能を提供します。
- PDF ファイルについて、その中身を(可能であれば)自分で解析することで、バウンディングボックスの値を検出する。(だから .(x)bb ファイルが不要になる。)
- ビットマップ画像ファイルについて、シェル実行機能を利用して、ebb を自動で起動して .bb ファイルを作成する。
そして、このうち 2 の機能は UNIX 系のコマンド(とシェル実行機能の有効化)を必要とします。つまり、「mediabb パッケージは Windows で使えるか」という質問の答えは「1 については可、2 については不可」ということになります。
ただし、実際に mediabb が使用および紹介されるときは、1 の機能を目的としていることが圧倒的に多いようです。つまり、「extractbb の自動機能が使えないという状況の下で、mediabb を使うと(一部の) PDF については .xbb の作成が不要になる」という使い方です。「Windwos では使えない」ことが言及されないことが多いのは、このためだと推測されます。
(続き)
mediabb パッケージは、本来は(dvipdfmx の前身である)dvipdfm、ないしは「dvipdfm と互換だった時代(10 年ほど前)の dvipdfmx」での使用を前提にしているはずです。これは次のことから判ります。
- graphicx パッケージが未読込の状態で mediabb を読み込むと、ドライバを dvipdfm に指定して graphicx が読み込まれる。
※(だから dvipdfmx を使う場合にこれをやってはいけない!) - 2 の機能において、ebb を起動して .bb ファイルを作っている。ところが dvipdfmx では extractbb を起動して .xbb ファイルを作るのが正しい方法で、.bb ファイルを作っても意味がない。
- 今では、graphicx パッケージ(の graphicx ドライバ)自体に「extractbb を自動起動する」機能が組み込まれている。
結局のところ、dvipdfmx を使っている場合には、2 の機能は(たとえ UNIX 系であっても)意味がないわけです。
ちなみに、1 の機能だけを利用したくて mediabb を読み込んでいる場合、autoebb オプションは指定しないはずです。この場合、ビットマップ画像については、.xbb ファイルが「事前に作成されているか、または extractbb の自動起動で作成される」はずなので、「.bb ファイルがある」と判定され、結果的に ebb の自動起動が(無駄に)作動することはないようです。
すなわち、1 の機能に関しては、dvipdfmx を使用する場合でも(そして Windows 上での動作であっても)問題なく動作するようです。ただし autoebb(=always) を指定していると ebb の自動起動が作動してしまうので、これは避けるべきでしょう。
ありがとうございます。
お返事頂いたままお時間が経ってしまい申し訳ありません。
ZRさんのブログを読んでいたにも拘わらず,
1.5のPDFを読み込もうとしていたことが最大の原因のようでした。
1.4に変えてタイプセットすればPDFは正しく取り込めました。
他方,bmpsizeパッケージを利用せずに,
\includegraphics[autoebb=never]{ファイル名.png}
としてPNGを取り込もうと思うと,
(bashコマンドがエラーを起こすということはないものの)
LaTeX Error: File `ファイル名.xbb' not found.
と怒られます。
事前にextractbbを実行して.xbbファイルを作っておけばうまく行くので,
「.xbbファイルがextractbbの自動起動で作成される」という部分がうまく行っていないのかなと思います。
mediabbを読み込まずにincludegraphicsを使えばxbbは自動作成されるので,
extractbbがいつも自動起動されないという問題ではないように思うのですが,
mediabbを読み込むことでextractbbが自動起動されなくなることにはどのような原因が考えられますか?
(追記)
・dvipdfmxを使っております。
・mediabbより前に\usepackage[dvipdfmx,hiresbb]{graphicx}しております。
・-shell-escapeも付けております。
・「1 の機能だけを利用したくて mediabb を読み込んでいる」のですが,たまにPNG画像を読み込む必要があることがあります。
大変申し訳ありません。
graphicx パッケージの動作について勘違いを起こしたまま、mediabb.sty のコードだけを見て判断してしまったため、嘘を書いてしまいました。
改めて確認したところ、角藤さんの言う通りで、正しくは次のようになります。- dvipdfmx のドライバが提供する extractbb の自動実行の処理は、mediabb パッケージを読み込んだ時点で、(dvipdfmx では無意味な)ebb の自動実行の処理で置き換えられてしまう。
- どこかのプログラムを改変しない限り、mediabb の 1 の機能と dvipdfmx ドライバの extractbb 実行を共存させることはできない。
率直に言って、(現在の)dvipdfmx において mediabb を利用することは「無理がある」ように私は思います。
以下では,予期したように動きました。
ただ \Gread@pdf は mediabb のものになるので,
確実に /MediaBox 等が読めることがわかっている場合
だけにしたほうが良いと思います。
複雑な pdf を除いて,大体の場合
\usepackage[dvipdfmx]{graphicx}
プラス
shell_escape_commands = ...
だけで間に合うと思います。
(bmp の場合は bmpsize が必要)
\documentclass{article}
\usepackage[dvipdfmx]{graphicx}
\makeatletter
\let\save@gread@bmp\Gread@bmp
\usepackage{mediabb}
\let\Gread@bmp\save@gread@bmp
\makeatother
\begin{document}
\includegraphics[width=0.9\textwidth]{pic.pdf}
\includegraphics[autoebb=never,width=0.9\textwidth]{naka014.jpg}
\end{document}
何か、パッケージレベルでの対処が必要なのかも知れませんが、今回のケースだと、そもそも「なぜ mediabb が必要なのか」が解らないため、どういう対処が望ましいのかも判然としない、と感じています。つまり:
- “普通は”extractbb の自動起動を利用すればよいはず。それが可能な状況なのに mediabb を利用しようとしている、ということは、PDF画像に関しては、extractbb の自動起動を避けることを望んでいる。
- 一方で、ビットマップ画像に関しては、extractbb の自動起動が行われることを望んでいる。
この2点が、どうしても両立しないように感じるわけです。