使用pandoc --reference-doc生成的docx文档字体无法修改求助
解决Pandoc生成Docx文档字体不生效的问题
问题核心
直接修改reference-doc文档的文本字体不会生效,因为Pandoc是基于Word的样式来渲染内容,而非直接继承文本格式。必须修改样式定义,才能让所有对应样式的内容统一应用字体设置。
高效解决方案
方案1:正确修改Reference Doc的样式(一次性配置,长期复用)
- 打开
custom-reference.docx,点击「开始」选项卡→「样式」组右下角的小箭头,打开样式窗格 - 找到需要调整的样式(如「正文」「列表段落」「引用」等),右键样式名→修改
- 在「修改样式」对话框中:
- 设置目标字体(如宋体)和字号(10号)
- 勾选「基于该模板的新文档」,确保修改永久保存到模板
- 保存模板后,重新执行你的Pandoc命令:
pandoc --reference-doc=custom-reference.docx -o docs/reader_filtering.docx docs/reader_filtering.md
方案2:用Lua过滤器批量指定样式(无需手动修改模板)
如果不想反复调整模板样式,可通过Pandoc的Lua过滤器直接在转换时设置字体:
- 创建脚本
adjust-fonts.lua:-- 定义字体设置函数 local function apply_font(elem, font_name, font_size) elem.attributes["font-family"] = font_name elem.attributes["font-size"] = font_size .. "pt" return elem end -- 给段落应用字体 function Para(el) return apply_font(el, "宋体", 10) end -- 给无序列表应用字体 function BulletList(el) for _, item in ipairs(el.content) do for _, block in ipairs(item) do block = apply_font(block, "宋体", 10) end end return el end -- 给有序列表应用字体 function OrderedList(el) for _, item in ipairs(el.content) do for _, block in ipairs(item) do block = apply_font(block, "宋体", 10) end end return el end - 执行Pandoc命令时加载过滤器:
pandoc --reference-doc=custom-reference.docx --lua-filter=adjust-fonts.lua -o docs/reader_filtering.docx docs/reader_filtering.md
方案3:验证模板路径与生效性
- 确保
custom-reference.docx的路径正确,可尝试用绝对路径(如/Users/xxx/custom-reference.docx)避免路径问题 - 检查模板样式:打开模板后,右键样式→修改,确认字体、字号已正确保存
内容的提问来源于stack exchange,提问作者WestCoastProjects
相关产品推荐
相关产品推荐

