如何配置Pandoc,使Markdown转ODT时所有普通段落统一应用Body Text样式?
如何配置Pandoc,使Markdown转ODT时所有普通段落统一应用Body Text样式?
这问题我之前折腾Pandoc转ODT时也碰到过,默认的样式映射确实有点坑——明明都是普通段落,偏偏第一个和后面的样式不一样,排版巨难看。给你两个靠谱的解决办法,都不用折腾你的原始Markdown文档,也不会搞乱reference.odt里的目录、标题这些其他元素的样式:
方法一:用Lua过滤器(最推荐,灵活无副作用)
Pandoc支持用简单的Lua脚本在转换过程中偷偷修改段落样式,完全不碰你的原文档和参考文档核心设置。
- 新建一个文本文件,随便起个名字比如
fix-para-style.lua,把下面的代码粘进去:
function Para(el) -- 给所有普通段落打上Body Text样式的标记 el.attributes["custom-style"] = "Body Text" return el end
- 把转换命令改成这样就行:
pandoc input.md --reference-doc=reference.odt --lua-filter=fix-para-style.lua -o output.odt
原理很简单:这个小脚本会遍历转换时的所有普通段落(就是你Markdown里那些没加标题、列表标记的纯文本块),自动给它们加上Body Text样式的属性,Pandoc转ODT的时候就会乖乖用这个样式,标题、目录、列表这些元素的样式完全不受影响,完美保持Markdown的简洁性。
方法二:修改参考文档的样式映射(适合不想碰代码的朋友)
如果你对写脚本有点犯怵,也可以在reference.odt里做个小调整,全程用LibreOffice的可视化操作就行:
- 用LibreOffice打开你的reference.odt,按F11调出样式侧边栏
- 右键点击「Body Text」样式,选择「新建」
- 给新样式起个名字叫「Pandoc Default」,格式直接继承Body Text(不用改任何设置,直接点确定)
- 保存这个修改后的reference.odt,然后用原来的转换命令就行:
pandoc input.md --reference-doc=reference.odt -o output.odt
为啥要叫「Pandoc Default」?因为Pandoc在转ODT时,会优先找名为「Pandoc Default」的样式来应用到普通段落,如果找不到才会用系统的「Default Paragraph Style」。这样设置后,普通段落会用你新建的、和Body Text完全一样的样式,而原来的「Default Paragraph Style」还保持原样,目录这些元素的样式一点不受影响。
这两种方法都能完美解决问题,看你自己习惯哪个——Lua过滤器以后要改样式的话更灵活,改参考文档的方法则完全不用碰代码。
备注:内容来源于stack exchange,提问作者HapiDaze
相关产品推荐
相关产品推荐

