This solution uses cross-referencing via xref
instead of crossref
in order to work consistently with either backend. It is based on an example from section 4.11.1 of the biblatex
manual (version 1.4b).
\documentclass[a4paper]{article}
\usepackage[style=verbose-ibid,citepages=suppress,sorting=nty]{biblatex}
\usepackage{filecontents}
\newbibmacro*{cite:xref}{%
\ifciteseen
{\iffieldundef{shorthand}
{\usebibmacro{cite:short}}
{\usebibmacro{cite:shorthand}}}
{\ifentrytype{periodical}
{\usebibmacro{cite:short}\usebibmacro{shorthandintro}}
{\usebibmacro{cite:full}}}}
\DeclareCiteCommand{\xrefcite}
{}
{\usebibmacro{cite:xref}}
{}
{}
\renewbibmacro*{journal}{%
\iffieldundef{xref}
{\iffieldundef{journaltitle}
{}
{\printtext[journaltitle]{%
\printfield[titlecase]{journaltitle}%
\setunit{\subtitlepunct}%
\printfield[titlecase]{journalsubtitle}}}}
{\entrydata{\thefield{xref}}{%
\ifboolexpr{
test {\iffieldundef{title}}
and
test {\iffieldundef{subtitle}}
}
{}
{\printtext[title]{\printfield[titlecase]{title}%
\setunit{\subtitlepunct}%
\printfield[titlecase]{subtitle}}}}}}
\DeclareBibliographyDriver{article}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{author/translator+others}%
\setunit{\labelnamepunct}\newblock
\usebibmacro{title}%
\newunit
\printlist{language}%
\newunit\newblock
\usebibmacro{byauthor}%
\newunit\newblock
\usebibmacro{bytranslator+others}%
\newunit\newblock
\printfield{version}%
\newunit\newblock
\usebibmacro{in:}%
\ifthenelse{\ifbibliography\OR\iffieldundef{xref}}
{\usebibmacro{journal+issuetitle}%
\newunit
\usebibmacro{byeditor+others}%
\newunit
\usebibmacro{note+pages}%
\newunit\newblock
\iftoggle{bbx:isbn}{\printfield{issn}}{}%
\newunit\newblock
\usebibmacro{doi+eprint+url}%
\newunit\newblock
\usebibmacro{addendum+pubstate}%
\newunit\newblock
\setunit{\bibpagerefpunct}\newblock
\usebibmacro{pageref}%
\usebibmacro{finentry}}%
{\xrefcite{\thefield{xref}}%
\ifciteseen{}{%
\setunit{\addspace}%
\usebibmacro{volume+number+eid}%
\setunit{\addspace}%
\usebibmacro{issue+date}}}}
\newbibmacro*{in:collection}{%
\usebibmacro{byeditor+others}%
\newunit\newblock
\printfield{edition}%
\newunit
\iffieldundef{maintitle}{\printfield{volume}\printfield{part}}{}%
\newunit
\printfield{volumes}%
\newunit\newblock
\usebibmacro{series+number}%
\newunit\newblock
\usebibmacro{publisher+location+date}%
\newunit\newblock
\iftoggle{bbx:isbn}{\printfield{isbn}}{}}
\DeclareBibliographyDriver{incollection}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{author/translator+others}%
\setunit{\labelnamepunct}\newblock
\usebibmacro{title}%
\newunit
\printlist{language}%
\newunit\newblock
\usebibmacro{byauthor}%
\newunit\newblock
\usebibmacro{in:}%
\iffieldundef{xref}
{\usebibmacro{maintitle+booktitle}%
\newunit\newblock
\usebibmacro{in:collection}}%
{\ifcitation
{\xrefcite{\thefield{xref}}}
{\entrydata{\thefield{xref}}{%
\usebibmacro{title}%
\newunit\newblock
\usebibmacro{in:collection}}}}%
\newunit\newblock
\usebibmacro{chapter+pages}%
\newunit\newblock
\printfield{note}%
\newunit\newblock
\usebibmacro{doi+eprint+url}%
\newunit\newblock
\usebibmacro{addendum+pubstate}%
\setunit{\bibpagerefpunct}\newblock
\usebibmacro{pageref}%
\usebibmacro{finentry}}
\newbibmacro*{in:proceedings}{%
\usebibmacro{event+venue+date}%
\newunit\newblock
\usebibmacro{byeditor+others}%
\newunit\newblock
\iffieldundef{maintitle}{\printfield{volume}\printfield{part}}{}%
\newunit
\printfield{volumes}%
\newunit\newblock
\usebibmacro{series+number}%
\newunit\newblock
\printlist{organization}%
\newunit
\usebibmacro{publisher+location+date}%
\newunit\newblock
\iftoggle{bbx:isbn}{\printfield{isbn}}{}}
\DeclareBibliographyDriver{inproceedings}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{author/translator+others}%
\setunit{\labelnamepunct}\newblock
\usebibmacro{title}%
\newunit
\printlist{language}%
\newunit\newblock
\usebibmacro{byauthor}%
\newunit\newblock
\usebibmacro{in:}%
\iffieldundef{xref}
{\usebibmacro{maintitle+booktitle}%
\newunit\newblock
\usebibmacro{in:proceedings}}%
{\ifcitation
{\xrefcite{\thefield{xref}}}
{\entrydata{\thefield{xref}}{%
\usebibmacro{title}%
\newunit\newblock
\usebibmacro{in:proceedings}}}}%
\newunit\newblock
\usebibmacro{chapter+pages}%
\newunit\newblock
\printfield{note}%
\newunit\newblock
\usebibmacro{doi+eprint+url}%
\newunit\newblock
\usebibmacro{addendum+pubstate}%
\setunit{\bibpagerefpunct}\newblock
\usebibmacro{pageref}
\usebibmacro{finentry}}
\begin{filecontents}{\jobname.bib}
@Inproceedings{Science:Environment2000,
title = {Environmental Science and Management in Developing versus Developed Countries: education and research perspectives},
xref = {Environment2000},
author = {John Doe},
pages = {23--45}}
@Inproceedings{health:Environment2000,
title = {Public health: implications from a compromised environment},
xref = {Environment2000},
author = {Ho Chi Minh},
pages = {330--335}}
@Proceedings{Environment2000,
title = {International Conference on Environmental Pollution, Restoration, and Management},
shorthand = {ICEP},
date = {2000}}
@InCollection{westfahl:space,
xref = {westfahl:frontier},
author = {Westfahl, Gary},
title = {The True Frontier},
subtitle = {Confronting and Avoiding the Realities of Space in American Science Fiction Films},
pages = {55--65}}
@Collection{westfahl:frontier,
editor = {Westfahl, Gary},
shorthand = {FTSF},
title = {Space and Beyond},
subtitle = {The Frontier Theme in Science Fiction},
publisher = {Greenwood},
location = {Westport, Conn. and London},
date = {2000}}
@Article{Episkepsis1970:1,
title = {Decide ne plus refuser},
xref = {Episkepsis},
date = {1970},
number = {1},
pages = {6--7}}
@Article{Episkepsis1972:62,
title = {La jeunesse et la preparation},
xref = {Episkepsis},
date = {1972},
number = {62},
pages = {5--7}}
@Article{Episkepsis2009:701,
title = {Reunion a Chambesy de la IV\textsuperscript{e} Conference},
xref = {Episkepsis},
date = {2009},
number = {701},
pages = {8--21}}
@periodical{Episkepsis,
options = {skipbib=true},
title = {Episkepsis},
shorthand = {EP},
date = {1970/},
publisher = {Ceneter OPO},
address = {Chambesy--Geneve},
keywords = {primary}}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\footcite[cf.][332]{health:Environment2000}
\footcite{Science:Environment2000}
\footcite[331]{health:Environment2000}
\footcite{westfahl:space}
\footcite{westfahl:frontier}
\footcite[cf.][6]{Episkepsis1972:62}
\footcite{Episkepsis2009:701}
\footcite[7]{Episkepsis1972:62}
\printbibliography
\end{document}
Some notes:
A cross-reference here actually invokes an explicit citation of the parent entry. This is done intentionally to ensure "availability" of the parent entry for child citations. [To see what I mean, try making \xrefcite
an (implicit) internal command (by renaming it to, say, bbx@xref
) and add the biblatex
package option mincrossrefs=99
. Also see the xref
entry description in the manual.]
A consequence of the above item that every parent will appear in the bibliography, unless you add options = {skipbib=true}
to its entry. (See the @periodical entry above for an example.)
In this setup @article
inherits only journaltitle
and journalsubtitle
from @periodical
. The child entry types @inproceedings
and @incollection
inherit many more fields from @proceedings
and @collection
- pretty much everything I deemed specific to the parent. Any of this could be changed by editing the above bibliography drivers and macros.
A drawback to using xref
for cross-referencing is that there is no inheritance already defined for you. But crossref
behaviour depends on the backend. It also appears to give some unanticipated* results. For example with biber
, a child @article
gets the same date format as its parent @periodical
. With bibtex
, any child gets cited with its parent's shorthand.
*Possibly due to some misuse of the biblatex
interface on my part...