[Tex/LaTex] Missing “Vol.” and “No.” in biblatex/biber

biberbiblatex

I'd like to cite an article with biblatex, but I'm failing to add "Vol." and "No." in front of the corresponding number.

Here is the entry, of type @article, in the .bib file:

@article{kakimoto_monitoring_2006,
    title = {Monitoring of Interarea Oscillation Mode by Synchronized Phasor Mesurement},
    volume = {21},
    issn = {0885-8950},
    doi = {10.1109/TPWRS.2005.861960},
    number = {1},
    journal = {{IEEE} Transactions on Power Systems},
    author = {Kakimoto, Naoto and Sugumi, Masahiro and Makino, Tohru and Tomiyama, Katsuyuki},
    month = feb,
    year = {2006},
    pages = {260 -- 268}
}

I cite it in this minimal example:

\documentclass{scrartcl} 
\usepackage[T1]{fontenc}
\usepackage{selinput}
\SelectInputMappings{
    adieresis={ä},
    germandbls={ß},
    Euro={€},
}

\usepackage[ngerman]{babel}
% erweiterete Literaturverwaltung
\usepackage[  backend = biber   % (bibtex, biber)
        , bibwarn = true    % Warnung bei fehlerhafter bib-Datei
        , style = authoryear
        , natbib = true
          ]{biblatex}
% Einstellung der Anführungszeichen bei Zitaten („x“, »x«, “x”)
\usepackage[autostyle = true]{csquotes}

% Lokalisierung für biber ergänzen % wirkt nicht
\DefineBibliographyStrings{ngerman}{%
      jourvol = {V1ol. }
    , volume = {VolB. }
    , volumes = {VolBs. }
    , edition = {No. }
    %, andothers = {and others}
}
% Trenner zwischen den Namen ein Semikolon
\renewcommand*{\multinamedelim}{\addsemicolon\space}

% Literaturliste laden
\addbibresource{L:/Uni/Literatur.bib} 

\begin{document}

\cite{kakimoto_monitoring_2006}

\printbibliography

\end{document}

But I get in my bibliography this entry:

Kakimoto, Naoto u.a. (Feb. 2006). „Monitoring of Interarea Oscillation Mode by Syn-
chronized Phasor Mesurement“. In: IEEE Transactions on Power Systems 21.1, S. 260–
268. issn: 0885-8950. doi: 10.1109/TPWRS.2005.861960.

As you can see, instead of "Vol. 21, No. 1" I get "21.1".

In my code I tried to change this behaviour with the \DefineBibliographyStrings macro, but without success. It is interesting, that the commented andother localisation string works, the others don't.

Best Answer

To make use of the excellent localisation features of biblatex, the following approach might be more apt.

\DeclareFieldFormat[article]{volume}{\bibstring{jourvol}\addnbspace #1}
\DeclareFieldFormat[article]{number}{\bibstring{number}\addnbspace #1}

Note the use of a non-breaking space (\addnbspace), if you prefer a normal space, go with \addpspace. (Edit: One should probably better use \bibstring{jourvol} instead of \bibstring{volume}, I have changed this, for German at least the output changes, this is not reflected in the image below.)

This, however, results in "Bd. 21.Nr. 1", so we modify the bibmacro volume+number+eid a bit to include a comma (and a space) between the volume and number.

\renewbibmacro*{volume+number+eid}{%
  \printfield{volume}%
  \setunit{\addcomma\space}%<---- was \setunit*{\adddot}%
  \printfield{number}%
  \setunit{\addcomma\space}%
  \printfield{eid}}

So the MWE

\documentclass{scrartcl} 
\usepackage[T1]{fontenc}

\usepackage[ngerman]{babel}
\usepackage[backend = biber,style = authoryear,natbib = true]{biblatex}
\usepackage[autostyle = true]{csquotes}

\begin{filecontents}{\jobname.bib}
@article{kakimoto_monitoring_2006,
    title = {Monitoring of Interarea Oscillation Mode by Synchronized Phasor Mesurement},
    volume = {21},
    issn = {0885-8950},
    doi = {10.1109/TPWRS.2005.861960},
    number = {1},
    journal = {{IEEE} Transactions on Power Systems},
    author = {Kakimoto, Naoto and Sugumi, Masahiro and Makino, Tohru and Tomiyama, Katsuyuki},
    month = feb,
    year = {2006},
    pages = {260 -- 268}
}
\end{filecontents}

\DeclareFieldFormat[article]{volume}{\bibstring{jourvol}\addnbspace #1}
\DeclareFieldFormat[article]{number}{\bibstring{number}\addnbspace #1}

\renewbibmacro*{volume+number+eid}{%
  \printfield{volume}%
  \setunit{\addcomma\space}%
  \printfield{number}%
  \setunit{\addcomma\space}%
  \printfield{eid}}

\renewcommand*{\multinamedelim}{\addsemicolon\space}

\addbibresource{\jobname.bib} 

\begin{document}
  \cite{kakimoto_monitoring_2006}
  \nocite{*}
  \printbibliography
\end{document}

yields enter image description here


If you wish to include a comma before the volume, add to your preamble.

\renewbibmacro*{journal+issuetitle}{%
  \usebibmacro{journal}%
  \setunit*{\addcomma\space}% was: \setunit*{\addspace}
  \iffieldundef{series}
    {}
    {\newunit
     \printfield{series}%
     \setunit{\addcomma\space}}% was: \setunit{\addspace}
  \usebibmacro{volume+number+eid}%
  \setunit{\addspace}%
  \usebibmacro{issue+date}%
  \setunit{\addcolon\space}%
  \usebibmacro{issue}%
  \newunit}
Related Question