如何用Pandoc Lua过滤器将Markdown斜体粗体转为LibreOffice ODT强调样式?
问题描述
我有如下input.md文件:
--- title: My example document --- ## Overview *I am italic* **I am bold**
执行命令:
pandoc input.md -o output.odt
生成的ODT文件格式符合预期,但为了生成符合PDF/UA标准的PDF,我需要手动移除粗体和斜体格式,通过样式菜单将文本分别设置为“强强调(Strong Emphasis)”和“强调(Emphasis)”样式。
我希望自动化该操作,因此创建了custom_styles.lua:
function Strong(elem) return pandoc.Span(elem.content, {class = "StrongEmphasis"}) end function Emph(elem) return pandoc.Span(elem.content, {class = "Emphasis"}) end
执行命令:
pandoc --lua-filter=custom_styles.lua -o output.odt input.md
生成的ODT文档中,原本为粗体和斜体的文本显示为“无字符样式”,请问我该如何操作才能实现需求?
解决方案
问题出在当前Lua滤镜仅给元素添加了CSS类,但ODT依赖OpenDocument样式系统而非CSS类。要让Pandoc给文本应用ODT内置字符样式,需修改滤镜,通过设置style属性替代class:
修改后的custom_styles.lua:
function Strong(elem) return pandoc.Span(elem.content, {style = "Strong Emphasis"}) end function Emph(elem) return pandoc.Span(elem.content, {style = "Emphasis"}) end
重新执行原命令即可:
pandoc --lua-filter=custom_styles.lua -o output.odt input.md
Pandoc默认的ODT模板已包含这些基础字符样式,生成的文档中,原粗体文本会自动应用“强强调”样式,原斜体文本会应用“强调”样式,后续导出PDF时就能满足PDF/UA的无障碍规范。
内容的提问来源于stack exchange,提问作者HapiDaze
相关产品推荐
相关产品推荐

