我想要问的问题和这个问题的答案相关:biblatex:动态过滤参考文献中特定作者的出版物。
我的目的是将我的书目分为两部分:一部分是个人书目,另一部分是常规书目。
为了做到这一点,我使用了我引用的帖子中的技术:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage[style=alphabetic,maxnames=6,natbib=true]{biblatex}
\bibliography{biblatex-examples}
% Variants of each could be added
\newcommand{\firstname}{Donald~E.}
\newcommand{\lastname}{Knuth}
\DeclareBibliographyCategory{byname}
\DeclareIndexNameFormat{byname}{% Test could be refined
\ifboolexpr{ test {\ifdefstring{\lastname}{#1}}
and test {\ifdefstring{\firstname}{#3}}
}
{\addtocategory{byname}{\thefield{entrykey}}}
{}}
\AtDataInput{%
\indexnames[byname]{author}}
\begin{document}
\section{Knuth's books}
\begin{refsection}
\nocite{*}
\printbibliography[category=byname,heading=none]
\end{refsection}
\section{Not Knuth's books}
\printbibliography[notcategory=byname,heading=none]
\end{document}
问题是只出现了第二个参考书目,当我删除 refsection 时,我的输入文件的所有 bibtex 条目都会被打印出来,并按应有的方式分开。
编辑:目的是将作者 knuth 的所有出版物(甚至未引用的出版物)放在第一部分,将所有其他引用的出版物放在第二部分。
答案1
如果您想使用 biber 执行此操作,我建议使用该sourcemap
功能,它比通过索引格式添加类别更简洁。这会改变输入流(而不改变 .bib 文件),以便将关键字“knuth”添加到所有与“Knuth”匹配的作品中作为作者,然后您可以对其进行过滤:
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=author,
match=Knuth,
final]
\step[fieldset=keywords, fieldvalue=knuth]
}
}
}
\printbibliography[keyword=knuth]
\printbibliography[notkeyword=knuth]
答案2
这是对您的示例的一个小修改。该示例仅适用于backend=biber
。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage[style=alphabetic,maxnames=6,natbib=true,backend=biber]{biblatex}
%\bibliography{biblatex-examples}
\addbibresource{biblatex-examples.bib}
\DeclareBibliographyCategory{byname}
\newcommand*{\mknamesignature}[5]{\def#1{#2|||}}
\mknamesignature{\highlightname}{Knuth}{}{}{}
\DeclareIndexNameFormat{byname}%
{%
\mknamesignature{\currentsignature}{#1}{#3}{#5}{#7}%
\ifdefequal{\highlightname}{\currentsignature}%
{\addtocategory{byname}{\thefield{entrykey}}}%
{}%
}
\AtDataInput{%
\indexnames[byname]{author}}
\begin{document}
\section{Knuth's books}
\begin{refsection}
\nocite{*}
\printbibliography[category=byname,heading=none]
\end{refsection}
\section{Not Knuth's books}
\nocite{*}
\printbibliography[notcategory=byname,heading=none]
\end{document}