emacs-orgmode
[Top][All Lists]
Advanced

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

orgstruct minor mode (WAS: [Orgmode] latex <-> org ?)


From: Dan Davison
Subject: orgstruct minor mode (WAS: [Orgmode] latex <-> org ?)
Date: Thu, 18 Dec 2008 11:50:41 -0500
User-agent: Mutt/1.5.18 (2008-05-17)

Hi all,

I'm still working on a good strategy for using org-mode style
visibility cycling when working on latex documents, and also for
function bodies in code files. My current idea is that I should be
using orgstruct minor mode to do this. I'm hoping that will allow me
to have all the org-mode navigation/visibility cycling I want, while
retaining all the native mode functionality, including font lock. So
basically what I have in mind is the following psuedo-code

org-convert-some-src-mode ()
    insert-asterisks-at-appropriate-places
    enable-orgstruct-minor-mode
    org-overview

and the reverse.

The above works very nicely for hiding function bodies in files
containing R function definitions, but I'm running into some problems
with latex. Say I open this file (with a .tex extension)

\begin{document}
* h1
** h11
* h2
** h21
\end{document}

It opens in latex-mode, and I enable orgstruct minor mode. I notice
that the value of outline-regexp is currently a complicated regexp
containing various latex section headings / macros. Now org-overview
results in

\begin{document}
\end{document}

In contrast, without the \begin \end macros, the file opens in TeX
mode, outline-regexp is "[*\f]+" (what's the \f?), and org-overview
results in

* h1
* h2

as desired.

However simply setting outline-regexp to "[*\f]+" doesn't seem to do
the job -- then org-overview does nothing, with an "Unrecognized
header" error. (I haven't found the source of that error message yet
in org/emacs lisp code).

I'd appreciate any comments on the approach I've outlined, and advice
on how to get the asterisked latex buffer to respond to org-overview
as desired.

I know that there are existing applications of outline-mode to various
major modes, but seeing as I am accustomed to org-mode, and seeing as
Carsten worked on improving outline-mode at the outset of the org
project, I am thinking that it's worth doing this in an org-specific
way. Is that wrong? Should I just be using outline-mode for what I
want to do?

Thanks!

Dan

p.s. I note that org-overview is not listed as one of the functions
that is available in orgstruct minor mode. Nevertheless it seems to
often work, and I was hoping that (something like) it could indeed be
_expected_ to work.





On Mon, Dec 08, 2008 at 02:39:18PM +0200, Harri Kiiskinen wrote:
> Very nice! I've been hoping for this kind of functionality for a
> while, since I'm really struggling to organize some text-mass produced
> by myself over the years, and it seems, that with this I can
> re-organize largish LaTeX-documents with relative ease. (For some
> reason, the order in which a text is naturally written may not be the
> one that is most interesting to read...)  A quick test drive gives ok,
> the document is exactly the same (tested with diff) after having gone
> through the conversion back and forth.
> 
> I think it is a good thing to keep this separate from any of the
> org-mode export functions. As far as I can see, the main use for this
> is the editing of already existing LaTeX file (as in the case of the
> original request), where you have to keep the file as closely
> resembling the original as possible.
> 
> Also, this does not seem like something you use all the time when
> editing LaTeX-files, but more like a tool very handy for reorganizing
> and restructuring your work, i.e. not a replacement for
> org-export-latex, but a tool to integrate existing material to the
> new, exciting org-mode work flow.
> 
> Harri K.
> 
> From: Dan Davison <address@hidden>
> Subject: Re: [Orgmode] latex <-> org ?
> Date: Thu, 4 Dec 2008 18:12:31 -0500
> 
> > 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

-- 
http://www.stats.ox.ac.uk/~davison




reply via email to

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