TeX, LaTeX で文章を書いているとき, プログラムソースを含める必要が出てきます. しかし \obeyspaces\obeylines や \begin{verbatim} ... \end{verbatim} ではいまひとつ.
こんなとき,ここにおいた tex-indent-region 関数は,TeX は \+ & \cr によるタブ, LaTeX なら tabbing 環境のタブを自動的に挿入します.例えば,次のようなソースを含めたいとき,
(defmacro kz-for (e l &rest b) (let ((var (make-symbol "c"))) (list 'let (list (list var l) (list e)) (nconc (list 'while var (list 'setq e (list 'car-safe var)) ) b (list (list 'setq var (list 'cdr-safe var))) ))))
この関数を Emacs のリージョンで囲んで M-x tex-indent-resgion RET と打つと, リージョンが次のように変換されます.
{\smallskip\baselineskip=2.7ex%ztir-prologue \+{\enskip}(def\cleartabs&{}macro kz-for (e l \&rest b)\cr \+{\enskip}& (l\cleartabs&{}et ((var (make-symbol "c")))\cr \+{\enskip}&& (list \cleartabs&{}\'{}let (list (list var l) (list e))\cr \+{\enskip}&&& (nconc \cleartabs&{}(list &{}\'{}while var\cr \+{\enskip}&&&&& (list \'{}setq e (list \'{}car-safe var)) )\cr \+{\enskip}&&&& b\cr \+{\enskip}&&&& (list (list \'{}setq var (list \'{}cdr-safe var))) ))))\cr \cleartabs%ztir-epilogue \smallskip%ztir-epilogue }%ztir-epilogue
同じところで tex-indent-region ではなく,M-x latex-indent-region と打てば次のようになります.
{%ztir-prologue \begin{tabbing}%ztir-prologue (def\={}macro kz-for (e l \&rest b)\\ \> (l\={}et ((var (make-symbol "c")))\\ \>\> (list \={}'let (list (list var l) (list e))\\ \>\>\> (nconc \={}(list \={}'while var\\ \>\>\>\>\> (list 'setq e (list 'car-safe var)) )\\ \>\>\>\> b\\ \>\>\>\> (list (list 'setq var (list 'cdr-safe var))) ))))\\ \end{tabbing}}%ztir-epilogue
& や < > など,(La)TeX で特別扱いする文字のエスケープ等を自動的に挿入します.
プロポーショナルフォントを使っても段づけが狂うことはありません. 変換結果にさらにフォント指定をするとさらに見栄えがよくなります.
Emacs 19.34 ベースの mule と Emacs21+emcws (FreeBSDのports/japanese/emacs21-emcws)
で動作確認しています.わたしは Emacs は 19 から 21 に飛んだので,20では確認していません.
ここまで 2003.5.18