Gauche:tex2page
Dorai Shitaram氏による、TeX/LaTeXドキュメントをhtmlに変換する Schemeプログラム。
http://www.ccs.neu.edu/home/dorai/tex2page/tex2page-doc.html
インストール
- scmxlateが必要。まずこれをインストールする。方法はGauche:scmxlate参照
- tex2pageのインストール
% wget http://www.ccs.neu.edu/home/dorai/tex2page/tex2page.tar.gz % tar zxvf tex2page.tar.gz % cd tex2page % ./configure --dialect=gauche % sudo cp my-tex2page /usr/local/bin/tex2page
以下は古いtex2pageに関する記述
Gaucheで使うには、まずscmxlateをダウンロード(Gauche:scmxlate)。 scmxlate.scmをGaucheのロードパスの通っているところにコピーする。
次にtex2page version 2003-06-02を上のURLからダウンロードする。 この版から、Gaucheはデフォルトでサポートされるようになった。
後は、tex2pageのディレクトリに降りて
gosh scmxlate
とすると、
What is your Scheme dialect? (bigloo chez gambit guile kawa mitscheme mzscheme petite plt pscheme scheme48 scm scsh stk stklos sxm umbscheme gauche other)
と聞いてくるのでgaucheと答える。するとmy-tex2pageというスクリプトが 作られる。適当にリネームして使う。
何もしないでも、付属のstory.texやtex2page-doc.texは通るはず。
以下はさらに古いTeX2pageに関する記述。
texinfo
texinfoを通すためには、t2pファイルを書く必要がある。 ドキュメント参照のこと。
t2pファイルを作ってgauche-refe.texi及びgauche-refj.texiを通してみたところ、 多分\itemのネスティングの処理のところでエラーになるのだが、 付属のtexinfo.t2pは新しめのtexinfoのディレクティブに対応していない ようなので、これがportingの不具合なのかそのせいなのか良く分からない。 とりあえず、do-itemの定義を次のように変えればそのエラーは回避できる。
(define do-item (lambda () ((if (and (not (null? *tabular-stack*)) (eqv? (car *tabular-stack*) 'description)) do-description-item do-regular-item))))
ただ、通ることは通るのだがちゃんとフォーマットされていないようだ。
パッチ
古いTeX2pageのためのもの。最新版では不要。
diff -crN tex2page/dialects/dialects-supported.scm tex2page.new/dialects/dialects-supported.scm *** tex2page/dialects/dialects-supported.scm Sun Nov 24 17:02:26 2002 --- tex2page.new/dialects/dialects-supported.scm Sun Dec 1 02:07:09 2002 *************** *** 16,18 **** --- 16,19 ---- stklos sxm umbscheme + gauche diff -crN tex2page/dialects/gauche-tex2page tex2page.new/dialects/gauche-tex2page *** tex2page/dialects/gauche-tex2page Wed Dec 31 14:00:00 1969 --- tex2page.new/dialects/gauche-tex2page Tue Dec 3 03:13:56 2002 *************** *** 0 **** --- 1,87 ---- + (scmxlate-cond + ((eqv? *operating-system* 'unix) + (scmxlate-insert + "#!/usr/bin/env gosh + (use srfi-1) + (use srfi-13) + (use file.util) + "))) + + (define *scheme-version* "Gauche") + (scmxlate-ignore + eval-if-mzscheme) + + (scmxlate-uncall + eval-if-mzscheme) + + + (scmxlate-rename + (flush-output flush) + ) + + (define get-arg1 + (lambda () + (and (pair? *argv*) (car *argv*)))) + + + (define delete-file sys-unlink) + + + + (define file-or-directory-modify-seconds + (lambda (f) (file-mtime f))) + + (define eof (call-with-input-string "" read)) + + (define andmap + (lambda (f s) + (let loop ((s s)) + (if (null? s) #t + (and (f (car s)) (loop (cdr s))))))) + + (define ormap + (lambda (f s) + ;Returns true if f is true of some elt in s + (let loop ((s s)) + (if (null? s) #f + (or (f (car s)) (loop (cdr s))))))) + + (define error + (lambda (where . args) + (errorf "~a: ~a" where (string-join (map x->string args) " ")))) + + (define eval + (let ((orig-eval (with-module gauche eval))) + (lambda (expr . maybe-env) + (if (pair? maybe-env) + (orig-eval expr (car maybe-env)) + (orig-eval expr (interaction-environment)))))) + + ;; some scripts expect when (unless) returns #f if the condition is + ;; unsatisfied (satisfied) + (define-macro (when test . body) + `(and ,test (begin . ,body))) + + (define-macro (unless test . body) + `(and (not ,test) (begin . ,body))) + + (define-macro fluid-let + (lambda (xvxv . ee) + (let ((xx (map car xvxv)) + (vv (map cadr xvxv)) + (old-xx (map (lambda (xv) + (string->symbol + (string-append "%__" + (symbol->string (car xv))))) xvxv)) + (res '%_*_res)) + `(let ,(map (lambda (old-x x) `(,old-x ,x)) old-xx xx) + ,@(map (lambda (x v) + `(set! ,x ,v)) xx vv) + (let ((,res (begin ,@ee))) + ,@(map (lambda (x old-x) `(set! ,x ,old-x)) xx old-xx) + ,res))))) + + (define seconds->human-time + (lambda (secs) "")) + + ; ex:ft=scheme
Tag: tex2page