読者です 読者をやめる 読者になる 読者になる

LISP on TeX v2.0リリースノート

はじめに

10/25,LISP on TeXのv2.0(CTAN: Package lisp-on-tex)をリリースした.簡単に今回のリリース内容をまとめておく.

READMEの更新

READMEをMarkdown形式に移行した*1.結果,CTANのページ上からREADME.mdが見れるようになっているはずである.

ごみ集め機構(GC)の実装

通常のTeXプログラミングと違い,LISP on TeXでは内部で大量の制御綴りをCONSセルとして使用する.そのため,大量に資源消費するプログラムを作成すると,「! TeX capacity exceeded, sorry」のメッセージとともにTeXの実行そのものが終了してしまう問題があった.その対策として,LISP on TeXにごみ集め機構(GC)を実装した.使用するためには,markGCオプションを使用する.

\usepackage[markGC]{lisp-on-tex}

これでGCが有効になる.これにより,未使用になったCONSセルが再利用されるようになる.
デフォルトでGCはオフになっている.これは,GCを有効にすることによりアロケーション時間が1.5倍かかるようになってしまうのと,実際にGCが必要な場面の方が少ないためである.

なお,GCopt={heapsize=n}というオプションを追加で与えると,ヒープサイズをnにすることができる.指定しない場合は32768が指定されたものとみなす.

エラー出力の強化

以前のリリースでone-shot continuationを実装したことにより,LISP on TeXでは内部的に例外を扱えるようになっていた.そこで,今回のリリースではエラー出力を強化した.例えば.

\lispinterp{(\define 'aaa' :42)}

とすると,

! LISP on TeX ERROR: The 1st argument of \define or \defineM must be a symbol o  
r valid list..  

と出力される.ほかにも引数の個数チェックなどが追加されている.

\defineなどの省略記法

これは,LISP on TeXの初期の課題であった,(\define (\foo \x) ...)の形式を認めるようにする変更である.正直,LISP on TeXにはマクロがあるので,そちらで実装してもいいのだが,速度を考えてTeX側で実装してある.ちなみに,これを実装する最大の動機がこちら.

だいぶ時間をあけてしまった.

l3regexのラッパー

文字列,すなわちTeXのトークン列処理の強化として,LISP on TeX正規表現を導入した.ただし,正規表現エンジンを自前で実装するのはさすがに困難なので,既存のTeX上の正規表現エンジンであるl3regexを使用することにした.

使い方は簡単で,追加のパッケージlisp-mod-l3regexを読み込むだけである.

\usepackage{lisp-mod-l3regex}

これで,いくつかの関数が使用可能になる.例えば

\lispinterp{(\regReplaceAll '(\w+?)to(\w+?)' '$\1\c{to}\2$' 'AtoB BtoC')}

とすると,文字列

'$A\to B$ $B\to C$'

が得られる.正規表現そのものの記法についてはl3regexのドキュメント*2を参考にしてほしい.
また,導入される関数については,LISP on TeXのREADME.mdに記載があるのでそちらを確認してほしい.置換,分割,パターンマッチの関数をそれぞれ用意してある.

*1:本当はLaTeXにしようと思っていたのだが,思ったより時間をとることができず,Markdown形式になった

*2:texdoc l3regexで見られるはず