latex からコマンド実行


さきほどpgfというLaTeXのパッケージを紹介しましたけれども、pgfとの出会いはまったくの偶然でした。実は、RCS 管理している tex ファイルのチェックイン時間を LaTeX で取り込むにはどうすればいいか考えていたのです。で、”latex 入出力” とかをキーワードに検索しているうちに pgf を紹介しているページにいきあたったのでした。

今度は当初の目的を達成したという話です。結論からいえば、LaTeX の中からシェルコマンドを実行すればいいということです。

「LaTeX からシェルコマンドを実行!」と思われるかもしれませんけれども、実は案外簡単にできます。tex ファイルに ”write 18 {command}” と書けば ”command” に指定した内容をシェルスクリプトとして実行します。

documentclass {article}

begin {document}
immediate
write18{rlog -r. jobname.tex | grep date: | sed -e ‘s/date: //’ -e ‘s/; *author.*//’ > .cmd}

RCS checkin time: input {.cmd}.
end {document}

これを platex、dvipdfmx で処理して作成した PDF ファイルを見ると、ちゃんと「RCS checkin time: 2008/07/09 13:49:52 .」と出力されます。ピリオドの手前に空白がはいるのはなんででしょうね?

「なんと危険な!」と思うかもしれませんね。ウェブの情報によれば、これは危険なのでデフォルトではこの機能は利用できず、「利用する場合には ”latex” コマンドに ”-shell-escape” をつけるように」などと書かれていますが、なんと Mac OS X に fink 経由でインストールした teTeX の場合、デフォルトでこの機能が有効になっていました。うーん、いいのかな。

でも、さっき pgf のマニュアルを見たら、pgf を利用するためにはこのシェルスクリプト実行を許可しないといけないとのことでした。そのうち、LaTeX virus なんてものがはやるかもしれませんね。あな、恐しや。。。

latex からコマンド実行」への2件のフィードバック

  1. 大変参考になりました.

    ずっと,$~$Date$~$ とする方法しか使ってなかったので.

  2. ぎょんさん、こんにちは!

    fancyheading と組み合わせて、文書のヘッダに何版かを刷り込むと便利そうですね。

コメントは受け付けていません。