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

是否存在可基于关键词/类型过滤.bib文件的Pandoc Lua过滤器?

Pandoc 单Bib文件生成分类参考文献的解决方案

核心思路

不用拆分Bib文件,直接通过Lua过滤器读取主Bib,按指定规则(类型、关键词等)过滤条目,生成分类的参考文献列表,完美适配HTML、Word等输出格式。

具体实现方案

方案1:自定义轻量Lua过滤器

自己写个简单的过滤器,直接处理Bib条目,按需过滤分类。

步骤1:在Markdown中标记分类位置

在需要插入对应分类参考文献的地方,用带标记的Div块:

## 期刊文章
:::refs:article:::

## 软件成果
:::refs:software:::

步骤2:编写Lua过滤器文件(命名为filter-bib-categories.lua)

-- 替换成你的主Bib文件路径
local main_bib_path = "your-publications.bib"
local all_bib_entries = pandoc.utils.read(main_bib_path, "biblatex")

-- 定义分类规则:键对应Markdown里的标记,值是过滤函数
local category_filters = {
  ["article"] = function(entry)
    -- 过滤类型为article的条目
    return entry.type == "article"
  end,
  ["software"] = function(entry)
    -- 过滤类型为software,或关键词包含software的条目
    return entry.type == "software" or (entry.keywords and string.find(entry.keywords, "software"))
  end,
  -- 可以继续添加更多分类,比如书籍:
  -- ["book"] = function(entry) return entry.type == "book" end
}

function Div(el)
  -- 匹配我们定义的refs:xxx标记
  local category = el.classes[1] and el.classes[1]:match("^refs:(.*)$")
  if category and category_filters[category] then
    -- 过滤出符合当前分类的条目
    local filtered_entries = {}
    for _, entry in ipairs(all_bib_entries) do
      if category_filters[category](entry) then
        table.insert(filtered_entries, entry)
      end
    end
    -- 生成参考文献列表,这里用author-year样式,可替换成你需要的样式
    local refs_list = pandoc.utils.references(filtered_entries, "author-year")
    -- 返回生成的参考文献块
    return pandoc.Div(refs_list, pandoc.Attr("", {"bibliography"}))
  end
  return el
end

步骤3:用Pandoc生成文档

运行命令生成HTML或Word:

# 生成HTML
pandoc your-resume.md --lua-filter=filter-bib-categories.lua -o resume.html

# 生成Word
pandoc your-resume.md --lua-filter=filter-bib-categories.lua -o resume.docx

方案2:适配原multibib逻辑的改进版过滤器

如果习惯原multibib的使用方式,可以修改逻辑,让它直接从单Bib文件过滤,不用拆分:

在Markdown里保留类似LaTeX的指令(用raw块):

---
bibliography: your-main.bib
---

## 期刊文章
```{=latex}
\printbibliography[type=article,title={期刊文章}]

软件成果

\printbibliography[type=software,title={软件成果}]
然后编写Lua过滤器解析这些指令的参数,从主Bib里过滤对应条目生成参考文献列表,核心逻辑和方案1类似,只是把触发方式换成解析LaTeX指令的参数。

## 方案优势
- 全程只维护单个Bib文件,更新条目后直接重新生成,不用重复拆分
- 过滤规则可自定义,支持类型、关键词、年份、作者等任意条件
- 完美支持HTML、Word等多种输出格式,满足网站展示和职称评审需求

内容的提问来源于stack exchange,提问作者epurdom
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 22:13:26