Подтвердить что ты не робот

Разбивка страницы Pandoc

Недавно я начал использовать уценку Pandoc, которая кажется хорошей альтернативой LaTeX, так как у моего документа нет много математических формул, и у меня нет ЛЮБОГО опыта с LaTeX, который в сочетании с менее чем 2-недельным сроком подачи заявок делает его хорошим решение.

Одна вещь, которую я не смог найти, - это заставить ее оставить остальную страницу пустой, может ли кто-нибудь помочь?

4b9b3361

Ответ 1

Похоже, что для этой цели уценка pandoc использует стандартные теги LaTeX:

\newpage и \pagebreak

Ответ 2

TL; DR: используйте \newpage и фильтр Lua ниже, чтобы получить разрывы страниц во многих форматах.

Pandoc анализирует все входы во внутренний формат документа. Этот формат не имеет специального способа представления разрывов страниц, но по-прежнему можно кодировать информацию другими способами. Один из способов - использовать raw 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 и легкой маркировки.

--- 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 '(la)?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
  -- \newpage{} if el.format:match '(la)?tex' and content:match
  -- '\\newpage(%{%})?' then
  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

Ответ 3

Я заметил, что это не работает для форматов.doc и.odt. Обходной путь, который я нашел, это вставить горизонтальную линию ----------------- и форматировать стиль "горизонтальной линии", чтобы сломать страницу и быть невидимым, используя текстовый редактор (ibre office в моем случае)