Просмотр исходного кода

lisp/ox-latex.el: Allow arbitrary float environments

* lisp/ox-latex.el (org-latex--inline-image)
(org-latex--decorate-table): Recognize arbitrary :float value.

* etc/ORG-NEWS: Announce new :float capability.

LaTeX users are able to define arbitrary float types.
This patch makes them accessible from Org mode.
Thomas S. Dye 4 лет назад
Родитель
Сommit
ee40458d00
2 измененных файлов с 27 добавлено и 7 удалено
  1. 8 1
      etc/ORG-NEWS
  2. 19 6
      lisp/ox-latex.el

+ 8 - 1
etc/ORG-NEWS

@@ -178,7 +178,7 @@ See [[msg:875z8njaol.fsf@protesilaos.com][this thread]].
 
 See [[msg:87im57fh8j.fsf@gmail.com][this thread]].
 
-*** =ob-python= improvements to =:return= header argument 
+*** =ob-python= improvements to =:return= header argument
 
 The =:return= header argument in =ob-python= now works for session
 blocks as well as non-session blocks.  Also, it now works with the
@@ -250,6 +250,13 @@ Example:
 
 : #+startup: show3levels
 
+*** LaTeX attribute ~:float~ now passes through arbitrary values
+
+LaTeX users are able to define arbitrary float types, e.g. with the
+float package.  The Org mode LaTeX exporter is now able to process and
+export arbitrary float types.  The user is responsible for ensuring
+that Org mode configures LaTeX to process any new float type.
+
 *** New =u= table formula flag to enable Calc units simplification mode
 
 A new =u= mode flag for Calc formulas in Org tables has been added to

+ 19 - 6
lisp/ox-latex.el

@@ -2384,8 +2384,8 @@ used as a communication channel."
 			((string= float "sideways") 'sideways)
 			((string= float "multicolumn") 'multicolumn)
 			((and (plist-member attr :float) (not float)) 'nonfloat)
-			((or float
-			     (org-element-property :caption parent)
+                        (float float)
+			((or (org-element-property :caption parent)
 			     (org-string-nw-p (plist-get attr :caption)))
 			 'figure)
 			(t 'nonfloat))))
@@ -2477,6 +2477,18 @@ used as a communication channel."
 						   nil t))))
     ;; Return proper string, depending on FLOAT.
     (pcase float
+      ((and (pred stringp) env-string)
+       (format "\\begin{%s}%s
+%s%s
+%s%s
+%s\\end{%s}"
+               env-string
+               placement
+               (if caption-above-p caption "")
+               (if center "\\centering" "")
+               comment-include image-code
+               (if caption-above-p "" caption)
+               env-string))
       (`wrap (format "\\begin{wrapfigure}%s
 %s%s
 %s%s
@@ -3207,9 +3219,9 @@ centered."
 (defun org-latex--decorate-table (table attributes caption above? info)
   "Decorate TABLE string with caption and float environment.
 
-ATTRIBUTES is the plist containing is LaTeX attributes.  CAPTION
-is its caption, as a string or nil.  It is located above the
-table if ABOVE? is non-nil.  INFO is the plist containing current
+ATTRIBUTES is the plist containing LaTeX attributes.  CAPTION is
+its caption, as a string or nil.  It is located above the table
+if ABOVE? is non-nil.  INFO is the plist containing current
 export parameters.
 
 Return new environment, as a string."
@@ -3218,7 +3230,8 @@ Return new environment, as a string."
 	    (cond ((and (not float) (plist-member attributes :float)) nil)
 		  ((member float '("sidewaystable" "sideways")) "sidewaystable")
 		  ((equal float "multicolumn") "table*")
-		  ((or float (org-string-nw-p caption)) "table")
+                  (float float)
+		  ((org-string-nw-p caption) "table")
 		  (t nil))))
 	 (placement
 	  (or (plist-get attributes :placement)