如何在 pandoc 中自动在 header 之前添加分页符

How to add a page break before header automatically in pandoc

我需要将 markdown 文档转换成 Word 文档。 我需要它,以便在每个 header 之前都有一个分页符。

例如,这里要在# Heading 1# Heading 2之前插入一个分页符。如果文档中没有内容,我不介意它跳过第一个。

# Heading 1

Hello

# Heading 2

World

我找到了 this Lua filter,但是,据我所知,它只适用于 Latex,不是自动的。

我曾尝试自己写一个Lua脚本,但失败了,因为我不太了解pandoc的工作原理。

例如,我尝试返回一个 Para,其中包含前一个的内容 + 来自 Header 函数的分页符,如下所示:

function Header(el)
    if el.level == 1 then
        local t = { pandoc.RawBlock('openxml', '<w:p><w:r><w:br w:type="page"/></w:r></w:p>'), el }
        return pandoc.Para(t)
    end
    return el
end

但是,它最终会擦除所有 header。 我尝试了对同一想法的其他一些更改,但都没有用。

Lua的毛病主要是没有静态分析,没有Intellisense。我可能在这段代码中做了一些完全不合适的事情,没有任何编译器错误,甚至没有意识到。

我相信以下内容应该可以解决这个问题:

local pagebreak = '<w:p><w:r><w:br w:type="page"/></w:r></w:p>'
function Header(el)
    if el.level == 1 then
        -- return both the page break and the header as a list
        return { pandoc.RawBlock('openxml', pagebreak), el }
    end
    -- No `return el` needed, as not returning any value is the same as
    -- returning the original value.
end

pandoc 在解组期间的错误报告,即从 Lua 检索对象时,至少可以说不是很好。理想情况下,pandoc 应该报告在 Para 中包装“块”列表所产生的类型错误,因为该构造函数应该只接受“内联”。

如果您好奇:我正在努力通过切换到不同的编组策略来解决此问题,请参阅 this PR。这需要一段时间,但我们会到达那里。