首页 > 解决方案 > 如何访问 panflute 中的全局变量(Pandoc 过滤器)

问题描述

根据API 文档,应该能够以某种方式通过doc变量访问全局变量。但是如何,没有解释。

全局变量可以在 YAML 头文件中定义:

---
title: Document Title
author: Who wrote this
key0: val0

Here starts the document content ...

或在 pandoc 命令行上:

pandoc -V key1=val1 --variable key2=val2 input.md

我试图访问它们的内容:

    print("key1=%s" % doc.key1)
    print("key1=%s" % doc.get_metadata('key1', 'NOT-FOUND'))

两者都失败了。

标签: filterpandoc

解决方案


第一种方法(将变量放在文档中)失败了,因为 YAML 块没有关闭,所以该块不是作为元数据读取,而是作为正常的 Markdown 读取。在元数据之后添加一个结束---行应该可以解决这个问题。

---
title: Document Title
author: Who wrote this
key0: val0
---

Here starts the document content ...

要了解命令行版本失败的原因,必须查看 pandoc 对模板变量元数据所做的区别。/文档-M--metadata说:

--variable,--metadata导致模板变量被设置。但与--variable,不同的是,--metadata会影响基础文档的元数据(可从过滤器访问,并且可以以某些输出格式打印),并且元数据值在插入模板时将被转义。

因此,使用-M代替-V应该可以解决您的问题。


推荐阅读