From: Carsten Dominik <dominik@science.uva.nl>
To: Dan Davison <davison@stats.ox.ac.uk>
Cc: emacs-orgmode@gnu.org
Subject: Re: orgstruct minor mode (WAS: latex <-> org ?)
Date: Fri, 19 Dec 2008 09:40:00 +0100 [thread overview]
Message-ID: <32BD40B8-4DD1-4B11-A664-F1B1199FABE2@uva.nl> (raw)
In-Reply-To: <20081218165041.GA9810@stats.ox.ac.uk>
[-- Attachment #1.1: Type: text/plain, Size: 8508 bytes --]
Hi Dan,
you best bet for this is using outline-minor-mode, in connection with
org-cycle, see
http://orgmode.org/worg/org-faq.php#use-visibility-cycling-in-outline-mode
Trying to get orgstruct-mode working correctly for this means
entering a world of pain. A world of pain, Larry.
Of you want structure editing in LaTeX files, look at reftex-mode, use
">" and "<" in the reftex-toc buffer to demote and promote sections.
- Carsten
On Dec 18, 2008, at 5:50 PM, Dan Davison wrote:
> 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
>
>
> _______________________________________________
> 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
[-- Attachment #1.2: Type: text/html, Size: 25604 bytes --]
[-- Attachment #2: Type: text/plain, Size: 204 bytes --]
_______________________________________________
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
prev parent reply other threads:[~2008-12-19 8:40 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 ` orgstruct minor mode (WAS: latex <-> org ?) Dan Davison
2008-12-19 8:40 ` Carsten Dominik [this message]
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=32BD40B8-4DD1-4B11-A664-F1B1199FABE2@uva.nl \
--to=dominik@science.uva.nl \
--cc=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.