diff options
author | Nicolas Goaziou <n.goaziou@gmail.com> | 2012-11-21 16:44:53 +0100 |
---|---|---|
committer | Nicolas Goaziou <n.goaziou@gmail.com> | 2012-11-21 17:28:03 +0100 |
commit | 984ef56e651fe218067de30293a001a8a1188932 (patch) | |
tree | 2d86c3b2b3d1772fdab3bb229225c81b2ce5acc2 | |
parent | cf3eb34953c80966301744e06e5f19e837db4439 (diff) | |
download | org-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.el | 84 |
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") |