我正在尝试列出两个姓氏相同的不同人的参考资料:
\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{foo}{Foo}{Andrew}
\generateauthorcategory{foo}{Foo}{Fernand}
\begin{document}
\printbibliography[heading=none, category=byfoo, check=yr2018,]
\printbibliography[heading=none, category=byfoo, check=yr2017,]
\printbibliography[heading=none, category=byfoo, check=yr2016,]
\printbibliography[heading=none, category=byfoo, check=yr2018,]
\printbibliography[heading=none, category=byfoo, check=yr2017,]
\printbibliography[heading=none, category=byfoo, check=yr2016,]
\nocite{*}
\end{document}
它告诉我我已经有一个 foo 类别,所以我不能有两个。
答案1
<catname>
的第一个参数\generateauthorcategory
定义为向 \declaresourcemap 添加参数是用于标识书目类别的“内部”名称by<catname>
。该名称在所有\generateauthorcategory
s 中必须是唯一的,这样不同人员的类别之间就不会发生冲突(在您的示例中福你希望看到category=byfoo
安德鲁或者费尔南德?)。由于<catname>
用于内部目的,因此它应该只包含 ASCII 字符,而且我更喜欢将字符保持小写。标识符<catname>
不需要与其他两个参数有关系,但如果有关系当然会有所帮助。
您需要在这里选择两个不同的名称,例如fooa
和foof
,
\generateauthorcategory{fooa}{Foo}{Andrew}
\generateauthorcategory{foof}{Foo}{Fernand}
进而
\printbibliography[heading=none, category=byfooa]
\printbibliography[heading=none, category=byfoof]