是否可以使用yaml元数据块来扩展pandoc语法?

Off*_*ray 5 python lua latex yaml pandoc

首先是一点背景:

我正在写一篇关于pandoc/yaml + Leo Editor的学术文章.通过这种组合,我可以用非常有机的方式写作.Leo Editor树用于以非线性的方式组织写作,所以我可以看到写作的主要内容深层嵌套,在下一个写作会话中选择要关注的内容并将写入的某些部分放在上面等等.树中的Yaml节点存储了bibligraphical引用,并且使用自定义脚本节点将该Leo树转换为pandoc的markdown,并且该文件用于创建pdf.

今天我写了这样的话:

See the image [#hs-world-map]

--- 
type: image

file: ../Imagenes/hackerspaces-mapa-2014-ene.png

scale: 50

alias: hs-world-map

caption: |

    Mapa mundial de los hackerspaces a enero 4 de 2014 registrados en
    http://hackerspaces.org. Las concentraciones de hackerspaces están denotadas
    por dos indicadores: el número y el color. Los colores rojos y números
    grandes indican mayor concentración de hackerspaces, seguidos por los 
    naranja y números medianos y terminando en los azules, con números pequeños.
    Se puede ver cómo este es un fenómeno global con mayor preminencia
    anglo-europea (la costa este de Estados Unidos tiene 110 hackerspaces y
    Europa 175) y menor notoriedad en Sur América, India, China y Africa.
    Algunos de los contrastes respecto a la cultura hackers y como se
    contextualiza en el Norte Global y en el Sur Global que se han mencionado en
    este escrito, se hacen evidentes en este mapa.


... 
Run Code Online (Sandbox Code Playgroud)

这是一个pandoc的markdown文档中的yaml块(领先的"---"没有正确显示),定义了一些属性和语法,我希望像pandoc这样的图像,比例,别名和支持长字幕的更好方法.在yaml块的外部我已经使用和发明了简写("[#hs-world-map]")对别名数字进行了一些引用,类似于书目引用的[@cite].

我从 lua示例pandoc脚本编写指南中看到可以编写修改pandoc输出的自定义编写器,但我不知道如何从yaml块中提取数据,如果使用我自己的简写来交叉引用数字([ #alias])会奏效.所以我的问题是:

  • 有一个例子,如何在markdown的pandoc中提取yaml块数据,并使用它将数据插入修改后的输出(最好是LaTeX和HTML)?如果有必要的话我会学习lua并不重要,但如果这个例子是在python上会更好,只是专注于撰写文章.

(我认为这种自定义语法可能是一种发展pandoc共享yaml块和自定义编写器的方法,至少是一个很好的实验,可以做到这一点).

Rob*_*let 3

我发现你不可能做你想做的事情。

文档称文档中可以有多个 YAML 块,但它们将合并为一个,始终保持每个属性的第一次出现。

让我们考虑这个示例文档,我将其称为test.md

---
a: Hola
b: mundo
...

---
a: Lorem
c: ipsum
...
Run Code Online (Sandbox Code Playgroud)

如果我将其转换为 Pandoc 的本机表示形式,您会注意到第二次使用a丢失了,并且无法区分这两个块:

$ pandoc test.md -t native -s
Pandoc (Meta {unMeta = fromList [
    ("a",MetaInlines [Str "Hola"]),
    ("b",MetaInlines [Str "mundo"]),
    ("c",MetaInlines [Str "ipsum"])
]})
Run Code Online (Sandbox Code Playgroud)

因此,虽然可以有多个 YAML 块,但它们被视为单个元数据对象的一部分。