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

如何在Pandoc Lua过滤器中将CodeBlock转换为LineBlock

Pandoc Lua过滤器CodeBlock转LineBlock解决方案

原代码问题原因

pandoc.read默认返回完整的Pandoc文档对象(根节点下是块元素列表),而LineBlock要求的入参结构是嵌套列表:外层每个元素对应一行内容,内层是该行对应的内联元素列表,两者结构不匹配所以无法生效。

正确实现代码

function CodeBlock(el)
  local line_content = {}
  -- 按换行拆分原始文本,逐行处理
  for line in el.text:gmatch('[^\r\n]*') do
    -- 解析单行文本为内联元素序列,指定plain格式避免误解析Markdown语法
    local parsed_inlines = pandoc.read(line, 'plain').blocks[1].content
    table.insert(line_content, parsed_inlines)
  end
  return pandoc.LineBlock(line_content)
end

实现说明

  • 拆分文本时使用[^\r\n]*匹配可以保留原始文本中的空行
  • 如果你需要识别行内的Markdown格式(比如斜体、行内代码),可以把pandoc.read的第二个参数从plain改成markdown
  • 解析后的parsed_inlines已经自动拆分好Str、Space等标准内联元素,完全符合LineBlock的入参要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:24:01