1

I've been getting into LaTeX for a thesis and I'm overall pretty satisfied with my setup. There's however an issue I can't wrap my head around, and can't find a solution for. Using Biber and biblatex, with verbose-trad1 as an option, I'd like that whenever opcit is called, instead of the output being

{Author} op. cit.

it be

{Author} op. cit. #REF

where #REF refers to the footnote number where the citation first appeared.

Here's a M(n)WE:

%!TEX program = xelatex
% Add packages
\documentclass[12pt]{article}
\usepackage[english,main=french]{babel}
\usepackage{fontspec}
\usepackage[autostyle=true]{csquotes}
\usepackage[citestyle=ext-verbose-trad1, articlein=false, bibstyle=ext-authortitle]{biblatex}
\addbibresource{ref.bib}
\usepackage{hyperref}

% Citation settings
\DefineBibliographyStrings{french}{opcit = {\textit{supra}, note \ref{}},} %<= I guess it'd go there?

% Test proper
\begin{document}
    Some text string\autocite{A}, some other\autocite{B}, some more\autocite{A}.
\end{document}

Where I'd like the footnote output to be:

  1. Author A, full reference
  2. Author B, full reference
  3. Author A, supra, note 1.

This answer would work but it'd be incredibly tedious and could only be done at the end, once citations are set in stone, which defeats the purpose of a language like LaTeX. In any case, I'm in over my head.

1

If you just a want a verbose style with references to the first footnote and 'ibidem' you can use (ext-)verbose-inote.

\documentclass[12pt]{article}
\usepackage[english,main=french]{babel}
\usepackage[autostyle=true]{csquotes}
\usepackage{fontspec}
\usepackage[style=ext-verbose-inote, articlein=false]{biblatex}
\usepackage{hyperref}

\DefineBibliographyStrings{french}{
  seenote = {supra, note},
}

\addbibresource{biblatex-examples.bib}


\begin{document}
  Some text string\autocite{sigfridsson},
  some other\autocite{worman},
  some more\autocite{sigfridsson}.
\end{document}

Sigfridsson et Ryde, supra, note 1.


If you want to retain all the other scholarly abbreviations of verbose-trad1, some more work is needed. In this example I only replace op cit. not loc. cit. or any other abbreviation.

\documentclass[12pt]{article}
\usepackage[english,main=french]{babel}
\usepackage[autostyle=true]{csquotes}
\usepackage{fontspec}
\usepackage[style=ext-verbose-trad1, articlein=false]{biblatex}
\usepackage{hyperref}

\DefineBibliographyStrings{french}{
  seenote = {supra, note},
}

\newtoggle{cbx:pageref}

\DeclareBibliographyOption[boolean]{pageref}[true]{%
  \settoggle{cbx:pageref}{#1}%
  \iftoggle{cbx:pageref}
    {\ExecuteBibliographyOptions{pagetracker}}
    {}}

\DeclareFieldFormat{bibhyperlink}{%
  \bibhyperlink{%
    \thefield{entrykey}:\csuse{cbx@\iffootnote{f}{t}@\thefield{entrykey}}}{#1}}
\DeclareFieldFormat{bibhypertarget}{%
  \bibhypertarget{\thefield{entrykey}:\the\value{instcount}}{#1}}

\providecommand*{\mkibid}[1]{#1}

\renewbibmacro*{cite:save}{%
  \csxdef{cbx@lastcite@\thefield{entrykey}}{\the\value{instcount}}%
  \iffootnote
    {\csxdef{cbx@f@\thefield{entrykey}}{\the\value{instcount}}%
     \label{cbx@\the\value{instcount}}}
    {}%
  \global\boolfalse{cbx:noidem}}

\newbibmacro{seenote}{%
  \printtext{%
    \bibstring{seenote}\addnbspace
    \ref{cbx@\csuse{cbx@f@\thefield{entrykey}}}%
    \iftoggle{cbx:pageref}
      {\ifsamepage{\the\value{instcount}}
                  {\csuse{cbx@f@\thefield{entrykey}}}
         {}
         {\addcomma\space\bibstring{page}\addnbspace
          \pageref{cbx@\csuse{cbx@f@\thefield{entrykey}}}}}
      {}}}

\renewbibmacro*{cite:opcit}{%
  \iffootnote
    {\usebibmacro{seenote}}
    {\printtext[bibhyperlink]{\bibstring[\mkibid]{opcit}}}}

\addbibresource{biblatex-examples.bib}


\begin{document}
  Some text string\autocite{sigfridsson},
  some other\autocite{worman},
  some more\autocite{sigfridsson}.
\end{document}
| improve this answer | |
  • Thanks a lot for the answer. I didn't realise what verbose-(i)note was doing from the documentation, and reading it now after experimenting with it, it still seems obscure (op. cit. was also a pointer with hyperref) and doesn't mention numbering. If I may, what's your process for figuring out those command chains? Looking at the repository, it seems like you didn't just copy paste from one spot (your name is everywhere btw!) but actually merged code from many places (in record time). Anyway, thank you. PS: sorry for the lack of upvote, my "reputation" isn't high enough (yet). – fairytalq Apr 27 at 23:54
  • 1
    @fairytalq The style examples in ctan.org/tex-archive/macros/latex/contrib/biblatex/doc/examples (30-style-... up to 82-style-...) should hopefully make it slightly clearer what each style does: The short description in the biblatex documentation does not always explain all details. For more complex issues like this usually the only way to figure out which bits to change is by looking at the code. – moewe Apr 28 at 5:08
  • Thanks for the link! I found those linked on the right margin in the general biblatex documentation. Being new to LaTeX and possessing only limited programming (scripting, really) skills, the code is still fairly hard for me to parse. I'm trying though ( I managed to put together this command, for instance \togglefalse{abx@bool@giveninits}, to change the initials settings in the References but not in the body). – fairytalq Apr 30 at 4:54
  • 1
    @fairytalq To be fair verbose-trad1.cbx (and the code from the second example above) is probably one of the more complex styles implementation wise (especially the stuff that does the linking: cite:save and seenote). standard.bbx (which defines the bibliography setup) is a bit easier on the eye. There are several ways to get initials only in citations, of which \togglefalse{abx@bool@giveninits} is probably the quickest, but by no means the easiest to understand. – moewe Apr 30 at 5:38
  • The main reason I went with \togglefalse{abx@bool@giveninits} is that searching through the repo for giveninits lead me to few results and, while, tracking one of those results, I managed to end up at that result. After seeing that it worked, I didn't bother trying another way to implement it. – fairytalq Apr 30 at 5:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.