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

是否存在适用于Pandoc Lua Filter的恒等变换(Identity Transform)示例?

Pandoc Lua Filters 恒等变换实例及代码块提取方案

先给你一个明确定义了所有常用函数插槽的恒等变换Lua过滤器,它会完全保留文档原有内容,适合作为实验的基础模板:

-- 恒等变换过滤器:所有元素原样输出
function Str(el) return el end
function Emph(el) return el end
function Strong(el) return el end
function Strikeout(el) return el end
function Underline(el) return el end
function Code(el) return el end
function Space(el) return el end
function SoftBreak(el) return el end
function LineBreak(el) return el end
function Math(el) return el end
function RawInline(el) return el end
function Link(el) return el end
function Image(el) return el end
function Note(el) return el end
function Span(el) return el end

function Para(el) return el end
function CodeBlock(el) return el end
function BlockQuote(el) return el end
function OrderedList(el) return el end
function BulletList(el) return el end
function DefinitionList(el) return el end
function Header(el) return el end
function HorizontalRule(el) return el end
function Table(el) return el end
function Div(el) return el end
function RawBlock(el) return el end
function Plain(el) return el end

function Meta(el) return el end
function Pandoc(el) return el end

这个过滤器里的每个函数对应Pandoc AST里的一种元素类型,函数直接返回传入的元素,所以不会对文档做任何修改。你可以基于这个模板,修改特定函数的逻辑来实现自定义需求。

针对你要提取所有代码块、忽略其余内容的需求,只需要修改上面的过滤器,让非代码块的元素返回nil(Pandoc会忽略返回nil的元素),修改后的代码如下:

-- 仅保留代码块的过滤器
-- 所有行内元素直接忽略
function Str(el) return nil end
function Emph(el) return nil end
function Strong(el) return nil end
function Strikeout(el) return nil end
function Underline(el) return nil end
function Code(el) return nil end
function Space(el) return nil end
function SoftBreak(el) return nil end
function LineBreak(el) return nil end
function Math(el) return nil end
function RawInline(el) return nil end
function Link(el) return nil end
function Image(el) return nil end
function Note(el) return nil end
function Span(el) return nil end

-- 仅保留CodeBlock,其余块级元素忽略
function Para(el) return nil end
function CodeBlock(el) return el end
function BlockQuote(el) return nil end
function OrderedList(el) return nil end
function BulletList(el) return nil end
function DefinitionList(el) return nil end
function Header(el) return nil end
function HorizontalRule(el) return nil end
function Table(el) return nil end
function Div(el) return nil end
function RawBlock(el) return nil end
function Plain(el) return nil end

-- 元数据和文档结构保留,但内容只剩代码块
function Meta(el) return el end
function Pandoc(el) return el end

使用方法:把上面的代码保存为extract-codeblocks.lua,然后执行命令:

pandoc --lua-filter=extract-codeblocks.lua 你的输入文档.md -o 输出文档.md

执行后,输出文档里就只会保留原Markdown中的所有代码块,其他内容都会被过滤掉。

内容的提问来源于stack exchange,提问作者monojohnny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:03:17