TL; DR : Verwenden Sie \newpage
und den folgenden Lua-Filter, um Seitenumbrüche in vielen Formaten zu erhalten.
Pandoc analysiert alle Eingaben in ein internes Dokumentformat. Dieses Format bietet keine spezielle Möglichkeit, Seitenumbrüche darzustellen, es ist jedoch weiterhin möglich, die Informationen auf andere Weise zu codieren. Eine Möglichkeit ist die Verwendung von rohem LaTeX \newpage
. Dies funktioniert perfekt bei der Ausgabe von LaTeX (oder PDF, das über LaTeX erstellt wurde). Bei der Ausrichtung auf verschiedene Formate wie HTML oder docx treten jedoch Probleme auf.
Eine einfache Lösung für andere Formate ist die Verwendung eines Pandoc-Filters, der die interne Dokumentdarstellung so umwandeln kann, dass sie unseren Anforderungen entspricht. Pandoc 2.0 und später sogar erlaubt die mitgelieferte Lua - Interpreter zu verwenden , um diese Transformation durchzuführen.
Nehmen wir an, wir zeigen Seitenumbrüche an, indem wir \newpage
eine Zeile einfügen, die wie Leerzeilen umgeben ist:
lorem ipsum
\newpage
more text
Das \newpage
wird als RawBlock analysiert , der rohes TeX enthält . Der Block wird nur in die Ausgabe aufgenommen, wenn das Zielformat Roh-TeX enthalten kann (dh LaTeX, Markdown, Org usw.).
Wir können einen einfachen Lua-Filter verwenden, um dies zu übersetzen, wenn wir auf ein anderes Format abzielen. Das Folgende funktioniert für docx , LaTeX , epub und leichte Markups .
--- 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
Wir haben eine aktualisierte, funktionsfähigere Version veröffentlicht . Es ist im offiziellen Pandoc Lua-Filter-Repository erhältlich .