PaulStanley / oscola-biblatex

Oscola is a style file for the biblatex bibliography system.
9 stars 7 forks source link

Ibidtracker and \textcite{} #15

Open flimofly opened 3 years ago

flimofly commented 3 years ago

The ibidtracker will incorrectly put ibid to refer to a case cited not in the previous footnote but the one before that. This happens when then previous footnote is the result of a \textcite{} command. The ibidtracker in other words does not 'see' this citation.

Here is a MWE:

\documentclass{article}
\usepackage[backend=biber,style=oscola]{biblatex}
\addbibresource{test.bib}

\begin{document}
\title{Title}
\author{Timothy Roes}
\maketitle
\section{SectionTitle}
Here is a first normal citation.\autocite{ECJ:Polydor:1982} Then we cite \textcite{ECJ:Pupino:2005fo} using textcite. If we then cite the first case (Polydor) again \autocite[12]{ECJ:Polydor:1982} it looks like the textcite citation was not counted. The ibid should not be used here.

\end{document}

Produces this output: Screenshot 2021-05-07 at 11 43 44

moewew commented 3 years ago

A workaround for this MWE would be to set the ibidtracker to strict instead of the default constrict.

With biblatex constrict (or context), biblatex tries to track citations in the text body and the footnotes separately. This does not quite work as desired here, since \textcite is a bit of a chimera: It produces output both in the text body and the footnotes. For biblatex's tracking purposes it counts as a text body command and the footnotes effectively does not get tracked.

If we do not use the context-sensitive tracker, all citations are tracked as one and so the \textcite behaves as expected in this example.

\documentclass{article}
\usepackage[backend=biber, style=oscola, ibidtracker=strict]{biblatex}
\addbibresource{biblatex-examples.bib}

\begin{document}
Here is a first normal citation.\autocite{sigfridsson}
Then we cite \textcite{nussbaum} using textcite.
If we then cite the first case (Polydor) again \autocite[12]{sigfridsson}
it looks like the textcite citation was not counted.\autocite[12]{sigfridsson}
\end{document}

For proper support of the context-sensitive tracking, oscola would need to make sure that \textcite is tracked in both text body and the footnotes. The biblatex standard verbose styles, whose \textcite command also output to the text body and footnote do this by effectively splitting the implementation of \textcite into two different cite commands, but this gives a different output than oscola. Here is a first attempt to implement such a command. It feels a bit weird to execute a different \...cite command inside a \...cite, so this would have to be tested very thoroughly for side effects

\documentclass{article}
\usepackage[backend=biber, style=oscola]{biblatex}

\makeatletter
\DeclareCiteCommand{\cbx@footciterefjuris}[\mkbibfootnote]
 {\usebibmacro{prenote}}
 {\usebibmacro{citeindex}%
  \usebibmacro{footcite:ref:juris}}
 {\multicitedelim}
 {\usebibmacro{cite:postnote}}

\DeclareCiteCommand{\textcite}
  {\usebibmacro{prenote}}%
  {\ifboolexpr{ (
                test {\ifentrytype{jurisdiction}}
                or test {\ifentrytype{legislation}} )
                }
                {\usebibmacro{title:or:shorttitle}\blx@postpunct@saved%
                  \ifboolexpr{ (
                    test {\ifentrytype{legislation}}
                      and test {\iffieldundef{postnote}} 
                    ) }
                    {}
                    {\cbx@footciterefjuris{\thefield{entrykey}}}}
      {\usebibmacro{cite:author}\blx@postpunct@saved%
        \gdef\blx@postpunct@saved{}%
        \cbx@footciterefjuris{\thefield{entrykey}}}}
  {\multicitedelim}
  {}

\renewbibmacro*{footcite:ref:juris}{%
  \bbx@resetpostnotedelim%
  \ifboolexpr {test {\ifciteseen} or test {\ifciteibid}}
       {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
          {\usebibmacro{footcite:ibid}\midsentence\bbx@unsetpostnotedelim\usebibmacro{postnote}}
          {\usebibmacro{cite:refonlynote}\usebibmacro{postnote}}}%
    {\usebibmacro{cite:refonlyfull}\usebibmacro{postnote}%
     \usebibmacro{footcite:save}}}
\makeatother

\addbibresource{biblatex-examples.bib}

\begin{document}
Here is a first normal citation.\autocite{sigfridsson}
Then we cite \textcite{nussbaum} using textcite.
If we then cite the first case (Polydor) again \autocite[12]{sigfridsson}
it looks like the textcite citation was not counted.\autocite[12]{sigfridsson}
\end{document}