if FORMAT == "latex" then return end Pandoc = function(doc) local tbl = {} local fig = {} local appendixword = "Appendix" local movefloatstoend = true if doc.meta.language and doc.meta.language["crossref-apx-prefix"] then appendixword = pandoc.utils.stringify(doc.meta.language["crossref-apx-prefix"]) end if doc.meta.floatsintext and pandoc.utils.stringify(doc.meta.floatsintext) == "true" then movefloatstoend = false end if movefloatstoend then for i = #doc.blocks, 1, -1 do if doc.blocks[i].identifier then if doc.blocks[i].identifier:find("^tbl%-") then if doc.blocks[i].attributes and doc.blocks[i].attributes.prefix == "" then if FORMAT == "docx" then table.insert(tbl, 1, pandoc.RawBlock('openxml', '')) end if FORMAT == "typst" then table.insert(tbl, 1, pandoc.RawBlock('typst', '#pagebreak(weak: true)')) end table.insert(tbl, 1, doc.blocks[i]) doc.blocks:remove(i) end else if doc.blocks[i].identifier:find("^fig%-") then if doc.blocks[i].attributes and doc.blocks[i].attributes.prefix == "" then if FORMAT == "docx" then table.insert(fig, 1, pandoc.RawBlock('openxml', '')) end if FORMAT == "typst" then table.insert(fig, 1, pandoc.RawBlock('typst', '#pagebreak(weak: true)')) end table.insert(fig, 1, doc.blocks[i]) doc.blocks:remove(i) end else local hasfig = false doc.blocks[i]:walk { Figure = function(fg) if fg.identifier then if fg.identifier:find("^fig%-") then if fg.attributes and fg.attributes.prefix == "" then hasfig = true end end end end } if hasfig then if FORMAT == "docx" then table.insert(fig, 1, pandoc.RawBlock('openxml', '')) end if FORMAT == "typst" then table.insert(fig, 1, pandoc.RawBlock('typst', '#pagebreak(weak: true)')) end table.insert(fig, 1, doc.blocks[i]) doc.blocks:remove(i) hasfig = false else end end end end end end -- Insert page breaks for each appendix in docx and typst -- html does not need page breaks, and latex inserts pagebreaks automatically if FORMAT == "docx" or FORMAT == "typst" then for i = #doc.blocks, 1, -1 do if doc.blocks[i].tag == "Header" then if doc.blocks[i].level == 1 and doc.blocks[i].content[1].text == appendixword then if FORMAT == "docx" then table.insert(doc.blocks, i, pandoc.RawBlock('openxml', '')) end if FORMAT == "typst" then table.insert(doc.blocks, i, pandoc.RawBlock('typst', '#pagebreak(weak: true)')) end end end end end if movefloatstoend then -- Find block where appendices begin local appendixblock = 0 for i = 1, #doc.blocks, 1 do if doc.blocks[i].tag == "Header" then if doc.blocks[i].level == 1 and doc.blocks[i].content[1].text == appendixword and appendixblock == 0 then appendixblock = i end end end -- If there are no appendices, insert figures and tables at the end if appendixblock == 0 then if #tbl > 0 then doc.blocks:extend(tbl) end if #fig > 0 then doc.blocks:extend(fig) end else -- Insert figures and tables before appendices if #fig > 0 then for i = #fig, 1, -1 do doc.blocks:insert(appendixblock, fig[i]) end end if #tbl > 0 then for i = #tbl, 1, -1 do doc.blocks:insert(appendixblock, tbl[i]) end end end end return doc end