如何在Pandoc';什么是lua过滤函数?

如何在Pandoc';什么是lua过滤函数?,lua,abstract-syntax-tree,pandoc,Lua,Abstract Syntax Tree,Pandoc,Pandoc's使您可以很容易地在文档上迭代并边走边咀嚼文档。我的问题是我不知道如何隔离列表项元素。我可以在每个列表项中找到列表和块级别的内容,但我找不出一种迭代列表项的方法 例如,假设我有以下降价文档: 1. One string Two string 2. Three string Four string 假设我想将每个列表项的第一行加粗。我可以很容易地改变OrderedList中段落的处理方式,比如使用这个过滤器和pandoc--lua filter=myfil

Pandoc's使您可以很容易地在文档上迭代并边走边咀嚼文档。我的问题是我不知道如何隔离列表项元素。我可以在每个列表项中找到列表和块级别的内容,但我找不出一种迭代列表项的方法

例如,假设我有以下降价文档:

1.  One string

    Two string

2.  Three string

    Four string
假设我想将每个列表项的第一行加粗。我可以很容易地改变OrderedList中段落的处理方式,比如使用这个过滤器和
pandoc--lua filter=myfilter.lua--to=markdown input.md

locali
OrderedList=函数(元素)
i=0
返回pandoc.walk_块(元素{
Para=功能(元素)
i=i+1
如果i==1,则返回pandoc.Para{pandoc.Strong(element.c)}
else返回元素结束
终止
})
终止
这确实会将第一个段落元素更改为粗体,但它只会更改第一个列表项的第一个段落,因为它会在列表中所有列表项的所有段落中进行迭代,而不是在每个列表项上,然后在每个段落上进行迭代

1.  **One string**

    Two string

2.  Three string

    Four string

如果我再次将两个列表项分为两个单独的列表,则会捕获第一个列表项的第一段,但我希望捕获每个列表项的第一段!我在文档中找不到任何关于迭代列表项的内容。如何做到这一点?

pandoc Lua filter文档最近更新了关于每种类型属性的更多信息。例如,对于
OrderedList
元素,应该说(它当前说的是
项目
,而不是
内容
,这是一个bug):

订单列表 有序的名单

  • 内容
    :列出项目(块列表)
  • listAttributes
    :列出参数(listAttributes)
  • start
    :listAttributes.start的别名(整数)
  • style
    :listAttributes.style的别名(字符串)
  • 分隔符
    :listAttributes的别名。分隔符(字符串)
  • tag
    t
    :文本OrderedList(字符串)
因此,最简单的方法是迭代内容字段并更改其中的项目:

OrderedList = function (element)
  for i, item in ipairs(element.content) do
    local first = item[1]
    if first and first.t == 'Para' then
      element.content[i][1] = pandoc.Para{pandoc.Strong(first.content)}
    end
  end
  return element
end

哇,你可能不想看到我试过的50次代码迭代。谢谢,这是预期的效果,是有意义的。文档(除了bug)与它的
List
helper类型非常混淆,然后列出了不是这些列表的列表。我知道,很抱歉。我们在当前的开发版本中修复了它,所有列表的类型都是
List