Hi Carsten, I've made corresponding changes in org-docbook.el to support this feature in the DocBook exporter. Please check the attached patch, in which I also fixed a minor bug that was introduced in your recent change of "new and better support for entities".
diff --git a/lisp/org-docbook.el b/lisp/org-docbook.el index 7c43211..700f1db 100644 --- a/lisp/org-docbook.el +++ b/lisp/org-docbook.el @@ -1259,13 +1259,13 @@ string, don't modify these." (if org-export-with-sub-superscripts (setq s (org-export-docbook-convert-sub-super s))) (if org-export-with-TeX-macros - (let ((start 0) wd rep ass) + (let ((start 0) wd rep) (while (setq start (string-match "\\\\\\([a-zA-Z]+\\)\\({}\\)?" s start)) (if (get-text-property (match-beginning 0) 'org-protected s) (setq start (match-end 0)) (setq wd (match-string 1 s)) - (if (setq ass (org-entity-get-representation wd 'html)) + (if (setq rep (org-entity-get-representation wd 'html)) (setq s (replace-match rep t t s)) (setq start (+ start (length wd)))))))) s) @@ -1349,18 +1349,33 @@ string, don't modify these." (replace-match "")))) (defun org-export-docbook-finalize-table (table) - "Change TABLE to informaltable if caption does not exist. + "Clean up TABLE and turn it into DocBook format. +This function adds a label to the table if it is available, and +also changes TABLE to informaltable if caption does not exist. TABLE is a string containing the HTML code generated by `org-format-table-html' for a table in Org-mode buffer." - (if (string-match - "^<table \\(\\(.\\|\n\\)+\\)<caption></caption>\n\\(\\(.\\|\n\\)+\\)</table>" - table) - (replace-match (concat "<informaltable " - (match-string 1 table) - (match-string 3 table) + (let ((table-with-label label)) + ;; Get the label if it exists, and move it into the <table> element. + (setq table-with-label + (if (string-match + "^<table \\(\\(.\\|\n\\)+\\)<a name=\"\\(.+\\)\" id=\".+\"></a>\n\\(\\(.\\|\n\\)+\\)</table>" + table) + (replace-match (concat "<table xml:id=\"" (match-string 3 table) "\" " + (match-string 1 table) + (match-string 4 table) + "</table>") + nil nil table) + table)) + ;; Change <table> into <informaltable> if caption does not exist. + (if (string-match + "^<table \\(\\(.\\|\n\\)+\\)<caption></caption>\n\\(\\(.\\|\n\\)+\\)</table>" + table-with-label) + (replace-match (concat "<informaltable " + (match-string 1 table-with-label) + (match-string 3 table-with-label) "</informaltable>") - nil nil table) - table)) + nil nil table-with-label) + table-with-label))) ;; Note: This function is very similar to ;; org-export-html-convert-sub-super. They can be merged in the future.
Carsten Dominik <carsten.domi...@gmail.com> writes: > Hi Thomas, > > Are you talking about figures or about tables? > > For figures, the label is attached to the figure as the id of > the div surrounding figure plus caption. However, this only > works if you also specify a caption. But I think that only > figures with caption should be targets for links. > > For tables, I have just made a change so that the label > is inserted as an anchor just as you propose: > > <table border="2" cellspacing="0" cellpadding="6" rules="groups" > frame="hsides"> > <a name="tab:yyy" id="tab:yyy"></a> > <caption>This is a table</caption> > > Finally, I am now converting \ref{xxx} macros into links > for the HTML backend. One problem is that, so the same > \ref macro will lead to the figure in both backends. > > Hope this helps. Thanks, -- Baoqiu
_______________________________________________ Emacs-orgmode mailing list Please use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode