您能帮我处理 biblatex 条目吗?我想...
- 为在线和离线条目打印单独的书目
- 条目
@online
和@misc
带有 url 字段的条目都应归入“在线”类别。所有其他条目都应归入“离线”类别。 - 我不想显示离线条目的
url
和。urldate
我尝试合并以下网页中的答案:
何时使用\AtEveryCitekey
?何时使用\AtEveryBibitem
?我可以发出多个\AtEvery***
命令吗?还是一个命令会取代另一个命令?
以下是我的最小(非完整)工作示例。我总是可以让分类或清除字段正常工作,但不能同时工作:
\documentclass{article}
\usepackage{biblatex}
\DeclareBibliographyCategory{online}
\DeclareBibliographyCategory{offline}
\AtEveryCitekey{%
\ifboolexpr{%
test {\ifentrytype{online}}
or
( test {\ifentrytype{misc}}
and not test {\iffieldundef{url}}
)
}
{ \addtocategory{online}{\thefield{entrykey}}\clearfield{url}\clearfield{urldate} }
{ \addtocategory{offline}{\thefield{entrykey}} }
}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{c1,
author = "Authors1",
title = "{Title of article}",
collaboration = "Collaboration",
year = "2012",
url = "http://www.sciencedirect.com/",
urldate = "2012-07-12",
}
@online{c2,
author = "Authors2",
title = "{Title of website}",
year = "2011",
url = "http://www.gmx.at/",
urldate = "2012-06-10",
}
@misc{c3,
author = "Authors3",
title = "{Title of video}",
year = "2012",
howpublished = "Youtube video",
url = "http://youtube.com/watch/123",
urldate = "2012-06-06",
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\cite{c1,c2,c3}
\printbibliography[category=offline,title={Offline Articles}]
\printbibliography[category=online,title={Online Articles}]
\end{document}
答案1
最好使用 biber 的顺序源映射功能来完成此操作,该功能允许您在处理数据时以流的形式修改数据,而无需实际更改源文件:
\documentclass{article}
\usepackage{biblatex}
\addbibresource{test.bib}
\DeclareSourcemap{
\maps[datatype=bibtex, overwrite=true]{
\map{
\step[fieldset=keywords, fieldvalue=offline]
}
\map{
\pertype{online}
\step[fieldset=keywords, fieldvalue=online]
}
\map{
\pertype{misc}
\step[fieldsource=url, final]
\step[fieldset=keywords, fieldvalue=online]
}
\map{
\step[fieldsource=keywords, match=offline, final]
\step[fieldset=url, null]
}
}
}
\begin{document}
\cite{c1,c2,c3}
\printbibliography[keyword=offline,title={Offline Articles}]
\printbibliography[keyword=online,title={Online Articles}]
\end{document}
- 首先为条目设置默认关键字“离线”
- 然后用“在线”覆盖此内容(如果条目是)
@online
或@misc
使用 URL 字段 - 如果关键字字段仍处于“离线”状态,则删除 URL 字段
- 根据关键词打印两个书目