When producing a bibliography using biblatex
and the alphabetic
style, I would like to produce actual cross-references between two crossref
-entries. For example, if I have several @inproceedings
entries that define crossref={proc}
and I have a matching @proceedings
entry, I would like to generate something along the lines of:
[Aut13a] Test Author. “Testing the second Title”. In: [EE13], pp. 10–20.
[Aut13b] Test Author. “Testing the Title”. In: [EE13], pp. 1–10.
[EE13] Senor Editor and Senora Editora, eds. My Proceedings. Any Publisher, 2013.
But the only result I am achieving so far is:
[Aut13a] Test Author. “Testing the second Title”. In: My Proceedings.
Ed. by Senor Editor and Senora Editora. Any Publisher, 2013,
pp. 10–20.[Aut13b] Test Author. “Testing the Title”. In: My Proceedings. Ed. by
Senor Editor and Senora Editora. Any Publisher, 2013, pp. 1–10.[EE13] Senor Editor and Senora Editora, eds. My Proceedings. Any
Publisher, 2013.
This is actually the same question as How can I print only Author-Date of the parent crossref in the bibliography entry of the child of the crossref? but the proposed answer there is just a work-around which would be very tedious for my rather large bibliography file.
The behavior described above is standard BibTeX behavior for the alpha
style, AFAIK. So I suspect this is just one of the approximately 10,000 configuration options of biblatex
and I'm simply not aware of how to do it 😉
To get you guys going, here is an MWE:
\documentclass[]{article}
\usepackage[backend=biber,style=alphabetic]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{my.bib}
@inproceedings{inproc1,
Author = {Test Author},
Crossref = {proc},
Pages = {1--10},
Title = {Testing the Title}}
@inproceedings{inproc2,
Author = {Test Author},
Crossref = {proc},
Pages = {10--20},
Title = {Testing the second Title}}
@proceedings{proc,
Editor = {Senor Editor and Senora Editora},
Publisher = {Any Publisher},
Title = {My Proceedings},
Year = {2013}}
\end{filecontents}
\addbibresource{my.bib}
\begin{document}
Test \cite{inproc1} and \cite{inproc2}
\printbibliography
\end{document}
Best Answer
Substantially Revised
In the light of the discussion in the comments, I've substantially revised this.
This redefinition of the driver for
inproceedings
checks to see if there is a cross reference field defined. If there is, then it prints the label for the cross-referenced work. If there is not (ie if theinproceedings
entry is self-contained) it prints full information.I've only done this for
inproceedings
: it might be necessary to use a similar redefinition forinbook
andincollection
if you use these in a similar way.(Note: this replaces my original answer, which involved a (bad) hackish redefinition of the
maintitle+booktitle
macro, and which would have had unfortunate effects if crossreferences were not defined. This should be safe if a crossreference is defined, so long as it is valid and refers to a work that is cited. It also carries the health warning that I haven't tested it extensively with a large number of examples, and it's always the corner cases that catch you when you try to write bibliography drivers.)