如何通过Pandoc将含Admonitions的Markdown转DOCX并保留提示框(可带图标)?
用Pandoc保留Admonitions转DOCX(含图标)的方法
一、统一Markdown中的Admonition格式
Pandoc默认不识别!!! TIP这类格式,建议转成它支持的带类名的Div块,方便后续映射样式:
原格式:
!!! TIP 这是一条提示内容,可能有多行。
替换为:
::: {.tip} **💡 提示** 这是一条提示内容,可能有多行。 :::
- 直接用emoji
💡作为图标,其他类型可对应更换(比如⚠️对应警告) .tip是自定义类名,后续会和DOCX样式关联
二、制作带Admonition样式的DOCX参考模板
- 导出Pandoc默认DOCX模板:
pandoc -o reference.docx --print-default-data-file reference.docx
- 打开
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
相关产品推荐
相关产品推荐

