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

如何通过Pandoc将含Admonitions的Markdown转DOCX并保留提示框(可带图标)?

用Pandoc保留Admonitions转DOCX(含图标)的方法

一、统一Markdown中的Admonition格式

Pandoc默认不识别!!! TIP这类格式,建议转成它支持的带类名的Div块,方便后续映射样式:
原格式:

!!! TIP
    这是一条提示内容,可能有多行。

替换为:

::: {.tip}
**💡 提示**  
这是一条提示内容,可能有多行。
:::
  • 直接用emoji 💡作为图标,其他类型可对应更换(比如⚠️对应警告)
  • .tip是自定义类名,后续会和DOCX样式关联

二、制作带Admonition样式的DOCX参考模板

  1. 导出Pandoc默认DOCX模板:
pandoc -o reference.docx --print-default-data-file reference.docx
  1. 打开reference.docx,进入「样式」面板:
    • 创建新样式,命名为Tip(和Markdown里的.tip类对应)
    • 设置样式格式:比如浅黄背景、圆角边框、左侧缩进,也可把💡 提示设为样式的段落前缀
    • 同理可创建Warning、Note等其他类型的样式

三、执行Pandoc转换命令

用以下命令把Markdown转成带样式的DOCX:

pandoc 你的文档.md -o 输出文档.docx --reference-doc=reference.docx -f markdown+divs
  • --reference-doc指定修改好的模板
  • -f markdown+divs开启Pandoc对带类Div块的解析,自动把.tip类映射到模板里的Tip样式

进阶:用Lua过滤器自动转换旧格式

如果不想手动修改Markdown里的!!! TIP,可以写个简单的Lua脚本自动转换:
创建admonitions.lua文件,内容如下:

function CodeBlock(el)
  -- 处理!!! TIP格式
  if el.text:match("^!!! TIP") then
    -- 提取内容并去除前缀
    local content = el.text:gsub("^!!! TIP\n?", ""):gsub("^%s+", "")
    -- 转换成带tip类的Div块,自动加图标和标题
    return pandoc.Div(
      {pandoc.Plain(pandoc.Strong("💡 提示")), pandoc.Plain(content)},
      {class = "tip"}
    )
  end
  -- 其他类型比如!!! WARNING同理添加分支
  return el
end

转换命令加上过滤器:

pandoc 你的文档.md -o 输出文档.docx --reference-doc=reference.docx -f markdown+divs --lua-filter=admonitions.lua

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 05:07:04