🔙 Back to Top

Sat May 25 19:59:47 JST 2013

LaTeX 書きたくない

冗長性ありすぎるし、パッと見で何が書かれてるのか読めないし というので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)")
            "として..."))))