7

this is follow-up to a recent question: On my system with TexLive 2012 (biblatex 1.7-1), I am trying to separate the publications of a specific author from all other references (e.g. in case you want to have your own publications separated from others works). For this, I used this solution, which seems to be exactly what I was looking for:

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

However, I encountered a problem of this solution with works that have "many" authors. For some reason, the category filter does not work anymore if the above solution is applied to references with more authors than the variable maxnames holds, if the name-filter is not the first author.

The following minimal example demonstrates the issue:

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

This seems to me, like the filter is applied at the wrong time - after the list of authors has been cut off to the first author.

Is there any modification to this code to allow multiple authors? Or do I have to go for biber and the source map feature (as suggested here) if I do not want to add keywords or multiple .bib files?

8

Instead of

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

use

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

The second optional argument of the form <start>-<stop> specifies the items in the name list over which the indexing directive should be executed. By default <start> is 1. The <stop> value is the total number of names in the list, unless this exceeds maxnames. In this case <stop> defaults to minnames.

  • That's it! Thanks for your incredibly quick answer. – televator Apr 17 '13 at 15:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.