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

我需要将一个 markdown 文档转换为 Word 文档。 我需要在每个标题前自动添加分页符。

例如,在这里,在“# Heading 1”和“# Heading 2”之前将插入一个分页符。如果文档中在其之前没有内容,那么第一个标题可以跳过。

# Heading 1

Hello

# Heading 2

World

我已经找到了这个 Lua 过滤器, 但据我所知,它只是针对Latex并且不是自动的。

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

例如,我尝试从“Header”函数中返回一个带有上一个内容和分页符的“Para”,代码如下:

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

但是,它最终会抹掉所有标题。 我尝试了同样想法的其他几种变化,但都没有成功。

在 Lua 中的问题主要在于没有静态分析和没有智能提示。我可能在这段代码中做了一些完全不合适的事情,没有编译器错误,甚至没有意识到它。

点赞
用户2425163
用户2425163

我相信以下代码可以修复它:

local pagebreak = '<w:p><w:r><w:br w:type="page"/></w:r></w:p>'
function Header(el)
    if el.level == 1 then
        -- 将分页和标题都返回为一个列表
        return { pandoc.RawBlock('openxml', pagebreak), el }
    end
    -- 不需要返回 el,因为不返回任何值与返回原始值相同。
end

说实话,pandoc在取消编组时即从 Lua 中检索对象时的错误报告并不是很好。理想情况下,pandoc应该报告类型错误,因为将“blocks”列表包装在“Para”中,而该构造器只应接受“inlines”。

如果你很好奇:我正在通过切换到不同的编组策略来解决这个问题,参见这个 PR。这需要一些时间,但我们会做到的。

2021-06-27 22:15:21