From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jambunathan K Subject: Composing letters using org-mode and scrlttr2 Date: Mon, 26 Jul 2010 02:47:44 +0530 Message-ID: <4C4CA9F8.7010006@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Return-path: Received: from [140.186.70.92] (port=53088 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Od8a4-00061e-Qv for emacs-orgmode@gnu.org; Sun, 25 Jul 2010 17:17:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1Od8a3-00044x-6u for emacs-orgmode@gnu.org; Sun, 25 Jul 2010 17:17:56 -0400 Received: from mail-pw0-f41.google.com ([209.85.160.41]:36510) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Od8a2-00044m-T9 for emacs-orgmode@gnu.org; Sun, 25 Jul 2010 17:17:55 -0400 Received: by pwi8 with SMTP id 8so10011836pwi.0 for ; Sun, 25 Jul 2010 14:17:53 -0700 (PDT) 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 #+TITLE: #+AUTHOR: #+EMAIL: #+LANGUAGE: #+TEXT: #+DATE: #+LaTeX_CLASS_OPTIONS: [a4paper,parskip=full,backaddress=off,foldmarks=off,jambu] #+OPTIONS: toc:nil #+LaTeX_CLASS: scrlttr2 * letter Org Mode User Group \\ World Wide Web * subject Composing letters using org-mode and scrlttr2 * opening Dear Org-Mode Users * body Lately, I have been composing formal letters using KOMA script's scrlttr2. I find it convenient to have them composed auto-magically from within org-mode. I am enclosing the initial set of changes needed to compose some simple letters as this one. The only change that is too 'intrusive' seems to be an extra newline which gets added immediately after the emission of labels. These extra newlines trigger syntax errors in the closing{} and encl{} directives. I think rest of the changes could be squeeed in through existing hooks. #+BEGIN_EXAMPLE - (insert (mapconcat (lambda (l) (format "\\label{%s}" l)) - label-list "\n") "\n")) + (insert (mapconcat (lambda (l) (format "\\label{%s}" l)) + label-list "\n"))) #+END_EXAMPLE If there is some general interest, I could work on making a formal patch available. * closing Yours Truly * encl Patch from my work-area. Jambunathan K. diff --git a/lisp/org-latex.el b/lisp/org-latex.el old mode 100644 new mode 100755 index f3a55ee..6a86c35 --- a/lisp/org-latex.el +++ b/lisp/org-latex.el @@ -113,8 +113,10 @@ ("\\subsubsection{%s}" . "\\subsubsection*{%s}")) ("beamer" "\\documentclass{beamer}" - org-beamer-sectioning - )) + org-beamer-sectioning) + ("scrlttr2" + "\\documentclass{scrlttr2}" + org-scrlttr2-sectioning)) "Alist of LaTeX classes and associated header and structure. If #+LaTeX_CLASS is set in the buffer, use its value and the associated information. Here is the structure of each cell: @@ -776,6 +778,9 @@ when PUB-DIR is set, use this as the publishing directory." (org-export-latex-parse-global level odd))))) ;; finalization + (when (string-equal org-export-latex-class "scrlttr2") + (insert "\n\\end{letter}")) + (unless body-only (insert "\n\\end{document}")) ;; Attach description terms to the \item macro @@ -1016,8 +1021,8 @@ If NUM, export sections as numerical sections." (or sub-heading ""))) (insert "\n") (when label - (insert (mapconcat (lambda (l) (format "\\label{%s}" l)) - label-list "\n") "\n")) + (insert (mapconcat (lambda (l) (format "\\label{%s}" l)) + label-list "\n"))) (insert (org-export-latex-content content)) (cond ((stringp subcontent) (insert subcontent)) ((listp subcontent) diff --git a/lisp/org-scrlttr2.el b/lisp/org-scrlttr2.el new file mode 100755 index 0000000..c2b3764 --- /dev/null +++ b/lisp/org-scrlttr2.el @@ -0,0 +1,20 @@ +(defun org-scrlttr2-sectioning (level heading) + (let ((open "\n\\%s {") + (close "}")) + + (setq heading (replace-regexp-in-string "\\s-+" "" heading)) + (cond + ((string-equal heading "subject") + (setq open "\n\\setkomavar{%s} {") + ) + ((string-equal heading "letter") + (setq open "\n\\begin{%s} {") + ) + ((string-equal heading "body") + (setq open "\n") + (setq close "\n") + ) + (t 'ignore)) + + (list heading open close open close)) + ) diff --git a/lisp/org.el b/lisp/org.el index abc57a6..6e2b4a1 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -3677,7 +3677,8 @@ If TABLE-TYPE is non-nil, also check for table.el-type tables." org-export-icalendar-all-agenda-files org-export-icalendar-combine-agenda-files)) (org-autoload "org-xoxo" '(org-export-as-xoxo)) - (org-autoload "org-beamer" '(org-beamer-mode org-beamer-sectioning))) + (org-autoload "org-beamer" '(org-beamer-mode org-beamer-sectioning)) + (org-autoload "org-scrlttr2" '(org-scrlttr2-sectioning))) ;; Declare and autoload functions from org-agenda.el