Pandoc markdown разрыв страницы
недавно я начал использовать Pandoc markdown, который кажется хорошей альтернативой LaTeX, так как мой документ не имеет много математических формул, и у меня нет никакого опыта работы с LaTeX, что в сочетании с менее чем 2-недельным сроком подачи делает его хорошим решением.
одна вещь, которую я не смог обойти, - это как заставить его оставить остальную часть страницы пустой, может ли кто-нибудь помочь?
3 ответа:
TL; DR: use
\newpage
и фильтр Lua ниже, чтобы получить разрывы страниц во многих форматах.Pandoc анализирует все входные данные во внутренний формат документа. Этот формат не имеет специального способа представления разрывов страниц, но по-прежнему можно кодировать информацию другими способами. Один из способов-использовать сырой латекс
\newpage
. Это отлично работает при выводе LaTeX (или pdf, созданный через LaTeX). Тем не менее, вы столкнетесь с проблемами при таргетинге на различные форматы, такие как HTML или docx.простое решение при таргетинге на другие форматы-использовать pandoc filter который может преобразовать представление внутреннего документа таким образом, что он удовлетворяет наши потребности. Pandoc 2.0 и позже даже позволяет использовать интерпретатор Lua для выполнения этого преобразования.
предположим, что мы указываем разрывы страниц, помещая
\newpage
в строке, такие как пустые строки, Вот так:lorem ipsum \newpage more text
The
\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
Я заметил, что это не работает .док и. файлы odt форматы. Обходной путь, который я нашел, состоял в том, чтобы вставить горизонтальную линию
-----------------
и отформатируйте стиль "горизонтальная линия", чтобы сломать страницу и быть невидимым, используя текстовый редактор (ibre office в моем случае)