Chemin principal : Accueil > LaTeX > BibLaTeX > Collection sous forme abrégée avec shortseries

Autres chemins : (Aller directement au contenu de l'article)

Collection sous forme abrégée avec shortseries Enregistrer au format PDF

mardi 14 août 2012, par Maïeul
Suivre la vie du site RSS 2.0 Forum

BibLaTeX propose un champ shortseries servant à indiquer une version abrégée du champ series, c’est à dire de la collection. Par exemple, mettre « CCSA » pour « Corpus Christianorum Series Apocryphorum ».

Par défaut, BibLaTeX ne se sert pas de champ. Comment en tirer parti, notamment pour afficher un tableau des abréviations ?

Pourquoi utiliser ce champ

Je conseille d’utiliser shortseries en combinaison avec series, plutôt que de mettre directement la version abrégée dans series pour trois raisons :

  1. C’est un champ standard, alors autant s’en servir.
  2. Si on décide finalement afficher la forme longue de la collection, on aura simplement une ligne de code à supprimer.
  3. On peut utiliser ce champ pour construire automatiquement une liste des formes abrégées, moyennant quelques lignes de code que je vais détailler dans cet article.

Les entrées de démonstration

Pour le présent article, nous utilisons les entrées suivantes :

@book{PtJc,
        Address = {Bruxelles
},
        Title = {La forme la plus ancienne du Protévangile de Jacques},
        Year = {1961}}
@book{CCSL149,
        Number = {140
},
        Series = {Corpus Christianorum Series Latina},
        Shortseries = {CCSL},
        Title = {Concilia Africae}}
@book{CCSA9,
        Number = {9
},
        Series = {Corpus Christianorum Series Apocryphorum},
        Shortseries = {CCSA},
        Title = {Pseudo-Matthaei Evangelium}}
@book{CCSA10,
        Number = {10
},
        Series = {Corpus Christianorum Series Apocryphorum},
        Shortseries = {CCSA},
        Title = {De Nativitate Mariae}}

Nous avons donc trois entrées avec une collection, et une sans collection [1].

Par défaut, la bibliographie affiche ceci :

Concilia Africae, Corpus Christianorum Series Latina 140.
De Nativitate Mariae, Corpus Christianorum Series Apocryphorum 10.
La forme la plus ancienne du Protévangile de Jacques, Bruxelles, 1961.
Pseudo-Matthaei Evangelium, Corpus Christianorum Series Apocryphorum 9.

Afficher la version abrégée de la collection

Nous allons modifier les styles pour afficher la version abrégée de la collection, si elle existe, à la place de la version longue.

Par défaut, le macro qui affiche la collection est la suivante [2] :

\newbibmacro*{series+number}{%
  \printfield{series}%
  \setunit*{\addspace}%
  \printfield{number}%
  \newunit}

Nous allons la modifier, en la redéfinissant ainsi :

  1. \renewbibmacro*{series+number}{%
  2.   \iffieldundef{shortseries}{\printfield{series}}{\printfield{shortseries}}%
  3.   \setunit*{\addspace}%
  4.   \printfield{number}%
  5.   \newunit}

.

La seule modification est ligne 2 : nous testons le champ shortseries. S’il n’existe pas, nous affichons le champ series. Sinon, nous affichons le champ shortseries.

On obtient alors :

Concilia Africae, CCSL 140.
De Nativitate Mariae, CCSA 10.
La forme la plus ancienne du Protévangile de Jacques, Bruxelles, 1961.
Pseudo-Matthaei Evangelium, CCSA 9.

Comment afficher la liste des abréviations ?

Nous allons maintenant afficher la liste des abréviations. Plutôt que de recopier nous même cette liste, avec les risques inhérents d’erreurs , nous allons demander à BibLaTeX de la produire pour nous. Malheureusement il n’existe pas de commande standard sous BibLaTeX pour afficher une telle liste.

C’est pourquoi nous allons :

  1. créer un nouveau type de tri, permettant de trier selon l’ordre du champ shortseries.
  2. appliquer ce tri sur une commande \printbibliography. Attention : il vous faut avoir les versions de Biber et BibLaTeX supérieures à 2 pour pouvoir personnaliser le tri au cas par cas.
  3. créer un « bibcheck » pour tester les entrées selon les conditions suivantes :
    1. avoir les champs shortseries et series définis.
    2. ne pas avoir un champ series déjà affiché dans la bibliographie.
  4. appliquer ce bibcheck à la bibliographie.
  5. créer un nouveau environnement bibliographique qui :
    1. affiche la version abrégée de la série.
    2. affiche la version longue de la série.
  6. appliquer cette environnement à la bibliographie.

Trier selon le champ shortseries

J’ai expliqué dans un précédent article comment déclarer un nouveau type de tri.

Pour le cas présent, la déclaration à mettre dans le préambule est simple :

\DeclareSortingScheme{shortseries}{
  \sort{
        \field{shortseries
}
  }
  \sort{
        \field{series
}
  }
}

Nous trions d’abord selon le champ shortseries puis selon le champ series.

Il nous faut ensuite appeller ce tri sur la bibliographie :

\printbibliography[title=Liste des abréviations, sorting=shortseries]

Cela nous produit la liste suivante :

La forme la plus ancienne du Protévangile de Jacques, Bruxelles, 1961.
Pseudo-Matthaei Evangelium, CCSA 9.
De Nativitate Mariae, CCSA 10.
Concilia Africae, CCSL 140.

Filtrer les entrées

Nous avons deux problèmes :

  • Nous avons des entrées qui apparaissent alors qu’elles n’ont pas de champ shortseries
  • Nous avons plusieurs fois la même valeur pour le champ shortseries.

Nous allons donc utiliser defbibcheck pour déclarer un contrôle des entrées que l’on met dans la bibliographie.

  1. \defbibcheck{shortseries}{%
  2.         \iffieldundef{shortseries}{\skipentry}{}%
  3.         \iffieldundef{series}{\skipentry}{%
  4.                 \ifcsdef{\strfield{series}}{\skipentry}{\savefieldcs{series}{\strfield{series}}}%      
  5.                         }% Verifier si pas déjà existant
  6.         }
  7. \DeclareSortingScheme{shortseries}{
  8.  \sort{
  9.         \field{shortseries}
  10.   }
  11.   \sort{
  12.         \field{series}
  13.   }
  14. }

.

Nous appellons ce contrôle sur la bibliographie avec :

\printbibliography[title=Liste des abréviations, sorting=shortseries,check=shortseries]

Commentons rapidement :

  1. L. 2 : S’il n’y a pas de champ shortseries, nous excluons l’entrée de la bibliographie (\skipentry).
  2. L. 3 : Nous testons s’il existe un champ series :
    1. L. 3 : Si ce champ n’existe pas, nous excluons l’entrée de la bibliographie.
    2. L. 6 : Si ce champ existe, nous procédons à un test :
      1. Nous testons, via \ifcsdef l’existence d’une commande. Le nom de cette commande est la valeur du champ series, formaté pour pouvoir servir de nom de commande [3] : \strfield{series}.
        1. Si cette commande existe, nous excluons l’entrée de la bibliographie (\skipentry).
        2. Si elle n’existe pas, nous la créons, en lui donnant comme contenu la valeur du champ series : \savefieldcs{series}{\strfield{series}}.

Nous obtenons alors la bibliographie finale :

Pseudo-Matthaei Evangelium, CCSA 9.
Concilia Africae, CCSL 140.

Imprimer les équivalences

Il nous reste plus qu’à définir un nouvel environnement pour afficher correctement cette « bibliographie », c’est à dire en imprimant uniquement le champ shortseries et le champ series.

C’est là le code le plus complexe, car il nécessite de comprendre non seulement les fonctions de BibLaTeX, mais aussi la création de liste personnalisée.

Le voilà déjà :

  1. \newlength{\shortserieswidth}
  2. \setlenght{\shorserieswidth}{4em}
  3. \defbibenvironment{shortseries}
  4.   {\renewcommand{\blx@driver}[1]{\csuse{blx@bbx@series}}\list{\thefield{shortseries}%
  5.   }{%
  6.      \labelwidth\shorthserieswidth
  7.      \labelsep\biblabelsep
  8.      \leftmargin\bibhang
  9.      \advance\leftmargin\labelsep
  10.      \itemsep\bibitemsep
  11.      \parsep\bibparsep
  12.      \def\makelabel##1{##1\hss}}}
  13.   {\endlist}
  14.   {\item}
  15. \DeclareBibliographyDriver{series}{
  16.         \printfield{series}
  17. }

Comme nous utilisons des commandes contenant le caractère @ dans leurs noms, nous devons entourer le code de \makeatletter et de \makeatother.

Le code est largement inspiré de l’environnement bibliographique shorthands de BibLaTeX.

L. 2-3 nous créons une longueur, \shortserieswidth, valant 4 em. Cette longueur sera affectée à l’espace dans lequel s’inscrira la version abrégée de la collection. Cela nous permet d’avoir des abréviations allant jusqu’à 4 caractères [4].

L. 4 Nous commençons à définir un environnement shortseries. Les trois options qui suivent correspondent respectivement :

  • au code à mettre en début de bibliographie, en excluant le titre (l. 5-13).
  • au code à mettre en fin de bibliographie (l. 14) .
  • au code à mettre pour chaque élément de la bibliographie (l. 15).

En début de bibliographie, nous déclarons que, pour cette bibliographie, l’impression d’une entrée se fera à partir du driver series. Nous déclarons cela avec \renewcommand{\blx@driver}[1]{\csuse{blx@bbx@series}}. Ce sont des commandes de bas niveau, que je vous déconseille en général de manipuler. Dans le cas présent, je n’ai pas trouvé de commande de plus haut niveau. Merci de me signaler si vous voyiez mieux.

Nous commençons alors une liste, à l’aide de la commande de bas niveau \list{\thefield{shortseries}} [5]. Le label de chaque entrée de la liste correspondra au champ shortseries. Les paramètres de cette liste sont définis l. 7-13.

Ce sont les paramètres suivants :

  1. \labelwidth : taille consacrée au label, ici égale à \shorthserieswidth.
  2. \labelsep distance entre le label et le contenu de l’entrée, ici égale à la longueur \biblabelsep, qui est définie par BibLaTeX.
  3. \leftmargin la marge gauche de la liste, ici égale à \bibhang, définie par BibLaTeX, auquel on ajoute \labelsep (c’est le code \advance\leftmargin\labelsep).
  4. itemsep : espace entre les éléments de la liste, ici égale à bibitemsep, définie par BibLaTeX.
  5. parsep : espace entre les paragraphes dans la liste, ici égale à bibparsep, définie par BibLaTeX.
  6. quant à \def\makelabel##1{##1\hss} cela indique que les label (donc dans notre cas les collections abrégées) sont alignés sur la gauche [6].

À la fin de l’environnement bibliographique, nous fermons la liste : \endlist.

Enfin pour chaque entrée de la bibliographie, nous insérons un \item (l. 15).

Il ne nous reste plus qu’à définir un « driver » series, qui se contente d’afficher le champ series :

\DeclareBibliographyDriver{series}{
        \printfield{series
}
}

Nous appelons donc notre commande \printbibliography ainsi :

\printbibliography[sorting=shortseries,title=Liste des abréviations,check=shortseries,env=shortseries]

Et nous obtenons alors notre liste d’abréviations :

CCSA Corpus Christianorum Series Apocryphorum CCSL Corpus Christianorum Series Latina

Il ne nous reste plus qu’à afficher notre bibliographie, avec une bête commande : \printbibliography.

Notes

[1Pour ma part, j’ai opté pour le principe de mettre les noms de collections + numéro pour les « grandes collections » de texte source, et mettre adresse + éditeur + année pour les autres éditions. À vous de voir. Remarquez que vous pourriez remplir aussi les champs adress + publisher + year pour toutes les entrées et faire un test sur la présence du champ series pour ne pas les afficher le cas échéant.

[2Dans le fichier standard.bbx.

[3C’est à dire, par exemple, en ayant supprimé les accents et les espaces.

[4En fait, cela ne limite pas : mais si une abréviation dépasse 4em de longueur, alors notre liste ne sera pas jolie, avec des décalages.

[5Je n’ai pas encore eu le temps de rédiger un article sur la commande de bas niveau \list. Promis, vous aurez bientôt sur ce site quelque chose à ce propos.

[6\hss permet d’insérer un espace élastique, prenant la taille maximale disponible. Cela permet d’aligner à gauche des élèments.

Répondre à cet article

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 formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

À propos

Titulaire d’un master en sciences religieuses de l’Université de Strasbourg, je suis depuis août 2012 assistant-diplômé en histoire du christianisme antique et littérature apocryphe chrétienne à l’Université de Lausanne, où je prépare une thèse sous la direction de Frédéric Amsler.

Dans le cadre de la rédaction de mon mémoire de master, 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.

Par ailleurs, je suis membre actif de la communauté SPIP, au sein de laquelle j’administre le site Spip-Contrib. En plus de mes services de réalisation de site web avec SPIP, 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.