Hatena::ブログ(Diary)

マクロツイーター このページをアンテナに追加 RSSフィード Twitter

2012-11-07

それでも TeX でプログラミングしたい人のための何か (1)

TeX 言語は他の一般に普及しているプログラム言語に比べると、習得が難しいと言われることが多い。その主因の一つだと思われるのが、TeX の実行モデルが他の言語と大きく異なることである。TeX 言語はその実行制御を「マクロの展開」という文字列(正確にはトークン列)の置き換えに委ねている。そのため、少々複雑なプログラムを意図通りに動かすためには、「展開制御」という、他の言語の使用者には馴染みのない概念に習熟する必要が生じる。*1Knuth 氏が TeX 言語を設計した際に、本格的なプログラム言語ではなく、寧ろ plain TeX のような「少し凝った」マークアップの作成を容易にすることを目的としたらしいので、TeX が先述のような特徴をもつのもそれと関係があるのかも知れない。*2

しかしその反面、TeX 言語と他言語でのプログラミングを比べた時に、共通する点も多いことも事実である。実際、この記事「プログラマーのためプログラミングLaTeX」では、Python 等の「普通の」言語のプログラムからの機械的な変換により TeX(on LaTeX)のプログラムが得られると述べている。この主張は至極真っ当なもので、私自身も、割と複雑なロジックを要するプログラムアレとかコレとかソレとか)を書く場合には、まず PerlLua 等の「普通の」言語で書きあげて、できたプログラムロジックが正しいことを確認してから、それを TeX 言語に書き換えるという手順をとっている。(そういえば、コレLua 版も公開してますね。)

そういうわけで、これから始まる一連の記事においては、そういう「他の言語のプログラミングの類推で TeX (on LaTeX)のプログラミングを始めよう」と考える人にとって特に用心すべき「TeX 言語の癖」について解説しようと思う。要点をあげると次の 4 つになる。

  • TeX はフリーフォーマットじゃない
  • ローカル変数なんてものはない
  • 関数に相当するものは(普通は)ない
  • 引数パラメタ(#1 等)は実際に渡されたものの別名である

続く

*1:この奇異な特性を象徴するのが、かの有名な \expandafter というプリミティブである。

*2:これから TeX でのプログラミングを志す者は、その行為がどういう性質を帯びるのかを述べた、「The TeXbook」の付録 D(Dirty Tricks)の冒頭の節をぜひ読んでほしい。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証