我最近才发现Pandoc,所以我仍然习惯它的许多功能。它看起来像是一个非常有用的工具,我很高兴为它找到一些应用程序。我一直在查阅《用户指南》,尽管有a section on what I'd like to know,但似乎无法获得所需的输出。我不确定我是否正确阅读了条目。
简单地说,我在.markdown
中有一个文档作为模板。从这个模板,我想生成其他几个文档(可能是.odt
和.docx
)。除了一些我想更改的信息外,这些文档将基本相同。我想知道的是,是否有可能通过在文档顶部的YAML元数据中声明一个变量来更改这些信息。
例如,假设我的.markdown
模板中包含以下内容:
---
key-one: "value-one"
key-two: "value-two"
key-three: "value-three"
---
# DocumentTitle
## DocumentSubtitle
This line contains the first value, called $key-one$
This line contains the second value, called $key-two$
This line contains the third value, called $key-three$
是否有一种方法可以使Pandoc替换为YAML元数据中声明的信息,例如key-one
,key-two
等“占位符”?这将导致:
This line contains the first value, called value-one
This line contains the second value, called value-two
This line contains the third value, called value-three
在《用户指南》上显示:
如果未设置变量,则pandoc将在文档的元数据中寻找密钥-可以使用YAML元数据块或--metadata选项进行设置。
根据我在《用户指南》上可以找到的内容,似乎我无法在元数据中任意声明值。我已经找到了有关Pandoc templates的一些信息,但是我不确定如何才能编辑这些(或创建自定义的)以获得所需的输出。
如果有任何不清楚的地方,请告诉我,我将尝试更加具体。预先感谢。
答案 0 :(得分:2)
Pandoc模板仅在文档正文文本周围包含页眉/页脚等,该标题/页脚等被放置在模板中您看到$body$
的位置。因此,模板不能用于替换文档正文中的变量。
为此,您可以使用this pandoc filter,将其保存为meta-vars.lua
:
local vars = {}
function get_vars (meta)
for k, v in pairs(meta) do
if v.t == 'MetaInlines' then
vars["$" .. k .. "$"] = {table.unpack(v)}
end
end
end
function replace (el)
if vars[el.text] then
return pandoc.Span(vars[el.text])
else
return el
end
end
return {{Meta = get_vars}, {Str = replace}}
并用pandoc input.md --lua-filter meta-vars.lua