如何通过Pandoc将Markdown的YAML关键词转为docx行内列表?
问题
我用Pandoc把带YAML元数据头的Markdown文件转成docx文档,YAML里的keywords字段是出版社要求的关键词列表(示例如下)。现在转换后关键词是每个单独成段的列表,我需要把它改成逗号分隔的行内列表。试了下面的Lua过滤器,但结果还是段落列表,求问怎么实现需求?
YAML元数据示例:
--- title: The Title author: The Author thanks: | The author wishes to thank certain support. abstract: | This is the abstract. keywords: [one, two, three, four] --- # A Heading Text body.
尝试的Lua过滤器:
function Meta (meta) meta.abstract = meta.abstract .. {pandoc.Emph("Keywords: ")} .. meta.keywords return meta end
解决方法
之前的过滤器无效,是因为meta.keywords在Pandoc内部结构里是Block类型的列表(每个关键词对应一个Para段落元素),直接和abstract拼接会保留段落格式。要改成行内列表,得先把这些Block元素转换成Inline元素,再用逗号连接。
正确的Lua过滤器如下:
function Meta(meta) -- 检查是否存在关键词字段且不为空 if meta.keywords and #meta.keywords > 0 then -- 将每个关键词Block转换为Inline文本 local keyword_inlines = {} for _, kw in ipairs(meta.keywords) do -- 提取段落中的纯文本内容 table.insert(keyword_inlines, kw.content[1]) end -- 用逗号加空格连接所有关键词 local joined_keywords = pandoc.utils.concat(keyword_inlines, pandoc.Str(", ")) -- 构造包含关键词的段落块 local keywords_block = pandoc.Para{ pandoc.Emph("Keywords: "), joined_keywords } -- 将关键词块追加到abstract末尾 meta.abstract = meta.abstract .. {keywords_block} end return meta end
使用该过滤器的转换命令:
pandoc input.md -o output.docx --lua-filter=keywords-filter.lua
转换后,关键词会以Keywords: one, two, three, four的行内形式出现在abstract末尾,不会再单独成段。
内容的提问来源于stack exchange,提问作者Marcos
相关产品推荐
相关产品推荐

