Re: [O] Adding #+LATEX: \newpage before section header using org-export-before-parsing-hook
I spoke too early - if I have two headings with :newpage: tag in a row, my current code below skips the second heading. It seems (setq org-map-continue-from (outline-next-heading)) in my code is the problem .. any help will be appreciated! (defun org/parse-headings-newpage (backend) ; add \newpage to headings with :newpage: tag (if (member backend '(latex)) (org-map-entries (lambda () (insert-string "#+LATEX: \\newpage\n") (if (outline-next-heading) (setq org-map-continue-from (outline-next-heading))) ) "+newpage")) ) (add-hook 'org-export-before-parsing-hook 'org/parse-headings-newpage) From: Emacs-orgmode <emacs-orgmode-bounces+joon.ro=outlook@gnu.org> on behalf of Joon Ro <joon...@outlook.com> Sent: Wednesday, February 8, 2017 8:58:40 PM To: Nick Dokos; emacs-orgmode@gnu.org Subject: Re: [O] Adding #+LATEX: \newpage before section header using org-export-before-parsing-hook > So you'll have to manipulate org-map-continue-from appropriately. Thanks a lot! Adding (setq org-map-continue-from (outline-next-heading)) after insert-string seemed to solve the problem. (I added "newpage" to org-tags-exclude-from-inheritance, so the newpage does not get applied to subheadings) (defun org/parse-headings-latex-newpage (backend) ; add \newpage to headings with :newpage: tag (if (member backend '(latex)) (org-map-entries (lambda () (progn (insert-string "#+LATEX: \\newpage\n") (setq org-map-continue-from (outline-next-heading)) )) "+newpage")) ) (add-hook 'org-export-before-parsing-hook 'org/parse-headings-latex-newpage) (add-to-list 'org-tags-exclude-from-inheritance '"newpage") Best, Joon
Re: [O] Adding #+LATEX: \newpage before section header using org-export-before-parsing-hook
> So you'll have to manipulate org-map-continue-from appropriately. Thanks a lot! Adding (setq org-map-continue-from (outline-next-heading)) after insert-string seemed to solve the problem. (I added "newpage" to org-tags-exclude-from-inheritance, so the newpage does not get applied to subheadings) (defun org/parse-headings-latex-newpage (backend) ; add \newpage to headings with :newpage: tag (if (member backend '(latex)) (org-map-entries (lambda () (progn (insert-string "#+LATEX: \\newpage\n") (setq org-map-continue-from (outline-next-heading)) )) "+newpage")) ) (add-hook 'org-export-before-parsing-hook 'org/parse-headings-latex-newpage) (add-to-list 'org-tags-exclude-from-inheritance '"newpage") Best, Joon
Re: [O] Adding #+LATEX: \newpage before section header using org-export-before-parsing-hook
Nick Dokoswrites: > Joon Ro writes: > >> So far I have done: >> >> (defun org/parse-headings (backend) >> (if (member backend '(latex)) >> (org-map-entries >>(lambda () >> (progn >>(insert-string "#+LATEX: \\newpage") >>)) >>"+newpage") >> ) >> ) >> >> (add-hook 'org-export-before-parsing-hook 'org/parse-headings) >> >> This puts #+LATEX: \\newpage before the subheading, but the problem is if I >> try to do (insert-string "#+LATEX: \\newpage"), exporting gets stuck with >> the message "org-babel-exp process txt >> at position 280541...". I suspect inserting a string messes up the position. >> How would I insert string with the newline character before a heading? >> > See the doc for org-map-entries - it says: > > , > | The call to FUNC will be wrapped into a save-excursion form, so FUNC > | does not need to preserve point. After evaluation, the cursor will be > | moved to the end of the line (presumably of the headline of the > | processed entry) and search continues from there. Under some > | circumstances, this may not produce the wanted results. For example, > | if you have removed (e.g. archived) the current (sub)tree it could > | mean that the next entry will be skipped entirely. In such cases, you > | can specify the position from where search should continue by making > | FUNC set the variable ‘org-map-continue-from’ to the desired buffer > | position. > ` > > So you'll have to manipulate org-map-continue-from appropriately. I would think it would be easier to add at export time using `org-export-filter-headline-functions'. Eric
Re: [O] Adding #+LATEX: \newpage before section header using org-export-before-parsing-hook
Joon Rowrites: > So far I have done: > > (defun org/parse-headings (backend) > (if (member backend '(latex)) > (org-map-entries >(lambda () > (progn >(insert-string "#+LATEX: \\newpage") >)) >"+newpage") > ) > ) > > (add-hook 'org-export-before-parsing-hook 'org/parse-headings) > > This puts #+LATEX: \\newpage before the subheading, but the problem is if I > try to do (insert-string "#+LATEX: \\newpage"), exporting gets stuck with the > message "org-babel-exp process txt > at position 280541...". I suspect inserting a string messes up the position. > How would I insert string with the newline character before a heading? > See the doc for org-map-entries - it says: , | The call to FUNC will be wrapped into a save-excursion form, so FUNC | does not need to preserve point. After evaluation, the cursor will be | moved to the end of the line (presumably of the headline of the | processed entry) and search continues from there. Under some | circumstances, this may not produce the wanted results. For example, | if you have removed (e.g. archived) the current (sub)tree it could | mean that the next entry will be skipped entirely. In such cases, you | can specify the position from where search should continue by making | FUNC set the variable ‘org-map-continue-from’ to the desired buffer | position. ` So you'll have to manipulate org-map-continue-from appropriately. -- Nick
Re: [O] Adding #+LATEX: \newpage before section header using org-export-before-parsing-hook
So far I have done: (defun org/parse-headings (backend) (if (member backend '(latex)) (org-map-entries (lambda () (progn (insert-string "#+LATEX: \\newpage") )) "+newpage") ) ) (add-hook 'org-export-before-parsing-hook 'org/parse-headings) This puts #+LATEX: \\newpage before the subheading, but the problem is if I try to do (insert-string "#+LATEX: \\newpage"), exporting gets stuck with the message "org-babel-exp process txt at position 280541...". I suspect inserting a string messes up the position. How would I insert string with the newline character before a heading? Best, Joon From: Thomas S. Dye <t...@tsdye.com> Sent: Wednesday, February 8, 2017 2:48:47 PM To: Joon Ro Cc: emacs-orgmode@gnu.org Subject: Re: [O] Adding #+LATEX: \newpage before section header using org-export-before-parsing-hook Aloha Joon, Joon Ro writes: > Hi, > > > In latex export, sometimes I want to make sure a section starts in a new page. > > It seems I should be able to add a hook to org-export-before-parsing-hook, so > if it sees a section with :newpage: tag (for example), it adds #+LATEX: > \newpage before the section header so I would get > > > \newpage > > \section{Section Name} > > in the exported file. > > I have a couple of hooks already so in general I'm using the following code: > > (org-map-entries >(lambda () > (progn > >)) >"+newpage") > > but I'm not sure how to add #+LATEX: \newpage before the section header - . > > Best Regards, > Joon I use this: Ignore headline and/or start newpage on export #+name: ignoreheading-and-or-newpage-on-export #+BEGIN_SRC emacs-lisp :results silent (defun tsd-ignore-headline-and-or-newpage (contents backend info) "Ignore headlines with tag `ignoreheading' and/or start headline on LaTeX new page with tag `newpage'." (cond ((and (org-export-derived-backend-p backend 'latex 'beamer) (string-match "\\`.*newpage.*\n" (downcase contents)) (string-match "\\`.*ignoreheading.*\n" (downcase contents))) (replace-match "newpage" nil nil contents)) ((and (org-export-derived-backend-p backend 'latex 'html 'ascii 'beamer) (string-match "\\`.*ignoreheading.*\n" (downcase contents))) (replace-match "" nil nil contents)) ((and (org-export-derived-backend-p backend 'latex) (string-match "\\(\\`.*\\)newpage\\(.*\n\\)" (downcase contents))) (replace-match "newpage\\1\\2" nil nil contents ;; add function to filter list ;; (add-to-list 'org-export-filter-headline-functions ;; 'tsd-ignore-headline-and-or-newpage) #+END_SRC hth, Tom -- Thomas S. Dye http://www.tsdye.com
Re: [O] Adding #+LATEX: \newpage before section header using org-export-before-parsing-hook
Aloha Joon, Joon Ro writes: > Hi, > > > In latex export, sometimes I want to make sure a section starts in a new page. > > It seems I should be able to add a hook to org-export-before-parsing-hook, so > if it sees a section with :newpage: tag (for example), it adds #+LATEX: > \newpage before the section header so I would get > > > \newpage > > \section{Section Name} > > in the exported file. > > I have a couple of hooks already so in general I'm using the following code: > > (org-map-entries >(lambda () > (progn > >)) >"+newpage") > > but I'm not sure how to add #+LATEX: \newpage before the section header - . > > Best Regards, > Joon I use this: Ignore headline and/or start newpage on export #+name: ignoreheading-and-or-newpage-on-export #+BEGIN_SRC emacs-lisp :results silent (defun tsd-ignore-headline-and-or-newpage (contents backend info) "Ignore headlines with tag `ignoreheading' and/or start headline on LaTeX new page with tag `newpage'." (cond ((and (org-export-derived-backend-p backend 'latex 'beamer) (string-match "\\`.*newpage.*\n" (downcase contents)) (string-match "\\`.*ignoreheading.*\n" (downcase contents))) (replace-match "newpage" nil nil contents)) ((and (org-export-derived-backend-p backend 'latex 'html 'ascii 'beamer) (string-match "\\`.*ignoreheading.*\n" (downcase contents))) (replace-match "" nil nil contents)) ((and (org-export-derived-backend-p backend 'latex) (string-match "\\(\\`.*\\)newpage\\(.*\n\\)" (downcase contents))) (replace-match "newpage\\1\\2" nil nil contents ;; add function to filter list ;; (add-to-list 'org-export-filter-headline-functions ;; 'tsd-ignore-headline-and-or-newpage) #+END_SRC hth, Tom -- Thomas S. Dye http://www.tsdye.com
Re: [O] Adding #+LATEX: \newpage before section header using org-export-before-parsing-hook
Hi, (I'm sorry for a duplicated email - it was sent my a mistake) In latex export, sometimes I want to make sure a section starts in a new page. It seems I should be able to add a hook to org-export-before-parsing-hook, so if it sees a section with :newpage: tag (for example), it adds #+LATEX: \newpage before the section header so I would get \newpage \section{Section Name} in the exported file. I have a couple of hooks already so in general I'm using the following code: (org-map-entries (lambda () (progn )) "+newpage") but I'm not sure how to add #+LATEX: \newpage before the section header - any help would be greatly appreciated. Best, Joon From: Joon RoSent: Wednesday, February 8, 2017 1:52:42 PM To: emacs-orgmode@gnu.org Subject: Adding #+LATEX: \newpage before section header using org-export-before-parsing-hook Hi, In latex export, sometimes I want to make sure a section starts in a new page. It seems I should be able to add a hook to org-export-before-parsing-hook, so if it sees a section with :newpage: tag (for example), it adds #+LATEX: \newpage before the section header so I would get \newpage \section{Section Name} in the exported file. I have a couple of hooks already so in general I'm using the following code: (org-map-entries (lambda () (progn )) "+newpage") but I'm not sure how to add #+LATEX: \newpage before the section header - . Best Regards, Joon