潘多克减价分页

最近我开始使用 Pandoc Markdown,它似乎是 LaTeX 的一个很好的替代品,因为我的文档没有很多数学公式,而且我没有任何使用 LaTeX 的经验,再加上不到两周的提交截止日期,这是一个很好的解决方案。

有一件事我一直想不通,那就是如何强制它让页面的其余部分保持空白,有人能帮忙吗?

61574 次浏览

看起来 pandoc markdown 使用标准的 LaTeX 标签来达到这个目的:

\newpage\pagebreak

DR : 使用 \newpage\pagebreak以及下面的 Lua 过滤器(或 给你)获得多种格式的分页符。R 减价用户不需要做任何额外的事情,过滤器默认情况下已经是 包括了。


Pandoc 将所有输入解析为内部文档格式。内部格式没有表示分页符的专用方法,但仍然可以用其他方式对信息进行编码。一种方法是使用原始的 LaTeX \newpage。这在输出 LaTeX (或通过 LaTeX 创建的 PDF)时非常完美。但是,当针对不同的格式(如 HTML 或 docx)时,就会遇到问题。

针对其他格式的一个简单解决方案是使用 Pandoc 过滤器,它可以转换内部文档表示形式,使其适合我们的需要。Pandoc 2.0甚至更高版本的 允许都可以使用包含的 Lua 解释器来执行这种转换。

让我们假设我们通过将 \newpage放在一个像空行一样被包围的行中来指示分页符,如下所示:

lorem ipsum


\newpage


more text

\newpage解析为包含原始 特克斯罗布洛克。只有当目标格式可以包含原始 TeX (即 LaTeX、 Markdown、 Org 等)时,该块才会包含在输出中。

当针对不同的格式时,我们可以使用一个简单的 Lua 过滤器来转换这种格式。以下 工程用于 Docx乳胶Eubb和轻量级标记。

--- 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

我们出版了 更新,更有特色的版本。它可以在官方的全景 Lua 过滤器储存库上找到。R 减价项目维护一个 fork; 它随 R 包一起发布,因此 功能可以立即使用
注意: 要将 latex转换为 docx,你必须将 pandoc AST 的 from 设置为 latex+raw_tex,以便将其传递给 < a href = “ https://github.com/pandoc/lua-filter/questions/152 # issecomment-757427744”rel = “ noReferrer”> github 问题

我观察到,这不适用于。医生和。Odt 格式。我发现的一个变通方法是插入一条水平线 -----------------,并使用文本编辑器(在我的例子中是 ibre office)格式化“水平线”样式,以打破页面并使其不可见

不能编辑 LucasSevern 的答案,告诉队列已满,所以在这里添加一些信息。

方法1: + raw _ tex

\newpage\pagebreak需要 raw_tex延长。

//使用 pandoc 2.9.2.1,不使用 docx 或 html 输出,——详细说明

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

方法2: + raw _ tribute

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 中的所有降价变体。

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.

比如说

输出启用 raw _ tex

-f markdown-raw_tex-raw_attribute: 输入禁用 raw _ tex 和 raw _ tribute

如果要将文件从 Markdown 转换为 epub 格式,可以应用以下方法:

<div style="page-break-before:always;"></div>