PowerPointやPDFにいろいろなマルチメディアを埋め込む(5)
動く 3D 模型の挿⼊:PDF の場合(TeX 使⽤)後編1
今回と次回で計3つの方法を紹介する。僕個人の結論としては、前回説明した PDB ファイルの取り込みが目的なら、次回紹介する【方法3】が最も適していると考えている。
【方法1】MeshLab の使用:PDB から U3D へ
まずは、前の記事で紹介した movie15_dvipdfmx.sty を使って U3D 形式のファイルを取り込む方法を考える(これは方法3にも通用する)*1。
このパッケージでは U3D 形式の 3D データを読み込むことができるが、この U3D 形式ファイルを生成するフリーソフトに MeshLab がある。MeshLab では PDB ファイルをメニューの [File] > [Import Mesh] から直接インポートできる。ただし、拡張子としては .pdb しか許されないので、とりあえず前回入手した 100d.pdb1 ファイルをコピーして 100d.pdb に変更する。
ちなみに MeshLab のインポート可能形式は以下の通り。
PDB ファイルを MeshLab でインポートすると、自動的に原子に合わせた色で表示するようになっている。
表示は下のようになる。
これを [File] > [Export Mesh] で .u3d 形式を選択してエクスポートする。
ちなみに MeshLab のエクスポート可能形式は以下の通り。
オプションで Camera position と Camera target point などを指定できるので、適当に変更して OK をクリックすると、親切なことに 100d.u3d ファイルとともに 100d.tex ファイルが生成する。Color にチェックを入れておくと色付きの U3D モデルが出力され、チェックを外しておくとグレースケールの U3D モデルが出力される。
この 100d.tex ファイルはそのまま pdflatex で処理でき、一発で 3D 模型が PDF に埋め込まれる。どうやらこの 100d.tex では movie15 パッケージを指定しているが、これは platex -> dvipdfmx を通らないが pdflatex では有効なようである。サンプルはこちら(グレースケールとカラーの両方を用意)。
このファイルを platex -> dvipdfmx で通るようにするには、pdflatex を通ったファイルの中身の以下の行を改変する。
\usepackage[3D]{movie15} \usepackage{hyperref}
ここを
\usepackage[dvipdfmx,3D]{movie15_dvipdfmx} \usepackage[dvipdfmx]{hyperref}
に置き換える。jarticle クラスや jsarticle クラスでも通ることが確認できた。サンプルはこちら。
以上の方法は例えば
などが参考になる。
と、ここで1つの問題に気付く。色付きの 3D モデルは立体感が全く感じられない。一方、グレースケールでは当然ながらどの原子が何を表しているか全く理解できない。いろいろ調べてみた結果、MeshLab はカラー U3D を出力する場合に、入力ファイルの種類によらず、陰影やエッジが鮮明なモデルを出力することができないらしい。
【方法2】Asymptoteの使用
今度は、MetaPost を発展させたベクトルグラフィック記述言語である Asymptote を使う方法を考える。
W32TeX には Asymptote が含まれていないので、別途 Asymptote 公式サイトから最新版を入手してインストールする必要がある(TeX Live の場合は初めから入っているはず)。インストーラに従ってインストールした後、W32TeX がスタイルファイル一式を認識できるようにコピーする。僕の場合は Asymptote を Program Files (x86) 以下にインストールしたので、以下のようにした。
mkdir C:\w32tex\share\texmf-local\tex\latex\asymptote xcopy "C:\Program Files (x86)\Asymptote\*.sty" "C:\w32tex\share\texmf-local\tex\latex\asymptote"
例によって、必要に応じて mktexlsr を実行する。
Asymptote を使うにはプリアンブルでまず asymptote パッケージを読み込む。
\usepackage{asymptote}
こうした上で、本文中に \begin{asy} と \end{asy} に挟まれた領域に asymptote 用のソースを記述する。例えば、僕の場合は 3d-asymptote.tex ファイルを作成した。asy 環境中には Official Gallery の中で紹介されている pdb.asy というソースを使用する。なぜ「100d.pdb1」を今回の記事で例として使用したかというと、実はこのソースを見れば分かる通り
string filename="100d.pdb1";
のように 100d.pdb1 を使用しているからである!
タイプセットは以下のようにする。
-
まず pdflatex を1回通す。すると同じディレクトリに 3d-asymptote-1.asy ファイルが生成する。
-
次に asymptote を実行するのだが、今回は原子ごとに色を付けるために cpkcolors.asy というモジュールを利用している。これは Asymptote をインストールしたディレクトリ直下の examples フォルダに入っていて標準では読み込まれないので、あらかじめ一つ上すなわち asymptote の実行ファイルと同じディレクトリにコピーしておく必要がある*2。
-
準備が済んだら 3d-asymptote-1.asy と同じ場所に 100d.pdb1 ファイルを置いて
asy 3d-asymptote-1.asy
と実行する。すると
Number of atomic chains: 2 Number of chained atoms: 408 Number of hetero atoms: 81 Number of hetero bonds: 13
という原子数に関する情報が表示される。よく分からないのが
166.11: no matching variable 'cameralink'
というメッセージであるが、とりあえず無視しておく。
-
もう一度 pdflatex を実行する。
これで PDF ファイルの中に 3D モデルが埋め込まれている。閲覧には Acrobat Reader 7.0 以上が必要なはずである。サンプルはこちら。
まだ僕は Asymptote のコマンドについて詳細は知らないので表示の調節は行っていないが、とりあえず原子ごとの色付けと位置座標という PDB ファイルの情報は正しく表示されているように見える。
Asymptote の使い方については、本家のサイトの他に例えば以下が参考になる。
ここには Asymptote の使い方が一通り解説されており、貴重な日本語リソースである。他に Asymptote を紹介している日本語リソースとしては TeX Wiki や、「数学ガール」で有名な結城先生の記事が挙げられるが、現状では非常に情報が少ない。
また、今回の PDB ファイルの埋め込みの他にも、Asymptote の Official Gallery にはさまざまなサンプルソースと PDF ファイルが公開されているので、とりあえずこれを見てみるのも面白い。
今のところ日本語を通せる platex -> dvipdfmx のようなワークフローは実現できていない。もっと表示調節も試したいところだが、実際にこの機能を使う必要が生じる場面が今のところ起こりそうにないので、このあたりで追究はとどめておく。どなたか興味を持った方がいらっしゃれば、ぜひコメントください。日本語を扱える、さらには表示調節ができたなど特に大歓迎。
(続く)
*1:これは MeshLab が movie15 パッケージ用のソースを自動生成してくれることに由来する(後述)。
*2:僕は W32TeX で試したので、先に述べた通り Asymptote を TeX ディレクトリ外にインストールした。従って、予め Asymptote を同梱している TeX Live の場合は examples フォルダの場所が異なり、texmf-dist/doc/asymptote/examples である。ここから cpkcolors.asy を探して texmf-dist/asymptote にコピーするか、単にカレントディレクトリに置けば、あとは上と同様に処理できる。ファイルが見つからない場合は CTAN から入手してもよい。