Publication Lists with BibLaTeX
Tags: research, howtos, latex
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:
- Publications.pdf, the finished publication list in all its glory
- Publications.tex, different ways of typesetting everything
- Publications.bib, an example bibliography
-
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! ↩︎
-
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. ↩︎
-
Notice the loving use of additional kerning to make the symbol fit properly next to the name. ↩︎