Pandoc: установить заголовок документа на первый заголовок - PullRequest
1 голос
/ 06 мая 2019

Я создаю библиотеку на 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, но для меня это выглядит довольно грязно. Какой хороший способ продолжить?

Спасибо!

1 Ответ

3 голосов
/ 06 мая 2019

Лучше всего использовать фильтр Пандока, чтобы сделать это.Вот фильтр Lua, который делает то, что вам нужно.Сохраните его в файле, например, promote-headers.lua и вызовите pandoc с помощью pandoc --lua-filter=promote-headers.lua.

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