使用YAML元数据块声明用于pandoc转换的任意变量

使用YAML元数据块声明用于pandoc转换的任意变量,yaml,pandoc,odt,Yaml,Pandoc,Odt,我最近才发现了Pandoc,所以我还是习惯了它的很多特性。它看起来是一个非常有用的工具,我很高兴能找到它的一些应用程序。我一直在查阅用户指南,虽然有,但似乎无法获得所需的输出。我不确定我读的条目是否正确 简单地说,我在.markdown中有一个文档作为模板。从这个模板中,我想生成几个其他文档(可能是.odt和.docx)。除了我想更改的一些信息外,这些文档基本上是相同的。我想知道的是,是否可以通过在文档顶部的YAML元数据中声明一个变量来更改这些信息 例如,假设我在.markdown模板中有以下

我最近才发现了Pandoc,所以我还是习惯了它的很多特性。它看起来是一个非常有用的工具,我很高兴能找到它的一些应用程序。我一直在查阅用户指南,虽然有,但似乎无法获得所需的输出。我不确定我读的条目是否正确

简单地说,我在
.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元数据中声明的信息替换“占位符”(即
键一
键二
)等)?这将导致:

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块或--metadata选项进行设置

从《用户指南》中可以看到,我似乎不能在元数据中任意声明值。我找到了一些关于的信息,但我不确定如何编辑这些信息(或创建自定义信息)以获得所需的输出


请让我知道,如果有什么不清楚,我会尽量更具体。提前感谢。

潘多克模板仅包含文档正文文本周围的页眉/页脚等,这些文本放置在模板中看到的
$body$
位置。因此,模板不能用于替换文档体中的变量

为此,您可以使用,将其保存为
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

太好了,非常感谢您!这正是我想要的。目前,它可以替代单个变量,但不能替代同一
标记中包含的多个变量。转换为HTML显示
pandoc.Span
仅将最后一个变量包装在Span标记中。这不是一个大问题,但也许可以调整上面的内容来改变这种行为。。。无论如何,再次谢谢你!很乐意帮忙!陛下“同一标签中包含多个变量”是什么意思?在元数据中,还是在正文文本中?变量名中不应该有空格…对不起,我的错误-我认为引起问题的只是格式错误。如果我将标记文件中的占位符放在一行上,那么似乎可以解决问题。我现在遇到的问题是,
span
标记会自动在其后面添加一个空格,这很有意义,除非您需要在后面直接添加一些标点符号。像
\$author\$、\$editor\$和\$publisher\$
这样的变量字符串将生成带有空格逗号的字符串“author、editor和publisher”。如果这没有多大意义,很抱歉-很难在注释中解释。@jbowman我想我知道发生了什么:占位符需要是单独的字符串,即由空格或其他元素分隔。尝试使用空跨距作为分隔符,如下所示:
\$author\$[]{}、\$editor\$[]{}、
。是一个实验性的过滤器来解决这个问题。@tarleb好的,谢谢你-我一定会去看看的!