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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:21:49