Le problème
Soit les entrées suivantes :
@book{Genette1992,
Editor = {Gérard Genette},
Location = {Paris},
Pagetotal = {245},
Publisher = {Seuil},
Title = {Esthétique et poétique},
Year = {1992}}
@inbook{Dickie1992,
Author = {George Dickie},
Crossref = {Genette1992},
Pages = {9-32},
Title = {Définir l'art},
Titleaddon = {1973}}
On suppose que la gestion des crossref se fait avec Biber.
Soit, en utilisant le style de citation verbose-trad2
, les appels suivants :
\cite{Genette1992}
\cite[24]{Dickie1992}
Avec les styles par défauts on obtient le résultat suivant :
Gérard Genette, ed. Esthétique et poétique. Paris : Seuil, 1992. 245 pp.
George Dickie. “Définir l’art”. 1973. In : Esthétique et poétique. Ed. by Gérard Genette. Paris : Seuil, 1992, pp. 9–32, p. 24
Le souhait de Loïs était d’obtenir :
Gérard Genette, ed. Esthétique et poétique. Paris : Seuil, 1992. 245 pp.
George Dickie. “Définir l’art”. 1973. In : ibid p. 24
Un problème d’analyse
Il faut bien comprendre que lorsque le champ crossref
est utilisé, cela ne veut pas dire, par défaut, que lors de l’affichage d’une entrée-fille on renvoie vers l’entrée mère, mais bien que les champs de l’entrée-mère sont recopiés dans l’entrée-fille. C’est ce qui permet notamment de faire passer, avec biber et non pas avec BibTeX, le champ title
de l’entrée-mère vers booktitle
de l’entrée-fille.
Ce phénomène de transfert peut être visualisé ou bien constaté en ouvrant le fichier .bbl
produit par biber. Dans notre cas, on y voit la description de l’entrée Dickie1992
:
\entry{Dickie1992}{inbook}{}
\name{labelname}{1}{}{%
{{hash=fef82f30fe2bfa35216fc92c560ae872}{Dickie}{D\bibinitperiod}{George}{G\bibinitperiod}{}{}{}{}}%
}
\name{author}{1}{}{%
{{hash=fef82f30fe2bfa35216fc92c560ae872}{Dickie}{D\bibinitperiod}{George}{G\bibinitperiod}{}{}{}{}}%
}
\name{editor}{1}{}{%
{{hash=a7761d3fd65ea36d5c84d114d588896b}{Genette}{G\bibinitperiod}{Gérard}{G\bibinitperiod}{}{}{}{}}%
}
\list{location}{1}{%
{Paris}%
}
\list{publisher}{1}{%
{Seuil}%
}
\strng{namehash}{fef82f30fe2bfa35216fc92c560ae872}
\strng{fullhash}{fef82f30fe2bfa35216fc92c560ae872}
\field{sortinit}{D}
\field{labeltitle}{Définir l'art}
\field{booktitle}{Esthétique et poétique}
\strng{crossref}{Genette1992}
\field{pagetotal}{245}
\field{title}{Définir l'art}
\field{titleaddon}{1973}
\field{year}{1992}
\field{pages}{9\bibrangedash 32}
\endentry
Le comportement par défaut ne pouvait donc pas être celui souhaité par Loïs, puisque ce serait aller à l’encontre la logique « de base » des crossref
. Cependant on peut ruser.
La solution
Le style par défaut
J’explique dans mon livre que l’affichage final des entrées se fait à l’aide de « drivers » bibliographique, par type d’entrée [1].
On trouve assez facilement le fichier les contenant, en suivant les renvois entre fichiers (voir mon intervention dans les grottes). Dans le cas des styles de la famille verbose
, les drivers sont présents dans le fichier standard.bbx
. Voici celui pour les entrées de type @inbook
:
Sa redéfinition
C’est ce driver que nous allons redéfinir, dans notre préambule.
Dans notre affichage final, la partie que nous souhaitons modifier est comprise entre le « in » (exclu) et le numéro de page (exclu). Cela correspond, dans le driver à la partie compris entre le \usebibmacro{in:}
(l. 12) et le \usebibmacro{chapter+pages}
(l. 34).
Par ailleurs, il est possible d’avoir des entrées @inbook
sans utilisation du crossref (même si c’est à déconseiller). C’est pourquoi nous allons conserver ce code dans une macro adhoc, que l’on appellera inbookwithoutcrossref
:
\newbibmacro{inbookwithoutcrossref}{%
\usebibmacro{bybookauthor}%
\newunit\newblock
\usebibmacro{maintitle+booktitle}%
\newunit\newblock
\usebibmacro{byeditor+others}%
\newunit\newblock
\printfield{edition}%
\newunit
\iffieldundef{maintitle}
{\printfield{volume}%
\printfield{part}}
{}%
\newunit
\printfield{volumes}%
\newunit\newblock
\usebibmacro{series+number}%
\newunit\newblock
\printfield{note}%
\newunit\newblock
\usebibmacro{publisher+location+date}%
}
Pour afficher l’entrée mère sous une forme abrégée, nous utilisons tout simplement une commande \cite
, que nous encapsulons dans une macro inbookwithcrossref
. Nous passons comme argument à la commande la valeur du champ crossref
de l’entrée-fille, qui correspond à la clef bibliographique de l’entrée-mère. Cette valeur est récupérée via \thefield{crossref}
.
Cela donne donc :
\newbibmacro{inbookwithcrossref}{%
\cite{\thefield{crossref}}%
}
Il ne nous reste plus qu’à supprimer les lignes 13 à 33 de notre driver, en appelant à la place la macro inbookwithcrossref
ou inbookwithoutcrossref
, selon que le champ crossref
est défini ou non, le test se faisant avec la commande \iffieldundef
. Ce qui donne la définition suivante de notre driver :
Vous constatez la ligne modifiée : l. 13.
Le résultat à l’affichage est le suivant :
Gérard Genette, ed. Esthétique et poétique. Paris : Seuil, 1992. 245 pp.
George Dickie. “Définir l’art”. 1973. In : ibid., p. 24, pp. 9–32, p. 24
Affinage
La solution est presque parfaite, mais vous pouvez vous rendre compte que le numéro de page est affichée deux fois. La raison est assez subtile : lors de l’utilisation de la commande \cite
dans le driver bibliographique, pour appeler l’entrée-mère, le champ postnote
est récupéré du contexte, c’est à dire qu’il s’agit du champ postnote
de l’entrée-fille. La solution consiste à vider ce champ à l’intérieur de la macro inbookwithcrossref
, avec la commande \clearfield
. Il faut faire de même pour le champ prenote
. Ce qui donne :
\newbibmacro{inbookwithcrossref}{%
\clearfield{prenote}%
\clearfield{postnote}%
\cite{\thefield{crossref}}%
}
Notre résultat final est alors correct :
Gérard Genette, ed. Esthétique et poétique. Paris : Seuil, 1992. 245 pp.
George Dickie. “Définir l’art”. 1973. In : ibid., pp. 9–32, p. 24
Vous constaterez aisément, en faisant des tests, que ma solution fonctionne aussi avec des abréviations de type op. cit..