1

Is there a method in biblatex to change the order of the bibliography fields in the output? I'm using the trad-abbrv style because of the abbreviations (with natbib I also used abbrvnat, because I like it quite much). I now want to print the year after the journal, then print out the issue, the number and the pages. Currently trad-abbrv prints it in the order:

  • Authors
  • Title
  • Journal
  • Volume
  • Number
  • Year

MWE

\documentclass{article}
\usepackage[backend=biber, style = trad-abbrv, citestyle = numeric-comp]{biblatex}
\addbibresource{\jobname.bib}
\usepackage{filecontents}

% Name
\renewcommand{\labelnamepunct}{\addcolon\space}

% Title
\DeclareFieldFormat*{title}{\enquote{#1}\isdot}
\DeclareFieldFormat*{journaltitle}{\mkbibemph{#1},}

% Volume
\DeclareFieldFormat*{volume}{#1}

% Number
\DeclareFieldFormat*{number}{\mkbibparens{#1}}

% Pages
\DeclareFieldFormat*{pages}{\space#1\space}
\renewcommand*{\bibpagespunct}{\addspace}

% Year
\DeclareFieldFormat{date}{\textbf{#1}}

\begin{filecontents}{\jobname.bib}
@article{Yablokov2009,
    author  = {Yablokov, V Ya and Smel'tsova, I L and Zelyaev, I A and Mitrofanova, S V},
    doi     = {10.1134/S1070363209080209},
    issn    = {1070-3632},
    journal = {Russ. J. Gen. Chem.},
    number  = {8},
    pages   = {1704--1706},
    title   = {{Studies of the Rates of Thermal Decomposition of Glycine, Alanine, and Serine}},
    volume  = {79},
    year    = {2009}
}
\end{filecontents}

\begin{document}

\noindent\cite{Yablokov2009}

\printbibliography

\end{document}
  • Have you considered switching to biblatex? Based on your questions you seem to do a lot of modifications to your bibliography - in most cases this is much easier using biblatex. – user36296 Oct 18 '17 at 20:41
  • 1
    This is biblatex, maybe I should be more clear in my question about this. – Sam Oct 18 '17 at 20:41
  • Sorry, got confused by the mentioning of natbib and abbrvnat. In biblatex you can change the order by redefining the \DeclareBibliographyDriver, to show how this is done, it would be helpful to have a minimal working example with bibliography (MWEB) – user36296 Oct 18 '17 at 20:44
  • @samcarter Done :) – Sam Oct 18 '17 at 20:51
2

To move the year after the journal name, you could add it to the definition of the journal+issuetitle macro and remove it from the issue+date-parens macro. The original definitions of these two macros can be found in trad-standard.bbx.

\documentclass{article}
\usepackage[backend=biber, style = trad-abbrv, citestyle = numeric-comp]{biblatex}
\addbibresource{\jobname.bib}
\usepackage{filecontents}

% Name
\renewcommand{\labelnamepunct}{\addcolon\space}

% Title
\DeclareFieldFormat*{title}{\enquote{#1}\isdot}
\DeclareFieldFormat*{journaltitle}{\mkbibemph{#1},}

% Volume
\DeclareFieldFormat*{volume}{#1}

% Number
\DeclareFieldFormat*{number}{\mkbibparens{#1}}

% Pages
\DeclareFieldFormat*{pages}{\space#1\space}
\renewcommand*{\bibpagespunct}{\addspace}

% Year
\DeclareFieldFormat{date}{\textbf{#1}}

\begin{filecontents}{\jobname.bib}
@article{Yablokov2009,
    author  = {Yablokov, V Ya and Smel'tsova, I L and Zelyaev, I A and Mitrofanova, S V},
    doi     = {10.1134/S1070363209080209},
    issn    = {1070-3632},
    journal = {Russ. J. Gen. Chem.},
    number  = {8},
    pages   = {1704--1706},
    title   = {{Studies of the Rates of Thermal Decomposition of Glycine, Alanine, and Serine}},
    volume  = {79},
    year    = {2009}
}
\end{filecontents}

\renewbibmacro*{journal+issuetitle}{%
  \usebibmacro{journal}%
  \usebibmacro{date}% NEW %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  \newcommaunit*%
  \iffieldundef{series}
    {}
    {\newunit
     \printfield{series}%
     \setunit{\addcomma\space}}%
  \usebibmacro{volume+number+pages+eid}%
  \newcommaunit
  %\setunit{\addspace}%
  \usebibmacro{issue+date-parens}%
  \setunit*{\addcolon\space}%
  \usebibmacro{issue}%
  \newunit}

\renewbibmacro*{issue+date-parens}{%
  \iffieldundef{issue}%
    {%
%    \usebibmacro{date}
    }%
    {\printfield{issue}%
     \newcommaunit*%
%     \usebibmacro{date}
     }%
  \newunit}


\begin{document}

\noindent\cite{Yablokov2009}

\printbibliography

\end{document}
  • I think it should be \newbibmacro*{issue+date-parens} but apart from this, it works very well. How did you know these commands? Is there a good resource? – Sam Oct 18 '17 at 21:00
  • Oh, you just corrected it! (Y) – Sam Oct 18 '17 at 21:00
  • @Sam I added a short explanation. – user36296 Oct 18 '17 at 21:05
  • Awesome! Pretty straightforward if you know what you are looking for :) – Sam Oct 18 '17 at 21:10

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.