« HTML + CSS で数式組版 (その 3 ) | トップページ | HTML + CSS で数式組版 (その5) »

2009年3月20日 (金)

HTML + CSS で数式組版 (その4)

変更箇所

(setf *match-keyargs* "\\\\[a-z]+\\({.+}\\)*")
(setf *match-text* "[^ \\]+")

(defun debug (msg)
  (let ((b (get-buffer-create "*debug*")))
    (let ((bp (buffer-size b)))
      (with-open-stream (stm (make-buffer-stream b bp))
        (format stm "~A~%" msg)))))

defvar を setf に変更しました。 defvar で一度値が束縛されてしまうと、再度評価しても値を変えられないことに、遅まきながら気付きまして。

match-text の仕様を変えようと思って、実際変えてみたら、再評価で値を変えられないということに気付きました。空白だけでなく、バックスラッシュでも、トークンを区切れるように変えてます。

debug 関数が追加されているのは、それで、ちょっとハマったから ^^)

追加箇所

キーワード解析部分の途中まで。

(setf *match-key* "\\\\\\([a-z]+\\)")
(setf *match-arg* "{\\(.+\\)}")
(setf *keywords*
      (list '("frac" frac)))

(defun find-keyword (str lst)
  (cond ((eq nil lst) nil)
        ((string= str (caar lst)) (cadar lst))
        (t (find-keyword str (cdr lst)))))

(defun parse-keyword (str)
  (let ((mb (string-match *match-key* str))
        (me (match-end 0)))
    (let ((kw (match-string 1)))
      (list
       (find-keyword kw *keywords*) (substring str me)))))

最後の関数 parse-keyword を eval すると、こうなります:

(parse-keyword "\\frac{a}{b}")
=>(frac "{a}{b}")

|

« HTML + CSS で数式組版 (その 3 ) | トップページ | HTML + CSS で数式組版 (その5) »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/80472/28709159

この記事へのトラックバック一覧です: HTML + CSS で数式組版 (その4):

« HTML + CSS で数式組版 (その 3 ) | トップページ | HTML + CSS で数式組版 (その5) »