0

The Bluebook style style allows a citation of a print source to include a "parallel" citation to a URL if it improves access. I'm not following the Bluebook, but I agree with the principle, summarized in this presentation.

Parallel Citations to Internet Sources (Rule 18.2.3)

  • Use the regular citation for whatever kind of source the original is
  • Then separate that citation from the internet citation with a comma and “available at” in italics, followed by no comma & the url * Ex: Am. Mining Cong. v. U.S. Army Corps of Eng’rs, No. CIV.A. 93-1754 SSH (D.D.C. Jan. 23, 1997) (emphasis added) (citing James v. Perry, 285 U.S. 360 (1944)), available at http://www.wetlands.com/fed/tulloch1.htm.
    • If the citation requires parentheticals, place the “available at” after those are done. In other words, the “available at” comes after the full source is completely cited

In Biblatex, I would normally use the postnote option to insert what I highlight in boldface. This is fine without the parallel citation (although I notice that the citepages=omit option doesn't work with the parenthesis added, which is an unrelated problem).

The problem is, with my quick and dirty implementation of the parallel URL citation using the eprint field (you can tell me if you have a better suggestion), the field is displayed before the postnote, which is logical enough from the semantic point of view, but is not what I want. How can I make my custom field display last, in the format prescribed by the Bluebook above?

Minimum working example:

\documentclass{article}
\usepackage[style=verbose-ibid, citepages=omit]{biblatex}
\addbibresource{\jobname.bib}
\usepackage{hyperref}
\DeclareFieldFormat{eprint:paraurl}{\emph{available at} \textsc{url}: \url{#1}}

\begin{filecontents}{\jobname.bib}

@article{bertram,
  author       = {Bertram, Aaron and Daskalopoulos, Georgios and Wentworth, Richard},
  title        = {Gromov invariants for holomorphic maps on {Riemann} surfaces to Grassmannians},
  journaltitle = {Journal of the American Mathematical Society},
  date         = 1996,
  volume       = 9,
  number       = 2,
  pages        = {529--571},
}

@article{bertram_url,
  crossref     = {bertram},
  eprint       = {https://www.ams.org/journals/jams/1996-09-02/S0894-0347-96-00190-7/S0894-0347-96-00190-7.pdf},
  eprinttype   = {paraurl},
}

\end{filecontents}


\begin{document}

Foo\autocite[555 (this is fine)]{bertram}

Bar\autocite[555 (this is no good)]{bertram_url}

\end{document}

enter image description here

1 Answer 1

2

If you want to print the postnote together with the pages field, you have to modify the bibmacros that print pages.

The following solution uses ideas of the citepages option and modifies the chapter+pages and note+pages bibmacros in the relevant ways.

\documentclass{article}
\usepackage[style=verbose-ibid]{biblatex}

\usepackage{hyperref}

\DefineBibliographyStrings{english}{
  urlfrom = {available at},
}
\DeclareFieldFormat{url}{\bibstring[\emph]{urlfrom}\space\url{#1}}

\providetoggle{cbx:fullcite}%
\renewbibmacro*{cite:citepages}{%
  \global\togglefalse{cbx:fullcite}}%
\renewbibmacro*{cite:full:citepages}{%
  \global\toggletrue{cbx:fullcite}}%
\renewbibmacro*{cite:postnote}{%
  \iftoggle{cbx:fullcite}
    {}
    {\usebibmacro{postnote}}}

\newbibmacro*{pre:postnote}{%
  \ifnumequal{\value{citecount}}{\value{citetotal}}
    {\setunit{\printdelim{postnotedelim}}%
     \printfield{postnote}%
     \clearfield{postnote}}
    {}%
}
    
\renewbibmacro*{chapter+pages}{%
  \printfield{chapter}%
  \setunit{\bibpagespunct}%
  \printfield{eid}%
  \setunit{\bibpagespunct}%
  \printfield{pages}%
  \usebibmacro{pre:postnote}%
  \newunit}

\renewbibmacro*{note+pages}{%
  \printfield{note}%
  \setunit{\bibpagespunct}%
  \printfield{pages}%
  \usebibmacro{pre:postnote}%
  \newunit}

\begin{filecontents}{\jobname.bib}
@article{bertram,
  author       = {Bertram, Aaron and Daskalopoulos, Georgios and Wentworth, Richard},
  title        = {Gromov invariants for holomorphic maps on {Riemann} surfaces to Grassmannians},
  journaltitle = {Journal of the American Mathematical Society},
  date         = 1996,
  volume       = 9,
  number       = 2,
  pages        = {529--571},
}
@article{bertram_url,
  crossref = {bertram},
  url      = {https://www.ams.org/journals/jams/1996-09-02/S0894-0347-96-00190-7/S0894-0347-96-00190-7.pdf},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
Foo\autocite[555 (this is fine)]{bertram}

Bar\autocite[555 (this is also fine)]{bertram_url}
\end{document}

Aaron Bertram, Georgios Daskalopoulos, and Richard Wentworth. “Gromov invariants for holomorphic maps on Riemann surfaces to Grassmannians”. In: Journal of the American Mathematical Society 9.2 (1996), pp. 529–571, 555 (this is also fine). Available at https://www.ams.org/journals/jams/1996-09-02/S0894-0347-96-00190-7/S0894-0347-96-00190-7.pdf.

For a more citepages=omit-y feeling, use

\renewbibmacro*{cite:full:citepages}{%
  \global\toggletrue{cbx:fullcite}%
  \ifboolexpr{
    test {\ifnumequal{\value{citecount}}{\value{citetotal}}}
    and
    test {\iffieldpages{postnote}}
  }
    {\clearfield{pages}%
     \clearfield{pagetotal}}
    {}}%

instead of

\renewbibmacro*{cite:full:citepages}{%
  \global\toggletrue{cbx:fullcite}}%

in the code above. Note however, that this code explicitly checks if postnote is a page range and only gets rid of the pages field in that case. In your example neither 555 (this is fine) nor 555 (this is no good) pass as a page range, because they contain non-page content. If you don't want to check for page ranged and want to get rid of pages in all cases, go for

\renewbibmacro*{cite:full:citepages}{%
  \global\toggletrue{cbx:fullcite}%
  \ifboolexpr{
    test {\ifnumequal{\value{citecount}}{\value{citetotal}}}
    and
    not test {\iffieldundef{postnote}}
  }
    {\clearfield{pages}%
     \clearfield{pagetotal}}
    {}}%
4
  • This is great, but what if I want to print either postnote or pages (i.e. emulate the effect of citepages=omit)? Somehow this option wasn't working in my original question, which I admit is a separate issue, but to solve both problems, it seems to me from your solution that both problems must be solved together. From the manual: "omit Suppress the pages/pagetotal if the postnote contains a pagerange. They are still printed if there is no postnote or if the postnote is not a number or range."
    – bongbang
    Commented Feb 14, 2022 at 5:50
  • @bongbang Have a look at the edit, please.
    – moewe
    Commented Feb 14, 2022 at 16:44
  • Thank you so much. Supremely helpful.
    – bongbang
    Commented Feb 15, 2022 at 7:18
  • The solution keeps the postnote from printing at all on a @misc entry. I tried adding a note (which I don't actually want) but it still doesn't print.
    – bongbang
    Commented Feb 16, 2022 at 0:05

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .