[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Orgmode] [PATCH] fontified source-code on latex export with listing

From: Carsten Dominik
Subject: Re: [Orgmode] [PATCH] fontified source-code on latex export with listings package
Date: Sun, 9 Aug 2009 12:13:38 +0200

Hi Eric,

I would like to include your patch, this was on my todo list for a long time, thanks for doing it!

- Carsten

On Aug 8, 2009, at 8:59 PM, Eric Schulte wrote:


The attached patch allows for fontified source code blocks on export to LaTeX. It does this using the 'listings' latex package. A new variable
is introduced; `org-export-latex-listings' which should be set to
non-nil for source-code to be exported as listings blocks.  This
variable defaults to nil in which case the current practice of exporting
source code to verbatim latex blocks remains unchanged.

To use this functionality add the following to your org-mode config.

--8<---------------cut here---------------start------------->8---
 ;; tell org to use listings
 (setq org-export-latex-listings t)

 ;; you must include the listings package
 (add-to-list 'org-export-latex-packages-alist '("" "listings"))

;; if you want colored source code then you need to include the color package
 (add-to-list 'org-export-latex-packages-alist '("" "color"))
--8<---------------cut here---------------end--------------->8---

In addition to the patch, I'm attaching an example org-mode file, along
with the generated LaTeX file and PDF file.

Do you think this would be appropriate for inclusion into org-mode?

Thanks -- Eric

diff --git a/lisp/org-exp.el b/lisp/org-exp.el
index 00fd6c8..9de5e5f 100644
--- a/lisp/org-exp.el
+++ b/lisp/org-exp.el
@@ -2204,6 +2204,8 @@ in the list) and remove property and value from the list in LISTVAR."
(defvar htmlp)  ;; dynamically scoped
(defvar latexp)  ;; dynamically scoped
(defvar org-export-latex-verbatim-wrap) ;; defined in org-latex.el
+(defvar org-export-latex-listings) ;; defined in org-latex.el
+(defvar org-export-latex-listings-langs) ;; defined in org-latex.el

(defun org-export-format-source-code-or-example
  (backend lang code &optional opts indent)
@@ -2310,8 +2312,20 @@ INDENT was the original indentation of the block."
             ((eq backend 'latex)
(setq rtn (org-export-number-lines rtn 'latex 0 0 num cont rpllbl fmt))
              (concat "\n#+BEGIN_LaTeX\n"
-                     (org-add-props (concat (car 
-                                            rtn (cdr 
+                     (org-add-props
+                          (if org-export-latex-listings
+                              (concat
+                               (if lang
+ (let* ((lang-sym (intern (concat ":" lang))) + (lstlang (or (plist-get org-export-latex-listings-langs + lang-sym)
+                                                       lang)))
+ (format "\\lstset{language=%s} \n" lstlang))
+                                 "")
+                               "\\begin{lstlisting}\n"
+                               rtn "\\end{lstlisting}\n")
+ (concat (car org-export-latex-verbatim- wrap) + rtn (cdr org-export-latex- verbatim-wrap)))
                          '(org-protected t))
             ((eq backend 'ascii)
diff --git a/lisp/org-latex.el b/lisp/org-latex.el
index fdf9ae2..f80e221 100644
--- a/lisp/org-latex.el
+++ b/lisp/org-latex.el
@@ -69,6 +69,9 @@
          org-deadline-string "\\|"
"Regexp matching special time planning keywords plus the time after it.")
+(defvar org-export-latex-listings nil
+  "If non-nil then source code blocks will be fontified using the
+listings package.")

(defvar latexp)    ; dynamically scoped from org.el
(defvar re-quote)  ; dynamically scoped from org.el
@@ -297,6 +300,12 @@ Defaults to \\begin{verbatim} and \ \end{verbatim}."
  :type '(cons (string :tag "Open")
               (string :tag "Close")))

+(defcustom org-export-latex-listings-langs
+  '(:emacs-lisp "lisp")
+ "Property list mapping languages to their listing language counterpart."
+  :group 'org-export-latex
+  :type 'plist)
(defcustom org-export-latex-remove-from-headlines
  '(:todo nil :priority nil :tags nil)
  "A plist of keywords to remove from headlines. OBSOLETE.
< listngs .org > < listngs .tex><listngs.pdf>_______________________________________________
Emacs-orgmode mailing list
Remember: use `Reply All' to send replies to the list.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]