Chemin principal : Accueil > LaTeX > BibLaTeX > Entrées @inbook, crossref et formes abrégées

Autre chemin : (Aller directement au contenu de l'article)

Entrées @inbook, crossref et formes abrégées

jeudi 8 mai 2014, par Maïeul
Suivre la vie du site RSS 2.0 Forum

Loïs a posé une question relative à l’usage des formes abrégées avec les entrées de type @inbook. Il s’agissait, lorsqu’on l’on cite une sous-entrée @inbook d’une entrée @book déjà citée, d’afficher la forme latine abrégée de l’entrée @book.

Le problème se résout accès rapidement, une fois que l’on sait où chercher. Je vous propose donc ici la solution.

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 :

\DeclareBibliographyDriver{inbook}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/translator+others}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{title
}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \usebibmacro{in:}%
  \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}%
  \newunit\newblock
  \usebibmacro{chapter+pages}%
  \newunit\newblock
  \iftoggle{bbx:isbn}
    {\printfield{isbn}}
    {
}%
  \newunit\newblock
  \usebibmacro{doi+eprint+url}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref
}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init
}%
     \usebibmacro{related}}
    {
}%
  \usebibmacro{finentry}}

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 :

\DeclareBibliographyDriver{inbook}{%
  \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{inbookwithoutcrossref}}{\usebibmacro{inbookwithcrossref}}%
  \newunit\newblock
  \usebibmacro{chapter+pages}%
  \newunit\newblock
  \iftoggle{bbx:isbn}
    {\printfield{isbn}}
    {
}%
  \newunit\newblock
  \usebibmacro{doi+eprint+url}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref
}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init
}%
     \usebibmacro{related}}
    {
}%
  \usebibmacro{finentry}}

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..

Notes

[1Sauf cas d’alias entre types d’entrée.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici
  • Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

À propos

Titulaire d’un doctorat en théologie et d’un doctorat en histoire, sous la direction conjointe de Frédéric Amsler et d’Élisabeth_Malamut, je commence à partir du 1er août 2017 un travail d’édition critique des Actes de Barnabé.

Dans le cadre de la rédaction de mon mémoire de master puis de ma thèse de doctorat, j’ai été emmené à utiliser LaTeX, et j’ai donc décider de partager mes techniques. En effet, au cours de mes premiers apprentissages, j’ai découvert que les ressources indiquant les outils pour l’utilisation de LaTeX en sciences humaines étaient rares. Ceci m’a conduit à maintenir ou créer plusieurs packages LaTeX et à donner plusieurs formations.

Par ailleurs, je suis membre actif de la communauté SPIP, au sein de laquelle j’administre le site Spip-Contrib. Je propose sur ce site quelques notes sur SPIP, en général à destination de webmestre.

Il m’arrive également de faire un petit peu de Python, de temps en temps.

Enfin, je tiens un blog de réflexions politiques et religieuses.

Maïeul