TL; DR : użyj \newpagei filtru Lua poniżej, aby uzyskać podziały stron w wielu formatach.
Pandoc analizuje wszystkie dane wejściowe do wewnętrznego formatu dokumentu. Ten format nie ma dedykowanego sposobu przedstawiania podziałów stron, ale nadal można zakodować informacje w inny sposób. Jednym ze sposobów jest użycie surowego LaTeXa \newpage. Działa to doskonale podczas wyprowadzania LaTeX (lub PDF utworzonego przez LaTeX). Jednak można napotkać problemy podczas kierowania na różne formaty, takie jak HTML lub docx.
Prostym rozwiązaniem w przypadku kierowania na inne formaty jest użycie filtru pandoc, który może przekształcić wewnętrzną reprezentację dokumentu tak, aby odpowiadała naszym potrzebom. Pandoc 2.0 i nowsze wersje pozwalają nawet na użycie dołączonego interpretera Lua do wykonania tej transformacji.
Załóżmy, że wskazujemy podziały stron, umieszczając \newpagelinię otoczoną pustymi liniami, na przykład:
lorem ipsum
\newpage
more text
\newpageBędą analizowane jako RawBlock surowców zawierających TeX . Blok zostanie uwzględniony w danych wyjściowych tylko wtedy, gdy format docelowy może zawierać surowy TeX (tj. LaTeX, Markdown, Org itp.).
Możemy użyć prostego filtra Lua, aby przetłumaczyć to, gdy celujemy w inny format. Poniższe działa dla docx , LaTeX , epub i lekkich znaczników.
--- Return a block element causing a page break in the given format.
local function newpage(format)
if format == 'docx' then
local pagebreak = '<w:p><w:r><w:br w:type="page"/></w:r></w:p>'
return pandoc.RawBlock('openxml', pagebreak)
elseif format:match 'html.*' then
return pandoc.RawBlock('html', '<div style=""></div>')
elseif format:match 'tex$' then
return pandoc.RawBlock('tex', '\\newpage{}')
elseif format:match 'epub' then
local pagebreak = '<p style="page-break-after: always;"> </p>'
return pandoc.RawBlock('html', pagebreak)
else
-- fall back to insert a form feed character
return pandoc.Para{pandoc.Str '\f'}
end
end
-- Filter function called on each RawBlock element.
function RawBlock (el)
-- check that the block is TeX or LaTeX and contains only \newpage or
-- \pagebreak.
if el.text:match '\\newpage' then
-- use format-specific pagebreak marker. FORMAT is set by pandoc to
-- the targeted output format.
return newpage(FORMAT)
end
-- otherwise, leave the block unchanged
return nil
end
Opublikowaliśmy zaktualizowaną, bardziej funkcjonalną wersję . Jest dostępny z oficjalnego repozytorium pandoc lua- filter .