我一直在尝试在 BibLaTeX 中实现基于作者姓名的类别这个答案使用 biber 时。但是,我似乎无法使用\iffieldequalstr
in来获取作者姓名\AtEveryBibItem
:
\DeclareBibliographyCategory{authorSmith}
\AtEveryBibitem{\iffieldequalstr{author}{Smith, John}{\addtocategory{authorSmith}{\thefield{entrykey}}{}}}
当我发出\printbibliography[category=authorSmith]
命令时,参考书目中没有打印任何内容。
下面是一个 MWE,显示了该问题和我能想到的所有名称组合,以及在使用时它如何不会发生year
:
麦格
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[sorting=none]{biblatex}
\addbibresource{mwe.bib}
\DeclareBibliographyCategory{authorSmith}
\AtEveryBibitem{\iffieldequalstr{author}{Smith, John}{\addtocategory{authorSmith}{\thefield{entrykey}}{}}}
\AtEveryBibitem{\iffieldequalstr{author}{Smith,John}{\addtocategory{authorSmith}{\thefield{entrykey}}{}}}
\AtEveryBibitem{\iffieldequalstr{author}{SmithJohn}{\addtocategory{authorSmith}{\thefield{entrykey}}{}}}
\AtEveryBibitem{\iffieldequalstr{author}{JohnSmith}{\addtocategory{authorSmith}{\thefield{entrykey}}{}}}
\AtEveryBibitem{\iffieldequalstr{author}{John Smith}{\addtocategory{authorSmith}{\thefield{entrykey}}{}}}
\DeclareBibliographyCategory{year1984}
\AtEveryBibitem{\iffieldequalstr{year}{1984}{\addtocategory{year1984}{\thefield{entrykey}}{}}}
\begin{document}
\nocite{*}
\printbibliography
\section*{Sorted by Author}
\printbibliography[category=authorSmith]
\section*{Sorted by Year}
\printbibliography[category=year1984]
\end{document}
论坛
@article{smith:TestPaper,
addendum = {This should show up},
author = {Smith, John},
journal = {Test Journal},
year = {1984},
title = {Test Paper}
}
有人知道我怎样才能找到作者的名字吗?我在源地图方面也遇到了类似的问题。
答案1
名称字段比较特殊,无法使用 进行测试\iffieldequalstr
。我认为测试某个名称的最佳方法是使用名称哈希进行测试,请参阅使用 biblatex 突出显示参考书目中的作者,并允许使用参考书目样式对其进行格式化。如果我们这样做,会有一些微妙之处,我们可以测试完整的作者列表,也可以只测试作者列表中的一个名字。测试完整列表稍微简单一些,而且您的使用示例看起来可能是有意为之,所以我将在这里介绍该解决方案。
namehash
这种方法的缺点是您必须在一次中查找.bbl
。只需打开.bbl
,搜索相关条目并复制该namehash
值即可。
\entry{smith:TestPaper}{article}{}
\name{author}{1}{}{%
{{uniquename=0,uniquepart=base,hash=5d0ddda3a367ceb26fbaeca02e391c22}{%
family={Smith},
familyi={S\bibinitperiod},
given={John},
giveni={J\bibinitperiod},
givenun=0}}%
}
\strng{namehash}{5d0ddda3a367ceb26fbaeca02e391c22}
Smith, John
显示在我的 Biber 版本中/的哈希John Smith
是5d0ddda3a367ceb26fbaeca02e391c22
。因此,这就是我们要测试的内容。
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=authoryear, backend=biber]{biblatex}
\DeclareBibliographyCategory{authorSmith}
\AtDataInput{%
\iffieldequalstr{namehash}{5d0ddda3a367ceb26fbaeca02e391c22}
{\addtocategory{authorSmith}{\thefield{entrykey}}}
{}}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{smith:TestPaper,
addendum = {This should show up},
author = {Smith, John},
journal = {Test Journal},
year = {1984},
title = {Test Paper},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\begin{document}
\cite{sigfridsson,smith:TestPaper}
\printbibliography[category=authorSmith, title={Smith's Papers}]
\printbibliography
\end{document}