我想制作一个 Quarto 扩展,从现有文档中提取一些信息,并在用户放置短代码时转储它。例如,假设我想计算文档中图像的数量,然后在用户添加
{{< imgcount >}}
时输出它。
但是,Quarto 短代码 似乎无法访问文档的其余部分。 Quarto Filters 可以通过定义元素过滤器来访问文档内容。但是,他们无法定义短代码。您可以使用过滤器和短代码定义 Quarto 扩展,但我不清楚它们是否可以相互通信。
有没有一种优雅的方法来解决这个问题?
您可以使用
meta
变量进行通信,该变量可通过 Meta
过滤器和短代码访问。元过滤器在元素过滤器之后运行,因此您可以先对图像进行计数,然后再设置元值。
过滤countimages.lua
:
nrimgs = 0
function Meta(m)
m.totalimgs = nrimgs
return m
end
function Image (elem)
nrimgs = nrimgs + 1
return elem
end
短代码
imgcount.lua
:
return {
['imgcount'] = function(args, kwargs, meta)
return pandoc.Str(meta.totalimgs)
end
}
四开本文档:
---
title: "Count images"
filters:
- countimages.lua
---
This document has {{< imgcount >}} images.
![Elephant](elephant_small.png)
![Lion](lion_small.png)
结果: