2010年11月17日

org-modeで出力用のマクロ

org-modeで、画像をLaTeX形式に出力するのは、別に難しくないけど、オプションはどうやってつけるのかな?と悩んでいた。
とりあえず、普段は直接LaTeXのincludegraphicsコマンドを書いていたのだが、たぶん、別の方法があるはず。。。
と思っていたが、それを探すよりも、マクロを定義した方がいいんじゃないかと考えた。
こんな感じのマクロをくんで、
#+MACRO: PDFfigure \begin{figure} \n \includegraphics[mediaboxonly=/CropBox, width=15cm]{images/$1.pdf} \n \caption{$2} \n \label{$1} \n \end{figure}

本文で、
{{{PDFfigure(whyandwhat, どうなってる?)}}}

とすれば、whayandwhat.pdfというファイルを読み込み、キャプションを「どうなってる?」に、ラベルを「whyandwhat」にした、LaTeXコードを出力してくれる。つまりは、これ。
\begin{figure}
\includegraphics[mediaboxonly=/CropBox, width=15cm]{images/whyandwhat.pdf}
\caption{どうなってる?}
\label{whyandwhat}
\end{figure}

この設定を使えば、大きさをそろえた画像で、かつ、PDFの一部だけを切り出したものを表示することができる。(PDFの一部だけを表示する設定については、こちらで書いた)
HTMLに出力する場合は困るんだけど、まあ、それはそのうち考えようかな、というところ。
僕はHTMLよりは、TeX→PDFの方が実用的だと思っているので、HTMLは滅多に使わないので、これでいいかなと思う。

実際には、
#+ATTR_LaTeX: width=15cm, mediaboxonly=/CropBox
[[./images/whyandwhat.pdf]]

とすれば、同じようなことができるようなので、こちらでマクロを作成した方がいいかもしれない。
マクロ定義中で、改行が\nだということを覚えておくと、以外と便利で、けっこう長いマクロもかけてしまう。
マクロ定義の際は、途中で改行すると、認識してくれないみたいなので、ここははまってしまった。

他にスマートな方法があれば、マクロで定義しているので、HTMLでも共用できる方法が見つかれば、マクロだけを書き換えれば、本文に手を入れなくて済むという利点もある。