emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[O] Plastex + MathToWeb (was Re: [odt] regression in using an equation s


From: Jambunathan K
Subject: [O] Plastex + MathToWeb (was Re: [odt] regression in using an equation sourced via latex_header)
Date: Thu, 03 Nov 2011 23:51:36 +0530
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.91 (windows-nt)

Myles English <address@hidden> 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.

#+TITLE:     How to circumvent ncf limitation of MathToWeb with Plastex?
#+AUTHOR:    Jambunathan K
#+EMAIL:     address@hidden
#+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
-- 

Attachment: mathtoweb-with-plastex.odt
Description: application/vnd.oasis.opendocument.text


reply via email to

[Prev in Thread] Current Thread [Next in Thread]