;;; muse-mathml.el --- provide MathML support for Muse ;; Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. ;; Author: Li Daobing (lidaobing AT gmail DOT com) ;; Keywords: Muse mathml hypermedia ;; This file is part of Emacs Muse. It is not part of GNU Emacs. ;; Emacs Muse is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published ;; by the Free Software Foundation; either version 2, or (at your ;; option) any later version. ;; Emacs Muse is distributed in the hope that it will be useful, but ;; WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with Emacs Muse; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. ;;;_* Commentary ;;;_ + Startup ;; 1. Get a copy of itex2MML and install it to `/usr/bin' or ;; `/usr/local/bin'. ;; ;; You can get a copy from ;; `http://pear.math.pitt.edu/mathzilla/itex2mml.tar.gz'. ;; 2. Copy `itex2MML.py' to `/usr/bin' or `/usr/local/bin', if you ;; do not have this file, create it and do a `chmod a+x itex2MML.py'. ;; Its content is the following. ;; #!/usr/bin/env python ;; """A wrap for itex2MML ;; ;; Delete the extra blank line. ;; ;; You can use it as itex2MML. ;; ;; For example: ;; ;; echo '$a_b$' | itex2MML.py ;; """ ;; ;; import sys ;; import os ;; ;; def main(): ;; fin, fo = os.popen2('itex2MML') ;; fin.write(sys.stdin.read()) ;; fin.close() ;; for line in fo: ;; line = line.strip() ;; if line: ;; print line ;; ;; if __name__ == '__main__': ;; main() ;; 3. Put `muse-math.el' into your `load-path'. ;; 4. Add the following to your .emacs file. ;; ;; (require 'muse-mathml) (require 'muse-html) (require 'muse-publish) (defgroup muse-mathml nil "Options controlling the behavior of Muse XHTML+MathML publishing. See `muse-html' for more information." :group 'muse-publish) (defcustom muse-mathml-extension ".xhtml" "Default file extension for publishing XHTML+MathML files." :type 'string :group 'muse-mathml) (defcustom muse-mathml-style-sheet muse-xhtml-style-sheet "Store your stylesheet definitions here. This is used in `muse-mathml-header'. You can put raw CSS in here or a tag to an external stylesheet. This text may contain markup tags. An example of using is as follows. " :type 'string :group 'muse-mathml) (defcustom muse-mathml-header " (muse-html-encoding)\"?> <lisp> (concat (muse-publishing-directive \"title\") (let ((author (muse-publishing-directive \"author\"))) (if (not (string= author (user-full-name))) (concat \" (by \" author \")\"))))</lisp> muse-html-meta-http-equiv\" content=\"muse-html-meta-content-type\" /> (let ((maintainer (muse-style-element :maintainer))) (when maintainer (concat \"\"))) muse-xhtml-style-sheet

(concat (muse-publishing-directive \"title\") (let ((author (muse-publishing-directive \"author\"))) (if (not (string= author (user-full-name))) (concat \" (by \" author \")\"))))

\n" "Header used for publishing XHTML+MathML files. This may be text or a filename." :type 'string :group 'muse-mathml) (defcustom muse-mathml-footer " \n" "Footer used for publishing XHTML+MathML files. This may be text or a filename." :type 'string :group 'muse-mathml) (defcustom muse-mathml-command (if (or (featurep 'executable) (load "executable" t t)) (executable-find "itex2MML.py")) "Program to use to convert Latex text to MathML." :type 'string :group 'muse-mathml) (defun muse-publish-mathml-tag (beg end) (if muse-mathml-command (muse-publish-command-tag beg end (list (cons "interp" muse-mathml-command))) (muse-publish-example-tag beg end))) ;; Add the tag (add-to-list 'muse-publish-markup-tags '("mathml" t nil muse-publish-mathml-tag) t) ;; Register the Muse MathML Publisher (muse-derive-style "mathml" "xhtml" :suffix 'muse-mathml-extension :header 'muse-mathml-header :footer 'muse-mathml-footer) (provide 'muse-mathml) ;;; muse-mathml.el ends here