emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* [odt] regression in using an equation sourced via latex_header
@ 2011-11-01 16:10 Myles English
  2011-11-01 19:10 ` Jambunathan K
  0 siblings, 1 reply; 6+ messages in thread
From: Myles English @ 2011-11-01 16:10 UTC (permalink / raw)
  To: emacs-orgmode Mode


Hello,

If I have a latex file mystyle.tex that contains:

\newcommand{\myBigEquation}{b=23}

and then have this in my org file:

#+LATEX_HEADER: \usepackage{/path/to/mystyle}

I can use it conveniently like this:

\begin{equation}
     \myBigEquation
\end{equation}

and that exports fine to pdf but not to odt.  I am fairly sure it used
to work (around 7th Oct).  Can anyone confirm this?

Myles

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [odt] regression in using an equation sourced via latex_header
  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
  0 siblings, 1 reply; 6+ messages in thread
From: Jambunathan K @ 2011-11-01 19:10 UTC (permalink / raw)
  To: emacs-orgmode Mode


Myles

Thanks for exercising the latex-to-mathml changes. I am happy that there
is someone out there interested in and using stuff that I have spent
some efforts on.

> Hello,
>
> If I have a latex file mystyle.tex that contains:
>
> \newcommand{\myBigEquation}{b=23}
>
> and then have this in my org file:
>
> #+LATEX_HEADER: \usepackage{/path/to/mystyle}
>
> I can use it conveniently like this:
>
> \begin{equation}
>      \myBigEquation
> \end{equation}
>
> and that exports fine to pdf but not to odt.  I am fairly sure it used
> to work (around 7th Oct).  Can anyone confirm this?

I am using the very latest version in the git. While exporting to odt
using

1. dvipng 
   - I see no issues [1]

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

     I see that your sample file gets exported just fine.

Side Note:
==========

1. You don't have to export the whole file to see whether the
   latex-mathml conversion is sane.

   You can mark - as in marking a region - the LaTeX fragment in your
   org file and do a M-x org-create-math-formula. You will see something
   like this echoed in you *Messages* buffer.

,---- M-x org-create-math-formula
| Mark set [2 times]
| Mark activated
| Wrote ~/tmp-myles/ltxmathml-in3272esr
| Running java -jar ~/tmp-odt/mathtoweb.jar -ncf mystyle.tex -unicode -force -df ltxmathml-out3272r2x ltxmathml-in3272esr 
| <?xml version="1.0" encoding="UTF-8"?>
| <math xmlns="http://www.w3.org/1998/Math/MathML">
| <mrow>
| 	<mspace width="1.00em" />
| 	<mi>b</mi>
| 	<mo>=</mo>
| 	<mn>23</mn>
| </mrow>
| </math>
`----

2. I am copy pasting the extra "stuff" that gets attached to the latex
   fragment before it get "latex" ed and "dvipng"ed.

   latex-to-mathml converter ignores *all* of the stuff that goes in
   org-format-latex-header, org-export-latex-default-packages-alist,
   org-export-latex-packages-alist, org-format-latex-header-extra
   variables.

   I think I should build an "ncf" file on the fly based on these
   variables and pass it to the command line converter.

   Since I don't know much of latex, can you or someone in the list give
   me pointers on what would constitute an ncf argument as expected by
   mathtoweb.

   I will make the needed changes as required.
   
,---- See org-create-formula-image
|     (with-temp-file texfile
|       (insert (org-splice-latex-header
| 	       org-format-latex-header
| 	       org-export-latex-default-packages-alist
| 	       org-export-latex-packages-alist t
| 	       org-format-latex-header-extra))
|       (insert "\n\\begin{document}\n" string "\n\\end{document}\n")
|       (require 'org-latex)
|       (org-export-latex-fix-inputenc))
`----

,---- temporary tex file [see LATEX-HEADER at the end]
| \documentclass{article}
| \usepackage[usenames]{color}
| \usepackage{amsmath}
| \usepackage[mathscr]{eucal}
| \pagestyle{empty}             % do not remove
| \usepackage{pdfpages}
| \usepackage[utf8]{inputenc}
| \usepackage[T1]{fontenc}
| % Package fixltx2e omitted
| \usepackage{graphicx}
| % Package longtable omitted
| % Package float omitted
| % Package wrapfig omitted
| \usepackage{soul}
| \usepackage{t1enc}
| \usepackage{textcomp}
| \usepackage{amssymb}
| % Package hyperref omitted
| \tolerance=1000
| % The settings below are copied from fullpage.sty
| \setlength{\textwidth}{\paperwidth}
| \addtolength{\textwidth}{-3cm}
| \setlength{\oddsidemargin}{1.5cm}
| \addtolength{\oddsidemargin}{-2.54cm}
| \setlength{\evensidemargin}{\oddsidemargin}
| \setlength{\textheight}{\paperheight}
| \addtolength{\textheight}{-\headheight}
| \addtolength{\textheight}{-\headsep}
| \addtolength{\textheight}{-\footskip}
| \addtolength{\textheight}{-3cm}
| \setlength{\topmargin}{1.5cm}
| \addtolength{\topmargin}{-2.54cm}
| 
| \usepackage{jambu}
| \begin{document}
| \begin{equation}
|      \myBigEquation
| \end{equation}
| \end{document}
`----

Footnotes: 

[1]  LaTeX novice here. 

The method I used is this: Put that style file in one of the local
directories and register that directory as a root with the MikTex
package manager. Then use this directive:
\usepackage{jambu}

ps: I am on Windows using Cygwin. So getting the directory path right
with escaping - what with spaces in directories - is always a
hair-splitting experience for me.

     
> Myles
>
>



-- 

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [odt] regression in using an equation sourced via latex_header
  2011-11-01 19:10 ` Jambunathan K
@ 2011-11-01 19:14   ` Jambunathan K
  2011-11-02 21:38     ` Myles English
  0 siblings, 1 reply; 6+ messages in thread
From: Jambunathan K @ 2011-11-01 19:14 UTC (permalink / raw)
  To: emacs-orgmode Mode

> 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

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [odt] regression in using an equation sourced via latex_header
  2011-11-01 19:14   ` Jambunathan K
@ 2011-11-02 21:38     ` Myles English
  2011-11-03 14:59       ` Myles English
  0 siblings, 1 reply; 6+ messages in thread
From: Myles English @ 2011-11-02 21:38 UTC (permalink / raw)
  To: emacs-orgmode

>> 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}}

and try to use it like this:

#+LABEL: Equation:cp
     \begin{equation}
     \capillaryPressure=0
     \end{equation}

then I get this xml:

<?xml version="1.0" encoding="UTF-8"?>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
	<mspace width="1.00em" />
	\pressur
	<msub>
		<mi>e</mi>
		<mi>c</mi>
	</msub>
	<mo>=</mo>
	<mn>0</mn>
</mrow>
</math>

when what I expected was P_c .

Any ideas?

Myes

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [odt] regression in using an equation sourced via latex_header
  2011-11-02 21:38     ` Myles English
@ 2011-11-03 14:59       ` Myles English
  2011-11-03 18:21         ` Plastex + MathToWeb (was Re: [odt] regression in using an equation sourced via latex_header) Jambunathan K
  0 siblings, 1 reply; 6+ messages in thread
From: Myles English @ 2011-11-03 14:59 UTC (permalink / raw)
  To: emacs-orgmode Mode

>> 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


Myles

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Plastex + MathToWeb (was Re: [odt] regression in using an equation sourced via latex_header)
  2011-11-03 14:59       ` Myles English
@ 2011-11-03 18:21         ` Jambunathan K
  0 siblings, 0 replies; 6+ messages in thread
From: Jambunathan K @ 2011-11-03 18:21 UTC (permalink / raw)
  To: emacs-orgmode

[-- 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 --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2011-11-03 18:22 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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         ` Plastex + MathToWeb (was Re: [odt] regression in using an equation sourced via latex_header) Jambunathan K

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).