Pandoc:Lua-Filter,用于将 {{helloworld}} 替换为 <div>abc</div>

Sr.*_*der 5 lua pandoc

手册中,我找到了 pandoc lua-filter 的示例:

return {
  {
    Str = function (elem)
      if elem.text == "{{helloworld}}" then
        return pandoc.Emph {pandoc.Str "Hello, World"}
      else
        return elem
      end
    end,
  }
}
Run Code Online (Sandbox Code Playgroud)

我想替换{{helloworld}}<div>abc</div>. 我的尝试:

return {
  {
    Str = function (elem)
      if elem.text == "{{helloworld}}" then
        return pandoc.RawInline('html','<div>abc</div>')
      else
        return elem
      end
    end,
  }
}
Run Code Online (Sandbox Code Playgroud)

...但这给了我以下输出:

<p></p>
<div>abc</div>
<p></p>
Run Code Online (Sandbox Code Playgroud)

我怎样才能摆脱空p标签?

附加信息

我从 markdown 转换为 html,我的 markdown 文件如下所示:

在此输入图像描述

mb2*_*b21 6

手册

\n\n
\n

函数\xe2\x80\x99s 的输出必须产生与输入类型相同的元素。这意味着作用于内联元素的过滤函数必须返回 nil、内联或内联列表,而过滤块元素的函数必须返回 nil、块或块列表之一元素。如果违反此条件,Pandoc 将抛出错误。

\n
\n\n

您希望输出呈现为块 ( <div>abc</div>),但输入 ( Str) 是内联的。这就是它不起作用的原因。Str将(Inline)更改为Para(Block)、elem.texttoelement.content[1].textRawInlineto RawBlock,它将起作用:

\n\n
return {\n  {\n    Para = function (elem)\n      if elem.content[1].text == "{{helloworld}}" then\n        return pandoc.RawBlock(\'html\',\'<div>abc</div>\')\n      else\n        return elem\n      end\n    end,\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n