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

如何用Pandoc Lua过滤器为Docbook警示语添加MkDocs风格缩进

解决Pandoc Docbook转MkDocs警示语的缩进问题

你当前的Lua过滤器已能识别Docbook警示语类型并插入对应标记,但正文缺少MkDocs格式要求的四空格缩进。以下是修改后的代码,可直接实现目标格式:

local stringify = (require 'pandoc.utils').stringify

local admonitions = {
  warning   = {pandoc.Str("!!! warning")},
  note      = {pandoc.Str("!!! note")},
  tip       = {pandoc.Str("!!! tip")},
  important = {pandoc.Str("!!! important")},
  caution   = {pandoc.Str("!!! caution")}
}

function Div(el)
  local admonition_type = el.classes[1]
  local admonition_prefix = admonitions[admonition_type]
  if admonition_prefix then
    -- 将警示语正文转换为Markdown格式字符串
    local content_md = pandoc.write(pandoc.Pandoc(el.content), "markdown")
    -- 为每一行正文添加四空格缩进
    local indented_content = content_md:gsub("^(.*)$", "    %1", 0)
    -- 拼接警示语标记和缩进后的正文
    local full_admonition = stringify(admonition_prefix) .. "\n" .. indented_content
    -- 以RawBlock形式输出完整的MkDocs警示语
    return pandoc.RawBlock("markdown", full_admonition)
  end
  -- 非警示语Div直接返回原内容
  return el
end

修改说明

  • 新增正文转换逻辑:用pandoc.write将Div内的内容块转为标准Markdown字符串
  • 正则缩进处理:通过gsub给每一行正文添加四空格前缀,严格匹配MkDocs警示语格式要求
  • RawBlock输出:将拼接好的完整警示语以RawBlock形式返回,避免Pandoc自动调整格式破坏缩进

输出效果

修改后过滤器会输出符合要求的格式:

!!! note
    This is a note

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:05:23