From: BPJ <melroch-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: pandoc-discuss <pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
Subject: Re: Separate tables of contents for each section
Date: Fri, 31 Jan 2020 21:31:15 +0100 [thread overview]
Message-ID: <CADAJKhBgy0rDop2EXuK_JP6YN6kTtwQ5UpU3HRwonZJh_Wapig@mail.gmail.com> (raw)
In-Reply-To: <3d838861-862c-4b15-8d91-a9b37d671736-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 3669 bytes --]
I believe a change has been made so that Lua filters now traverse the
document in linear order. If this is the case in the latest version of
Pandoc it should be doable with a two-pass filter: first a pass which
collects the headings and then a pass which inserts the TsoC. If you want
hierarchical section numbering you probably also need to do a first pandoc
run which inserts the numbering and then a second pandoc run with the
filter to insert the TsoC. Something like this:
(Warning 1: Untested code!
Warning 2: Make sure not to overwrite any existing file!
Warning 3: Assumes that all chapters are heading level 2 — change the
chapter_level and toc_level variables to match!
Warning 4: Assumes that each section/chapter has a unique identifier!
)
local chapter_level = 2
local toc_level = 3
local headings = {}
local current_chapter = nil
local function collect_headings (head)
if head.level == chapter_level then
local id = head.identifier
current_chapter = {
chapter = id
toc = {}
}
headings[id] = current_chapter
elseif head.level = toc_level then
if current_chapter then
local toc = current_chapter.toc
toc[#toc+1] = head
end
end
return nil
end
local function build_toc (heads)
local toc = {}
for _,head in ipairs(heads) do
local entry = {
pandoc.Plain{
pandoc.Link(
head.content:clone(), -- text
head.identifier, -- target
"", -- empty title
pandoc.Attr(
"", -- empty identifier
{'local-toc-link'} -- class
)
)
}
}
toc[#toc+1] = entry
end
return pandoc.Div(
{ pandoc.BulletList(toc) },
pandoc.Attr( "", {'local-toc'} )
)
end
local function insert_toc (head)
if head.level = chapter_level then
local id = head.identifier
if headings[id] then
local toc = build_toc(
headings[id].toc
)
return {head,toc}
end
end
return nil
end
return {
{ Header = collect_headings },
{ Header = insert_toc },
}
Den fre 31 jan. 2020 19:27Szabolcs Horvát <szhorvat-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> skrev:
> Hello everyone,
>
> I am converting a Markdown file to HTML.
>
> I can insert a table of contents at the beginning using the --toc option.
>
> Is it possible to insert additional tables of contents under each
> level-two or level-three heading?
>
> I am looking to create something similar to the organization of this page:
> https://igraph.org/c/doc/igraph-Visitors.html#idm209455316208
>
> Szabolcs
>
> --
> You received this message because you are subscribed to the Google Groups
> "pandoc-discuss" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to pandoc-discuss+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/pandoc-discuss/3d838861-862c-4b15-8d91-a9b37d671736%40googlegroups.com
> <https://groups.google.com/d/msgid/pandoc-discuss/3d838861-862c-4b15-8d91-a9b37d671736%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
--
You received this message because you are subscribed to the Google Groups "pandoc-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pandoc-discuss+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To view this discussion on the web visit https://groups.google.com/d/msgid/pandoc-discuss/CADAJKhBgy0rDop2EXuK_JP6YN6kTtwQ5UpU3HRwonZJh_Wapig%40mail.gmail.com.
[-- Attachment #2: Type: text/html, Size: 6292 bytes --]
next prev parent reply other threads:[~2020-01-31 20:31 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-31 18:26 Szabolcs Horvát
[not found] ` <3d838861-862c-4b15-8d91-a9b37d671736-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2020-01-31 20:31 ` BPJ [this message]
[not found] ` <CADAJKhBgy0rDop2EXuK_JP6YN6kTtwQ5UpU3HRwonZJh_Wapig-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2020-02-01 7:58 ` Szabolcs Horvát
[not found] ` <2cf07390-db35-422e-887a-bfde62a12a63-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
2020-02-01 11:17 ` BPJ
[not found] ` <CADAJKhCEvixP6A4yZfmpuvoJj+PaZ=2KRQNdXLwhEveTzV0m9g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2020-02-01 11:42 ` BPJ
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CADAJKhBgy0rDop2EXuK_JP6YN6kTtwQ5UpU3HRwonZJh_Wapig@mail.gmail.com \
--to=melroch-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
--cc=pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).