如何使用pandoc将目录中的所有.md文件编译成单个.pdf,同时保留YAML头数据?

问题描述 投票:0回答:1

我有一个.md文件目录,每个文件都包含一个YAML标题,指定文件titleauthordatecategoriestags等。该目录包含日记条目,文件名只是条目的日期。

我可以毫不费力地使用pandoc为每个.md文件生成PDF,但是我正在寻找一种方式生成单个PDF的书籍或回忆录格式,每个.md文档的title字段作为目录中的一章,已安排通过date值。理想情况下,date也会出现在目录中,但如果各个章节也会显示该信息,那么这并不重要。

我无法找到一种方法来执行此操作,因为在连接多个文档时,pandoc似乎忽略了除第一个YAML标头之外的所有标头。我能想到的一个可能的解决方案是将所有相关的YAML标题信息转换为markdown标题,然后降级每个.md文档中的现有标题。但我不确定如何做到这一点,或者这是否是最好的方法。我也在查看R bookdown包,但它也使用markdown标题用于章节,并且不确定它是否可以适用于使用YAML标题信息。

什么是最简单的方法来完成我需要的东西?谢谢。

pdf pdf-generation markdown pandoc bookdown
1个回答
1
投票

您的问题中概述的想法是一个很好的方法:

将标题降级为标题可以通过filter完成,例如如果你使用pandoc> 2.0,那就是Lua filter。以下假定您使用的是当前版本2.0.6:

demote.lua:

-- List is available since pandoc 2.0.4
local List = require 'pandoc.List'

function Header (h)
  h.level = h.level + 1
  return h
end

function Pandoc (doc)
  local title = doc.meta.title
  local header = pandoc.Header(1, title)
  doc.blocks = {header} .. doc.blocks
  return doc
end

现在运行以下命令来创建pdf:

for f in /path/to/docs/*.md; do
    pandoc --lua-filter=demote.lua -t markdown
    printf "\n" # insert empty line between articles
end | pandoc -o combined.pdf
© www.soinside.com 2019 - 2024. All rights reserved.