Quarto 制作一个从文档中读取内容的短代码

问题描述 投票:0回答:1

我想制作一个 Quarto 扩展,从现有文档中提取一些信息,并在用户放置短代码时转储它。例如,假设我想计算文档中图像的数量,然后在用户添加

{{< imgcount >}}
时输出它。

但是,Quarto 短代码 似乎无法访问文档的其余部分。 Quarto Filters 可以通过定义元素过滤器来访问文档内容。但是,他们无法定义短代码。您可以使用过滤器和短代码定义 Quarto 扩展,但我不清楚它们是否可以相互通信。

有没有一种优雅的方法来解决这个问题?

pandoc quarto
1个回答
0
投票

您可以使用

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)

结果:

© www.soinside.com 2019 - 2024. All rights reserved.