研究室のゼミでやった内容の加筆版.名称などはでっち上げなので注意.
はじめに
LISP on TeXがCTANに登録されてから,そろそろ一週間が経つ.TeXLiveやMikTeXに取り込まれるなどもした.更に,CTANのTopicsに「exec-foreign」が追加され,そこにlisp-on-texが配置された*1.しかし,これ以外にも,旧来からTeXと他の言語を組み合わせる試みは多数行われてきた.そこで,ここではそれらの紹介を行う.
まず,TeXと他の言語を組み合わせる手法は,TeXエンジンの中で解決するものと外部の処理系に頼るものに大別することができる*2.それぞれについて説明する.
TeXエンジンのみの中で解決する手法
これは,TeXエンジンやマクロの機能を用いて,TeXとして閉じたまま他の言語と交じり合う方式である.この手法の大きな特徴は,外部環境への依存性が少ないこと.そもそも外界との接触がないから当然だが,複数のOSで動くことを想定する際に,この性質は役に立つ.この手法は,インタプリタ型とエンジン型に区別できる.
エンジン型
そもそも,TeXエンジンに他言語の実行機能をつけたもの.エンジンと密接に連携できる性質を持ち,マクロだけでは実現が困難なこともやってのける.実装例は言うまでもなくLuaTeX.この機能を用いて日本語組版の実現を行う取り組み(LuaTeX-ja)も有名.
外部の処理系に頼る手法
既存の言語処理系を用いて,TeXとその処理系を組み合わせる手法.利点は,実装がお手軽なところ.実際,スクリプト書いてLaTeXソース出力するとか位なら利用例は多い.この手法はプリプロセッサ型,外部ファイル型,および\write18型に分けることができる.
外部ファイル型
外部ファイルを通して,TeX処理系と他言語の処理系を連携させる方式.有名な例はもちろんPerlTeX.TeXLiveにも収録されているはず.PerlTeXの作者は論文?でTeXと他言語の交わり方についてよく議論しているので,一度読むことをおすすめする.
\write18型
TeXにはなぜか,shell実行機能(\write18)がある.ファイルを通してなんてことをせずに,直接shellを叩いて他の言語とやり取りする方式が\write18型.問題は,悪意あるTeXソースによりシステム破壊が可能になる点.先の論文でもこの問題が指摘されている.CTANにPythonの実装がある.