# Custom biblatex style for IET Journal (bbx)

I would adapt the numeric-comp style in biblatex to give the following reference/citation format sepcified by the IET Journals:

Journal article

Smith, T., and Jones, M.: ‘The title of the paper’, IET Syst. Biol., 2007, 1, (2), pp. 1–7

Conference paper

Jones, L., and Brown, D.: ‘The title of the conference paper’. Proc. Int. Conf. Systems Biology, Stockholm, Sweden, May 2006, pp. 1–7

Book, book chapter and manual

Hodges, A., and Smith, N.: ‘The title of the book chapter’, in Brown, S. (Ed.): ‘Handbook of Systems Biology’ (IEE Press, 2004, 1st edn.), pp. 1–7

Harrison, E.A., and Abbott, C.: ‘The title of the book’ (XYZ Press, 2005, 2nd edn. 2006)

Thesis

Abbott, N.L.: ‘The title of the thesis’. PhD thesis, XYZ University, 2005

but I have no idea where to start. This is what I have done so far:

\documentclass{article}

\usepackage[style=numeric-comp,sorting=none,firstinits=true,maxbibnames=999,isbn=false,doi=false]{biblatex}
\DeclareNameAlias{default}{last-first}
\DeclareFieldFormat
[article,inbook,incollection,inproceedings,patent,thesis,unpublished]
{title}{#1'}
\DefineBibliographyStrings{english}{%
edition = {edn.}
}
\DeclareFieldFormat[article]{volume}{\mkbibbold{#1}}
\DeclareFieldFormat[article]{number}{\mkbibparens{#1}}
\renewbibmacro*{volume+number+eid}{%
\printfield{volume}%
\printfield{number}%
\printfield{eid}}
\renewbibmacro{in:}{%
\ifentrytype{article}{%
}{%
\printtext{\bibstring{in}\intitlepunct}%
}%
}
\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@ARTICLE{zierler_linear_1959,
author = {Zierler, N.},
title = {Linear recurring sequences},
journaltitle = {J. Soc. Ind. Appl. Math.},
year={1959},
volume = {7},
number = {1},
pages = {31--48}
}
@incollection{serfling_asymptotic_2011,
title = {Asymptotic relative efficiency in estimation},
volume = {1},
isbn = {978-3-642-04897-5},
booktitle = {International Encyclopedia of Statistical Science},
publisher = {Springer},
author = {Serfling, Robert},
editor = {Lovric, Miodrag},
year = {2011},
pages = {68--72}
}
@PHDTHESIS{enqvist_linear_2005,
author = {Anon, B.},
title = {A PhD Thesis},
school = {\LaTeX University},
year = {1999},
location = {London}
}
@inproceedings{wong_sysid_2012,
author = {Anon, B.},
title = {Writing in \LaTeX},
eventtitle = {Some conference},
location = {Brussels, Belgium},
eventdate = {2012-07}
}
\end{filecontents}

\nocite{*}

\begin{document}

\printbibliography

\end{document}


gives

Zierler, N., ‘Linear recurring sequences’, J. Soc. Ind. Appl. Math. 7, (1) (1959), pp. 31–48.

Serfling, R., ‘Asymptotic relative efficiency in estimation’, in: Interna- tional Encyclopedia of Statistical Science, ed. by Lovric, M., vol. 1, London: Springer, 2011, pp. 68–72.

Anon, B., ‘A PhD Thesis’, PhD thesis, London: LATEX University, 1999.

Anon, B., ‘Writing in LATEX’, in: Some conference (July 2012), Brussels, Belgium.

which isn't exactly right. Noticeably, lack of colons, parentheses in book publishers, etc

Thank you very much in advance.

-

Let's tackle it systematically.

First locate the relevant driver for an entry type that's causing problems: in this case book (well, actually, in your data incollection: but we're much better of starting with book). We find that, after a bit of digging in standard.bbx (edited).

\DeclareBibliographyDriver{book}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{author/editor+others/translator+others}%
\setunit{\labelnamepunct}\newblock
\usebibmacro{maintitle+title}%
...
\newunit\newblock
\printfield{edition}%
...
\newunit\newblock
\usebibmacro{publisher+location+date}%
\newunit\newblock
....
\usebibmacro{finentry}}


Almost immediately we get a clue to the first problem -- the colon. It looks as if \labelnamepunct gets printed after the author. That turns out to be common to all the drivers we are interested in, and we can redefine it to obtain our colon:

\renewcommand\labelnamepunct{\addcolon\space}


The publisher information is trickier. Let's identify what we want. The information in parentheses seems to consist of the publisher, then a comma, then the original year of publication, then the edition (including 1st), then NO comma, then the year of publication of the most recent edition if it hasn't been printed before. What a muddle!

Our first thought might be to fiddle with the publisher+location+date macro. But if we look at standard.def we can see that it's used in a variety of places, not just books and book-like documents; so we might want to be careful. For the moment, it seems safer to define a new macro. Let's take it in stages.

Normally I'd start with a wrapper to make sure there was something to print. But actually we know there will be, because if nothing else everything will be a first edition!

\newbibmacro{publication:info}{%
\printtext{\bibopenparen}
% PUBLISHER,
% ORIGINAL YEAR IF THERE IS ONE OTHERWISE YEAR IF THERE IS ONE,
% EDITION or 1st EDITION
% YEAR IF NOT ALREADY PRINTED
\printtext{\bibcloseparen}}


That gives us a skeleton. Now we can fill in the parts.

Publisher is easy:

  \printlist{publisher}%
\newunit


Original or most recent year is a bit trickier: we need to test and clear the year field if it is used to stop it being printed twice

\iffieldundef{origyear}
{\iffieldundef{year}
{}
{\printfield{year}%
\clearfield{year}}}
{\printfield{origyear}%
\clearfield{origyear}}%
\newunit


Edition has only one complication: if no edition has been given, we assume the first (which apparently gets printed -- not something I've ever seen!)

  \iffieldundef{edition}
{\printtext{\mkbibordinal{1}\space\bibstring{edition}}}
{\printfield{edition}}


Then we have a complication: we don't want a comma, but a space before the year (if it remains to be printed). Since we have cleared the field if it's already been used, we don't need to do any checking

  \setunit{\addspace}%
\printfield{year}%


And finally we have to reckon with the possibility that we may have some stray punctuation hanging around, so we get rid of that before closing the parens;

  \setunit{}%
\printtext{\bibcloseparen}}


Having done that we then need to reincorporate it into our driver. Since we are going to be handling the edition in the publication:info macro we delete the lines dealing with that. We then incorporate the publication:info, but since this is parenthetical, we put spaces around it. So we replace the lines around \usebibmacro{publisher+location+date} as follows:

\setunit{\addspace}\newblock
\usebibmacro{publication:info}%


Now we test this in various ways, and if we are happy it's working for a book, we then work out what other drivers need to have the edition and publisher info replaced: certainly inbook and incollection: possibly others.

The end result of the amendment to the book driver is given at the end of this long answer. I've taken it slowly because if you are working on a standard style it may be helpful to see some tips about how to tackle the task; I don't say they are perfect, but they work for me most of the time. Do remember that if this is intended to be a standard style you need to reckon with the possibility of less-than-perfect data, and decide how graceful you will be with it. And you need lots of test data and to test constantly, because it's terribly easy to make a small change that causes havoc, such as a missing comment character in a macro that throws all your spacing.

\renewcommand{\labelnamepunct}{\addcolon\space}

\DeclareBibliographyDriver{book}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{author/editor+others/translator+others}%
\setunit{\labelnamepunct}\newblock
\usebibmacro{maintitle+title}%
\newunit
\printlist{language}%
\newunit\newblock
\usebibmacro{byauthor}%
\newunit\newblock
\usebibmacro{byeditor+others}%
\newunit\newblock
\iffieldundef{maintitle}
{\printfield{volume}%
\printfield{part}}
{}%
\newunit
\printfield{volumes}%
\newunit\newblock
\usebibmacro{series+number}%
\newunit\newblock
\printfield{note}%
\usebibmacro{publication:info}%
\usebibmacro{chapter+pages}%
\newunit
\printfield{pagetotal}%
\newunit\newblock
\iftoggle{bbx:isbn}
{\printfield{isbn}}
{}%
\newunit\newblock
\usebibmacro{doi+eprint+url}%
\newunit\newblock
\setunit{\bibpagerefpunct}\newblock
\usebibmacro{pageref}%
\usebibmacro{finentry}}

\newbibmacro{publication:info}{%
\printtext{\bibopenparen}%
\printlist{publisher}%
\newunit
\iffieldundef{origyear}
{\iffieldundef{year}
{}
{\printfield{year}%
\clearfield{year}}}
{\printfield{origyear}%
\clearfield{origyear}}%
\newunit
\iffieldundef{edition}
{\printtext{\mkbibordinal{1}\space\bibstring{edition}}}
{\printfield{edition}}%
\printfield{year}%
\setunit{}%
\printtext{\bibcloseparen}}

-
thank you that is extremely helpful. I learnt a lot and I was able to re-write the incollection and inprocedings driver! –  Mobius Pizza Jul 1 '12 at 15:26
Would you be so kind to share your code? I'm also struggling with the IET idea of bibliographic references... –  Alexander Serebrenik Jul 9 '12 at 19:28
@AlexanderSerebrenik Sorry I didn't notice your request as you did not tag my name. Check my own answer below. –  Mobius Pizza Oct 4 '12 at 14:55

As requested this was the header I used for my IET paper some may find useful. The support for the bibliography is no way complete but works for article, book and inproceedings.

\documentclass[10pt]{article}
\usepackage[T1]{fontenc}
\usepackage{setspace}
\usepackage{authblk} %\author block
\usepackage{graphicx}
\usepackage{amsmath,amssymb}
\usepackage[UKenglish]{babel}% Recommended for biblatex
\usepackage{csquotes}% Recommended for biblatex
\usepackage{txfonts}% Times like fonts
\usepackage{fix-cm}% Fix font size warnings
\usepackage[margin=1in]{geometry}
%Figure captions
\usepackage{caption}
\usepackage[caption=false,font=footnotesize]{subfig}
\usetikzlibrary{patterns,shapes.geometric,arrows,positioning}
%===============================================
%BIBLATEX package customization for IET format:-
\usepackage[backend=bibtex,style=numeric-comp,sorting=none,firstinits=true,maxbibnames=999,isbn=false,doi=false]{biblatex}
\DeclareNameAlias{default}{last-first}
\DeclareFieldFormat
[article,inbook,incollection,inproceedings,patent,thesis,unpublished]
{title}{\mkbibquote{#1\isdot}} %title field is put inside quotation marks
\DefineBibliographyStrings{english}{%
january = {January},
february = {February},
march = {March},
april = {April},
may = {May},
june = {June},
july = {July},
august = {August},
september = {September},
october = {October},
november = {November},
december = {December}
}
\DeclareFieldFormat[article,inproceedings]{volume}{\mkbibbold{#1}} %Bold volume numbers
\DeclareFieldFormat[article,inproceedings]{number}{\mkbibparens{#1}} %Isse number in parentheses
\DeclareFieldFormat{part}{\bibstring{part}~#1}% physical part of a logical volume
\DeclareFieldFormat[inproceedings]{note}{\MakeCapital{#1}} %Handling conferences where proceedings are not yet available by exploting the note field, e.g. "presented at the"
\DeclareFieldFormat{labelnumberwidth}{#1}
\DeclareFieldFormat{shorthandwidth}{\mkbibbrackets{#1}}
\AtEveryBibitem{\ifentrytype{article}{\clearfield{month}}{}}
\renewbibmacro*{byeditor}{% Switch position of byeditor string and names
\ifnameundef{editor}
{}
{\printnames[byeditor]{editor}%
\usebibmacro{bytypestrg}{editor}{editor}%
\newunit}%
\usebibmacro{byeditorx}}
\renewbibmacro*{byeditor+others}{% Switch position of byeditor string and names
\ifnameundef{editor}
{}
{\printnames[byeditor]{editor}%
\clearname{editor}%
\newunit}%
\usebibmacro{byeditorx}%
\usebibmacro{bytranslator+others}}
\renewcommand{\intitlepunct}{\space} %Remove defaul colon of in:
\newbibmacro{publication:info}{%Redefine publishing macro
\printtext{\bibopenparen}%
\printlist{publisher}%
\newunit
\iffieldundef{origyear}
{\iffieldundef{year}
{}
{\printfield{year}%
\clearfield{year}}}
{\printfield{origyear}% print original year if exists
\clearfield{origyear}}% clear the year field if it is used to stop it being printed twice
\newunit
\iffieldundef{edition}
{\printtext{\mkbibordinal{1}\space\bibstring{edition}}} %if no edition has been given, we assume the first
{\printfield{edition}}%
\printfield{year}% We cleared the field if already used before, no need to check
\setunit{}%
\printtext{\bibcloseparen}}

\renewbibmacro*{volume+number+eid}{%
\printfield{volume}%
\printfield{number}%
\printfield{eid}}
\renewbibmacro{in:}{%
\ifentrytype{article}{% remove 'in' string in articles
}{%
\printtext{\bibstring{in}\intitlepunct}%
}%
}
\renewbibmacro*{issue+date}{%redefined to remove parentheses surrounding date
\iffieldundef{issue}
{\usebibmacro{date}}
{\printfield{issue}%
\usebibmacro{date}}%
\newunit}
\renewbibmacro*{event+venue+date}{%redefined to remove parentheses surrounding date
\printfield{eventtitle}%
\ifboolexpr{
test {\iffieldundef{venue}}
and
test {\iffieldundef{eventyear}}
}
{}
\printtext{%
\printfield{venue}%
\printeventdate}}%
\newunit}
\renewbibmacro*{journal+issuetitle}{%
\usebibmacro{journal}%
\usebibmacro{issue+date}%
\usebibmacro{issue}%
\iffieldundef{series}
{}
{\newunit
\printfield{series}%
\usebibmacro{volume+number+eid}%
}

\DeclareBibliographyDriver{book}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{author/editor+others/translator+others}%
\setunit{\labelnamepunct}\newblock
\usebibmacro{maintitle+title}%
\newunit
\printlist{language}%
\newunit\newblock
\usebibmacro{byauthor}%
\newunit\newblock
\usebibmacro{byeditor+others}%
\newunit\newblock
\iffieldundef{maintitle}
{\printfield{volume}%
\printfield{part}}
{}%
\newunit
\printfield{volumes}%
\newunit\newblock
\usebibmacro{series+number}%
\newunit\newblock
\printfield{note}%
\usebibmacro{publication:info}% Replaced original publication definition
\usebibmacro{chapter+pages}%
\newunit
\printfield{pagetotal}%
\newunit\newblock
\iftoggle{bbx:isbn}
{\printfield{isbn}}
{}%
\newunit\newblock
\usebibmacro{doi+eprint+url}%
\newunit\newblock
\setunit{\bibpagerefpunct}\newblock
\usebibmacro{pageref}%
\usebibmacro{finentry}}

\DeclareBibliographyDriver{incollection}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{author/translator+others}%
\setunit{\labelnamepunct}\newblock
\newunit
\printlist{language}%
\usebibmacro{in:}% Moved in: before editors
\usebibmacro{byeditor+others}%
\setunit{\labelnamepunct}\newblock
\usebibmacro{maintitle+booktitle}%
\newunit\newblock
\iffieldundef{maintitle}
{\printfield{volume}%
\printfield{part}}
{}%
\newunit
\printfield{volumes}%
\newunit\newblock
\usebibmacro{series+number}%
\newunit\newblock
\printfield{note}%
\usebibmacro{publication:info}%
\usebibmacro{chapter+pages}%
\newunit\newblock
\iftoggle{bbx:isbn}
{\printfield{isbn}}
{}%
\newunit\newblock
\usebibmacro{doi+eprint+url}%
\newunit\newblock
\setunit{\bibpagerefpunct}\newblock
\usebibmacro{pageref}%
\usebibmacro{finentry}}

\DeclareBibliographyDriver{inproceedings}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{author/translator+others}%
\setunit{\labelnamepunct}\newblock
\usebibmacro{title}%
\newunit
\printlist{language}%
\newunit\newblock
\usebibmacro{byauthor}%
\iffieldundef{note}
{\printtext{Proc.\space}}
\usebibmacro{maintitle+booktitle}%
\setunit{}\newblock
\usebibmacro{event+venue+date}%
\newunit\newblock
\usebibmacro{byeditor+others}%
\newunit\newblock
\iffieldundef{maintitle}
{\printfield{volume}%
\printfield{part}}
{}%
\newunit
\printfield{volumes}%
\newunit\newblock
\usebibmacro{series+number}%
\newunit\newblock
\printlist{organization}%
\newunit
\usebibmacro{publisher+location+date}%
\newunit\newblock
\usebibmacro{chapter+pages}%
\newunit\newblock
\iftoggle{bbx:isbn}
{\printfield{isbn}}
{}%
\newunit\newblock
\usebibmacro{doi+eprint+url}%
\newunit\newblock
\setunit{\bibpagerefpunct}\newblock
\usebibmacro{pageref}%
\usebibmacro{finentry}}
%============END BIBLATEX CUSTOMIZATION=================
%Custom macros
%Universal referencing scheme:
\def\figname{Fig.~} %Define label for citing figures
\def\tblname{Table~} %Define label for citing figures
\def\eqname{} %Define label for citing an equation
\def\eqnames{} %Define label for citing equations
\def\secname{Section~} %Define label for citing a section
\def\secnames{Sections~} %Define label for citing sections
\usepackage{xstring} %Required for macro \uniref
\newcommand{\uniref}[1]{%
\IfBeginWith*{#1}{eqn:}{%
\eqname\eqref{#1}%
}{%
\IfBeginWith*{#1}{fig:}{%
\figname\ref{#1}%
}{%
\IfBeginWith*{#1}{sec:}{%
\secname\ref{#1}%
}{%
\ref{#1}%
}%
}%
}%
}%
\newcommand{\sub}[1]{\ensuremath{_\textup{#1}}} %upright subscripts
\newcommand{\super}[1]{\text{\textsuperscript{#1}}} %superscripts
\newcommand{\Exp}[1]{\ensuremath{\operatorname{E}{\left[#1\right]}}} %Expectation operator
\newcommand{\tsfrac}[2]{\text{\sfrac{#1}{#2}}} %sfrac in text mode typesetting

%Single-column-figures width
\def\singleColFigWidth{3.2in}

\usepackage{sectsty}
\sectionfont{\sffamily\large\bfseries}
\subsectionfont{\sffamily\normalsize\mdseries\itshape}

%authblk package options
\renewcommand\Authfont{\itshape\large}
\renewcommand\Affilfont{\itshape\normalsize}

\author[1]{A.~N.~Anon}
\affil[1]{The Institution}
\title{A very interesting paper}
\maketitle
{\bfseries\noindent Abstract:~} Abstract begins...
`
-

For anyone who finds this question looking for an IET conference BibTeX style file, I have uploaded one that I used for a recent publication in an IET conference here. It comes with no warranties and is obviously not backed by the IET in any way, but it worked ok for my needs. I hope that this may be of use to someone.

-
if your iet-.bst efforts are accepted by the great editor gods, it would be good to have them on ctan ... –  wasteofspace Jul 20 '14 at 15:57
Just to clarify this is bibtex not biblatex? –  Mobius Pizza Jul 21 '14 at 17:32
@MobiusPizza Yes, you are tight, this is for BibTeX, not biblatex. –  zelanix Jul 21 '14 at 21:13