From: Dan Davison <davison@stats.ox.ac.uk>
To: emacs-orgmode@gnu.org
Subject: orgstruct minor mode (WAS: latex <-> org ?)
Date: Thu, 18 Dec 2008 11:50:41 -0500 [thread overview]
Message-ID: <20081218165041.GA9810@stats.ox.ac.uk> (raw)
In-Reply-To: <20081208.143918.07440426.harri.kiiskinen@utu.fi>
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 <davison@stats.ox.ac.uk>
> 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.
> > > Emacs-orgmode@gnu.org
> > > http://lists.gnu.org/mailman/listinfo/emacs-orgmode
> >
> > --
> > http://www.stats.ox.ac.uk/~davison
--
http://www.stats.ox.ac.uk/~davison
next prev parent reply other threads:[~2008-12-18 16:50 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-04 16:51 latex <-> org ? Dan Davison
2008-12-04 23:12 ` Dan Davison
2008-12-08 12:39 ` Harri Kiiskinen
2008-12-18 16:50 ` Dan Davison [this message]
2008-12-19 8:40 ` orgstruct minor mode (WAS: latex <-> org ?) Carsten Dominik
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20081218165041.GA9810@stats.ox.ac.uk \
--to=davison@stats.ox.ac.uk \
--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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.