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 .