biblatex:过滤掉特定作者的出版物,无需 biber 和多位作者

biblatex:过滤掉特定作者的出版物,无需 biber 和多位作者

这是后续行动最近的一个问题:在我的 TexLive 2012(biblatex 1.7-1)系统中,我试图将特定作者的出版物与所有其他参考文献分开(例如,如果你想将自己的出版物与他人的作品分开)。为此,我使用了此解决方案,这似乎正是我所寻找的:

\DeclareBibliographyCategory{byname}
\DeclareIndexNameFormat{byname}{% Test could be refined
\ifboolexpr{ test {\ifdefstring{\lastname}{#1}}
           and ( test {\ifdefstring{\firstname}{#3}}
                 or test {\ifdefstring{\firstinit}{#4}} ) }
{\addtocategory{byname}{\thefield{entrykey}}}
{}}
\AtDataInput{%
   \indexnames[byname]{author}}
...
\printbibliography[category=byname]

然而,我遇到了此解决方案的一个问题,即作者“多”的作品。出于某种原因,如果将上述解决方案应用于作者多于变量的参考文献,则类别过滤器不再起作用最大名称如果名称过滤器不是第一作者,则成立。

以下最小示例说明了这个问题:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[american]{babel}
\usepackage{csquotes}
\usepackage[style=alphabetic,maxbibnames=99]{biblatex}
\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
    @book{aaronson1,
            author = {A. Aaronson and B. Beronson},
            title = {Random Title},
            publisher = {Random Publisher},
                year = 2000
        }
        @book{aaronson2,
                author = {A. Aaronson and B. Beronson and C. Cerenson and D. Derenson and E. Erenson and F. Ferenson},
                title = {Book with many others},
                publisher = {Random Publisher},
                year = 2003
        }
\end{filecontents}


\bibliography{\jobname.bib}

% Variants of each could be added
\newcommand{\firstinit}{B.}
\newcommand{\firstname}{Berni}
\newcommand{\lastname}{Beronson}

\DeclareBibliographyCategory{byname}

\DeclareIndexNameFormat{byname}{% Test could be refined
  \ifboolexpr{ test {\ifdefstring{\lastname}{#1}}
               and ( test {\ifdefstring{\firstname}{#3}}
                     or test {\ifdefstring{\firstinit}{#4}} ) }
    {\addtocategory{byname}{\thefield{entrykey}}}
    {}}

\AtDataInput{%
  \indexnames[byname]{author}}

\begin{document}
\section{Beronson's books}
\nocite{*}
\printbibliography[category=byname,heading=none]
\section{Not Beronson's books}
\nocite{*}
\printbibliography[notcategory=byname,heading=none]
\end{document}

在我看来,好像过滤器的应用时间不对——在作者列表被截断为第一作者之后。

是否需要修改此代码以允许多个作者?或者我必须使用 biber 和源地图功能(如建议的那样这里)如果我不想添加关键字或多个。围兜文件?

答案1

代替

\AtDataInput{\indexnames[byname]{author}}

使用

\AtDataInput{\indexnames[byname][1-99]{author}}

表单的第二个可选参数指定<start>-<stop>应执行索引指令的名称列表中的项目。默认情况下<start>为 1。该<stop>值是列表中的名称总数,除非超过maxnames。在这种情况下<stop>默认为minnames

相关内容