Pandoc:Lua过滤器,用于将{{helloworld}}替换为<;部门>;abc</部门>;

Pandoc:Lua过滤器,用于将{{helloworld}}替换为<;部门>;abc</部门>;,lua,pandoc,Lua,Pandoc,在中,我找到了pandoc lua过滤器的示例: return { { Str = function (elem) if elem.text == "{{helloworld}}" then return pandoc.Emph {pandoc.Str "Hello, World"} else return elem end end, } } 我想用abc替换{{helloworld}}。我的尝试: r

在中,我找到了pandoc lua过滤器的示例:

return {
  {
    Str = function (elem)
      if elem.text == "{{helloworld}}" then
        return pandoc.Emph {pandoc.Str "Hello, World"}
      else
        return elem
      end
    end,
  }
}
我想用
abc
替换
{{helloworld}}
。我的尝试:

return {
  {
    Str = function (elem)
      if elem.text == "{{helloworld}}" then
        return pandoc.RawInline('html','<div>abc</div>')
      else
        return elem
      end
    end,
  }
}
返回{
{
Str=功能(元素)
如果elem.text==“{{helloworld}}”,则
返回pandoc.RawInline('html','abc')
其他的
返回元素
结束
完,,
}
}
…但这给了我以下输出:

<p></p>
<div>abc</div>
<p></p>

abc

我怎样才能去掉空的
p
-标记

其他信息

我将标记转换为html,我的标记文件如下所示:

报纸上说:

函数的输出必须产生与相同类型的元素 输入。这意味着作用于内联元素的过滤器函数 必须返回nil、内联或内联列表以及 过滤块元素的函数必须返回nil、块或 块元素的列表。如果出现这种情况,Pandoc将抛出错误 被侵犯了

您希望将输出呈现为块(
abc
),但输入(
Str
)是内联的。这就是它不起作用的原因。将
Str
(内联)更改为
Para
(块),
elem.text
更改为
element.content[1]。text
RawInline
更改为
RawBlock
,它将工作:

返回{
{
Para=功能(elem)
如果elem.content[1].text==“{{helloworld}}”,则
返回pandoc.RawBlock('html','abc')
其他的
返回元素
结束
完,,
}
}

尝试将
RawInline
替换为
RawBlock
,将
Str
替换为
段落