12

I need to use the features of biblatex's verbose citestyle but I don't want it to repeat the author's name in multiple citations by the same author (like the authortitle-comp option).

Currently, using the citestyle=verbose option, if I cite three works by "An Author" as:

\autocites{ANAuthor:1}{ANAuthor:2}{ANAuthor:3} 

the output is: "A. N. Author. 'First work' etc [full entry]; A. N. Author. 'Second work' etc [full entry]; A. N. Author. 'Third work' etc [full entry]."

But I need to have the output: "A. N. Author. 'First work' etc [full entry]; 'Second work' etc [full entry]; 'Third work' etc [full entry]."

Is there any way to do this in the verbose style? That is, suppress the author field in multiple citations for subsequent works by the same author?

Grateful for any assistance!


Update clarification

The only way to achieve this, I think, is to make a custom biblatex citestyle. Looking at the verbose.cbx the relevant command is the the printing of the bibhypertarget, as in the commands for full and short citations:

   \newbibmacro*{cite:full}{%  
        printtext[bibhypertarget]{%  
        \usedriver  
          {\DeclareNameAlias{sortname}{default}}  
          {\thefield{entrytype}}}%  
      \usebibmacro{shorthandintro}}

   \newbibmacro*{cite:short}{%  
      \printnames{labelname}%  
      \setunit*{\addcomma\space}%  
      \printtext[bibhyperlink]{%  
        \printfield[citetitle]{labeltitle}}}  

Does anyone know how to modify that to print the author field as blank when the same author appears previously in the same multicites command?

4
  • I guess this is not exactly what you want but I ask to make sure. Have you tried the style verbose-note? Also, welcome to tex.sx!
    – N.N.
    Commented Jun 13, 2011 at 11:32
  • Hi, thanks, and thanks for the welcome! :-) Alas, verbose-note is not what I want. It doesn't solve the problem of multiple citations... I might consider implementing what it does do (ie refer back) but, that's another issue, I think...
    – MCS
    Commented Jun 13, 2011 at 13:07
  • 1
    I think it needs a combination of authortitle-comp feature with verbose style...
    – henrique
    Commented Jun 18, 2011 at 2:55
  • Comment on the edit: I tried to tweak things around, and came almost to the same conclusion. In fact, I think it would be better to create a new \usedriver macro, which would not print everything but will remove the author. Alas, It is well beyond my competencies.
    – Martigan
    Commented Jun 18, 2011 at 13:50

2 Answers 2

7
+50

As @henrique said (in the comments), a combination of authortitle-comp and verbose should work:

\documentclass[english]{scrartcl}
\listfiles
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{article,
  author = {Arnold Author},
  title = {A journal article},
  journaltitle = {Some Journal},
  date = {2006},
  volume = {6},
  pages = {19-75}
}
@book{book,
  author = {Arnold Author},
  title = {Some Book},
  editor = {Edmund Editor},
  location = {London},
  date = {2000},
  options = {useeditor=false}
}
@collection{coll,
  editor = {Arnold Author},
  title = {An edited volume},
  location = {London},
  date = {2002}
}
\end{filecontents}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{babel,csquotes}

\usepackage[
  style=verbose,
]{biblatex}
\addbibresource{\jobname.bib}

\makeatletter
\newbibmacro*{cite:init}{%
  \ifnumless{\value{multicitecount}}{2}
    {\global\undef\cbx@lasthash}
    {\iffieldundef{prenote}
       {}
       {\global\undef\cbx@lasthash}}}

\newbibmacro*{cite:reinit}{%
  \global\undef\cbx@lasthash}

\renewbibmacro*{cite}{%
  \usebibmacro{cite:init}%
  \usebibmacro{cite:citepages}%
  \ifciteseen
    {\iffieldundef{shorthand}
       {\usebibmacro{cite:short}}
       {\usebibmacro{cite:shorthand}%
        \usebibmacro{cite:reinit}}}
    {\usebibmacro{cite:full}}}

\renewbibmacro*{cite:full}{%
  \usebibmacro{cite:full:citepages}%
  \printtext[bibhypertarget]{%
    \usedriver
      {\iffieldequals{namehash}{\cbx@lasthash}
         {\ifboolexpr{
           test {\ifuseauthor}
           and not
           test {\ifnameundef{author}}}
          {\clearname{author}}
          {\ifboolexpr{
             test {\ifuseeditor}
             and not
             test {\ifnameundef{editor}}}
            {\clearname{editor}}
            {\ifboolexpr{
               test {\ifusetranslator}
               and not
               test {\ifnameundef{translator}}}
              {\clearname{translator}}
              {}}}}
         {}%
       \DeclareNameAlias{sortname}{default}}
      {\thefield{entrytype}}}%
  \usebibmacro{shorthandintro}%
  \savefield{namehash}{\cbx@lasthash}}

\renewbibmacro*{cite:short}{%
  \iffieldequals{namehash}{\cbx@lasthash}
     {}
     {\ifnameundef{labelname}
        {}
        {\printnames{labelname}%
         \setunit{\addcomma\space}}%
      \savefield{namehash}{\cbx@lasthash}}%
  \printtext[bibhyperlink]{%
    \printfield[citetitle]{labeltitle}}}
\makeatother

\begin{document}
\autocites{article}{book}{coll}
\autocites{article}{book}{coll}

\printbibliography
\end{document}

Note that there might be problems when author and editor occur in one work (the editor will be printed before the title), but you can circuit this by adding options = {useeditor=false} to the respective entry.

6
  • 2
    @domwass, the first citation still prints the author's name in both references...
    – henrique
    Commented Jun 22, 2011 at 1:51
  • @henrique, you are right, I now edited my answer accordingly. The code for the full citations is a bit more complicated, since \clearname{labelname} is not possible, as far as I know, so that it is necessary to check if author, editor, or translator are used.
    – domwass
    Commented Jun 22, 2011 at 8:02
  • @domwass, thanks indeed for this. Unfortunately, when I run your example I get the following error ! Package biblatex Error: Bibliography macro 'cite:full:citepages' undefined. And the output footcite in the pdf is not right either: Arnold Author. “A and not test test and not test test and not test Arnold Author. and not test test and not test test and not test Arnold Author, 2 journal article”. In: Some Journal 6 (2006), pp. 19–75; test Some Book. Ed. by Edmund Editor. London, 2000; test ed. An edited volume. London, 2002. Is this error because I'm running biblatex 0.9a, do you think?
    – MCS
    Commented Jun 22, 2011 at 21:34
  • @MCS: Yes, the citepages option was introduced in biblatex 0.9b. (The same might be true for the \ifboolexpr syntax, though this is from the etoolbox package.) Is there any reason you are using such an old version? There have been many improvements and bugfixes since then. In the above example, you could delete the two lines which contain citepages. It should still work.
    – domwass
    Commented Jun 23, 2011 at 9:54
  • @domwass, thanks again for your expertise with this! I'm running the Debian Stable distribution of Linux, which is pretty behind. Installing the latest version of biblatex and its dependencies makes your example work perfectly -- thank you! Unfortunately, when I try to compile my Thesis, however, I run into problems (I think the utf8x option causes the following error: ! Package biblatex Error: Incompatible package 'ucs'.) So I can either try to find a workaround (different fontenc option, XeTex etc) or just give up and hope the thesis examiners don't notice!
    – MCS
    Commented Jun 23, 2011 at 16:07
-1

I'm not sure whether such an approach meets your requirements, but the siam.bst file uses a last.authors string to print a line instead of authors' names if they appear consecutively (see e.g. this example). I assume changing your bst file according to what is done in siam.bst (namely, the FUNCTION {format.authors} part), notwithstanding the additions you want to make, should solve your problem.

2
  • 2
    biblatex doesn't use .bst files though, so there is no .bst file to modify.
    – Alan Munn
    Commented Jun 17, 2011 at 12:12
  • Oh. My bad, didn't know that. Commented Jun 17, 2011 at 12:28

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .