Hi,

>> Perhaps something like the following would be OK?  Nicholas?
>>
>> #+ATTR_HTML: :mode latex
>> #+ATTR_LATEX: :mode math :environment pmatrix :math-prefix \mathbf{H}=
>> | \vdots | 0 | \vdots |
>> | \vdots | H | \vdots |
>> | \vdots | 0 | \vdots |
>>
>> This would tell ox-html.el to transcode the table via ox-latex-tabel
>> and feed the string via org-html-format-latex (assuming latex-frag is
>> a string).  
>
> FWIW, I think it's worth trying. I'm Cc'ing Rick Frankel for his
> opinion.
>
>> Of course ox-html could also check out ATTR_LATEX but this
>> would lead to a spurious solution since LaTeX ≠ HTML IMO.
>
> I agree.
>
>> Nicholas, if you want I can look into this.
>
> Certainly. Thank you.

I have attached a rough proof-of-concept that will export the above
table correctly with mathjax.  But I guess it will also have to handle
it correctly in the case of static png images.

I'm not sure how to handle captions.  I guess the most natural way is
to let org-latex-table handle is.  Let me know if something like this
is OK in which case I can polish it up and add documentation.

–Rasmus

-- 
. . . It begins of course with The Internet.  A Net of Peers.
>From 036c06fc9f577b3d17e9caf7db366267bb4d28de Mon Sep 17 00:00:00 2001
From: Rasmus <w...@pank.eu>
Date: Sat, 18 Jan 2014 20:48:28 +0100
Subject: [PATCH] latex-html output tables as latex

---
 lisp/ox-html.el | 105 +++++++++++++++++++++++++++++++-------------------------
 1 file changed, 58 insertions(+), 47 deletions(-)

diff --git a/lisp/ox-html.el b/lisp/ox-html.el
index 8ea9e65..80ce53c 100644
--- a/lisp/ox-html.el
+++ b/lisp/ox-html.el
@@ -3286,54 +3286,65 @@ contextual information."
     (table.el (org-html-table--table.el-table table info))
     ;; Case 2: Standard table.
     (t
-     (let* ((label (org-element-property :name table))
-	    (caption (org-export-get-caption table))
-	    (number (org-export-get-ordinal
-		     table info nil 'org-html--has-caption-p))
-	    (attributes
-	     (org-html--make-attribute-string
-	      (org-combine-plists
-	       (and label (list :id (org-export-solidify-link-text label)))
-	       (and (not (org-html-html5-p info))
-		    (plist-get info :html-table-attributes))
-	       (org-export-read-attribute :attr_html table))))
-	    (alignspec
-	     (if (and (boundp 'org-html-format-table-no-css)
-		      org-html-format-table-no-css)
-		 "align=\"%s\"" "class=\"%s\""))
-	    (table-column-specs
-	     (function
-	      (lambda (table info)
-		(mapconcat
-		 (lambda (table-cell)
-		   (let ((alignment (org-export-table-cell-alignment
-				     table-cell info)))
-		     (concat
-		      ;; Begin a colgroup?
-		      (when (org-export-table-cell-starts-colgroup-p
-			     table-cell info)
-			"\n<colgroup>")
-		      ;; Add a column.  Also specify it's alignment.
-		      (format "\n%s"
-			      (org-html-close-tag
-			       "col" (concat " " (format alignspec alignment)) info))
-		      ;; End a colgroup?
-		      (when (org-export-table-cell-ends-colgroup-p
-			     table-cell info)
-			"\n</colgroup>"))))
-		 (org-html-table-first-row-data-cells table info) "\n")))))
-       (format "<table%s>\n%s\n%s\n%s</table>"
-	       (if (equal attributes "") "" (concat " " attributes))
-	       (if (not caption) ""
-		 (format (if org-html-table-caption-above
-			     "<caption class=\"t-above\">%s</caption>"
-			   "<caption class=\"t-bottom\">%s</caption>")
+     (let ((mode (member :mode (org-export-read-attribute :attr_html table))))
+       (cond
+	((member-ignore-case "latex" mode)
+	 (org-html-table--as-latex table contents info))
+	(t
+	 (let* ((label (org-element-property :name table))
+		(caption (org-export-get-caption table))
+		(number (org-export-get-ordinal
+			 table info nil 'org-html--has-caption-p))
+		(attributes
+		 (org-html--make-attribute-string
+		  (org-combine-plists
+		   (and label (list :id (org-export-solidify-link-text label)))
+		   (and (not (org-html-html5-p info))
+			(plist-get info :html-table-attributes))
+		   (org-export-read-attribute :attr_html table))))
+		(alignspec
+		 (if (and (boundp 'org-html-format-table-no-css)
+			  org-html-format-table-no-css)
+		     "align=\"%s\"" "class=\"%s\""))
+		(table-column-specs
+		 (function
+		  (lambda (table info)
+		    (mapconcat
+		     (lambda (table-cell)
+		       (let ((alignment (org-export-table-cell-alignment
+					 table-cell info)))
 			 (concat
-			  "<span class=\"table-number\">"
-                          (format (org-html--translate "Table %d:" info) number)
-			  "</span> " (org-export-data caption info))))
-	       (funcall table-column-specs table info)
-	       contents)))))
+			  ;; Begin a colgroup?
+			  (when (org-export-table-cell-starts-colgroup-p
+				 table-cell info)
+			    "\n<colgroup>")
+			  ;; Add a column.  Also specify it's alignment.
+			  (format "\n%s"
+				  (org-html-close-tag
+				   "col" (concat " " (format alignspec alignment)) info))
+			  ;; End a colgroup?
+			  (when (org-export-table-cell-ends-colgroup-p
+				 table-cell info)
+			    "\n</colgroup>"))))
+		     (org-html-table-first-row-data-cells table info) "\n")))))
+	   (t (format "<table%s>\n%s\n%s\n%s</table>"
+		      (if (equal attributes "") "" (concat " " attributes))
+		      (if (not caption) ""
+			(format (if org-html-table-caption-above
+				    "<caption class=\"t-above\">%s</caption>"
+				  "<caption class=\"t-bottom\">%s</caption>")
+				(concat
+				 "<span class=\"table-number\">"
+				 (format (org-html--translate "Table %d:" info) number)
+				 "</span> " (org-export-data caption info))))
+		      (funcall table-column-specs table info)
+		      contents)))))))))
+
+(defun org-html-table--as-latex (table contents info)
+  "Transcode TABLE into LaTeX code.
+Suitable for transcoding Org tables into math matrices. "
+  (require 'ox-latex)
+  (org-latex-table table contents info))
 
 ;;;; Target
 
-- 
1.8.5.3

Reply via email to