I would like to consistently have a comma between the journal and volume number for article references using biblatex
with biber
as the backend. Unfortunately, the punctuation between the journal and volume is not consistent. Journals whose last word is abbreviated have no comma between the journal and the volume, and the word "Vol." is capitalized. Journals whose last word is not abbreviated have a comma and the word "vol." is not capitalized. I can fix the capitalization by un-commenting the commented lines in the below MWE, but the comma problem is quite perplexing. Apologies if this fix is in an answer somewhere, but I cannot find it (or at least, I don't know what to search for!).
Current output:
[1] First Author. “Blah Blah 2”. In: Am. J. Phys. Vol. 72, no. 3 (Mar. 2004),
pp. 367–375.
[2] Second Author. “Blah blah”. In: Energy Fuel, vol. 27, no. 12 (Dec. 2013),
pp. 7778–7789.
Expected output:
[1] First Author. “Blah Blah 2”. In: Am. J. Phys., vol. 72, no. 3 (Mar. 2004),
pp. 367–375.
[2] Second Author. “Blah blah”. In: Energy Fuel, vol. 27, no. 12 (Dec. 2013),
pp. 7778–7789.
MWE:
\documentclass{article}
\usepackage{filecontents}
\usepackage[
backend=biber,
citestyle=numeric-comp,
]{biblatex}
\addbibresource{\jobname}
% \DefineBibliographyStrings{english}{%
% volume = {\lowercase{v}ol\adddot}, % avoid capitalization after dots.
% }
\DeclareFieldFormat[article]{volume}{\bibstring{volume}\addspace #1}
\DeclareFieldFormat[article]{number}{\bibstring{number}\addspace #1}
\renewbibmacro*{volume+number+eid}{%
\printfield{volume}%
\setunit{\addcomma\space}%<---- was \setunit*{\adddot}%
\printfield{number}%
\setunit{\addcomma\space}%
\printfield{eid}}
\renewbibmacro*{journal+issuetitle}{%
\usebibmacro{journal}%
\setunit*{\addcomma\addspace}%<---- was \setunit*{\addspace}%
\iffieldundef{series}
{}
{\newunit
\printfield{series}%
\setunit{\addspace}}%
\usebibmacro{volume+number+eid}%
\setunit{\addspace}%
\usebibmacro{issue+date}%
\setunit{\addcolon\space}%
\usebibmacro{issue}%
\newunit}
\begin{filecontents*}{\jobname.bib}
@article{York2004,
author = {Author, First},
journal = {Am. J. Phys.},
month = mar,
number = {3},
pages = {367--375},
title = {{Blah Blah 2}},
volume = {72},
year = {2004}
}
@article{Baumgardner2013a,
author = {Author, Second},
journal = {Energy Fuel},
month = dec,
number = {12},
pages = {7778--7789},
title = {{Blah blah}},
volume = {27},
year = {2013}
}
\end{filecontents*}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
Best Answer
The problem is that
biblatex
treats the abbreviation dot injournal = {Am. J. Phys.}
as a literal period (the end of a sentence).We can stop
biblatex
from doing that by using\isdot
As per the
biblatex
documentation §4.7.3 Adding Punctuation, p. 191:This solution will treat all trailing periods in the
journal
field as abbreviation dots.If you only want that for particular cases, you could consider adding
\isdot
to thejournal
field manually (journal = {Am. J. Phys.\isdot}
or writejournal = {Am\adddotspace J\adddotspace Phys\adddot}
using the host of commandsbiblatex
provides for these matters). This is is not to be recommended as it will make the.bib
file less portable though.MWE