Division de sources et op. cit. (2)

, par Maïeul

Cet article est essentiellement une correction du précédent article portant le même nom [1].

J’avais expliqué dans un précédent article, la manière dont je gère les divisions de sources. Ce système pose cependant un problème : la gestion standards des op. cit. n’est pas idéal.

Cet article est une archive : consultez plutôt son remplaçant : Division de sources et abréviations.

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 :

\cite{ActaPetriPauli81}

…

\cite{ActaPetriPauli81}

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:name, 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 :

\cite{ActaPetriPauli}

…

\cite{ActaPetriPauli81}

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 :

\cite{ActaPetriPauli81}

…

\cite{ActaPetriPauli80}

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.

Pour le moment je n’ai pas trouvé de manière pour éviter cela.

citepages = omit

Si j’utilise l’option citepages=omit pour éviter la duplication des pages entre le le champ pages et l’option postnote, j’obtiens avec le code suivant :

\cite{ActaPetriPauli81}

...

\cite[214]{ActaPetriPauli8}

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, p. 214

Le citepages=omit n’est pris en compte. Il faut savoir que citepages=omit définit une macro
cite:full:citepages qui se charge de gérer la suppression du champ pages le cas échéant.

La solution est donc d’introduire un appel à cette macro, au début de la macro cite:title.

Ce qui donne

\renewbibmacro*{cite:title}{%
\usebibmacro{cite:full:citepages}%
  \ifpunct{\addspace}{}%
  \printtext[bibhyperlink]{%
    \ifboolexpr{test{\ifsingletitle} and not (test {\iffieldundef{author}} and test{\iffieldequalstr{usera}{1}})}{}{\printfield[citetitle]{labeltitle}}%
    \setunit{\nametitledelim}%
    \bibstring[\mkibid]{opcit}}%
  \iffieldequalstr{usera}{1}{%
  	\setunit{\bibpagespunct}%
  	\printfield{titleaddon}%
  	\iffieldundef{titleaddon}{}{\setunit{\bibpagespunct}%
  	\printfield{pages}}%
	\newunit%
	\printfield{addendum}%
	}{}%
}

Et j’obtiens bien à la fin :

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

Notes

[1Les corrections sont mineures, mais les intégrer à l’ancien article aurait été compliqué. Je vous laisse jouer au jeux de sept différences, qui ne sont que deux, et dont une est explicite.