diff options
author | Aaron Ecay <aaronecay@gmail.com> | 2013-03-05 23:04:42 -0500 |
---|---|---|
committer | Nicolas Goaziou <n.goaziou@gmail.com> | 2013-03-06 09:29:37 +0100 |
commit | 42576eaac1126acbbb19245dbc1aa1191e3be453 (patch) | |
tree | b77dd71ca42d3607378317b77871b8f0ef1ce3d0 | |
parent | 8f7b95091e4470dbb71337bea79e88c14e7ffc67 (diff) | |
download | org-mode-42576eaac1126acbbb19245dbc1aa1191e3be453.tar.gz |
ox-latex: Support tikz images, :width, and :height
* ox-latex.el:
(org-latex-image-default-option): Change default value to ""
(org-latex-image-default-width)
(org-latex-image-default-height): Add variables
(org-latex-inline-image-rules): Make .tikz files as exportable with
latex
(org-latex--inline-image): Support tikz images. Also support separate
:width and :height parameters for images.
* ob-R.el (org-babel-R-construct-graphics-device-call): Change file
extension of tikz graphics files to .tikz
Tikz graphics should be exported to LaTeX by \include, not as a link.
This commit changes the file extension used for tikz graphics from .tex
to .tikz, and inserts code for including such images. The :options for
tikz graphics are passed as an optional argument to a tikzpicture
environment.
Also provide :width and :height ATTR_LATEX entries for images. For tikz
graphics, these are implemented with \resizebox; for other image types
they are inserted in the optional arguments to \includegraphics.
-rw-r--r-- | lisp/ob-R.el | 2 | ||||
-rw-r--r-- | lisp/ox-latex.el | 109 |
2 files changed, 81 insertions, 30 deletions
diff --git a/lisp/ob-R.el b/lisp/ob-R.el index 8db0853..9875f81 100644 --- a/lisp/ob-R.el +++ b/lisp/ob-R.el @@ -237,7 +237,7 @@ current code buffer." '((:bmp . "bmp") (:jpg . "jpeg") (:jpeg . "jpeg") - (:tex . "tikz") + (:tikz . "tikz") (:tiff . "tiff") (:png . "png") (:svg . "svg") diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el index 8a5b6a6..1942931 100644 --- a/lisp/ox-latex.el +++ b/lisp/ox-latex.el @@ -77,15 +77,19 @@ ;; (i.e. "inparaenum"). The second one allows to specify optional ;; arguments for that environment (square brackets are not mandatory). ;; -;; Images accept `:float', `:placement', `:comment-include', 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). `:comment-include' is a boolean that -;; toggles whether to comment out the \includegraphics -;; call. `: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. +;; Images accept `:float', `:placement', `:comment-include', `:width', +;; and `:height', and `:options' as attributes. `:float' accepts +;; a symbol among `wrap', `multicolumn', and `figure', which defines +;; the float environment for the image (if unspecified, an image with +;; a caption will be set in a "figure" environment). +;; `:comment-include' is a boolean that toggles whether to comment out +;; the code which actually includes the image. `:placement' is +;; a string that will be used as argument for the environment chosen. +;; `:width' and `:height' control the width and height of the image. +;; `:options' is a string that will be used as the optional argument +;; for "includegraphics" macro or, in the case of tikz images, used as +;; the optional argument for a `tikzpicture' environment which will +;; surround the "\input" picture code. ;; ;; Special blocks accept `:options' as attribute. Its value will be ;; appended as-is to the opening string of the environment created. @@ -472,9 +476,25 @@ which format headlines like for Org version prior to 8.0." ;;;; Links -(defcustom org-latex-image-default-option "width=.9\\linewidth" +(defcustom org-latex-image-default-option "" "Default option for images." :group 'org-export-latex + :version "24.4" + :package-version '(Org . "8.0") + :type 'string) + +(defcustom org-latex-image-default-width ".9\\linewidth" + "Default width for images." + :group 'org-export-latex + :version "24.4" + :package-version '(Org . "8.0") + :type 'string) + +(defcustom org-latex-image-default-height "" + "Default height for images." + :group 'org-export-latex + :version "24.4" + :package-version '(Org . "8.0") :type 'string) (defcustom org-latex-default-figure-position "htb" @@ -483,7 +503,7 @@ which format headlines like for Org version prior to 8.0." :type 'string) (defcustom org-latex-inline-image-rules - '(("file" . "\\.\\(pdf\\|jpeg\\|jpg\\|png\\|ps\\|eps\\)\\'")) + '(("file" . "\\.\\(pdf\\|jpeg\\|jpg\\|png\\|ps\\|eps\\|tikz\\)\\'")) "Rules characterizing image files that can be inlined into LaTeX. A rule consists in an association whose key is the type of link @@ -1751,6 +1771,7 @@ used as a communication channel." (path (let ((raw-path (org-element-property :path link))) (if (not (file-name-absolute-p raw-path)) raw-path (expand-file-name raw-path)))) + (filetype (file-name-extension path)) (caption (org-latex--caption/label-string parent info)) ;; Retrieve latex attributes from the element around. (attr (org-export-read-attribute :attr_latex parent)) @@ -1768,32 +1789,62 @@ used as a communication channel." (format "[%s]" org-latex-default-figure-position)) (t "")))) (comment-include (if (plist-get attr :comment-include) "%" "")) - ;; Options for "includegraphics" macro. Make sure it is - ;; a string with square brackets when non empty. Default to - ;; `org-latex-image-default-option' when possible. - (options (let ((opt (format "%s" - (or (plist-get attr :options) - org-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 ""))))) + ;; It is possible to specify width and height in the + ;; ATTR_LATEX line, and also via default variables. + (width (format "%s" (cond ((plist-get attr :width)) + ((eq float 'float) "0.7\\textwidth") + ((eq float 'wrap) "0.48\\textwidth") + (t org-latex-image-default-width)))) + (height (format "%s" (or (plist-get attr :height) + org-latex-image-default-height))) + (options (let ((opt (format "%s" (or (plist-get attr :options) + org-latex-image-default-option)))) + (if (not (string-match "\\`\\[\\(.*\\)\\]\\'" opt)) opt + (match-string 1 opt)))) + image-code) + (if (equal filetype "tikz") + ;; For tikz images: + ;; - use \input to read in image file. + ;; - if options are present, wrap in a tikzpicture environment. + ;; - if width or height are present, use \resizebox to change + ;; the image size. + (progn + (setq image-code (format "\\input{%s}" path)) + (when (org-string-nw-p options) + (setq image-code + (format "\\begin{tikzpicture}[%s]\n%s\n\\end{tikzpicture}" + options + image-code))) + (when (or (org-string-nw-p width) (org-string-nw-p height)) + (setq image-code (format "\\resizebox{%s}{%s}{%s}" + (if (org-string-nw-p width) width "!") + (if (org-string-nw-p height) height "!") + image-code)))) + ;; For other images: + ;; - add width and height to options. + ;; - include the image with \includegraphics. + (when (org-string-nw-p width) + (setq options (concat options ",width=" width))) + (when (org-string-nw-p height) + (setq options (concat options ",height=" height))) + (when (= (aref options 0) ?,) + (setq options (substring options 1))) + (setq image-code (format "\\includegraphics[%s]{%s}" options path))) ;; Return proper string, depending on FLOAT. (case float (wrap (format "\\begin{wrapfigure}%s \\centering -%s\\includegraphics%s{%s} -%s\\end{wrapfigure}" placement comment-include options path caption)) +%s%s +%s\\end{wrapfigure}" placement comment-include image-code caption)) (multicolumn (format "\\begin{figure*}%s \\centering -%s\\includegraphics%s{%s} -%s\\end{figure*}" placement comment-include options path caption)) +%s%s +%s\\end{figure*}" placement comment-include image-code caption)) (figure (format "\\begin{figure}%s \\centering -%s\\includegraphics%s{%s} -%s\\end{figure}" placement comment-include options path caption)) - (t (format "\\includegraphics%s{%s}" options path))))) +%s%s +%s\\end{figure}" placement comment-include image-code caption)) + (otherwise image-code)))) (defun org-latex-link (link desc info) "Transcode a LINK object from Org to LaTeX. |