読者です 読者をやめる 読者になる 読者になる

Acetaminophen’s diary

化学に関すること,TeXに関すること,ゆきだるまに関すること。

PowerPointやPDFにいろいろなマルチメディアを埋め込む(6)

動く3D模型の挿⼊:PDFの場合(TeX使⽤)後編2

実は第5回までの記事は、今回の記事連載にあたり、すでに知っていた方法を W32TeX の最新版で検証してきたものである。しかし、今回の連載を機に他の方法がないかと思って並行して調査も続けていた。そして、つい今日「発見」した方法が以下の方法である。前回の【方法1】や【方法2】に比べて格段に化学系にはありがたいはずだ。

 

【方法3】Jmol や PyMOL の利用:PDB から IDTF を経て U3Dへ

以前の「化学のおすすめソフト (2014-09-01)」という記事で言及した Jmol や PyMOL といったソフトウェアは、IDTF というファイル形式を出力することができる。そして、この IDTF ファイルは以下で紹介するオープンソースUniversal 3D Sample Software を使用して U3D 形式へと容易に変換できる。結局

  • Jmol は Java ベースなので操作は Windows でも Mac でも変わらない
  • IDTF から U3D への変換は Universal 3D Sample Software で可能である

ということになるので、OS によらず同様の操作が可能である。

ちなみに、IDTF とは何かというと、Jmol のページの説明によると以下のようである。

Jmol (11.8) can export to the Intermediate Data Text Format, a human-readable format that can be transformed into the binary U3D format and hence be later inserted into pdf files.

Jmol Wiki - File formats/3D Objects


(1) IDTF ファイルの生成:Jmol 使用の場合

Jmol から IDTF ファイルを出力する場合は、以下の公式ページが参考になる:

実際に 100d.pdb を Jmol で開いてみると以下のようになる。

f:id:acetaminophen:20140924194315p:plain

これを少しだけ表示調節してみた。

まず背景を白に変更。ウィンドウの右クリックメニューから [色] > [背景] > [白] を選択する。次に [スタイル] > [モデルの表示方法] > [ワイヤーフレーム] を選択する。これで表示は以下のようになる。

f:id:acetaminophen:20140924194338p:plain

これを IDTF 形式にエクスポートする。今度は Jmol のコンソール(メニューから [ファイル] > [コンソール] で現れる)から操作した。例えば出力先をデスクトップに指定する場合、Windows の場合

write c:/users/ユーザ名/desktop/100d.idtf

と入力すると、デスクトップに 100d.idtf というファイルが生成する。Macの場合は

write /Users/ユーザ名/Desktop/100d.idtf

である。このとき、親切なことに自動的に media9 パッケージを使って pdflatex で取り込むための LaTeX ソースも生成してくれる。無事に 100d.idtf と 100d.idtf.tex が生成すれば、例えば次のようなメッセージが表示される。

Created c:\users\ユーザ名\desktop\100d.idtf.tex:

もしも生成に失敗した場合は何も表示されず下のようになる。

f:id:acetaminophen:20140924194353p:plain

 

(1') IDTF ファイルの生成:PyMOL 使用の場合

PyMOL から IDTF ファイルを出力する場合は、以下の公式ページが参考になる:

こちらは僕は試していないが、Jmol と同じように U3D 形式に変換して PDF に取り込めるはずである。

 

(2) U3D 形式への変換:Universal 3D Sample Software の使用

まずは Universal 3D Sample Software を入手する(入手法は別の記事にまとめた)。IDTF を U3D に変換するために用いる実行ファイルは「IDTFConverter」である。以下は Windows の場合で説明する。

僕は C:\idtf に先ほどの Universal 3D Sample Software のアーカイブを展開した。この場合、 cd コマンドで 100d.idtf を保存したディレクトリに移動し

c:\idtf\bin\win32\release\idtfconverter.exe -input 100d.idtf -output 100d.u3d

のようにすると、同じディレクトリに 100d.u3d というファイルが生成する。

※ちなみに、僕の場合はいちいち面倒なフルパス指定を避けるために、変換を簡単に実行するバッチファイルを作って PATH の通ったディレクトリに置いている。

バッチファイル「idtf2u3d.bat」の中身

"c:\idtf\bin\win32\release\idtfconverter.exe" -input %1.idtf -output %1.u3d

バッチファイルができたら、 100d.idtf を保存したディレクトリで

idtf2u3d 100d

と入力すると同じ結果が得られる。

※バッチファイルを作る場合、以下のようにするともう少し親切である。(2014-10-11)

バッチファイル「idtf2u3d.bat」の中身

@echo off
rem -- Run IDTFConverter --
set IDTF_EXE_DIR=c:\idtf\bin\win32\release

if exist "%IDTF_EXE_DIR%\idtfconverter.exe" goto haveProg
echo "%IDTF_EXE_DIR%\idtfconverter.exe" not found
goto eof

:haveProg
if .%1==. goto noarg

"%IDTF_EXE_DIR%\idtfconverter.exe" -input %1 -output %~n1.u3d
goto eof

:noarg
echo No arguments given.

:eof
echo Done.

この場合、実行コマンドは拡張子まで含めて

idtf2u3d 100d.idtf

とする。(あるいはバッチファイルのアイコンにドラッグアンドドロップでもよい!)

 

(3) いよいよ LaTeX でのタイプセット

試しに 100d.idtf.tex をそのまま pdflatex でタイプセットしてみた。サンプルはこちら

これを【方法1】で紹介したのと同様に platex -> dvipdfmx で通るように変更する。

補足:2014-11-28

本記事では media9 パッケージ(次期 LaTeX3 へ向けた expl3 依存)を使わずに済む方法を紹介した。そのまま media9 を使いたい場合は以下の記事参照:

やはり movie15_dvipdfmx.sty を使用して取り込むのだが、media9 パッケージは movie15 パッケージの上位版であってコマンド名も異なる。したがって、先ほどの 100d.idtf.tex に書かれているソースのうち \addmediapath と \includemedia というコマンドは使えない。

このうち \addmediapath コマンドは同じディレクトリにU3Dファイルを置けば問題ないので、ざっくり削除してよい。また \includemedia コマンドは \includemovie コマンドに置き換える。

このとき注意すべき点として、Jmol で生成したソースには media9 パッケージの \includemedia をフル活用するためのオプションが盛り込まれている。このうち \includemovie コマンドでは使用できない以下のオプションを削除する。

activate=pageopen, deactivate=pageclose, 3Dtoolbar=false, 3Dnavpane=false, 3Dmenu, transparent=false, 3Dpartsattrs=restore

また \includemedia コマンドの引数は2つであるのに対し \includemovie コマンドの引数は3つであり、前2つがメディアのサイズを規定している。したがって、オプションから width, height を削除して代わりに引数の部分に書き加えておく。さらに、お好みで \includemovie オプションに poster と toolbar を書き加えてもよい。

ここまで変更すれば、無事に platex -> dvipdfmx で通る。サンプルはこちら

これなら分子模型を化学系の専門ソフトウェアで表示調節し、それを適切にインタラクティブな 3D モデルとして PDF に取り込むことができる。

 

―まとめ―

Jmol も PyMOL もマルチプラットフォームで、Windows, Mac, Linux 等で使用できるので、分子構造の表示ならばこの方法が一番確実そうだ。

で、この方法をどこか日本語リソースで紹介していないかと探してみたところ、あった。

でも、おそらく上のブログの方以外には紹介されていないようだ。TeX Wiki にも見当たらなかった。ブログ内検索で「3d pdf」とかで検索するといろいろ出てくるのだが、例えば以下のページ。

しっかり 3D 埋め込み PDF を作るための過程として IDTF ファイルを経由して U3D を生成している。ただ、こちらのブログの方は 3D 埋め込み PDF を作るために TeX というツールが必要だと感じたらしく、記事を数本読んでみる限りそれ以上の TeX の知識はこの時点でなかったらしい。

もちろん U3D ファイルを商用の Adobe Acrobat で後付けで埋め込む方法についてはよく知られているが、TeX の方面からのアプローチで日本語を含むソースの処理まで実現したという記事は今回が初だと思う。

続く