Pandoc Lua过滤器中如何将字符串转换为合规标题ID
Pandoc Lua 过滤器实现原生标题ID转换方案
- 存在官方内置的字符串清洗函数,无需自行编写正则匹配、字符替换逻辑,直接调用
pandoc.utils.slugify即可完全复刻Pandoc原生的标题转合规ID规则。 - 该函数内置逻辑完全对齐Pandoc默认行为:自动将文本统一转小写、完成Unicode规范化(将带变音符号的字符转换为对应基础拉丁字符)、移除所有特殊标点、将空白字符替换为短横线,处理结果和Pandoc原生生成的标题ID完全一致。
- 针对给出的示例,执行
pandoc.utils.slugify("Les élèves d'hier")的返回值正好是les-eleves-dhier,和预期结果完全匹配。
调用示例
在Lua过滤器中可以直接按如下方式使用,不需要额外引入依赖:
function Header(el) -- 提取标题块内的纯文本 local heading_plain = pandoc.utils.stringify(el.content) -- 调用内置方法生成符合原生规则的ID el.identifier = pandoc.utils.slugify(heading_plain) return el end
注意:
pandoc.utils.slugify在Pandoc 2.0及以上版本默认提供,覆盖目前绝大多数使用场景。自行手写替换逻辑很容易遗漏Unicode特殊字符、特殊标点的边界处理,会导致和原生生成的ID出现偏差,优先使用内置函数是最稳妥的方案。
内容的提问来源于stack exchange,提问作者Fxp
相关产品推荐
相关产品推荐

