You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandoc Lua过滤器将Markdown转HTML时替换<br>标签为<br />

解决方案:修正Lua过滤器以捕获目标元素

你的Lua过滤器没生效的核心原因是:你在Test.md里写的&lt;br&gt;会被Pandoc解析为RawInline('html', '<br>')元素,而不是LineBreak元素。LineBreak是Pandoc用来表示Markdown硬换行(比如行尾加两个空格+换行)的内部元素,和你直接写入的转义HTML标签完全是两回事。

要实现需求,你需要修改Lua过滤器,同时覆盖两种场景(如果需要的话):

1. 处理直接写入的<br>标签(即Markdown里的&lt;br&gt;)

替换你的filter.lua为以下代码:

function RawInline(elem)
  -- 检查是否是HTML格式的RawInline,且内容是<br>
  if elem.format == 'html' and elem.text == '<br>' then
    return pandoc.RawInline('html', '<br />')
  end
  -- 其他RawInline元素保持不变
  return elem
end

2. 同时处理Markdown硬换行生成的<br>(可选)

如果你还希望把Markdown里的硬换行(比如Hello \nWorld)也转成<br />,可以加上LineBreak的处理逻辑:

-- 处理Markdown硬换行生成的LineBreak元素
function LineBreak(elem)
  return pandoc.RawInline('html', '<br />')
end

-- 处理直接写入的<br>标签
function RawInline(elem)
  if elem.format == 'html' and elem.text == '<br>' then
    return pandoc.RawInline('html', '<br />')
  end
  return elem
end

测试验证

用修改后的过滤器执行你的转换命令:

pandoc --lua-filter filter.lua --to html5 Test.md

输出的HTML会变成:

<h2 id="testing">Testing</h2>
<p>Hello <br /> World!</p>

不管指定--to html5还是html4,都会得到符合需求的<br />标签。

补充说明

Pandoc 2.13完全支持上述Lua过滤器的语法,不需要升级版本。核心是要匹配正确的元素类型:直接写入的HTML转义标签会被解析为RawInline,而Markdown原生换行对应LineBreak,两者需要分开处理。

内容的提问来源于stack exchange,提问作者SignalRichard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 17:32:47