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

如何为Pandoc Lua过滤器的Span和Div添加前置文本并设置内容加粗

Pandoc Lua过滤器优化方案

针对你遇到的问题,下面是修改后的过滤器代码,可实现添加“ANSWER: ”前缀、内容加粗,同时完整保留行内公式和代码块:

-- 基于YAML元数据`show-answers`控制答案显示/隐藏的Lua过滤器
-- 当`show-answers: True`时,显示带.answer类的Span和Div内容,否则隐藏
-- 优化:添加"ANSWER: "前缀,且内容加粗

local show_answers = nil

function Pandoc (doc)
  show_answers = doc.meta['show-answers']
  return doc
end

function Span (span)
  if span.classes:includes 'answer' then
    if show_answers then
      -- 构造加粗内容:前缀"ANSWER: " + 原Span内容
      local bold_content = pandoc.Strong(
        pandoc.List:new{pandoc.Str("ANSWER: ")}:extend(span.content)
      )
      -- 返回带新内容的Span,保留原属性
      return pandoc.Span(bold_content, span.attr)
    else
      return {}
    end
  end
end

function Div (div)
  if div.classes:includes 'answer' then
    if show_answers then
      -- 创建开头的加粗前缀段落
      local answer_header = pandoc.Para(pandoc.Strong(pandoc.Str("ANSWER: ")))
      local processed_content = pandoc.List:new()
      processed_content:insert(answer_header)
      
      -- 处理原Div内的每个块元素,保留代码块和公式,文本内容加粗
      for _, block in ipairs(div.content) do
        if block.t == 'Para' then
          -- 段落内容整体加粗
          processed_content:insert(pandoc.Para(pandoc.Strong(block.content)))
        else
          -- 代码块、公式等非段落元素直接保留
          processed_content:insert(block)
        end
      end
      
      -- 返回带新内容的Div,保留原属性
      return pandoc.Div(processed_content, div.attr)
    else
      return {}
    end
  end
end

return {
  {Pandoc = Pandoc},
  {Div = Div},
  {Span = Span}
}

关键修改说明

  1. 解决类型报错:之前直接返回元素的content属性,且添加文本时未正确构造Pandoc AST节点(如直接用字符串而非pandoc.Str对象),导致类型不匹配错误。现在通过创建标准AST节点(Span、Div、Strong、Para等)构建内容,避免类型冲突。
  2. 保留特殊内容:处理Div时,仅对段落文本应用加粗,代码块、公式等块元素直接保留原样,不会丢失原有内容。
  3. 实现需求功能:
    • 行内答案(Span):将前缀与原内容一起包裹在加粗节点中,整体作为Span的内容。
    • 块级答案(Div):先添加单独的加粗前缀段落,再处理原内容中的每个块元素,确保文本加粗的同时保留特殊元素。

测试你的用例后,生成的内容会在答案开头显示加粗的“ANSWER: ”,且原有的行内公式、代码块都能正常保留并显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 21:34:58