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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 17:14:52