[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] TOC local for specified heading and its subheadings (in HTML exp

From: Rasmus
Subject: Re: [O] TOC local for specified heading and its subheadings (in HTML export)?
Date: Sat, 28 Nov 2015 20:16:19 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1.50 (gnu/linux)

Hi Sacha,

Thanks for working on this.

Sacha Chua <address@hidden> writes:

> I think it will permit the use of lines like:
> #+TOC: headlines 1 id:ConfInfoClauses

"id:headline" is a special type of links (see org-id.el).  A reference to
a custom-ids is typically prefixed by "#" in Org, e.g. ’[[#heading]]’ or
’#+include: "file.org::#head"’.

Further, IMO it might be better to extend the ’#+toc: headlines local’
declaration.  Of course you could argue that ’local’ becomes a special
case of the above "id:whatever-is-the-name-of-the-local-headline".

Personally, I would like a more explicit syntax, though I recognize that
it doesn’t necessarily make a difference if it’s an extension, in the
sense of suffixing.  E.g.:

        #+toc: headlines local 1 :headline "* my headline"
        #+toc: headlines local 1 :headline "#headline"

Or closer to your suggestion,

       #+toc: headlines 1 :headline "#headline"
       #+toc: headlines 1 :headline local

Which as a special case can be written as,

      #+toc: headlines 1 local

> diff --git a/lisp/ox-html.el b/lisp/ox-html.el
> index effd387..3b0e239 100644
> --- a/lisp/ox-html.el
> +++ b/lisp/ox-html.el
> @@ -2651,8 +2651,18 @@ CONTENTS is nil.  INFO is a plist holding contextual 
> information."
>        ((string-match "\\<headlines\\>" value)
>         (let ((depth (and (string-match "\\<[0-9]+\\>" value)
>                           (string-to-number (match-string 0 value))))
> -             (localp (org-string-match-p "\\<local\\>" value)))
> -         (org-html-toc depth info (and localp keyword))))
> +             (localp (org-string-match-p "\\<local\\>" value))
> +             (local-id (and (string-match "\\<id:\\(.+\\)\\>" value)
> +                            (match-string 1 value))))

Keyword options are typically prefixed with colon.  See e.g. #+include or
ob source blocks.

> +         (org-html-toc depth info
> +                       (or
> +                        (and local-id
> +                             (car (org-element-map (plist-get info 
> :parse-tree)
> +                                      'headline
> +                                    (lambda (element)
> +                                      (and (string= (org-element-property 
> :CUSTOM_ID element) local-id)
> +                                           element)))))

Wouldn’t it better to use org-link-search and get the element at point?

> +                        (and localp keyword)))))
>        ((string= "listings" value) (org-html-list-of-listings info))
>        ((string= "tables" value) (org-html-list-of-tables info))))))))
> D. C., are you okay with applying patches to your local copy, or do
> you need someone to clean it up and merge it into core?

Complete patches are of course welcome, including a change log commit
message, an update to org.texi, and an entry in NEWS.  See:


We’d need support across all backends where it makes sense, so I guess at
least, latex, beamer, odt, html, ascii, texinfo (if possible).



reply via email to

[Prev in Thread] Current Thread [Next in Thread]