TeX - LaTeX Asked by ilpssun on June 15, 2021
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}
Substantially Revised
In the light of the discussion in the comments, I've substantially revised this.
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}}
@inproceedings{inproc3,
Author = {Nother Author},
Publisher = {Nother Publisher},
Title = {In Some Other Proceedings},
Maintitle = {Main Title of Other Proceedings},
Year = {2001},
}
end{filecontents}
DeclareBibliographyDriver{inproceedings}{%
usebibmacro{bibindex}%
usebibmacro{begentry}%
usebibmacro{author/translator+others}%
setunit{labelnamepunct}newblock
usebibmacro{title}%
newunit
printlist{language}%
newunitnewblock
usebibmacro{byauthor}%
newunitnewblock
usebibmacro{in:}%
iffieldundef{crossref}
{usebibmacro{crossref:full}}
{usebibmacro{crossref:label}}
newunitnewblock
usebibmacro{chapter+pages}%
iffieldundef{crossref}
{usebibmacro{crossref:extrainfo}}
{}
setunit{bibpagerefpunct}newblock
usebibmacro{pageref}%
usebibmacro{finentry}}
newbibmacro{crossref:full}{%
usebibmacro{maintitle+booktitle}%
newunitnewblock
usebibmacro{event+venue+date}%
newunitnewblock
usebibmacro{byeditor+others}%
newunitnewblock
iffieldundef{maintitle}
{printfield{volume}%
printfield{part}}
{}%
newunit
printfield{volumes}%
newunitnewblock
usebibmacro{series+number}%
newunitnewblock
printfield{note}%
newunitnewblock
printlist{organization}%
newunit
usebibmacro{publisher+location+date}}
newbibmacro{crossref:label}{%
entrydata{strfield{crossref}}
{printtext{mkbibbrackets
{printfield{labelalpha}printfield{extraalpha}}}}}
newbibmacro{crossref:extrainfo}{%
newunitnewblock
iftoggle{bbx:isbn}
{printfield{isbn}}
{}%
newunitnewblock
usebibmacro{doi+eprint+url}%
newunitnewblock
usebibmacro{addendum+pubstate}}%
addbibresource{my.bib}
begin{document}
Test cite{inproc1} and cite{inproc2} and cite{inproc3}
printbibliography
end{document}
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 the inproceedings
entry is self-contained) it prints full information.
I've only done this for inproceedings
: it might be necessary to use a similar redefinition for inbook
and incollection
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.)
Correct answer by Paul Stanley on June 15, 2021
The styles of my biblatex-ext
bundle have an option called citexref
to do this.
So you can just replace style=alphabetic,
with style=ext-alphabetic,
and add citexref=true,
to the biblatex
options and are good to go.
documentclass[]{article}
usepackage[backend=biber, style=ext-alphabetic, citexref=true]{biblatex}
begin{filecontents}{jobname.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},
}
@inproceedings{inproc3,
author = {Nother Author},
publisher = {Nother Publisher},
title = {In Some Other Proceedings},
maintitle = {Main Title of Other Proceedings},
year = {2001},
}
end{filecontents}
addbibresource{jobname.bib}
begin{document}
Test cite{inproc1} and cite{inproc2} and cite{inproc3}
printbibliography
end{document}
The implementation of that option is fairly similar to what Paul Stanley's wonderful answer does.
Answered by moewe on June 15, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP