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

2009年3月29日 (日)

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

各要素の高さを求めます。

(defun text-height (str)
  (if (<= (length str) 1)
      (char-columns (schar str 0))
    (reduce
     (lambda (x y)
       (cond ((and (characterp x) (characterp y))
              (max (char-columns x) (char-columns y)))
             ((and (numberp x) (characterp y))
              (max x (char-columns y)))))
     str)))

(defun helem-height (h)
  (cond
   ((eq h nil) 0)
   ((numberp h) h)
   (t (cadr h))))

(defun get-helem-heights (hs)
  (let ((h (car hs)))
    (cond ((symbolp h) (cadr hs))
          ((<= (length hs) 1)
           (helem-height (car hs)))
          (t
           (reduce
            (lambda (x y)
              (max (helem-height x)
                   (helem-height y)))
            hs)))))

(defun get-elem-heights (elem)
  (if elem
      (cond
       ((atom (car elem))
        (let ((c1 (car elem))
              (c2 (cadr elem))
              (c3 (caddr elem)))
          (cond ((eq c1 'frac)
                 (let ((num (get-elem-heights (car c3)))
                       (den (get-elem-heights (cadr c3))))
                   (list 'v
                         (+ (get-helem-heights num)
                            (get-helem-heights den))
                         num den)))
                ((eq c1 'text)
                 (text-height c3))
                ((eq c1 'argbegin)
                 (let ((hs
                        (cons
                         (get-elem-heights (car c3))
                         (get-elem-heights (cdr c3)))))
                   (list 'h
                         (get-helem-heights hs)
                         hs)))
                (t 0))))
       (t (cons (get-elem-heights (car elem))
                (get-elem-heights (cdr elem)))))))

こうなります:

(get-elem-heights
 (parse-string "\\frac{\\frac{1}{2} + 1}{1 + \\frac{1}{2}}" 0))
((v 4
    (h 2 ((v 2 (h 1 (1 0)) (h 1 (1 0))) 1 1 0))
    (h 2 (1 1 (v 2 (h 1 (1 0)) (h 1 (1 0))) 0))))

|

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

コメント

コメントを書く



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


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



トラックバック

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

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

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