From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jambunathan K Subject: Plastex + MathToWeb (was Re: [odt] regression in using an equation sourced via latex_header) Date: Thu, 03 Nov 2011 23:51:36 +0530 Message-ID: <81pqh92hjj.fsf_-_@gmail.com> References: <871utr7rj3.fsf@gmail.com> <81hb2n64lz.fsf@gmail.com> <81d3db64em.fsf@gmail.com> <874nymryql.fsf@gmail.com> <87aa8dp7zj.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([140.186.70.92]:50615) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RM1vM-00034J-O8 for emacs-orgmode@gnu.org; Thu, 03 Nov 2011 14:22:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RM1vL-0008N7-5V for emacs-orgmode@gnu.org; Thu, 03 Nov 2011 14:22:00 -0400 Received: from mail-iy0-f169.google.com ([209.85.210.169]:40538) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RM1vK-0008My-F1 for emacs-orgmode@gnu.org; Thu, 03 Nov 2011 14:21:59 -0400 Received: by iaae16 with SMTP id e16so301795iaa.0 for ; Thu, 03 Nov 2011 11:21:57 -0700 (PDT) In-Reply-To: <87aa8dp7zj.fsf@gmail.com> (Myles English's message of "Thu, 03 Nov 2011 14:59:28 +0000") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode --=-=-= Content-Type: text/plain Myles English writes: >>> On Wed, 02 Nov 2011 21:38:42 +0000, Myles English said: > >>> On Wed, 02 Nov 2011 00:44:57 +0530, Jambunathan K said: > >>> 2. mathml - You need to register your command file with -ncf > >>> argument. > >>> > >>> For example, if I put the mystyle.tex in the same directory as > >>> exported .org file and add the -ncf argument to the converter as > >>> below > >>> > >>> #+begin_src emacs-lisp (setq org-latex-to-mathml-convert-command > >>> "java -jar %j -ncf mystyle.tex -unicode -force -df %o %I ") > >>> #+end_src > >>> > > >> ncf option is documented here: > >> http://www.mathtoweb.com/cgi-bin/mathtoweb_users_guide.pl#Using_newcommand_and_renewcommand > > > I have narrowed the problem I am having down to newcommands that > > build on other newcommands, like so ... > > > If I have this in my style file: > > > \newcommand{\pressure}{p} > > \newcommand{\capillaryPressure}{\pressure_{c}} > > This can work if the style file appears twice in the mathml command: > > #+begin_src emacs-lisp > (setq org-latex-to-mathml-convert-command > "java -jar %j -ncf mystyle.sty,mystyle.sty -unicode -force -df %o %I ") > #+end_src Where from you pulled this trick. Unless it is documented somewehere you are most likely relying on an unintentional side-effect. After some googling, I see that there is promising solution using plastex. The solution is documented in the below file. The customary odt file is attached as a proof-of-concept. --=-=-= Content-Type: text/x-org Content-Disposition: inline; filename=mathtoweb-with-plastex.org Content-Description: mathtoweb-with-plastex.org #+TITLE: How to circumvent ncf limitation of MathToWeb with Plastex? #+AUTHOR: Jambunathan K #+EMAIL: kjambunathan@gmail.com #+DATE: 2011-11-01 Tue #+DESCRIPTION: #+KEYWORDS: #+LANGUAGE: en #+OPTIONS: H:3 num:t toc:t \n:nil @:t ::t |:t ^:t -:t f:t *:t <:t #+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc #+EXPORT_SELECT_TAGS: export #+EXPORT_EXCLUDE_TAGS: noexport #+LINK_UP: #+LINK_HOME: #+XSLT: #+LATEX_HEADER: \usepackage{jambu} * Summary This document outlines ways to circumvent limitations of "-ncf" option in MathToWeb. See this [[http://lists.gnu.org/archive/html/emacs-orgmode/2011-11/msg00017.html][discussion thread]] for understanding of the limitations. * Settings Leave the converter command at it's default value - which doesn't use =-ncf= option. #+begin_src emacs-lisp (setq org-latex-to-mathml-convert-command "java -jar %j -unicode -force -df %o %I ") #+end_src * mysttyle.tex In the definitions below, one =newcommand= uses one another =newcommand=. The below defintions goes in to user specified stlyes file =mystyle.tex=. #+begin_src tex \newcommand{\pressure}{p} \newcommand{\capillaryPressure}{\pressure_{c}} #+end_src * LaTeX Equation The latex equation below relies on above newcommand definitions to be available. #+begin_src org ,#+LABEL: Equation:cp ,\begin{equation} ,\capillaryPressure=0 ,\end{equation} #+end_src #+LABEL: Equation:cp \begin{equation} \capillaryPressure=0 \end{equation} * Flatten equations with Plastex Use [[http://wiki.lyx.org/LaTeX/ExpandNewcommands][plastex]] to flatten out the above equation. The snippet below is a variation of script in the afore-mentioned link and takes input from stdin and spews out flattened equation to stdout. Copy the below script to =fixup.py=. #+srcname: fixup.py #+begin_src python #!/usr/bin/python # _*_ coding: UTF-8 _*_ import sys from plasTeX.TeX import TeX doc = TeX(file=sys.stdin).parse() # The processed document is contained in the string doc.source # Print to file # f = open('PlastexProcessed.tex', 'w') sys.stdout.write(doc.source.encode('utf-8')) # f.close() #+end_src * Hack Org with a defadvice "sneak-in" custom processing in to org core by installing the advice below. #+begin_src emacs-lisp (defadvice org-format-latex-as-mathml (before my-org-format-latex-as-mathml activate) "Prepend mystyle.tex to latex-frag. Pass it through to \"plastex\". Use the flattened equation - which has ZERO DEPENDENCIES on user's newcommand definitions - as input to MathToWeb." (ad-set-arg 0 (and (ad-get-arg 0) (with-temp-buffer (insert-file-contents "mystyle.tex") (goto-char (point-max)) (newline) (insert (ad-get-arg 0)) (shell-command-on-region (point-min) (point-max) "./fixup.py" nil t (get-buffer-create "*plastex-errors*")) (buffer-string))))) #+end_src * Export Export this file to ODT and see that above LaTeX equation is satisfactorily converted to MathML by MathToWeb. * Disabling above advice You can disable the above advice anytime by doing this. #+begin_src emacs-lisp (ad-disable-advice 'org-format-latex-as-mathml 'before 'my-org-format-latex-as-mathml) (ad-update 'org-format-latex-as-mathml) #+end_src --=-=-= Content-Type: text/plain -- --=-=-= Content-Type: application/vnd.oasis.opendocument.text Content-Disposition: attachment; filename=mathtoweb-with-plastex.odt Content-Transfer-Encoding: base64 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 AAgACACAAgAAkCsAAAAA --=-=-=--