冗長性ありすぎるし、パッと見で何が書かれてるのか読めないし というのでS式で書いてTeXにトランスレートするものを書いてみた. Schemeです. 全体をtexという名前のマクロで包んで、その中身は、一切全て手続きで書くことにした. 手続きが返すのは全て文字列で、texマクロは、その文字列をひとつずつdisplayしている.
/scheme/tex.scm
実はまだこれを使ってちゃんと誰かに提出する様なtexまで書いたことが無いので まだまだ足りないと思うけど(行列を書くこともまだだった)、 使ってく内にきっと充実してくんじゃないかな.
少し調べれば、似たようなものはすでにあって、自分にはそれらがいいとは思えなかったので 自作したんだけど.で、どうもそれらは成功してないので、作った本人だけが使ってるという パターンじゃないなのかな これもきっとそうなる
関数である以上、いちいち全て、文字列はダブルクオーテーションで括ってるのが たぶんダメ.一応、文字列だろうがシンボルだろうが文字列に変換するという x->string 手続き をかませてるので、英単語一つなら、文字列じゃなくてシンボルにしたほうが見やすく なるかもしれないよ、という. 使う例
(load "./tex.scm")
(tex
(jsarticle "12pt")
(usepackage "amsmath" "amssymb")
(title "何かのレポート")
(author "Tsukasa Hirakata" (thanks "保気学部" "何年"))
(document
(maketitle)
(enumerate
(item
"中間値の定理" (yyen)
"連続な関数" ($ "f : [a,b]" (yen 'rightarrow) "D") "について"
($ "f(a) < f(b)") "と仮定して"
(eqn
(forall) "c (f(a)<c<f(b))"
(exists) "L (a<L<b)"
"f(L) = c"))
(item #t "Proof."
($ "\\epsilon - \\delta") "論法による." (yyen)
"区間" ($ "[a,b]") "をN分割する."
(eqn "p_k = a + " (frac "(b-a)" "N") "(k = 0, 1, \\dots , N)")
"として..."))))