Chemin principal : Accueil > LaTeX > BibLaTeX > Gestion des sources anonymes avec BibLaTeX : méthodes plus simples

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

  • Accueil > LaTeX > Package > Gestion des sources anonymes avec BibLaTeX : méthodes plus simples

Gestion des sources anonymes avec BibLaTeX : méthodes plus simples

samedi 15 mars 2014, mise à jour lundi 27 octobre 2014, par Maïeul
Suivre la vie du site RSS 2.0 Forum

Cet article est obsolète. Soit qu’il existe une manière plus « moderne » de procéder, soit que j’ai trouvé une autre méthode plus appropriée.
Voyez plutôt la nouvelle version : Gestions des œuvres anonymes : méthode encore plus simple.

Il y a près de trois ans maintenant, j’avais publié un long article sur la gestion des sources anonymes avec BibLaTeX. Depuis de l’eau a coulé sous les ponts, ma connaissance de BibLaTeX s’est approfondie, et surtout des nouveaux outils sont sorties, ce qui implique de mettre à jour totalement cet article.

Limite de l’ancienne méthode

La principale limite de l’ancienne méthode est qu’elle reposait sur l’utilisation d’un champ usera, qui permettait d’identifier sources primaires et sources secondaires. Comme cependant je n’utilisais pas ce champs pour l’organisation finale de ma bibliographie, j’oubiais régulièrement de le remplir. Ce champ permettait de distinguer deux usages sémantiques différents du champ editor. Il peut en effet soit s’agir d’un directeur d’une publication, soit s’agir de l’éditeur scientifique d’une œuvre ancienne, et dans ce dernier cas je mettais le champ usera sur 1.

Mais en réalité cette distinction n’a pas lieu d’être par un champ spécial, car elle se fait au niveau du type d’entrée. Si s’agit d’un œuvre ancienne avec un éditeur, nous avons affaire à une entrée de type @book, @bookinbook, @inbook, @mvbook ou @bookinarticle. S’il s’agit d’un directeur de publication, nous avons affaire à une entrée de type @proceeding, @inproceeding, @collection, @incollection, @reference ou @inreference.

En outre, un package xpatch est sorti, qui éviter de surcharger une macro bibliographique entière, ou bien un driver bibliographique entier. Cela permet donc de faire ses propres modifications tout en en gardant la possibilité de profiter des futurs ajouts de biblatex.

Exemple

Je reprend le même exemple que dans l’article initial, en omettant cependant le champ usera, désormais inutile :

@book{MartyHier,
        Address = {Bruxelles},
        Editor = {Duchesne, Louis and Jean-Baptiste de Rossi},
        Entrysubtype = {calendrier},
        Number = {Nov. II, 2},
        Publisher = {Société des Bollandistes},
        Read = {1},
        Series = {Acta Sanctorum},
        Title = {Martyrologe Hiéronymien},
        Year = {1894}
}

À la première citation, j’obtiens :

Louis Duchesne et Jean-Baptiste de Rossi, éds., Martyrologe Hiéronymien, Acta Sanctorum Nov. II, 2, Bruxelles : Société des Bollandistes, 1894

Ce qui n’est pas très satisfaisant : il faudrait en effet que les éditeurs apparaissent après le titre, pour bien marquer qu’il s’agit d’une œuvre anonyme.

En fouillant le fichier standard.bbx, je tombe sur le driver qui définit les entrées de type @book.

\DeclareBibliographyDriver{book}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/editor+others/translator+others}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{maintitle+title
}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \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
  \printfield{pagetotal}%
  \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}}

On voit que l’appel à l’auteur, ou à l’éditeur sinon, se fait à la ligne 4, via \usebibmacro{author/editor+others/translator+others}.

Comme nous sommes dans le cadre d’une entrée de type @book, je considère qu’on affiche uniquement l’auteur avant le titre. Je pourrais bien sûr surcharger le driver, en faisant un copier-coller et en modifiant juste la ligne qui m’intéresse. Toutefois, il est mieux d’utiliser la commande \xpatchbibdriver du package \xpatch.

Cette commande permet de changer un bout de code d’un driver par un autre bout. C’est donc ce que je fais :

\xpatchbibdriver{book}%
  {\usebibmacro{author/editor+others/translator+others}}%
  {\usebibmacro{author}}%
  {}%
  {}%

Commentaire :

  • l. 1 : on modifie le driver pour les entrées de type @book.
  • l. 2 : on remplace \usebibmacro{author/editor+others/translator+others} par :
  • l. 3 : \usebibmacro{author}
  • l. 4 : si la correction réussit, on ne fait rien. On pourrais éventuellement mettre un message dans les logs.
  • l. 5 : on ne fait rien non plus si la correction échoue.

Après application de ce patch, on obtient comme affichage :

Martyrologe Hiéronymien, sous la dir. de Louis Duchesne et Jean-Baptiste de Rossi, Acta Sanctorum Nov. II, 2, Bruxelles : Société des Bollandistes, 1894

Éditeurs, pas directeurs

Tous ça est intéressant, mais Louis Duschene et Jean-Baptiste de Rossi ne sont pas directeurs. En fouillant les fichiers de chaîne de langue, je vois qu’il faut surcharger la chaîne de langue byeditor. Lors de cette surcharge j’insère un test, qui vérifier le type d’entrée. Si c’est code @book, @inbook, @bookinbook, @mvbook ou @bookinarticle :

        byeditor                = \ifboolexpr{(%
                                        test {\iffieldequalstr{entrytype}{bookinbook}}%
                                        or test {\iffieldequalstr{entrytype}{inbook}}%
                                        or test {\iffieldequalstr{entrytype}{book}}%
                                        or test {\iffieldequalstr{entrytype}{mvbook}}%
                                        or test {\iffieldequalstr{entrytype}{bookinarticle}}%
                        )%
                        }%
                {{éd\adddot}}{{dir\adddotspace}},

On utilise ici \ifboolexpr qui permet de combiner plusieurs tests entre eux, avec des opérateurs booléeens.

Ceci permet d’obtenir :

Martyrologe Hiéronymien, éd. Louis Duchesne et Jean-Baptiste de Rossi, Acta Sanctorum Nov. II, 2, Bruxelles : Société des Bollandistes, 1894

Les op. cit.

Il y a cependant un problème, si je cite une deuxième fois mon ouvrage, j’obtiens :

Duchesne et de Rossi, Martyrologe Hiéronymien, op. cit.

Ce qui laisse penser que Duschene et de Rossi sont les auteurs, ce qui n’est pas le cas. En fait, lorsque biblatex affiche un op. cit., le nom qu’il met devant le titre correspond à un champ particulier, labelname, qui est calculée à partir du type de l’entrée et des autres champs.

On peut préciser que les entrées de type @book, @bookinbook, @bookinarticle, @mvbook, et @inbook ne prendront que le champ author pour définir le champ labelname :

\DeclareLabelname[book, bookinbook, bookinarticle,mvbook,inbook]{\field{author}}

Après une nouvelle passe (Xe)LaTeX / Biber / (Xe)LaTeX, on obtient un résultat correct :

Martyrologe Hiéronymien, op. cit.

Mais les vrais op. cit.

Un problème se pose cependant : j’ai activé la possibilité d’avoir des vrais op. cit.. Ce qui a pour conséquence que j’obtiens dans ce cas, lorsque je cite une œuvre anonyme pour la seconde fois :

op. cit.

Ce qui n’est pas des plus pratiques. C’est pourquoi il faut modifier la gestion des véritables {op. cit.}, en conditionnant le nom affichage du titre aussi à la présence du champ labelname.

Plutôt que de surcharger, comme je l’avais proposé, la macro cite:title, on va simplement la corriger via la commande \xpatchbibmacro du package \xpatch :

\xpatchbibmacro%
        {cite:title}%
        {\printfield[citetitle]{labeltitle}}%
        {\ifboolexpr{test{\ifsingletitle} and not test {\ifnameundef{labelname}}}{}{\printfield[citetitle]{labeltitle}}}%
        {}%
        {}%

Commentaire :

  • l. 2 : on corrige la macro bibliographique cite:title
  • l. 3 : on remplace le code \printfield[citetitle]{labeltitle} par :
  • l. 4 : \ifboolexpr{test{\ifsingletitle} and not test {\ifnameundef{author}}}{}{\printfield[citetitle]{labeltitle}} c’est à dire qu’on effectue un test :
    • qui vérifie que l’option singletitle a bien été passé au chargement de biblatex.
    • et qui vérifie qu’il n’y ait pas de champ labelname défini [1].
    • si les deux condition sont remplis, on n’affiche rien
    • sinon, on affiche le champ labeltitle, qui peut correspondre à shorttitle ou bien à shorthand.
  • Si la correction a réussi, on ne fait rien.
  • Si la correction n’a pas réussi, on ne fait rien non plus.

Et on obtient correctement :

Martyrologe Hiéronymien, op. cit.

P.-S.

Pour la question du tri dans la bibliographie finale, on consultera « Tri des œuvres anonymes ».

Notes

[1On utilise \ifnameundef plutôt que >\iffieldundef car il s’agit d’un champ de type nom, voir les diapositives de la présentation « Personnalisation des styles BibLaTeX » dans « Présentations aux rencontres LaTeX et SHS 2013 ».

Vos commentaires

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