Разрыв страницы уценки Пандока

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

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

5 ответов

Решение

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

\newpage а также \pagebreak

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

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

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

Не могу отредактировать ответ LucasSeveryn, очередь сказала, что очередь заполнена, поэтому добавьте сюда некоторую информацию.

способ 1: +raw_tex

\newpage а также \pagebreak нужно raw_tex расширение на.

// с pandoc 2.9.2.1, не работает с выводом docx или html, --verbose говорит

[INFO] Not rendering RawBlock (Format "tex") "\\pagebreak"
[INFO] Not rendering RawBlock (Format "tex") "\\newpage"

способ 2: +raw_attribute

https://pandoc.org/MANUAL.html

```{=openxml}
<w:p>
  <w:r>
    <w:br w:type="page"/>
  </w:r>
</w:p>
```

// также не поддерживается в формате ввода gfm.
// это сработало для вывода docx, не работает с выводом html.

УВЕДОМЛЕНИЕ о расширении

эта потребность +raw_texрасширение формата. который не поддерживает все варианты уценки в pandoc.

https://pandoc.org/MANUAL.html

Note, however, that commonmark and gfm have limited support for extensions.  

Only those listed below (and smart, raw_tex, and hard_line_breaks) will work.  

The extensions can, however, all be individually disabled.

Also, raw_tex only affects gfm output, not input.

так -f markdown будет работать, но -f gfm не работает.

расширение формата

https://pandoc.org/MANUAL.html

Extensions can be individually enabled or disabled by appending 
+EXTENSION or -EXTENSION to the format name.

например

-t html+raw_tex: output enable raw_tex

-f markdown-raw_tex-raw_attribute: input отключить raw_tex и raw_attribute

Вы можете применить следующий подход, если конвертируете файл из формата Markdown в формат epub:

      <div style="page-break-before:always;"></div>
Другие вопросы по тегам