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.
This commit is contained in:
Nicolas Goaziou 2014-03-25 15:58:41 +01:00
parent 9973fbc347
commit ea097c25dd
2 changed files with 65 additions and 29 deletions

View File

@ -9842,6 +9842,7 @@ Here is an example
@end example
@cindex formatting source code, markup rules
@vindex org-latex-listings
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
look like the fontified Emacs buffer@footnote{This works automatically for
@ -11833,8 +11834,10 @@ that environment.
@cindex source blocks, in @LaTeX{} export
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
@item
@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 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
@cindex special blocks, in @LaTeX{} export
@cindex abstract, in @LaTeX{} export

View File

@ -770,7 +770,13 @@ will typeset the code in a small size font with underlined, bold
black keywords.
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
:type '(repeat
(list
@ -817,7 +823,13 @@ will result in src blocks being exported with
\\begin{minted}[bgcolor=bg,frame=lines]{<LANG>}
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
:type '(repeat
(list
@ -2279,14 +2291,17 @@ contextual information."
(format
"\\begin{minted}[%s]{%s}\n%s\\end{minted}"
;; 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.
(or (cadr (assq (intern lang) org-latex-minted-langs)) lang)
;; Source code.
@ -2328,23 +2343,26 @@ contextual information."
;; Options.
(format
"\\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.
(format
"\\begin{lstlisting}\n%s\\end{lstlisting}"