;; User-configurable options
(define $latexopt$
;; Option(s) to pass in relation to LaTeX article document class
;; Set to empty string "" for no option
"12pt")
(define $usepackage$
;; LaTeX packages to load?
;; Set to empty string "" for no packages
;; Can use, e.g., "mathtime" to use MathTime fonts
;; "mathtime")
"")
(define $density$
;; Density specification for equation bitmaps
;; This will be passed to the "convert" program
"96x96")
;; End of user-configurable options
;; stuff to avoid leading newlines messing up the TeX when using
;; xml docbook.
(define %newline% "
")
(define (count-newlines str)
(let loop ((count 0))
(if (string=? (substring str count (+ count 1)) %newline%)
(loop (+ count 1))
count
)
))
;; Returns string, with any leading newlines trimmed off
(define (trim-leading string)
(substring string
(count-newlines string)
(string-length string)))
(root
(make sequence
(process-children)
(process-math)))
;; How to write out an equation into the equation listing file
(define (write-eqn nd)
(let ((texmath (select-elements (children (current-node))
(normalize "alt")))
(graphic (select-elements (children (current-node))
(normalize "graphic"))))
(make element gi: "texequation"
attributes:
(list
(list "fileref" (attribute-string (normalize "fileref") graphic)))
(literal (trim-leading (data texmath))))))
;; Special processing mode to extract equations
(mode htmlmath
(default
(let ((infeqns (select-elements (descendants (current-node))
(normalize "informalequation")))
(eqns (select-elements (descendants (current-node))
(normalize "equation")))
(inleqns (select-elements (descendants (current-node))
(normalize "inlineequation"))))
(with-mode htmlmath
(process-node-list
(node-list infeqns eqns inleqns)))))
(element equation (write-eqn (current-node)))
(element informalequation (write-eqn (current-node)))
(element inlineequation (write-eqn (current-node))))
;; Write equation info to equation-list.sgml
(define (process-math)
(make entity
system-id: "equation-list.sgml"
(make element gi: "equation-set"
attributes: (list
(list "latexopt" $latexopt$)
(list "density" $density$)
(list "usepackage" $usepackage$))
(with-mode htmlmath (process-children)))))