Gauche:tex2page

Gauche:tex2page

Dorai Shitaram氏による、TeX/LaTeXドキュメントをhtmlに変換する Schemeプログラム。

http://www.ccs.neu.edu/home/dorai/tex2page/tex2page-doc.html

インストール


以下は古い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

More ...