[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Orgmode] latex <-> org ?
From: |
Dan Davison |
Subject: |
Re: [Orgmode] latex <-> org ? |
Date: |
Thu, 4 Dec 2008 18:12:31 -0500 |
User-agent: |
Mutt/1.5.18 (2008-05-17) |
For what it's worth, here's my attempt at a simple version of
this. These flip a latex document into org mode so that you can see
the document structure, and then flip it back, hopefully to the same
latex document. #+begin_src ... #+end_src are inserted in the org
version so that text in unfolded sections can be edited in latex-mode
via C-c '. The only latex tags operated on are \section, \subsection
and \subsubsection. But maybe a proper version of this already exists
somewhere?
Dan
(defun org-latex-to-org ()
"Convert latex buffer to org."
(interactive)
(beginning-of-buffer)
(if (save-excursion (re-search-forward "^\\\\title{\\([^}]*\\)}" nil t))
(insert (concat "#+title: " (match-string 1) "\n"))
(insert "#+title: [No title found]\n"))
(insert "* Preamble\n")
(let (level dummy)
(dotimes (level 3)
(let (string)
(dotimes (dummy level) (setq string (concat "sub" string))) ;; how do
you make e.g. 'subsub'?
(save-excursion
(while (re-search-forward (concat "^\\\\" string
"section\\(\\*?{.*\\)$") nil t)
(replace-match
(concat (make-string (1+ level) (string-to-char "*")) " "
(replace-regexp-in-string "\\\\" "\\\\\\\\" (match-string
1))) ;; further '\'s might occur e.g. \label{}
nil nil)
(beginning-of-line)
(insert "#+end_src\n")
(end-of-line)
(insert "\n#+begin_src latex"))))))
(org-mode))
(defun org-latex-to-org-inverse ()
"Convert org buffer to latex. Intended to be the inverse of org-latex-to-org."
(interactive)
(latex-mode)
(beginning-of-buffer)
(kill-line 2)
(save-excursion (while (re-search-forward "^#\\+begin_src latex" nil t)
(kill-line 0) (kill-line)))
(save-excursion (while (re-search-forward "^#\\+end_src" nil t) (kill-line 0)
(kill-line)))
(save-excursion
(while (re-search-forward "^\\* \\(.*\\)$" nil t)
(replace-match
(concat "\\\\section" (replace-regexp-in-string "\\\\" "\\\\\\\\"
(match-string 1))) nil nil)))
(save-excursion
(while (re-search-forward "^\\*\\* \\(.*\\)$" nil t)
(replace-match
(concat "\\\\subsection" (replace-regexp-in-string "\\\\" "\\\\\\\\"
(match-string 1))) nil nil)))
(save-excursion
(while (re-search-forward "^\\*\\*\\* \\(.*\\)$" nil t)
(replace-match
(concat "\\\\subsubsection" (replace-regexp-in-string "\\\\" "\\\\\\\\"
(match-string 1))) nil nil))))
On Thu, Dec 04, 2008 at 11:51:44AM -0500, Dan Davison wrote:
> Has anyone worked on reversible transformation between org and latex?
> I'm collaborating on a latex document with some non-org
> users. Basically what I'd like to do is transform a latex document
> into an org document, fold/unfold sections and edit the document under
> org-mode, and then reconvert to latex. The end result would be as if
> the transformation to org had never happened.
>
> At its simplest those functions would convert between '\section' <->
> '* section', '\subsection' <-> '** subsection' etc, but obviously
> there's a lot more that could be done such as all the conversions that
> org-export-to-latex does; I imagine that function couldn't be used
> directly, but ideally the inverse of the latex->org function would
> share conversion code with org-export-to-latex. Does this idea make
> sense, and has anyone already worked on this?
>
> Dan
>
> --
> http://www.stats.ox.ac.uk/~davison
>
>
> _______________________________________________
> Emacs-orgmode mailing list
> Remember: use `Reply All' to send replies to the list.
> address@hidden
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode
--
http://www.stats.ox.ac.uk/~davison