如何用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
相关产品推荐
相关产品推荐

