> FYI: This is a know limitation of the LaTeX exporter[1] and the > current state of this issue (dealing with skipped levels) is that > patches for the problem are welcome. I agree that even if > skipped-level-headlines are not allowed, they shouldn't be silently > droped neither. > > Best, > -- David > > [1] http://thread.gmane.org/gmane.emacs.orgmode/26413
I think I have a patch for this, see below. I've tested it briefly to see that it works with both oddeven and odd level headings, but I would appreciate other people taking a closer look/checking that it doesn't break other things. I think I found the problem, in that if you have a structure like * A *** B (i.e. a level one and a level 3) after it has found the level 1 content, it expects to find a level 2 subtree, whereas in fact there could be a level 2+ tree. See the comment in the code for the change I made. Stephen diff --git a/lisp/org-latex.el b/lisp/org-latex.el index 24dd8c1..8530723 100644 --- a/lisp/org-latex.el +++ b/lisp/org-latex.el @@ -937,13 +937,28 @@ Return a list reflecting the document structure." (defun org-export-latex-parse-subcontent (level odd) "Extract the subcontent of a section at LEVEL. If ODD Is non-nil, assume subcontent only contains odd sections." - (if (not (org-re-search-forward-unprotected - (concat "^\\(\\(?:\\*\\)\\{" - (number-to-string (+ (if odd 4 2) level)) - "\\}\\) \\(.*\\)$") - nil t)) - nil ; subcontent is nil - (org-export-latex-parse-global (+ (if odd 2 1) level) odd))) + + (let (nstars new-level) + ;; In the search, we should not assume there will be exactly + ;; LEVEL+1 stars in the next heading, as there may be more than + ;; that number of stars. hence the regexp should be \\*{N,} + ;; rather than just \\*{N} (i.e. no upper bound, but N is minimum + ;; number of stars to expect.) + ;; We then have to check how many stars were found, rather than + ;; assuming there were exactly N. + (when (org-re-search-forward-unprotected + (concat "^\\(\\(?:\\*\\)\\{" + (number-to-string (+ (if odd 4 2) level)) + ",\\}\\) \\(.*\\)$") + nil t) + (setq nstars (1- (- (match-end 1) (match-beginning 1)))) + (setq new-level (if odd + (/ (+ 3 nstars) 2);; not entirely sure why +3! + nstars))) + (if nstars + (org-export-latex-parse-global new-level odd) + nil) ; subcontent is nil + )) ;;; Rendering functions: (defun org-export-latex-global (content) _______________________________________________ Emacs-orgmode mailing list Please use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode