Procházet zdrojové kódy

ox-latex: Tweak table row export

* lisp/ox-latex.el (org-latex-table-row): Rewrite code to distinguish
  between regular rows and separators.
Nicolas Goaziou před 10 roky
rodič
revize
66b1263d9a
1 změnil soubory, kde provedl 38 přidání a 36 odebrání
  1. 38 36
      lisp/ox-latex.el

+ 38 - 36
lisp/ox-latex.el

@@ -2801,31 +2801,36 @@ a communication channel."
   "Transcode a TABLE-ROW element from Org to LaTeX.
 CONTENTS is the contents of the row.  INFO is a plist used as
 a communication channel."
-  ;; Rules are ignored since table separators are deduced from
-  ;; borders of the current row.
-  (when (eq (org-element-property :type table-row) 'standard)
-    (let* ((attr (org-export-read-attribute :attr_latex
-					    (org-export-get-parent table-row)))
-	   (longtablep
-	    (member (or (plist-get attr :environment)
-			(plist-get info :latex-default-table-environment))
-		    '("longtable" "longtabu")))
-	   (booktabsp (if (plist-member attr :booktabs)
-			  (plist-get attr :booktabs)
-			(plist-get info :latex-tables-booktabs)))
-	   ;; TABLE-ROW's borders are extracted from its first cell.
-	   (borders (org-export-table-cell-borders
-		     (car (org-element-contents table-row)) info)))
+  (let* ((attr (org-export-read-attribute :attr_latex
+					  (org-export-get-parent table-row)))
+	 (booktabsp (if (plist-member attr :booktabs) (plist-get attr :booktabs)
+		      (plist-get info :latex-tables-booktabs)))
+	 (longtablep
+	  (member (or (plist-get attr :environment)
+		      (plist-get info :latex-default-table-environment))
+		  '("longtable" "longtabu"))))
+    (if (eq (org-element-property :type table-row) 'rule)
+	(cond
+	 ((not booktabsp) "\\hline")
+	 ((not (org-export-get-previous-element table-row info)) "\\toprule")
+	 ((not (org-export-get-next-element table-row info)) "\\bottomrule")
+	 ((and longtablep
+	       (org-export-table-row-ends-header-p
+		(org-export-get-previous-element table-row info) info))
+	  "")
+	 (t "\\midrule"))
       (concat
        ;; When BOOKTABS are activated enforce top-rule even when no
        ;; hline was specifically marked.
-       (cond ((and booktabsp (memq 'top borders)) "\\toprule\n")
-	     ((and (memq 'top borders) (memq 'above borders)) "\\hline\n"))
+       (and booktabsp (not (org-export-get-previous-element table-row info))
+	    "\\toprule\n")
        contents "\\\\\n"
        (cond
 	;; Special case for long tables.  Define header and footers.
 	((and longtablep (org-export-table-row-ends-header-p table-row info))
-	 (format "%s
+	 (let ((columns (cdr (org-export-table-dimensions
+			      (org-export-get-parent-table table-row) info))))
+	   (format "%s
 \\endfirsthead
 \\multicolumn{%d}{l}{%s} \\\\
 %s
@@ -2835,26 +2840,23 @@ a communication channel."
 %s\\multicolumn{%d}{r}{%s} \\\\
 \\endfoot
 \\endlastfoot"
-		 (if booktabsp "\\midrule" "\\hline")
-		 (cdr (org-export-table-dimensions
-		       (org-export-get-parent-table table-row) info))
-		 (org-latex--translate "Continued from previous page" info)
-		 (cond ((and booktabsp (memq 'top borders)) "\\toprule\n")
-		       ((and (memq 'top borders)
-			     (memq 'above borders)) "\\hline\n")
-		       (t ""))
-		 contents
-		 (if booktabsp "\\midrule" "\\hline")
-		 (if booktabsp "\\midrule" "\\hline")
-		 ;; Number of columns.
-		 (cdr (org-export-table-dimensions
-		       (org-export-get-parent-table table-row) info))
-		 (org-latex--translate "Continued on next page" info)))
+		   (if booktabsp "\\midrule" "\\hline")
+		   columns
+		   (org-latex--translate "Continued from previous page" info)
+		   (cond
+		    ((not (org-export-table-row-starts-header-p table-row info))
+		     "")
+		    (booktabsp "\\toprule\n")
+		    (t "\\hline\n"))
+		   contents
+		   (if booktabsp "\\midrule" "\\hline")
+		   (if booktabsp "\\midrule" "\\hline")
+		   columns
+		   (org-latex--translate "Continued on next page" info))))
 	;; When BOOKTABS are activated enforce bottom rule even when
 	;; no hline was specifically marked.
-	((and booktabsp (memq 'bottom borders)) "\\bottomrule")
-	((and (memq 'bottom borders) (memq 'below borders)) "\\hline")
-	((memq 'below borders) (if booktabsp "\\midrule" "\\hline")))))))
+	((and booktabsp (not (org-export-get-next-element table-row info)))
+	 "\\bottomrule"))))))
 
 
 ;;;; Target