Pandoc:将文档标题设置为第一个标题

时间:2019-05-06 12:06:58

标签: github latex markdown pandoc

我正在github上创建一个库,因此我使用Markdown文件,其结构如下:

# My main title
## My first section
...
## My second section
...

但是不幸的是,当我使用pandoc将该文档转换为乳胶时:

pandoc README.md --number-sections -f markdown -t latex -s -o doc.tex

文档没有任何标题,并且编号从主标题开始:

1. My main title
1.1. My first section
...
1.2. My second section
...

我想要类似

My main title <=== document title
1. My first section
...
2. My second section
...

我当然可以使用sed将所有##更改为#,并用% Document My main title替换主标题,但对我来说似乎很脏。什么是进行的好方法?

谢谢!

2 个答案:

答案 0 :(得分:1)

最好使用pandoc过滤器执行此操作。这是一个Lua过滤器,可以满足您的需求。将其存储在文件中promote-headers.lua,然后用pandoc --lua-filter=promote-headers.lua致电pandoc。

local title

-- Promote all headers by one level. Set title from level 1 headers,
-- unless it has been set before.
function promote_header (header)

  if header.level >= 2 then
    header.level = header.level - 1
    return header
  end

  if not title then
    title = header.content
    return {}
  end

  local msg = '[WARNING] title already set; discarding header "%s"\n'
  io.stderr:write(msg:format(pandoc.utils.stringify(header)))
  return {}
end

return {
  {Meta = function (meta) title = meta.title end}, -- init title
  {Header = promote_header},
  {Meta = function (meta) meta.title = title; return meta end}, -- set title
}

答案 1 :(得分:1)

从 Pandoc 中的 git commit 88dc6fac5d 开始,您现在可以使用 Pandoc 中的 --shift-heading-level-by 选项将元数据标题提升为一级标题(+1 shift),并将一级标题提升为元数据标题( -1 班)。这可以从 pandoc 2.8 及更高版本获得。潘多克manual reference