这是我用来列出参考文献的 MWE:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage[style=alphabetic, maxnames=6, natbib=true, backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=author,
match=Knuth,
final]
\step[fieldset=keywords, fieldvalue=knuth]
}
\map{
\step[fieldsource=author,
match=Sigfridsson,
final]
\step[fieldset=keywords, fieldvalue=sigfridsson]
}
}
}
\begin{document}
\nocite{sigfridsson,knuth:ct:a,companion,worman,knuth:ct:c}
\printbibliography[keyword=knuth]
\printbibliography[keyword=sigfridsson]
\printbibliography[notkeyword=knuth,notkeyword=sigfridsson]
\end{document}
我尝试在文档开始之前创建变量,以便我可以替换我的书目列表中文档中需要的任何作者。在理想情况下,我希望它看起来像这样:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage[style=alphabetic, maxnames=6, natbib=true, backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=author,
match= x,
final]
\step[fieldset=keywords, fieldvalue= x]
}
}
}
\begin{document}
\nocite{*}
\printbibliography[keyword=x=anyauthorspecified]
\printbibliography[notkeyword=x=anyauthorspecified]
\end{document}
我希望这样做,这样我就可以重复使用,\declaresourcemap
而不必在需要时为每个特定作者制作地图。我只需使用\printbibliography
并指定我想要的作者
答案1
这个想法来自biblatex:动态过滤参考文献中特定作者的出版物可扩展
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[british]{babel}
\usepackage{csquotes}
\usepackage[backend=biber, style=alphabetic]{biblatex}
\bibliography{biblatex-examples}
\newcommand*{\generateauthorcategory}[3]{%
\DeclareBibliographyCategory{by#1}%
\DeclareIndexNameFormat{cat#1}{%
\ifboolexpr{test {\ifdefstring{\namepartfamily}{#2}}
and test {\ifdefstring{\namepartgiven}{#3}}}
{\addtocategory{by#1}{\thefield{entrykey}}}
{}}%
\AtDataInput{\indexnames[cat#1][1-999]{author}}}
\generateauthorcategory{sigfridsson}{Sigfridsson}{Emma}
\generateauthorcategory{knuth}{Knuth}{Donald\bibnamedelima E.}
\generateauthorcategory{glashow}{Glashow}{Sheldon}
\defbibcheck{yr1986}{%
\iffieldint{year}
{\ifnumequal{\thefield{year}}{1986}
{}
{\skipentry}}
{\skipentry}}
\defbibcheck{yr1984}{%
\iffieldint{year}
{\ifnumequal{\thefield{year}}{1984}
{}
{\skipentry}}
{\skipentry}}
\begin{document}
\nocite{knuth:ct:a,knuth:ct:b,sigfridsson,glashow,cicero,worman}
\printbibliography[category=bysigfridsson, title=Sigfridsson]
\printbibliography[category=byknuth, check=yr1984, title=Knuth 1984]
\printbibliography[category=byknuth, check=yr1986, title=Knuth 1986]
\printbibliography[category=byglashow, title=Glashow]
\end{document}
该命令\generateauthorcategory{<catname>}{<family>}{<given>}
生成一个类别by<catname>
并添加作者姓氏等于<family>
且名字等于的所有条目<given>
。请注意,名字需要按照 的格式给出.bbl
,这意味着它可能必须包含一些内部宏(\bibnamedelima
、\bibnamedelimd
、...)(参见上面的 Knuth)。第一个参数<catname>
必须是唯一的,并且它应该只包含 ASCII 字符(我更喜欢将其保持小写),它仅在内部使用并作为 的标识符by<catname>
,因此它不需要与<family>
或<given>
参数有任何关系 - 但当然应该避免混淆。
您可以通过筛选类别来获取某个作者的所有条目by<catname>
。
要进行过滤,year
您可以添加一个简单的 bibcheck
\defbibcheck{yr1986}{%
\iffieldint{year}
{\ifnumequal{\thefield{year}}{1986}
{}
{\skipentry}}
{\skipentry}}
添加check=yr1986
以\printbibliography
仅显示 1986 年以后的条目。使用\ifnumgreater
和,\ifnumless
您还可以检查年份范围。