Last active
July 16, 2024 15:31
-
-
Save tarleb/a8877879f1f11b0c76a1ace72c961e11 to your computer and use it in GitHub Desktop.
Continuous chapter numbering
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- This filter numbers second-level headings as chapters, and treats | |
-- first-level headings as "parts". | |
--- Fix numbering when using parts | |
-- | |
-- This filter numbers second-level headings as chapters, and treats | |
-- first-level headings as "parts". | |
-- | |
-- Copyright: © 2024 Albert Krewinkel <[email protected]> | |
-- License: MIT | |
local struct = require 'pandoc.structure' | |
local chapter_number = 0 | |
local fix_number = function (num) | |
if not num then | |
return nil | |
end | |
return num:gsub('^%d+%.%d+', tostring(chapter_number)) | |
end | |
function Pandoc (doc) | |
-- Ensure that top-level headings (i.e., parts) remain unnumbered | |
doc.blocks = doc.blocks:walk { | |
Header = function (hdr) | |
if hdr.level == 1 then | |
hdr.classes:insert 'unnumbered' | |
return hdr | |
end | |
end | |
} | |
-- Create numbered sections | |
doc.blocks = struct.make_sections(doc.blocks, {number_sections=true}) | |
-- Return the document with modified numbering | |
return doc:walk { | |
traverse = 'topdown', -- ensures processing in the correct order | |
Div = function (div) | |
local header = div.content[1] | |
if not header or header.t ~= 'Header' then | |
-- not a section div; return it unchanged | |
return div | |
end | |
-- keep track of the number of chapters | |
if header.level == 2 then | |
chapter_number = chapter_number + 1 | |
end | |
-- set the numbers attributes | |
header.attributes.number = fix_number(header.attributes.number) | |
div.attributes.number = fix_number(div.attributes.number) | |
return div, true | |
end | |
} | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment