From: Jambunathan K <kjambunathan@gmail.com>
To: emacs-orgmode <emacs-orgmode@gnu.org>
Subject: Plastex + MathToWeb (was Re: [odt] regression in using an equation sourced via latex_header)
Date: Thu, 03 Nov 2011 23:51:36 +0530 [thread overview]
Message-ID: <81pqh92hjj.fsf_-_@gmail.com> (raw)
In-Reply-To: <87aa8dp7zj.fsf@gmail.com> (Myles English's message of "Thu, 03 Nov 2011 14:59:28 +0000")
[-- Attachment #1: Type: text/plain, Size: 1548 bytes --]
Myles English <mylesenglish@gmail.com> 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.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: mathtoweb-with-plastex.org --]
[-- Type: text/x-org, Size: 3565 bytes --]
#+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
[-- Attachment #3: Type: text/plain, Size: 5 bytes --]
--
[-- Attachment #4: mathtoweb-with-plastex.odt --]
[-- Type: application/vnd.oasis.opendocument.text, Size: 11814 bytes --]
prev parent reply other threads:[~2011-11-03 18:22 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-01 16:10 [odt] regression in using an equation sourced via latex_header Myles English
2011-11-01 19:10 ` Jambunathan K
2011-11-01 19:14 ` Jambunathan K
2011-11-02 21:38 ` Myles English
2011-11-03 14:59 ` Myles English
2011-11-03 18:21 ` Jambunathan K [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=81pqh92hjj.fsf_-_@gmail.com \
--to=kjambunathan@gmail.com \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).