[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[O] [patch, ox-latex] caption and :float nil
From: |
Rasmus |
Subject: |
[O] [patch, ox-latex] caption and :float nil |
Date: |
Wed, 01 Jul 2015 01:33:22 +0200 |
User-agent: |
Gnus/5.130014 (Ma Gnus v0.14) Emacs/25.0.50 (gnu/linux) |
Hi,
Attached is a patch that works reasonably well to allow :float nil
"floats" to have captions in ox-latex.
The hard part is src-blocks.
At the moment we sometimes allow captions to register as figures (at least
when when using verbatim). Instead we could go with "listing". Of course
listing is not a known environment to LaTeX. We can add register it with
newfloat in default-packages, or we can mention in the manual the lines
that needs to be added to org-latex-packages if desired:
\usepackage{newfloat}
\DeclareFloatingEnvironment{listing}
We could also unconditionally use captionof in case of verbatim output for
src blocks, even if float is required, which would allow us to kill
float.sty from default package alist.
BTW: In the current code we uses \captionof{listing}{caption} with minted.
This seems incompatible. But I have not really used minted so I don't
know if I did the test correctly. minted has a [H] placement through it's
listings environment, it seems, so I don't think we need captionof there.
Aaron: I think you had something to do with this at some point, hence the Cc.
WDYT?
Rasmus
Examples:
#+caption: cap
#+attr_latex: :float nil
|a|
⇒
\begin{center}
\captionof{table}{cap}
\begin{tabular}{l}
\toprule
a\\
\bottomrule
\end{tabular}
\end{center}
(Of course, this is from my normal Emacs session)
#+caption: cap
#+attr_latex: :float nil
[[file:org.png]]
⇒
\begin{center}
\includegraphics{org.png}
\captionof{figure}{cap}
\end{center}
#+caption: test
#+attr_latex: :float nil
#+BEGIN_SRC emacs-lisp
(setq org-latex-listings 'minted)
#+END_SRC
⇒ [Note, latex is happy with this...]
% \usepackage{minted}
\begin{minted}[]{common-lisp}
(setq org-latex-listings 'minted)
\end{minted}
\captionof{listing}{test}
#+caption: test
#+attr_latex: :float nil
#+BEGIN_SRC emacs-lisp
(setq org-latex-listings nil)
#+END_SRC
⇒ [Note, here I think we should use listing instead of figure]
\begin{verbatim}
(setq org-latex-listings nil)
\end{verbatim}
\captionof{figure}{test}
--
Don't panic!!!
>From 590390f2e5cf34edcfbb13b18e5c9abc67b98d93 Mon Sep 17 00:00:00 2001
From: Rasmus <address@hidden>
Date: Wed, 1 Jul 2015 01:12:42 +0200
Subject: [PATCH] ox-latex: Support captions for None-floats
* ox-latex.el (org-latex--caption/label-string): Format
nonfloating captions using the capt-of package.
(org-latex--inline-image, org-latex-src-block)
(org-latex--org-table): Allow none-float and caption.
---
etc/ORG-NEWS | 1 +
lisp/ox-latex.el | 68 +++++++++++++++++++++++++++++++++++++++-----------------
2 files changed, 49 insertions(+), 20 deletions(-)
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index ea7a2de..9592f88 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -398,6 +398,7 @@ set using the hh:mm:ss format.
~org-clone-subtree-with-time-shift~ now accepts 0 as an argument for
the number of clones, which removes the repeater from the original
subtree and creates one shifted, repeating clone.
+*** None-floating tables, graphics and blocks can have captions
** Miscellaneous
*** Strip all meta data from ITEM special property
ITEM special property does not contain TODO, priority or tags anymore.
diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el
index 11fa00d..918949b 100644
--- a/lisp/ox-latex.el
+++ b/lisp/ox-latex.el
@@ -1109,21 +1109,31 @@ caption nor label, return the empty string.
For non-floats, see `org-latex--wrap-label'."
(let* ((label (org-latex--label element info nil t))
(main (org-export-get-caption element))
+ (attr (org-export-read-attribute :attr_latex element))
+ (nonfloat (and (member :float attr)
+ (not (plist-get attr :float))
+ main))
(short (org-export-get-caption element t))
- (caption-from-attr-latex
- (org-export-read-attribute :attr_latex element :caption)))
+ (caption-from-attr-latex (plist-get attr :caption)))
(cond
((org-string-nw-p caption-from-attr-latex)
(concat caption-from-attr-latex "\n"))
((and (not main) (equal label "")) "")
((not main) (concat label "\n"))
;; Option caption format with short name.
- (short (format "\\caption[%s]{%s%s}\n"
- (org-export-data short info)
- label
- (org-export-data main info)))
- ;; Standard caption format.
- (t (format "\\caption{%s%s}\n" label (org-export-data main info))))))
+ (t
+ (format (if nonfloat "\\captionof{%s}%s{%s%s}\n"
+ "\\caption%s%s{%s%s}\n")
+ (if nonfloat
+ (let ((type (org-element-type element)))
+ (case type
+ (paragraph "figure")
+ (src-block "listing")
+ (t (symbol-name type))))
+ "")
+ (if short (format "[%s]" (org-export-data short info)) "")
+ label
+ (org-export-data main info))))))
(defun org-latex-guess-inputenc (header)
"Set the coding system in inputenc to what the buffer is.
@@ -1975,14 +1985,15 @@ used as a communication channel."
;; Retrieve latex attributes from the element around.
(attr (org-export-read-attribute :attr_latex parent))
(float (let ((float (plist-get attr :float)))
- (cond ((and (not float) (plist-member attr :float)) nil)
- ((string= float "wrap") 'wrap)
+ (cond ((string= float "wrap") 'wrap)
((string= float "sideways") 'sideways)
((string= float "multicolumn") 'multicolumn)
((or float
(org-element-property :caption parent)
(org-string-nw-p (plist-get attr :caption)))
- 'figure))))
+ (if (and (member :float attr) (not float)) 'nonfloat
+ 'figure))
+ ((and (not float) (plist-member attr :float)) nil))))
(placement
(let ((place (plist-get attr :placement)))
(cond
@@ -2087,6 +2098,13 @@ used as a communication channel."
(if caption-above-p caption "")
comment-include image-code
(if caption-above-p "" caption)))
+ (nonfloat
+ (format "\\begin{center}%s
+%s
+%s\\end{center}"
+ (if caption-above-p caption "")
+ image-code
+ (if caption-above-p "" caption)))
(otherwise image-code))))
(defun org-latex-link (link desc info)
@@ -2501,12 +2519,15 @@ contextual information."
((not listings)
(let* ((caption-str (org-latex--caption/label-string src-block info))
(float-env
- (cond ((and (not float) (plist-member attributes :float)) "%s")
- ((string= "multicolumn" float)
+ (cond ((string= "multicolumn" float)
(format "\\begin{figure*}[%s]\n%s%%s\n%s\\end{figure*}"
(plist-get info :latex-default-figure-position)
(if caption-above-p caption-str "")
(if caption-above-p "" caption-str)))
+ ((and caption (not float)
+ (plist-member attributes :float))
+ (concat "%s\n"
+ (replace-regexp-in-string "listing" "figure"
caption-str)))
((or caption float)
(format "\\begin{figure}[H]\n%%s\n%s\\end{figure}"
caption-str))
@@ -2530,13 +2551,9 @@ contextual information."
(float-env
(cond
((and (not float) (plist-member attributes :float) caption)
- (let ((caption
- (replace-regexp-in-string
- "\\\\caption" "\\captionof{listing}" caption-str
- t t)))
- (concat (and caption-above-p caption)
- "%%s"
- (and (not caption-above-p) (concat "\n" caption)))))
+ (concat (and caption-above-p caption-str)
+ "%s"
+ (and (not caption-above-p) (concat "\n"
caption-str))))
((and (not float) (plist-member attributes :float)) "%s")
((string= "multicolumn" float)
(format "\\begin{listing*}\n%s%%s\n%s\\end{listing*}"
@@ -2867,6 +2884,12 @@ This function assumes TABLE has `org' as its `:type'
property and
(if caption-above-p caption "")
(when centerp "\\centering\n")
fontsize))
+ ((and (not float-env) caption)
+ (concat
+ (and centerp "\\begin{center}\n" )
+ (if caption-above-p caption "")
+ (cond ((and fontsize centerp) fontsize)
+ (fontsize (concat "{" fontsize)))))
(centerp (concat "\\begin{center}\n" fontsize))
(fontsize (concat "{" fontsize)))
(cond ((equal "tabu" table-env)
@@ -2886,6 +2909,11 @@ This function assumes TABLE has `org' as its `:type'
property and
(float-env
(concat (if caption-above-p "" caption)
(format "\n\\end{%s}" float-env)))
+ ((and (not float-env) caption)
+ (concat
+ (if caption-above-p "" caption)
+ (and centerp "\n\\end{center}")
+ (and fontsize (not centerp) "}")))
(centerp "\n\\end{center}")
(fontsize "}")))))))
--
2.4.4
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [O] [patch, ox-latex] caption and :float nil,
Rasmus <=