Publication Lists with BibLaTeX

Tags: research, howtos, latex

Published on
« Previous post: Taming the E-Mail Avalanche — Next post: A Simple and Cheap Recording Setup for … »

As your scientific career advances, you will have to supply publication lists, sometimes also known as ‘research output lists’ or some such nonsense,1 for all kinds of purposes. I used to do this manually, but with an increasing number of publications and requirements for the publication lists, I started to lose track.

Following my maxim of ‘automate the boring stuff if you need it repeatedly’, I developed a solution based on BibLaTeX to typeset my publication list for me. The best thing: it can be easily adjusted to fit different occasions, as we will see!

Preparing a .bib file and loading biblatex

To get started, you will first need to store your publications in a bibliography file. See my previous post on how to keep a bibliography for details on how to accomplish this. I will use a simple entry of an actual publication of mine as an example:

@InProceedings{Moor20a,
  author        = {Moor, Michael and Horn, Max and Rieck, Bastian and Borgwardt, Karsten},
  author+an     = {1=first; 2=first; 3=highlight,last; 4=last},
  eprint        = {1906.00722},
  archiveprefix = {arXiv},
  title         = {Topological Autoencoders},
  year          = {2020},
  booktitle     = {Proceedings of the 37th International Conference on Machine Learning~(ICML)},
  series        = {Proceedings of Machine Learning Research},
  publisher     = {PMLR},
  number        = {119},
  editor        = {Daumé~III, Hal and Singh, Aarti},
  pages         = {7045--7054},
}

This entry is nothing out of the ordinary—except for the author+an field, whose purpose will become clear later on. Putting this in a file Publications.bib, we may now start a new LaTeX document called Publications.tex. The file can use any document class of your choice, but the important parts are how we load the biblatex package:

\usepackage[
  backend      = biber,
  doi          = false,
  giveninits   = false,
  maxcitenames = 99,
  isbn         = false,
  url          = false,
]{biblatex}

\addbibresource{Publications.bib}

Notice that biblatex already provides some global options for including/excluding some fields. For example, if I need a publication list with additional details about where to find the publication, I could set doi = true to include DOIs whenever available. Likewise, if I want to save some space, I could set giveninits = true to ensure that only the initials of first names are used, leading to ‘B. Rieck’ as opposed to ‘Bastian Rieck’.

Clearing certain fields

If I need more control and want to remove specific fields, I can use use \AtEveryCitekey and \AtEveryBibitem. For example, to remove the month, the editor, and the location of every entry, we could use the following construction:

\AtEveryBibitem{\clearfield{month}}
\AtEveryCitekey{\clearfield{month}}
\AtEveryBibitem{\clearname{editor}}
\AtEveryCitekey{\clearname{editor}}
\AtEveryBibitem{\clearlist{location}}
\AtEveryCitekey{\clearlist{location}}

The apparent duplication of commands is only required if we want to use \printbibliography and \fullcite (see below for more details on this). If you are content with only using \fullcite, it is sufficient to use \AtEveryCitekey.

The neat thing is that this all works without changing your original Publications.bib file, making it very easy to print a condensed variant or an extended variant of your bibliography as the occasion requires. The example also demonstrates that different fields require different commands; see the BibLaTeX documentation for more details.

Changing the way certain entries are formatted

As a personal preference, I like to change the way certain elements are typeset. For example, I tend to prefer titles being typeset in italics, whereas the journal name itself should just be typeset in an upright font—briefly put, I want my publication list to follow the manually-curated entries on my research page. If your preference is different, feel free to adjust this to your heart’s desire!

\DeclareFieldFormat[article, incollection, inproceedings, misc, unpublished]{title}{\textit{#1}}
\DeclareFieldFormat[article]{journaltitle}{\upshape{#1}}
\DeclareFieldFormat[incollection, inproceedings]{booktitle}{\upshape{#1}}

For even more control over how certain entries are printed, you can update internal macros. To remove the date from an issue of a journal article, you can update the issue+date macro, for instance:

\renewbibmacro*{issue+date}{%
  \setunit{\addcomma\space}
    \iffieldundef{issue}
      {\usebibmacro{date}}
      {\printfield{issue}%
       \setunit*{\addspace}%
       \usebibmacro{date}%
      }%
  \newunit%
}

See the file standard.bbx of your local BibLaTeX installation for an overview of all the macros. Their number is legion—and I have to admit that I am now quite content with their default settings in most cases, except for the way the publisher and location are being printed. In lieu of the default macro, which employs a colon for separating the publisher and the location, I prefer commas, so I use the following construction:

\renewbibmacro*{publisher+location+date}{%
  \printlist{publisher}%
  \setunit*{\addcomma\space}%
  \printlist{location}%
  \setunit*{\addcomma\space}%
  \usebibmacro{date}%
  \newunit%
}

This is probably less important to you if you do not use the location field; and a quick check of my own bibliography shows that I mostly dropped the field altogether because it does not provide any added value for me.

Putting it all together

To actually print out the entries in your document, you have multiple options. The first option entails making use of \printbibliography, thus losing out on some customisation options, whereas the second option involves using \fullcite, which requires some manual interventions but is overall more flexible.

Option I: \printbibliography

Your main document is very simple in this case:

\begin{document}
  \nocite{*}
  \printbibliography[title=Peer-reviewed Articles]
\end{document}

Short, sweet, and still somewhat customisable! For example, if you want to print out only articles of a certain type, you could add a keywords entry to your bibliography, and use the following construction:

  \printbibliography[title=Posters, keyword=poster]

What I dislike about this solution is that I often have to pick the articles I want to print quite carefully; many of them require additional annotations. Moreover, I prefer to have a running number of my publications in a publication list. For this reason, I prefer to use \fullcite.

Option II: \fullcite

Here, your document structure becomes a little bit more convoluted, but you also gain additional control over how entries are formatted. The primary advantages of this approach are that you can drop publications easily (in case you are restricted to publications of a certain area), you can change the ordering, and you can use one running counter of publications, which some funding agencies like to see because it more publications means more science means more relevance, or something like that. Here’s how you accomplish such a list:

\usepackage{enumitem}

\begin{document}
  \section*{Conference publications}

  \begin{enumerate}
    \item\fullcite{Moor20a}
  \end{enumerate}

  \section*{Journal publications}

  \begin{enumerate}[resume]
    \item\fullcite{Bock18}
  \end{enumerate}
\end{document}

The neat thing about this list is that you can use the margin of the page to add additional annotations. For example, to highlight your favourite publications2, you can use the following construction:

\usepackage{fontawesome}
\usepackage{marginnote}

% Controls the way these notes are being typeset with respect to the
% margin of the page. Update this as necessary!
\setlength{\marginparsep}{0.5cm}

\newcommand{\favourite}{%
  \strut\marginnote{\faStar}%
}

This gives you the opportunity to highlight a publication as follows:

\begin{enumerate}
  \item\favourite\fullcite{Moor20a}
\end{enumerate}

The price that you pay for this flexibility is that you have to list your publications manually, but at least you control their ordering and only have to adjust all their details in one single file; you can use the same list of publications with a different preamble to easily change the way things are being depicted. I like to keep a ‘condensed’ version of the publication list handy for grants, while my CV contains everything.

Caveat lector: There might be some minor differences in how \fullcite prints an entry as compared to \printbibliography. If you want to add a period after each list entry, you need to change how \fullcite works under the hood. For example, you could redefine \fullcite as follows:

\DeclareCiteCommand{\fullcite}
  {\usebibmacro{prenote}}
  {\usedriver{}{\thefield{entrytype}}.}
  {\multicitedelim}
  {\usebibmacro{postnote}}

Alternatively, if it is important to you, you can also add the periods manually.

Adding annotations

As a finishing touch, I always aim to highlight equal contributions, equal supervision, and myself in the publication list. The first two things are primary done out of fairness—if a publication has multiple authors who contributed to it, any publication list should reflect this—while the last thing is done out of an instinct for self-preservation: since the publication list is supposed to show my own contributions to science, I figured it made sense to highlight my own name. To accomplish this, I used the +an mechanism that permits us to include annotations for BibLaTeX to use later on when typesetting a citation.

This can be accomplished by updating the way author names are being printed:

\renewcommand*{\mkbibcompletename}[1]{%
  \ifitemannotation{highlight}
    {\textbf{#1}}
    {#1}%
  \ifitemannotation{first}
    {\kern-0.05em\textsuperscript{$\dagger$}}
    {}%
  \ifitemannotation{last}
    {\textsuperscript{$\ddagger$}}
    {}%
}

You can see that is use a bold font to print all names that contain the highlight annotation. For the equal contributions, I use first and last to indicate joint first authorship and joint supervision, respectively. Feel free to change the symbols here—I like the dagger to indicate joint first authors3, and the diesis or double dagger to indicate joint supervision. I have also seen people use an asterisk* for this purpose. This can be accomplished by using \textsuperscript{$\ast$}; do not use \textsuperscript{*}, as this will result in improper vertical placement.

Coda

I am sure that even more customisations are easily possible, but for now, this provides a nice scaffold for obtaining high-quality, low-maintenance publication lists. Here are the source files, with some additional comments:


  1. The output of research should be foremost knowledge and insight, of course these are harder to measure. I promise to keep the proselytising to a minimum in the remainder of this post! ↩︎

  2. Personally, all my publications are favourite publications—I truly mean it—but some funding agencies force you to select the top $n$ ones. Personally, I suspect that they only do this to check whether you read the rules and regulations. ↩︎

  3. Notice the loving use of additional kerning to make the symbol fit properly next to the name. ↩︎