emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Florian Beck <fb@miszellen.de>
To: Nicolas Goaziou <n.goaziou@gmail.com>
Cc: emacs-orgmode@gnu.org
Subject: Modifying the exporter (was: org-latex-classes with functions, incomplete doc)
Date: Wed, 13 Feb 2013 00:27:05 +0100	[thread overview]
Message-ID: <8738x16rli.fsf_-_@sophokles.streitblatt.de> (raw)
In-Reply-To: <87liavet10.fsf@gmail.com> (Nicolas Goaziou's message of "Sun, 10 Feb 2013 22:52:11 +0100")

Nicolas Goaziou <n.goaziou@gmail.com> writes:


> Anyway, we're back to step one: if you want to handle headlines
> differently (i.e. by adding your own properties), you need to fork
> `latex' back-end, as explained before. If you encounter problems, you
> can post back here.

Ok, I took some time to extract a minimal example. It works fine, but
on a very low level (see below).

Again, the goal is to add an optional argument to sectioning command.
The best way I could come up with is this (I omit the
`fb/org-export-pdf' function):

#+BEGIN_SRC emacs-lisp
(defun fb/org-export-modify-headline (headline string)
  (if (string-match
       (rx
	string-start "\\"
	(group-n 1 (0+ "sub"))
	(group-n 2 (or "part" "chapter" "section" "paragraph"))
	(group-n 3 (zero-or-one "\*"))
	"{" (group-n 4 (minimal-match (0+ (not (any "}"))))) "}")
       string)
      (let* ((level (match-string 1 string))
	     (type (match-string 2 string))
	     (stars (match-string 3 string))
	     (title (match-string 4 string))
	     (toc-title (org-element-property :toc-title headline))
	     (new-hl
	      (format "\\%s%s%s%s{%s}"
		      (or level "")
		      type
		      (or stars "")
		      (if toc-title (format "[%s]" toc-title) "")
		      title)))
	(replace-match new-hl t t string 0))
    string))

(defun fb/org-latex-headline (headline contents info)
  (fb/org-export-modify-headline
   headline
   (org-export-with-backend 'latex headline contents info)))

(org-export-define-derived-backend fb/org-export-pdf latex
  :translate-alist ((headline . fb/org-latex-headline))
  :options-alist ((:toc-title "TOC_TITLE" nil nil t))
  :menu-entry (?l 99 ((?d "Export PDF file" fb/org-export-pdf))))
#+END_SRC

As you can see, I pull apart the string and then put it back together.
(Relatively straightforward in this case, much more involved for, say,
links.)

In a perfect world, I would have access to these elements and the format
string, so I could either modify them before calling
`org-export-with-backend' or assemble the string myself.

-- 
Florian Beck

  reply	other threads:[~2013-02-12 23:27 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-02-10 16:09 org-latex-classes with functions, incomplete doc Florian Beck
2013-02-10 17:06 ` Nicolas Goaziou
2013-02-10 17:51   ` Florian Beck
2013-02-10 18:20     ` Nicolas Goaziou
2013-02-10 18:59       ` Florian Beck
2013-02-10 21:52         ` Nicolas Goaziou
2013-02-12 23:27           ` Florian Beck [this message]
2013-02-13 14:03             ` Modifying the exporter Nicolas Goaziou

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

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8738x16rli.fsf_-_@sophokles.streitblatt.de \
    --to=fb@miszellen.de \
    --cc=emacs-orgmode@gnu.org \
    --cc=n.goaziou@gmail.com \
    /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 public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).