# Biber+biblatex automatic standard abbreviations

Is it there a way to automatically substitute IEEE standard abbreviations automatically using biblatex + biber (once provided a list of the abbreviations somehow)?

For example:

"Conference Record IEEE International Conference on Communication"

should become

"Conf. Rec. 1995 IEEE Int. Conf. Commun."

• My first impression says the use of @strings in your bib file would be a good approach. But that would not be quite "automatic". biblatex offers dynamic modification of data with \DeclareSourcemap, which could be used for the purpose, I believe. But we would need you to be more specific, ideally by providing a MWE/MWEB which illustrates your problem and what you are trying to achieve precisely. – gusbrs Feb 10 '18 at 10:52
• Has the provided answer solved your problem? If so, we kindly ask you to mark the answer as accepted. It will raise the quality of this website and help others with the same kind of problem find a solution faster. If your problem has not been solved by the provided answer, adding more details to your question might produce a more fitting answer. – thymaro Feb 12 '18 at 7:54

I'm not really into the IEEE style, but I think I get your general setting, and will give it a try.

I'm supposing you are using biblatex's ieee style, but loading IEEEabrv.bib provided by IEEEtran (even though I didn't find there the "Conference Record IEEE International Conference on Communication", so I use here an entry from IEEEexample.bib).

I see two ways for you to override the standard IEEE abreviations provided in IEEEabrv.bib. The first is for you to create a second file of abbreviation strings and load it after IEEEabrv.bib. The second is to use biblatex's \DeclareSourcemap to change your entry's data.

The first one would go like:

\documentclass{article}
\usepackage[style = ieee]{biblatex}
\usepackage{filecontents}

\begin{filecontents*}{\jobname.bib}
@article{IEEEexample:article_typical,
author        = "S. Zhang and C. Zhu and J. K. O. Sin and P. K. T. Mok",
title         = "A Novel Ultrathin Elevated Channel Low-temperature
Poly-{Si} {TFT}",
journal       = IEEE_J_EDL,
volume        = "20",
month         = nov,
year          = "1999",
pages         = "569-571"
}
\end{filecontents*}

\begin{document}

\nocite{*}
\printbibliography

\end{document}


Where myIEEEabrv.bib contains the redefinitions of the abbreviated strings you want. In this case, something like:

@STRING{IEEE_J_EDL        = "{IEEE} Elec. Dev. Lett."}


(The string defined in IEEEabrv.bib is {IEEE} Electron Device Lett.). Notice it must be loaded after IEEEabrv.bib.

If I misread your question, and what you actually want is to provide some abbreviated journal titles of your own, this method also gives you a sensible approach. You can create a file abbrev.bib, define the strings you want there, and add it with \addbibresource. Then in your references .bib file you use the string name (that is, without brackets, as in the example above) in the journaltitle/journal field. You could have then:

@string{IEEEIntConfCom = "Conf. Rec. 1995 {IEEE} Int. Conf. Commun."}


and then you would use in your bibfile:

journaltitle = IEEEIntConfCom,


Usually this approach entails also having a second file where the full strings are defined, let's say full.bib. In it you would have:

@string{IEEEIntConfCom = "Conference Record {IEEE} International Conference on Communication"}


With it, all you have to do to change from abbreviated journals to full journal titles would be to substitute \addbibresource{abbrev.bib} with \addbibresource{full.bib} in your main .tex file.

The second approach, as mentioned, would be to use \DeclareSourcemap:

\documentclass{article}
\usepackage[style = ieee]{biblatex}
\usepackage{filecontents}

\begin{filecontents*}{\jobname.bib}
@article{IEEEexample:article_typical,
author        = "S. Zhang and C. Zhu and J. K. O. Sin and P. K. T. Mok",
title         = "A Novel Ultrathin Elevated Channel Low-temperature
Poly-{Si} {TFT}",
journal       = IEEE_J_EDL,
volume        = "20",
month         = nov,
year          = "1999",
pages         = "569-571"
}
\end{filecontents*}

\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=journal,
match={{IEEE} Electron Device Lett.},
replace={{IEEE} Elec. Dev. Lett.}]
}
}
}

\begin{document}

\nocite{*}
\printbibliography

\end{document}


Notice the match is for the standard abbreviated form defined in IEEEabrv.bib and not for the string's name.

Obs.: I had some trouble with IEEEabrv.bib's encoding. So for this to work, I needed to save it in UTF-8 to run. But I suppose that, once you seem to already be using these abbreviations, you somehow handled that.

• The first one seems a good solution, I'll give it a try. Thanks. – Simone Gaiarin Feb 11 '18 at 13:05