summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Goaziou <n.goaziou@gmail.com>2012-11-21 16:44:53 +0100
committerNicolas Goaziou <n.goaziou@gmail.com>2012-11-21 17:28:03 +0100
commit984ef56e651fe218067de30293a001a8a1188932 (patch)
tree2d86c3b2b3d1772fdab3bb229225c81b2ce5acc2
parentcf3eb34953c80966301744e06e5f19e837db4439 (diff)
downloadorg-mode-984ef56e651fe218067de30293a001a8a1188932.tar.gz
org-e-latex: Change syntax for images attributes
* contrib/lisp/org-e-latex.el (org-e-latex--inline-image): Rename from `org-e-latex-link--inline-image'. Use new attributes. (org-e-latex-link): Use new function.
-rw-r--r--contrib/lisp/org-e-latex.el84
1 files changed, 43 insertions, 41 deletions
diff --git a/contrib/lisp/org-e-latex.el b/contrib/lisp/org-e-latex.el
index 7c09a5f..77fdd7e 100644
--- a/contrib/lisp/org-e-latex.el
+++ b/contrib/lisp/org-e-latex.el
@@ -72,6 +72,14 @@
;; (i.e. "inparaenum"). The second one allows to specify optional
;; arguments for that environment (square brackets are not mandatory).
;;
+;; Images accept `:float', `:placement' and `:options' as attributes.
+;; `:float' accepts a symbol among `wrap', `multicolumn', and
+;; `figure', which defines the float environment for the table (if
+;; unspecified, an image with a caption will be set in a "figure"
+;; environment). `:placement' is a string that will be used as
+;; argument for the environment chosen. `:options' is a string that
+;; will be used as the optional argument for "includegraphics" macro.
+;;
;; This back-end also offers enhanced support for footnotes. Thus, it
;; handles nested footnotes, footnotes in tables and footnotes in item
;; descriptions.
@@ -1709,7 +1717,7 @@ CONTENTS is nil. INFO is a plist holding contextual information."
;;;; Link
-(defun org-e-latex-link--inline-image (link info)
+(defun org-e-latex--inline-image (link info)
"Return LaTeX code for an inline image.
LINK is the link pointing to the inline image. INFO is a plist
used as a communication channel."
@@ -1719,51 +1727,45 @@ used as a communication channel."
(expand-file-name raw-path))))
(caption (org-e-latex--caption/label-string parent info))
;; Retrieve latex attributes from the element around.
- (attr (let ((raw-attr
- (mapconcat #'identity
- (org-element-property :attr_latex parent)
- " ")))
- (unless (string= raw-attr "") raw-attr)))
- (disposition
- (cond
- ((and attr (string-match "\\<wrap\\>" attr)) 'wrap)
- ((and attr (string-match "\\<multicolumn\\>" attr)) 'multicolumn)
- ((or (and attr (string-match "\\<float\\>" attr))
- (not (string= caption "")))
- 'float)))
+ (attr (org-export-read-attribute :attr_latex parent))
+ (float (let ((float (plist-get attr :float)))
+ (cond ((string= float "wrap") 'wrap)
+ ((string= float "multicolumn") 'multicolumn)
+ ((or (string= float "figure")
+ (org-element-property :caption parent))
+ 'figure))))
(placement
- (cond
- ((and attr (string-match "\\<placement=\\(\\S-+\\)" attr))
- (org-match-string-no-properties 1 attr))
- ((eq disposition 'wrap) "{l}{0.5\\textwidth}")
- ((eq disposition 'float)
- (concat "[" org-e-latex-default-figure-position "]"))
- (t ""))))
- ;; Now clear ATTR from any special keyword and set a default
- ;; value if nothing is left.
- (setq attr
- (if (not attr) ""
- (org-trim
- (replace-regexp-in-string
- "\\(wrap\\|multicolumn\\|float\\|placement=\\S-+\\)" "" attr))))
- (setq attr (cond ((not (string= attr "")) attr)
- ((eq disposition 'float) "width=0.7\\textwidth")
- ((eq disposition 'wrap) "width=0.48\\textwidth")
- (t (or org-e-latex-image-default-option ""))))
- ;; Return proper string, depending on DISPOSITION.
- (case disposition
+ (let ((place (plist-get attr :placement)))
+ (cond (place (format "%s" place))
+ ((eq float 'wrap) "{l}{0.5\\textwidth}")
+ ((eq float 'figure)
+ (format "[%s]" org-e-latex-default-figure-position))
+ (t ""))))
+ ;; Options for "includegraphics" macro. Make sure it is
+ ;; a string with square brackets when non empty. Default to
+ ;; `org-e-latex-image-default-option' when possible.
+ (options (let ((opt (format "%s"
+ (or (plist-get attr :options)
+ org-e-latex-image-default-option))))
+ (cond ((string-match "\\`\\[.*\\]" opt) opt)
+ ((org-string-nw-p opt) (format "[%s]" opt))
+ ((eq float 'float) "[width=0.7\\textwidth]")
+ ((eq float 'wrap) "[width=0.48\\textwidth]")
+ (t "")))))
+ ;; Return proper string, depending on FLOAT.
+ (case float
(wrap (format "\\begin{wrapfigure}%s
\\centering
-\\includegraphics[%s]{%s}
-%s\\end{wrapfigure}" placement attr path caption))
+\\includegraphics%s{%s}
+%s\\end{wrapfigure}" placement options path caption))
(multicolumn (format "\\begin{figure*}%s
\\centering
-\\includegraphics[%s]{%s}
-%s\\end{figure*}" placement attr path caption))
- (float (format "\\begin{figure}%s
+\\includegraphics%s{%s}
+%s\\end{figure*}" placement options path caption))
+ (figure (format "\\begin{figure}%s
\\centering
-\\includegraphics[%s]{%s}
-%s\\end{figure}" placement attr path caption))
+\\includegraphics%s{%s}
+%s\\end{figure}" placement options path caption))
(t (format "\\includegraphics[%s]{%s}" attr path)))))
(defun org-e-latex-link (link desc info)
@@ -1789,7 +1791,7 @@ INFO is a plist holding contextual information. See
protocol)
(cond
;; Image file.
- (imagep (org-e-latex-link--inline-image link info))
+ (imagep (org-e-latex--inline-image link info))
;; Radio link: Transcode target's contents and use them as link's
;; description.
((string= type "radio")