[Tex/LaTex] How to use shortjournal with biblatex and biblatex-chem

biblatexchemstyle

I need to use the short form of a journal title for a piece of work. For instance, J. Am. Chem. Soc. instead of Journal of the American Chemical Society. I've looked through the documentation for both biblatex and biblatex-chem and have found the shortjournal field and I assume this is where you put the abbreviated journal name. How do you get this to work with biblatex and biblatex-chem? I'd like my .bib to contain both forms and I switch between them depending on the document I'm writing. I don't really want to go down the JabRef route of swapping the journaltitle field.

Best Answer

The biblatex manual entry for shortjournal says

A short version or an acronym of the journaltitle. Not used by the standard bibliography styles.

My reading of this is that it is is more something like an informal acronym ('JACS' for Journal of the American Chemical Society, for example) than a formal title. It certainly does not say that it's an ISO abbreviation for the journal title. As far as possible, biblatex-chem follows the standard biblatex styles, so uses the journal field.

All chemistry bibliography styles use abbreviated titles of journals. So I simply store the abbreviations in my database. However, if you want a flexible approach one way to do this is to use a simple macro-based approach. I'd base this on journal CODENs. Something like

\makeatletter
\newcommand*{\CODEN}[1]{%
  \ifcsname CODEN@#1\endcsname
    \expandafter\@firstoftwo\csname CODEN@#1\expandafter\endcsname
  \else
   #1%
  \fi
}
\newcommand*{\CODEN@JACSAT}
  {{J. Am. Chem. Soc.}{Journal of the American Chemical Society}}
...
\makeatother

As written, this will print abbreviations, but if you swap \@firstoftwo for \@secondoftwo then it will print the full name. The idea is that you'd then use \CODEN{JACSAT} in your journal field: a bit like using BibTeX strings, but controllable from LaTeX.

(I did think about writing a package to do a similar job a few years ago, but at the time it did not seem worth it. If there is interest, I can wrap the above concept up into a package pretty easily: it's just a question of adding all of the CODENs.)

A second approach is to alter the appropriate macro

\renewbibmacro*{journal}{%
  \iffieldundef{shortjournal}
    {%
      \iffieldundef{journaltitle}
        {}
        {%
          \printtext[journaltitle]
            {%
              \printfield[titlecase]{journaltitle}%
              \setunit{\subtitlepunct}%
              \printfield[titlecase]{journalsubtitle}%
             }%
         }%
    }
    {\printtext[journaltitle]{\printfield[titlecase]{shortjournal}}}%
}

This will use the shortjournal field if available, and if not use the standard journaltitle field.