Hi

version 3 patch, add document about :caption attribute.


On Sun, Jun 30, 2013 at 7:46 PM, Nicolas Goaziou <n.goaziou@gmail.com> wrote:
Hello,

feng shu <tumashu@gmail.com> writes:

> This is the updated patch of  "Add :caption attribute to #+ATTR_LATEX
> property"
> If possible, please include it to master

Thanks for your patch.

I agree that #+CAPTION isn't ready for complex caption commands (nor
that it should), so a :caption attribute may be useful. Though, it must
be documented in the manual (see "12.7.4 LaTeX specific attributes"). In
particular, documentation should insist on the fact that:

  1. :caption attribute has precedence over #+caption keyword
  2. :caption attribute is only meaningful special caption commands,
     i.e., this isn't the standard way to set a caption in Org.
  3. This is a raw command, nothing in it will be interpreted by Org.

Here are some comments about the code:
> +      (caption-from-attr-latex (plist-get (org-export-read-attribute :attr_latex element) :caption)))

You can use the following slightly shorter sexp:

  (caption-from-attr-latex (org-export-read-attribute :attr_latex element :caption))

> +    (if (and caption-from-attr-latex (not (equal caption-from-attr-latex "")))
> +     (concat caption-from-attr-latex "\n")
> +      (cond
> +       ((and (not main) (equal label-str "")))
> +       ((not main) (concat label-str "\n"))
> +       ;; Option caption format with short name.
> +       (short (format "\\caption[%s]{%s%s}\n"
> +                   (org-export-data short info)
> +                   label-str
> +                   (org-export-data main info)))
> +       ;; Standard caption format.
> +       (t (format "\\caption{%s%s}\n" label-str (org-export-data main info)))))))

Here you can include the "then" part in the `cond', and use
`org-string-nw-p':

  (cond ((org-string-nw-p caption-from-attr-latex)
         (concat caption-from-attr-latex "\n"))
        ((and (not main) (equal label-str "")) "")
        ...)

>  (defun org-latex-guess-inputenc (header)
>    "Set the coding system in inputenc to what the buffer is.
> @@ -1655,7 +1658,7 @@ used as a communication channel."
>                 (cond ((and (not float) (plist-member attr :float)) nil)
>                       ((string= float "wrap") 'wrap)
>                       ((string= float "multicolumn") 'multicolumn)
> -                     ((or float (org-element-property :caption parent))
> +                     ((or float (org-element-property :caption parent) (plist-get attr :caption))

Be careful here: (plist-get attr :caption) will be non-nil if :caption
is set to the empty string. It may be bulkier to use:

  (org-string-nw-p (plist-get attr :caption))

>                        'figure))))
>        (placement
>         (let ((place (plist-get attr :placement)))
> @@ -2333,7 +2336,7 @@ This function assumes TABLE has `org' as its `:type' property and
>                        ((and (not float) (plist-member attr :float)) nil)
>                        ((string= float "sidewaystable") "sidewaystable")
>                        ((string= float "multicolumn") "table*")
> -                      ((or float (org-element-property :caption table))
> +                      ((or float (org-element-property :caption table) (plist-get attr :caption))

Ditto.


Regards,

--
Nicolas Goaziou