是否存在可基于关键词/类型过滤.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
相关产品推荐
相关产品推荐

