[Tex/LaTex] For child entries with crossrefs, how can I instruct biblatex to output only a reference to the parent entry in the bibliography

biblatexcross-referencing

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.

\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}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \usebibmacro{in:}%
  \iffieldundef{crossref}
    {\usebibmacro{crossref:full}}
    {\usebibmacro{crossref:label}}
  \newunit\newblock
  \usebibmacro{chapter+pages}%
  \iffieldundef{crossref}
    {\usebibmacro{crossref:extrainfo}}
    {}
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \usebibmacro{finentry}}

\newbibmacro{crossref:full}{%
    \usebibmacro{maintitle+booktitle}%
  \newunit\newblock
  \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
  \printfield{note}%
  \newunit\newblock
  \printlist{organization}%
  \newunit
  \usebibmacro{publisher+location+date}}

\newbibmacro{crossref:label}{%
  \entrydata{\strfield{crossref}}
     {\printtext{\mkbibbrackets
        {\printfield{labelalpha}\printfield{extraalpha}}}}}

\newbibmacro{crossref:extrainfo}{%
  \newunit\newblock
  \iftoggle{bbx:isbn}
    {\printfield{isbn}}
    {}%
  \newunit\newblock
  \usebibmacro{doi+eprint+url}%
  \newunit\newblock
  \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.)

Related Question