From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dan Davison Subject: orgstruct minor mode (WAS: latex <-> org ?) Date: Thu, 18 Dec 2008 11:50:41 -0500 Message-ID: <20081218165041.GA9810@stats.ox.ac.uk> References: <20081204165144.GA8550@stats.ox.ac.uk> <20081204231231.GE8550@stats.ox.ac.uk> <20081208.143918.07440426.harri.kiiskinen@utu.fi> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LDM5J-00039l-2r for emacs-orgmode@gnu.org; Thu, 18 Dec 2008 11:50:49 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LDM5H-00038e-WF for emacs-orgmode@gnu.org; Thu, 18 Dec 2008 11:50:48 -0500 Received: from [199.232.76.173] (port=38294 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LDM5H-00038X-RY for emacs-orgmode@gnu.org; Thu, 18 Dec 2008 11:50:47 -0500 Received: from markov.stats.ox.ac.uk ([163.1.210.1]:52147) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LDM5H-0006yi-9c for emacs-orgmode@gnu.org; Thu, 18 Dec 2008 11:50:47 -0500 Received: from blackcap.stats.ox.ac.uk (blackcap.stats [163.1.210.5]) by markov.stats.ox.ac.uk (8.13.6/8.13.6) with ESMTP id mBIGohWk012477 for ; Thu, 18 Dec 2008 16:50:43 GMT Content-Disposition: inline In-Reply-To: <20081208.143918.07440426.harri.kiiskinen@utu.fi> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org 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 > 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