为Markdown以外的输入格式指定元数据

时间:2018-03-08 20:45:05

标签: pandoc

Pandoc允许您使用标题

在Markdown文档的开头包含元数据
---
title: The Song That Never Ends
subtitle: It Goes On and On My Friends
author: Abraham Lincoln
lang: en_US
---

当输入格式 Markdown时,有没有办法将此信息传达给Pandoc?我对HTML输入特别感兴趣。我尝试用--from=html+yaml_metadata_block调用Pandoc,但这似乎没有改变行为 - YAML块只被解释为HTML。

(可以在the “pandoc_title_block” section of the manual中显示的“百分比格式”中包含一些元数据,但似乎没有办法用该语法提供单独的标题和副标题。也可以在HTML之前包含YAML标头并强制Pandoc将输入解释为Markdown,但这似乎很麻烦,如果您尝试将其转换为“真实”Markdown,则输出将包含HTML标记而不是Markdown格式字符。)

2 个答案:

答案 0 :(得分:3)

您可以使用--metadata(简-M)或--metadata-file options在命令行中提供元数据,例如:

pandoc -M title="The Song That Never Ends"

答案 1 :(得分:2)

一个简单的解决方案是使用Lua过滤器将从HTML文件读取的元数据扩充为described in the Lua filters doc。以下是更新版本:

-- file: additional-metadata.lua

function read_file_as_markdown_yaml (filename)
  -- read metadata file into string
  local metafile = io.open(filename, 'r')
  local content = metafile:read('*a')
  metafile:close()
  -- get metadata
  return pandoc.read(content, 'markdown').meta
end

function Meta (meta)
  -- read YAML file and add its content to the metadata
  local yaml_meta = read_file_as_markdown_yaml(meta.default_meta_file)
  for k, v in pairs(yaml_meta) do
    -- use YAML metadata as fallback
    meta[k] = meta[k] or v
  end
  return meta
end

一起使用
pandoc --lua-filter additional-metadata.lua \
       --metadata default_meta_file:YOUR-FILE-HERE.yaml \
       your-input-file.html