先日の修正をdefadviceの形に直した。HTMLエクスポート時にMathjaxを使わずに直接MathMLでエクスポートする。
;; org-html-mathml-export.el ;; 次の二つの関数はhtmlエクスポート時にlatex部分をhtmlへ変換する。 ;; - org-html-latex-environment ;; - org-html-latex-fragment ;; この関数において、processing-typeがmathmlのときはmathjaxのときと同じように ;; org-html-format-latexを呼び出すようにする。 ;; org-html-format-latexはorg-format-latexを呼び出す。 ;; org-format-latexはprocessing-typeがmathmlのときorg-format-latex-as-mathmlを呼び出す。 (defadvice org-html-latex-environment (around org-html-latex-environment--html-mathml (latex-environment contents info) activate) (setq ad-return-value (let ((processing-type (plist-get info :with-latex))) (case processing-type ((mathml) (let ((org-format-latex-as-mathml-format 'mathml)) (org-html-format-latex (org-remove-indentation (org-element-property :value latex-environment)) ;;latex-frag 'mathml info))) ((t) ad-do-it))))) (defadvice org-html-latex-fragment (around org-html-latex-fragment--html-mathml (latex-fragment contents info) activate) (setq ad-return-value (let ((processing-type (plist-get info :with-latex))) (case processing-type ((mathml) (let ((org-format-latex-as-mathml-format 'mathml)) (org-html-format-latex (org-element-property :value latex-fragment) ;;latex-frag 'mathml info))) ((t) ad-do-it))))) (defvar org-format-latex-as-mathml-format 'link "org-format-latex-as-mathml関数がどのような形式の文字列を返すかどうかを指定する変数。'linkのときMathMLファイルへのリンクを返す。'mathmlのときMathMLの文字列自体を返す(XMLヘッダー無し)。") ;; ;; org-format-latex-as-mathmlはLaTeX表記をMathMLへ変換する。 ;; OpenDocumentエクスポートの時はファイルへのリンクへ変換する。 ;; HTMLエクスポートの時はMathMLそのものへ変換する。 ;; (defadvice org-format-latex-as-mathml (around org-format-latex-as-mathml--html-mathml (latex-frag latex-frag-type prefix &optional dir) activate) (setq ad-return-value (if (eq org-format-latex-as-mathml-format 'mathml) (org-format-latex-as-mathml-not-file latex-frag latex-frag-type prefix dir) ad-do-it))) (defun org-format-latex-as-mathml-not-file (latex-frag latex-frag-type prefix &optional dir) "Use `org-create-math-formula' but check local cache first." (let* ((print-length nil) (print-level nil) ;;必要? (mathml (org-create-math-formula latex-frag))) ;; Successful conversion. Return the MathML. (if mathml (progn ;; Erase XML header (if (eql (string-match "^<\\?xml [^>]+>" mathml) 0) (setq mathml (replace-match "" t t mathml))) ;; Erase all line breaks (setq mathml (replace-regexp-in-string "[\n\r]" "" mathml)) ;; Add props (org-add-props mathml (list 'org-latex-src (replace-regexp-in-string "\"" "" latex-frag) 'org-latex-src-embed-type (if latex-frag-type 'paragraph 'character)))) ;; Failed conversion. Return the LaTeX fragment verbatim latex-frag)))
使い方:
- これを適当な場所でloadする。
- mathtoweb.jarをダウンロードして適当な所に置く。
- 変数をカスタマイズする。
- org-latex-to-mathml-convert-command を "java -jar %j -unicode -force -df %o %I"
- org-latex-to-mathml-jar-file を "(ファイルを置いた場所)/mathtoweb.jar"
- org文書の
#+OPTIONS:
にtex:mathml
を書き加える。
Org2Blogでこれを使うなら:
- org2blog/wp-use-wp-latex を nil にする。
[…] 上記の修正をadviceの形でまとめた org-modeで数式を書く(HTMLへMathMLでエクスポートする) […]