BibLaTeX:如何捕捉类别的作者姓名?

BibLaTeX:如何捕捉类别的作者姓名?

我一直在尝试在 BibLaTeX 中实现基于作者姓名的类别这个答案使用 biber 时。但是,我似乎无法使用\iffieldequalstrin来获取作者姓名\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 Smith5d0ddda3a367ceb26fbaeca02e391c22。因此,这就是我们要测试的内容。

\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}

两个参考书目:第一个标题为“Smith 的论文”,仅包含 <code>smith:TestPaper</code>。第二个标题为“参考文献”,包含 <code>sigfridsson</code> 和 <code>smith:TestPaper</code>

相关内容