最近我开始使用Pandoc markdown,它似乎是LaTeX的一个很好的替代品,因为我的文档没有很多数学公式,而且我没有任何LaTeX的经验,结合不到2周的提交截止日期使它成为一个好的溶液
我无法解决的一件事是如何强迫它将页面的其余部分留空,有人可以帮忙吗?
答案 0 :(得分:112)
看起来pandoc markdown为此目的使用标准的LaTeX标签:
\newpage
和\pagebreak
答案 1 :(得分:6)
TL; DR :使用\newpage
和下面的Lua过滤器以多种格式获取分页符。
Pandoc将所有输入解析为内部文档格式。该格式没有专用的方式来表示分页符,但是仍然可以用其他方式对信息进行编码。一种方法是使用原始LaTeX \newpage
。在输出LaTeX(或通过LaTeX创建的pdf)时,此功能非常有效。但是,在针对HTML或docx等不同格式定位时会遇到问题。
定位其他格式时,一个简单的解决方案是使用pandoc filter,它可以转换内部文档表示形式以适合我们的需求。 Pandoc 2.0以及更高版本的allows都可以使用随附的Lua解释器来执行此转换。
假设我们通过将\newpage
放在空白行周围的行中来指示分页符,如下所示:
lorem ipsum
\newpage
more text
\newpage
将被解析为包含原始 TeX 的 RawBlock 。仅当目标格式可以包含原始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
我们发布了updated, more featureful version。可以从官方pandoc lua-filters repository中获得。
答案 2 :(得分:2)
无法编辑LucasSeveryn答案,已告知队列已满,因此请在此处添加一些信息。
\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"
https://pandoc.org/MANUAL.html#extension-raw_attribute
```{=openxml}
<w:p>
<w:r>
<w:br w:type="page"/>
</w:r>
</w:p>
```
//也不支持gfm输入格式。
//这适用于docx输出,不适用于html输出。
这需要+raw_tex
格式扩展名。
这并不支持pandoc中的所有markdown变体。
https://pandoc.org/MANUAL.html#markdown-variants
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#option--from
Extensions can be individually enabled or disabled by appending
+EXTENSION or -EXTENSION to the format name.
例如
-t html+raw_tex
:输出启用raw_tex
-f markdown-raw_tex-raw_attribute
:输入禁用raw_tex和raw_attribute
答案 3 :(得分:1)
我观察到这不适用于.doc和.odt格式。我发现一种解决方法是使用文本编辑器(在我的情况下为ibre office)插入水平线-----------------
并设置“水平线”样式的格式以破坏页面并使页面不可见
答案 4 :(得分:1)
如果您要将文件从 Markdown 转换为 epub 格式,则可以应用以下方法:
<div style="page-break-before:always;"></div>