TL; DR : используйте \newpage
фильтр Lua ниже, чтобы получить разрывы страниц во многих форматах.
Pandoc анализирует все входные данные во внутренний формат документа. В этом формате нет специального способа представления разрывов страниц, но по-прежнему можно кодировать информацию другими способами. Один из способов - использовать чистый LaTeX \newpage
. Это отлично работает при выводе LaTeX (или PDF, созданного с помощью LaTeX). Однако при ориентации на разные форматы, такие как HTML или docx, могут возникнуть проблемы.
Простым решением при нацеливании на другие форматы является использование фильтра pandoc, который может преобразовать внутреннее представление документа так, чтобы оно соответствовало нашим потребностям. Pandoc 2.0 и более поздние версии даже позволяют использовать включенный интерпретатор Lua для выполнения этого преобразования.
Предположим, мы указываем разрывы страниц, помещая \newpage
строку, окруженную пустыми строками, например:
lorem ipsum
\newpage
more text
\newpage
Будет обрабатываться как RawBlock , содержащего сырую TeX . Блок будет включен в вывод только в том случае, если целевой формат может содержать необработанный TeX (например, LaTeX, Markdown, Org и т. Д.).
Мы можем использовать простой фильтр Lua, чтобы перевести это при нацеливании на другой формат. Следующее работает для docx , LaTeX , epub и облегченной разметки.
--- 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
Мы опубликовали обновленную, более функциональную версию . Он доступен в официальном репозитории pandoc lua-filters .