是否存在适用于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
相关产品推荐
相关产品推荐

