From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rasmus Subject: Re: [patch, ox-latex] caption and :float nil Date: Thu, 02 Jul 2015 14:17:17 +0200 Message-ID: <873816sqia.fsf@gmx.us> References: <87twtovkjh.fsf@gmx.us> <87wpykj6vg.fsf@gmail.com> <873817q5ow.fsf@gmx.us> <87oajvj646.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:58405) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZAdQu-0000d2-PB for emacs-orgmode@gnu.org; Thu, 02 Jul 2015 08:17:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZAdQp-0001qi-OM for emacs-orgmode@gnu.org; Thu, 02 Jul 2015 08:17:36 -0400 Received: from plane.gmane.org ([80.91.229.3]:40668) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZAdQp-0001qN-CV for emacs-orgmode@gnu.org; Thu, 02 Jul 2015 08:17:31 -0400 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1ZAdQo-0008VW-A9 for emacs-orgmode@gnu.org; Thu, 02 Jul 2015 14:17:30 +0200 Received: from 81.17.25.66 ([81.17.25.66]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 02 Jul 2015 14:17:30 +0200 Received: from rasmus by 81.17.25.66 with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 02 Jul 2015 14:17:30 +0200 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Aaron Ecay writes: > OK, I’ve done some more investigation. By default, minted uses > \newfloat from the float package to create the listing float class. > This does not set up the caption integration. OTOH, adding the newfloat > option to minted uses \DeclareFloatingEnvironment from the newfloat > package, which works. IOW, replacing the relevant line in your MWE with > the following makes it work: > > \usepackage[newfloat]{minted} > > I’m not sure how that should be integrated in the picture – perhaps org > should recommend (require) this invocation of minted. That's weird. The capt-of documentation recommend the float.sty way of adding new environments. >> I guess it doesn't. In any, minted.sty has >> >> \RequirePackage{float} >> >> So we can be sure [H] is available. Thus, we should just rely on >> float. > > But this is an implementation detail of minted, and could change in a > future release. That's a good point. I updated the patches. 1. Rework captions when float is nil and caption is not. Kill usage of [H] as it's the same as a nonfloat. A src block is always a nonfloat unless it is not. 2. Update documentation. 3. Kill float dependency. Does anybody disagree to especially the third change? Otherwise I'll push it. Rasmus -- Together we will make the possible totalllly impossible! --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0001-ox-latex-Support-captions-for-None-floats.patch >From a0b7c47e37c3c5c62492236562a5f19a38efc06f Mon Sep 17 00:00:00 2001 From: Rasmus Date: Wed, 1 Jul 2015 01:12:42 +0200 Subject: [PATCH 1/3] 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 | 88 ++++++++++++++++++++++++++++++++++++-------------------- 2 files changed, 58 insertions(+), 31 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..31d804b 100644 --- a/lisp/ox-latex.el +++ b/lisp/ox-latex.el @@ -1109,21 +1109,37 @@ 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)) + (type (org-element-type element)) + (nonfloat (or (and (plist-member attr :float) + (not (plist-get attr :float)) + main) + (and (eq type 'src-block) + (not (plist-get attr :float)) + (memq (plist-get info :latex-listings) + '(nil minted))))) (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 + (case type + (paragraph "figure") + (src-block (if (plist-get info :latex-listings) + "listing" + "figure")) + (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 +1991,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 (plist-member attr :float) (not float)) 'nonfloat + 'figure)) + ((and (not float) (plist-member attr :float)) nil)))) (placement (let ((place (plist-get attr :placement))) (cond @@ -2087,6 +2104,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,15 +2525,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))) - ((or caption float) - (format "\\begin{figure}[H]\n%%s\n%s\\end{figure}" - caption-str)) + (caption (concat + (if caption-above-p caption-str "") + "%s" + (if caption-above-p "" (concat "\n" caption-str)))) (t "%s")))) (format float-env @@ -2529,23 +2553,14 @@ contextual information." (let* ((caption-str (org-latex--caption/label-string src-block info)) (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))))) - ((and (not float) (plist-member attributes :float)) "%s") ((string= "multicolumn" float) (format "\\begin{listing*}\n%s%%s\n%s\\end{listing*}" (if caption-above-p caption-str "") (if caption-above-p "" caption-str))) - ((or caption float) - (format "\\begin{listing}[H]\n%s%%s\n%s\\end{listing}" - (if caption-above-p caption-str "") - (if caption-above-p "" caption-str))) + (caption + (concat (if caption-above-p caption-str "") + "%s" + (if caption-above-p "" (concat "\n" caption-str)))) (t "%s"))) (options (plist-get info :latex-minted-options)) (body @@ -2867,6 +2882,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) @@ -2884,8 +2905,13 @@ This function assumes TABLE has `org' as its `:type' property and table-env))) (cond (float-env - (concat (if caption-above-p "" caption) - (format "\n\\end{%s}" float-env))) + (concat (if caption-above-p "" (concat "\n" caption)) + (format "\\end{%s}" float-env))) + ((and (not float-env) caption) + (concat + (if caption-above-p "" (concat "\n" caption)) + (and centerp "\\end{center}") + (and fontsize (not centerp) "}"))) (centerp "\n\\end{center}") (fontsize "}"))))))) -- 2.4.4 --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0002-Update-minted-documentation.patch >From 6d0e535cc9de8411cd7291acecca632a0eb46c11 Mon Sep 17 00:00:00 2001 From: Rasmus Date: Thu, 2 Jul 2015 13:10:30 +0200 Subject: [PATCH 2/3] Update minted documentation. * ox-latex.el (org-latex-listings): * org.texi (Literal examples): Update minted documentation. --- doc/org.texi | 22 +++++++++++++--------- lisp/ox-latex.el | 2 +- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/doc/org.texi b/doc/org.texi index 8ec8a51..f979483 100644 --- a/doc/org.texi +++ b/doc/org.texi @@ -9996,15 +9996,19 @@ 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 the HTML back-end (it requires version 1.34 of the @file{htmlize.el} package, which is distributed with Org). Fontified code chunks in @LaTeX{} can be -achieved using either the listings or the -@url{http://code.google.com/p/minted, minted,} package. Refer to -@code{org-latex-listings} documentation for details.}. This is done -with the @samp{src} block, where you also need to specify the name of the -major mode that should be used to fontify the example@footnote{Code in -@samp{src} blocks may also be evaluated either interactively or on export. -See @pxref{Working with source code} for more information on evaluating code -blocks.}, see @ref{Easy templates} for shortcuts to easily insert code -blocks. +achieved using either the +@url{https://www.ctan.org/tex-archive/macros/latex/contrib/listings/?lang=en, listings,} +or the +@url{https://github.com/gpoore/minted, minted,} package. +If you use minted or listing, you must load the packages manually, for +example by adding the desired package to +@code{org-latex-packages-alist}. Refer to @code{org-latex-listings} +for details.}. This is done with the @samp{src} block, where you also need +to specify the name of the major mode that should be used to fontify the +example@footnote{Code in @samp{src} blocks may also be evaluated either +interactively or on export. See @pxref{Working with source code} for more +information on evaluating code blocks.}, see @ref{Easy templates} for +shortcuts to easily insert code blocks. @cindex #+BEGIN_SRC @example diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el index 31d804b..d9f7c0e 100644 --- a/lisp/ox-latex.el +++ b/lisp/ox-latex.el @@ -795,7 +795,7 @@ the minted package to `org-latex-packages-alist', for example using customize, or with \(require 'ox-latex) - \(add-to-list 'org-latex-packages-alist '(\"\" \"minted\")) + \(add-to-list 'org-latex-packages-alist '(\"newfloat\" \"minted\")) In addition, it is necessary to install pygments \(http://pygments.org), and to configure the variable -- 2.4.4 --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0003-Remove-float-from-org-latex-default-packages-alist.patch >From 9f27ba3eb818303e2ef6e161343558438afa8e1a Mon Sep 17 00:00:00 2001 From: Rasmus Date: Thu, 2 Jul 2015 13:49:30 +0200 Subject: [PATCH 3/3] Remove float from org-latex-default-packages-alist --- etc/ORG-NEWS | 2 ++ lisp/org.el | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index 9592f88..d43e9d3 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -427,6 +427,8 @@ when ~org-link-search-must-match-exact-headline~ is not nil. *** ~org-latex-hyperref-template~, ~org-latex-title-command~ formatting New formatting keys are supported. See the respective docstrings. Note, ~org-latex-hyperref-template~ has a new default value. +*** ~float.sty~ has been removed from ~org-latex-default-packages-alist~ +If you require this package add it to ~org-latex-packages-alist~. * Version 8.2 ** Incompatible changes diff --git a/lisp/org.el b/lisp/org.el index 425999c..f0a0f0b 100755 --- a/lisp/org.el +++ b/lisp/org.el @@ -4075,7 +4075,6 @@ header, or they will be appended." ("" "graphicx" t) ("" "grffile" t) ("" "longtable" nil) - ("" "float" nil) ("" "wrapfig" nil) ("" "rotating" nil) ("normalem" "ulem" t) @@ -4100,7 +4099,7 @@ Org mode to function properly: - graphicx: for including images - grffile: allow periods and spaces in graphics file names - longtable: For multipage tables -- float, wrapfig: for figure placement +- wrapfig: for figure placement - rotating: for sideways figures and tables - ulem: for underline and strike-through - amsmath: for subscript and superscript and math environments -- 2.4.4 --=-=-=--