Les exemples
Pour cet article, je me base sur les entrées suivantes :
@bookinbook{ActaPetriPauli,
Address = {Hildesheim and New York},
Booktitle = {Acta apostolorum apocrypha},
Editor = {Richard Aldebert Lipsius},
Entrysubtype = {apocryphes},
Pages = {178-222},
Publisher = {Georg Olms Verlag},
Title = {Acta Petri et Pauli},
Usera = {1},
Volume = {I},
Year = {1972 (rééd. de 1891)}}
@bookinbook{ActaPetriPauli80,
Crossref = {ActaPetriPauli},
Pages = {213-214},
Title = {Acta Petri et Pauli},
Titleaddon = {80},
Usera = {1}}
@bookinbook{ActaPetriPauli81,
Crossref = {ActaPetriPauli},
Pages = {214-215},
Title = {Acta Petri et Pauli},
Titleaddon = {81},
Usera = {1}}
Premier problème : perte de la division de source
Soit le code suivant :
J’obtiens par défaut :
Acta Petri et Pauli, 81, dans Acta apostolorum apocrypha, t. I, éd. Richard Aldebert Lipsius, Hildesheim et New York : Georg Olms Verlag, 1972 (rééd. de 1891), p. 214–215
…
Acta Petri et Pauli, op. cit.
Pour rétablir la division de source, il me faut modifier la manière dont sont affichées les versions abrégées. Cela se passe via la macro cite:title
, qui par défaut est définie ainsi, dans le style verbose-trad-2
:
\newbibmacro*{cite:title}{%
\printtext[bibhyperlink]{%
\printfield[citetitle]{labeltitle}%
\setunit{\nametitledelim}%
\bibstring[\mkibid]{opcit}}}
Il suffit de la modifier pour lui indique d’imprimer le champ titleaddon
et le champ pages
:
\renewbibmacro*{cite:title}{%
\printtext[bibhyperlink]{%
\printfield[citetitle]{labeltitle}%
\setunit{\nametitledelim}%
\bibstring[\mkibid]{opcit}%
\setunit{\bibpagespunct}%
\printfield{titleaddon}%
\setunit{\bibpagespunct}%
\printfield{pages}%
}}
J’obtiens alors :
Acta Petri et Pauli, 81, dans Acta apostolorum apocrypha, t. I, éd. Richard Aldebert Lipsius, Hildesheim et New York : Georg Olms Verlag, 1972 (rééd. de 1891), p. 214–215
…
Acta Petri et Pauli, op. cit., 81, p. 214-215
Second problème : pas de op. cit. si je ne cite pas le même passage
J’essaie maintenant :
J’obtiens alors
Acta Petri et Pauli, dans Acta apostolorum apocrypha, t. I, éd. Richard Aldebert LIPSIUS, Hildesheim et New York : Georg Olms Verlag, 1972 (rééd. de 1891), p. 178–222
…
Acta Petri et Pauli, 81, dans Acta apostolorum apocrypha, t. I, éd. Richard Aldebert LIPSIUS, Hildesheim et New York : Georg Olms Verlag, 1972 (rééd. de 1891), p. 214–215
Pas très joli, joli ! Et puis cela prend de la place, ce n’est pas très écolo, donc pas non plus Joly.
Regardons la macro cite
, toujours dans le style verbose-trad-2
.
\newbibmacro*{cite}{%
\usebibmacro{cite:citepages}%
\global\togglefalse{cbx:fullcite}%
\global\togglefalse{cbx:loccit}%
\bibhypertarget{cite\the\value{instcount}}{%
\ifciteseen
{\iffieldundef{shorthand}
{\ifciteibid
{\usebibmacro{cite:ibid}}
{\ifthenelse{\ifciteidem\AND\NOT\boolean{cbx:noidem}}
{\usebibmacro{cite:idem}}
{\usebibmacro{cite:name}}%
\usebibmacro{cite:title}}%
\usebibmacro{cite:save}}
{\usebibmacro{cite:shorthand}}}
{\usebibmacro{cite:full}%
\usebibmacro{cite:save}}}}
La solution va consister à regarder si l’élèment parent a déjà été cité. Pour ce faire, je me sert de la commande \ifentryseen{clef}{sioui}{sinon}
.
Pour tester si l’élèment parent a été cité, j’utilise \thefield{crossref}
\ifentryseen{\thefield{crossref}}{sioui}{sinon}
J’intègre tout cela dans la macro. Pour éviter de répeter deux fois le code, je met la parti suivante dans une macro, que j’appelle cite:manage
:
\ifciteseen
{\iffieldundef{shorthand}
{\ifciteibid
{\usebibmacro{cite:ibid}}
{\ifthenelse{\ifciteidem\AND\NOT\boolean{cbx:noidem}}
{\usebibmacro{cite:idem}}
{\usebibmacro{cite:name}}%
\usebibmacro{cite:title}}%
\usebibmacro{cite:save}}
{\usebibmacro{cite:shorthand}}}
{\usebibmacro{cite:full}%
\usebibmacro{cite:save}}
Comme je ne veux appliquer le test de l’entrée parente que pour les entrées avec un champ titleaddon
, je me sert aussi de la commande \iffieldundef{champ}{si champ vide}{si champ pas vide}
. Je dois aussi tester si le champ crossref
est défini, sinon biblatex considère que l’entrée vide a déjà été citée.
Je procède à ce test de la manière suivante :
\iffieldundef{crossref}{si champ vide}{si champ non vide}
Au final, cela donne :
\renewbibmacro*{cite}{%
\usebibmacro{cite:citepages}%
\global\togglefalse{cbx:fullcite}%
\global\togglefalse{cbx:loccit}%
\bibhypertarget{cite\the\value{instcount}}{%
\iffieldundef{titleaddon}{\usebibmacro{cite:manage}}%
{\iffieldundef{crossref}{\usebibmacro{cite:manage}}%
{\ifentryseen{\thefield{crossref}}{\usebibmacro{cite:name}\usebibmacro{cite:title}}{\usebibmacro{cite:manage}}%
}}}}%
\newbibmacro{cite:manage}{%
\ifciteseen
{\iffieldundef{shorthand}
{\ifciteibid
{\usebibmacro{cite:ibid}}
{\ifthenelse{\ifciteidem\AND\NOT\boolean{cbx:noidem}}
{\usebibmacro{cite:idem}}
{\usebibmacro{cite:name}}%
\usebibmacro{cite:title}}%
\usebibmacro{cite:save}}
{\usebibmacro{cite:shorthand}}}
{\usebibmacro{cite:full}%
\usebibmacro{cite:save}}}
Et j’obtiens :
Acta Petri et Pauli, dans Acta apostolorum apocrypha, t. I, éd. Richard Aldebert LIPSIUS, Hildesheim et New York : Georg Olms Verlag, 1972 (rééd. de 1891), p. 178–222
…
Acta Petri et Pauli, op. cit., 81, p. 214–215
Troisième problème : si on ne cite pas l’entrée parente
Oui, mais supposons que je ne cite pas d’abord l’entrée mère :
Je perd à nouveau mes op. cit. :
Acta Petri et Pauli, 81, dans Acta apostolorum apocrypha, t. I, éd. Richard Aldebert LIPSIUS, Hildesheim et New York : Georg Olms Verlag, 1972 (rééd. de 1891), p. 214–215, (Version longue du Ps. Marcellus, CANT 193.2)
Acta Petri et Pauli, 80, dans Acta apostolorum apocrypha, t. I, éd. Richard Aldebert LIPSIUS, Hildesheim et New York : Georg Olms Verlag, 1972 (rééd. de 1891), p. 213–214, (Version longue du Ps. Marcellus, CANT 193.2)
Et oui, c’est logique, vu que l’entrée mère n’a jamais été citée, le \ifciteseen{\thefield{crossref}}
passe toujours sur la partie fausse.
La solution est alors de citer l’entrée mère ! Oui mais si je la cite, je l’affiche, et cela je n’en veut pas !
Je doit créer une nouvelle commande de citation, qui se contente d’ajouter l’entrée dans la liste des entrées citées, sans l’afficher. J’appelle cette commande fauxcite
et la définir ainsi [1] :
\DeclareCiteCommand{\fauxcite}[]
{}
{}
{}
{}
Il me faut alors utiliser la commande dans la macro cite
:
\renewbibmacro*{cite}{%
\usebibmacro{cite:citepages}%
\global\togglefalse{cbx:fullcite}%
\global\togglefalse{cbx:loccit}%
\bibhypertarget{cite\the\value{instcount}}{%
\iffieldundef{usera}{\usebibmacro{cite:manage}}%
{\iffieldundef{crossref}{\usebibmacro{cite:manage}}%
{\ifentryseen{\thefield{crossref}}{\usebibmacro{cite:title}}{\usebibmacro{cite:manage}\fauxcite{\thefield{crossref}}}%
}}}}%
Il faut aussi mettre l’option minicrossrefs
à 0, sinon le champ crossref
n’est pas retenu par biber.
\usepackage[backend=biber,bibstyle=verbose,citestyle=verbose-trad2,mincrossrefs=0]
J’obtiens alors correctement :
Acta Petri et Pauli, 81, dans Acta apostolorum apocrypha, t. I, éd. Richard Aldebert LIPSIUS, Hildesheim et New York : Georg Olms Verlag, 1972 (rééd. de 1891), p. 214–215
…
Acta Petri et Pauli, op. cit., 80, p. 213–214
Cela a pour conséquence d’ajouter cette entrée à la bibliographie finale. Il n’est pas forcément logique de mettre les sous-entrées dans la bibliographie finale, et j’explique ailleurs comment éviter cela.