Browse Source

ox-latex: Allow :options in LaTeX attributes

* lisp/ox-latex.el (org-latex-src-block): Allow to add options to
  listings or minted block-wise.
(org-latex-listings-options, org-latex-minted-options): Update
docstring.

* doc/org.texi (@LaTeX{} specific attributes): Document feature.
Nicolas Goaziou 11 years ago
parent
commit
ea097c25dd
2 changed files with 65 additions and 29 deletions
  1. 20 2
      doc/org.texi
  2. 45 27
      lisp/ox-latex.el

+ 20 - 2
doc/org.texi

@@ -9842,6 +9842,7 @@ Here is an example
 @end example
 @end example
 
 
 @cindex formatting source code, markup rules
 @cindex formatting source code, markup rules
+@vindex org-latex-listings
 If the example is source code from a programming language, or any other text
 If the example is source code from a programming language, or any other text
 that can be marked up by font-lock in Emacs, you can ask for the example to
 that can be marked up by font-lock in Emacs, you can ask for the example to
 look like the fontified Emacs buffer@footnote{This works automatically for
 look like the fontified Emacs buffer@footnote{This works automatically for
@@ -11833,8 +11834,10 @@ that environment.
 @cindex source blocks, in @LaTeX{} export
 @cindex source blocks, in @LaTeX{} export
 
 
 In addition to syntax defined in @ref{Literal examples}, names and captions
 In addition to syntax defined in @ref{Literal examples}, names and captions
-(@pxref{Images and tables}), source blocks also accept a @code{:float}
-attribute.  You may set it to:
+(@pxref{Images and tables}), source blocks also accept two additional
+attributes: @code{:float} and @code{:options}.
+
+You may set the former to
 @itemize @minus
 @itemize @minus
 @item
 @item
 @code{t}: if you want to make the source block a float.  It is the default
 @code{t}: if you want to make the source block a float.  It is the default
@@ -11854,6 +11857,21 @@ Code that may not fit in a single page.
 #+END_SRC
 #+END_SRC
 @end example
 @end example
 
 
+@vindex org-latex-listings-options
+@vindex org-latex-minted-options
+The latter allows to specify options relative to the package used to
+highlight code in the output (e.g., @code{listings}).  This is the local
+counterpart to @code{org-latex-listings-options} and
+@code{org-latex-minted-options} variables, which see.
+
+@example
+#+ATTR_LATEX: :options commentstyle=\bfseries
+#+BEGIN_SRC emacs-lisp
+  (defun Fib (n)                          ; Count rabbits.
+    (if (< n 2) n (+ (Fib (- n 1)) (Fib (- n 2)))))
+#+END_SRC
+@end example
+
 @subsubheading Special blocks in @LaTeX{} export
 @subsubheading Special blocks in @LaTeX{} export
 @cindex special blocks, in @LaTeX{} export
 @cindex special blocks, in @LaTeX{} export
 @cindex abstract, in @LaTeX{} export
 @cindex abstract, in @LaTeX{} export

+ 45 - 27
lisp/ox-latex.el

@@ -770,7 +770,13 @@ will typeset the code in a small size font with underlined, bold
 black keywords.
 black keywords.
 
 
 Note that the same options will be applied to blocks of all
 Note that the same options will be applied to blocks of all
-languages."
+languages.  If you need block-specific options, you may use the
+following syntax:
+
+  #+ATTR_LATEX: :options key1=value1,key2=value2
+  #+BEGIN_SRC <LANG>
+  ...
+  #+END_SRC"
   :group 'org-export-latex
   :group 'org-export-latex
   :type '(repeat
   :type '(repeat
 	  (list
 	  (list
@@ -817,7 +823,13 @@ will result in src blocks being exported with
 \\begin{minted}[bgcolor=bg,frame=lines]{<LANG>}
 \\begin{minted}[bgcolor=bg,frame=lines]{<LANG>}
 
 
 as the start of the minted environment. Note that the same
 as the start of the minted environment. Note that the same
-options will be applied to blocks of all languages."
+options will be applied to blocks of all languages.  If you need
+block-specific options, you may use the following syntax:
+
+  #+ATTR_LATEX: :options key1=value1,key2=value2
+  #+BEGIN_SRC <LANG>
+  ...
+  #+END_SRC"
   :group 'org-export-latex
   :group 'org-export-latex
   :type '(repeat
   :type '(repeat
 	  (list
 	  (list
@@ -2279,14 +2291,17 @@ contextual information."
 		(format
 		(format
 		 "\\begin{minted}[%s]{%s}\n%s\\end{minted}"
 		 "\\begin{minted}[%s]{%s}\n%s\\end{minted}"
 		 ;; Options.
 		 ;; Options.
-		 (org-latex--make-option-string
-		  (if (or (not num-start)
-			  (assoc "linenos" org-latex-minted-options))
-		      org-latex-minted-options
-		    (append
-		     `(("linenos")
-		       ("firstnumber" ,(number-to-string (1+ num-start))))
-		     org-latex-minted-options)))
+		 (concat
+		  (org-latex--make-option-string
+		   (if (or (not num-start)
+			   (assoc "linenos" org-latex-minted-options))
+		       org-latex-minted-options
+		     (append
+		      `(("linenos")
+			("firstnumber" ,(number-to-string (1+ num-start))))
+		      org-latex-minted-options)))
+		  (let ((local-options (plist-get attributes :options)))
+		    (and local-options (concat "," local-options))))
 		 ;; Language.
 		 ;; Language.
 		 (or (cadr (assq (intern lang) org-latex-minted-langs)) lang)
 		 (or (cadr (assq (intern lang) org-latex-minted-langs)) lang)
 		 ;; Source code.
 		 ;; Source code.
@@ -2328,23 +2343,26 @@ contextual information."
 	   ;; Options.
 	   ;; Options.
 	   (format
 	   (format
 	    "\\lstset{%s}\n"
 	    "\\lstset{%s}\n"
-	    (org-latex--make-option-string
-	     (append
-	      org-latex-listings-options
-	      (cond
-	       ((and (not float) (plist-member attributes :float)) nil)
-	       ((string= "multicolumn" float) '(("float" "*")))
-	       ((and float (not (assoc "float" org-latex-listings-options)))
-		`(("float" ,org-latex-default-figure-position))))
-	      `(("language" ,lst-lang))
-	      (when label `(("label" ,label)))
-	      (when caption-str `(("caption" ,caption-str)))
-	      (cond ((assoc "numbers" org-latex-listings-options) nil)
-		    ((not num-start) '(("numbers" "none")))
-		    ((zerop num-start) '(("numbers" "left")))
-		    (t `(("numbers" "left")
-			 ("firstnumber"
-			  ,(number-to-string (1+ num-start)))))))))
+	    (concat
+	     (org-latex--make-option-string
+	      (append
+	       org-latex-listings-options
+	       (cond
+		((and (not float) (plist-member attributes :float)) nil)
+		((string= "multicolumn" float) '(("float" "*")))
+		((and float (not (assoc "float" org-latex-listings-options)))
+		 `(("float" ,org-latex-default-figure-position))))
+	       `(("language" ,lst-lang))
+	       (when label `(("label" ,label)))
+	       (when caption-str `(("caption" ,caption-str)))
+	       (cond ((assoc "numbers" org-latex-listings-options) nil)
+		     ((not num-start) '(("numbers" "none")))
+		     ((zerop num-start) '(("numbers" "left")))
+		     (t `(("numbers" "left")
+			  ("firstnumber"
+			   ,(number-to-string (1+ num-start))))))))
+	     (let ((local-options (plist-get attributes :options)))
+	       (and local-options (concat "," local-options)))))
 	   ;; Source code.
 	   ;; Source code.
 	   (format
 	   (format
 	    "\\begin{lstlisting}\n%s\\end{lstlisting}"
 	    "\\begin{lstlisting}\n%s\\end{lstlisting}"