TL; DR : użyj \newpage
i 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 \newpage
linię otoczoną pustymi liniami, na przykład:
lorem ipsum
\newpage
more text
\newpage
Bę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 .