14

I am using BibLaTeX+Biber to generate the bibliography of my thesis. I use a customised bibliography styles (based on BiBLaTeX' numeric-comp).

For example, here is my style definition for "inproceedings" entries, along with some redefined helper commands:

%load numeric-comp
\RequireBibliographyStyle{numeric-comp} %in turn that one requires standard.bbx

%This redefines the doi+eprint+url macro from standard.bbx (biblatex v1.6).
% Changes: \newblock instead of \newunit\newblock, to avoid periods after DOIs (\newunit = ". ")
% It should be prettier that way because we put DOIs and URLs on a new line (see below).
% Does not print eprint (for now)
\renewbibmacro*{doi+eprint+url}{%
  \iftoggle{bbx:doi}
    {\printfield{doi}}
    {}%
  \newblock
  %\iftoggle{bbx:eprint}
  %  {\usebibmacro{eprint}}
  %  {}%
  %\newblock
  \iftoggle{bbx:url}
    {\usebibmacro{url+urldate}}
    {}}

%Override declarations from biblatex.def (biblatex v1.6); Changes: newlines before DOI, URL, ISSN, ISBN and ISRN (+ colon in same font as label)
\DeclareFieldFormat{doi}{%
  \\\mkbibacro{DOI\addcolon}\space
  \ifhyperref
    {\href{http://dx.doi.org/#1}{#1}} %used to be \nolinkurl{#1} instead of #1, which is a clever trick but it I don't want the font mismatch with issn/isbn numbers (since (nolink)urls are using a different font)
    {#1}} %idem
\DeclareFieldFormat{url}{\\\mkbibacro{URL\addcolon}\space\url{#1}}
\DeclareFieldFormat{isbn}{\\\mkbibacro{ISBN\addcolon}\space #1}
\DeclareFieldFormat{isrn}{\\\mkbibacro{ISRN\addcolon}\space #1}
\DeclareFieldFormat{issn}{\\\mkbibacro{ISSN\addcolon}\space #1}

%%For (in)proceedings: only print publication date when keyword "-showpubdate" is present (to avoid repetion, date is usually already in booktitle or booksubtitle)
%%Based on publisher+location+date macro from standard.bbx (biblatex v1.6).
\newbibmacro*{publisher+location+pubdate}{%
  \printlist{location}%
  \iflistundef{publisher}
    {\setunit*{\addcomma\space}}
    {\setunit*{\addcolon\space}}%
  \printlist{publisher}%
  \ifkeyword{-showpubdate}%
  {\setunit*{\addcomma\space}%
   \usebibmacro{date}}%
  {}%
  \newunit}

% Inproceedings (changes: also print ISSN; disable event+venue+date, in our database this is already in the booktitle field, no time/use to split it off)
\DeclareBibliographyDriver{inproceedings}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/translator+others}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{title}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \usebibmacro{in:}%
  \usebibmacro{maintitle+booktitle}%
  \newunit\newblock
  %%%\usebibmacro{event+venue+date}%!!! (disabled)
  %%%\newunit\newblock
  \usebibmacro{byeditor+others}%
  \newunit\newblock
  \iffieldundef{maintitle}
    {\iffieldundef{series}% !!!
      {\printfield{volume}}% !!!
      {}% !!!
     \printfield{part}}
    {}%
  \newunit
  \printfield{volumes}%
  \newunit\newblock
  \usebibmacro{series+number}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \printlist{organization}%
  \newunit
  \usebibmacro{publisher+location+pubdate}%
  \newunit\newblock
  \usebibmacro{chapter+pages}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \usebibmacro{finentry}%
  \iftoggle{bbx:isbn}
    {\printfield{isbn}
    \newblock
    \printfield{issn}
    }
    {}%
  \newblock
  \usebibmacro{doi+eprint+url}%
  }

Now consider this entry:

@INPROCEEDINGS{Stevens2010a,
  author = {{M}atthias {S}tevens and {E}llie {D}'{H}ondt},
  title = {{C}rowdsourcing of {P}ollution {D}ata using {S}martphones},
  booktitle = {Proceedings of the Workshop on Ubiquitous Crowdsourcing, held at
    Ubicomp '10 (Copenhagen, Denmark, September 26-29, 2010)},
  year = {2010},
  month = {September},
  url = {http://soft.vub.ac.be/Publications/2010/vub-tr-soft-10-15.pdf}
}

When I cite this somewhere in the text using \cite{Stevens2010a}, this produces the following entry in the bibliography:

Result in bibliography (with dot, correct)

This is what I want it to look like. Notice the "." before the newline and "URL".
But when I put an in-place citation (in the text itself) using \fullcite{Stevens2010a}, the result is:

Full cite result (no dot, incorrect)

Notice that here the "." is missing.

Does anyone know how I can make the \fullcite result look exactly like the \cite result? Or in other words, how I can add that "." in the \fullcite result?

13

Like bibliography entries and \footfullcite, \fullcite is generated by the bibliography driver. The only difference is that \fullcite doesn't set \finentrypunct.

You can apply edits to the finentry bibliography macro to resolve this difference. See the code below for a demonstration. I've also illustrated another approach to line-breaking before doi/url and use of the xpatch package.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[american]{babel}
\usepackage{csquotes}
\usepackage[style=numeric-comp,dateabbrev=false]{biblatex}
\usepackage[colorlinks]{hyperref}
\usepackage{xpatch}

\newtoggle{bbx:urlbreak}

% Set \finentrypunct unless the entry ends with an URL
\xpretobibmacro{finentry}
  {\iftoggle{bbx:urlbreak}
     {\nopunct}
     {\ifboolexpr{ test {\ifcitation} and not test {\iffootnote} }
        {\finentrypunct}
        {}}%
   \global\togglefalse{bbx:urlbreak}}
  {}{}

\newbibmacro*{bbx:parunit}{%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \clearlist{pageref}%
  \setunit{%
    \adddot\par\noindent\nobreak%
    \global\toggletrue{bbx:urlbreak}}}

% Insert linebreak before printing URLs
\xpretobibmacro{doi+eprint+url}{\usebibmacro{bbx:parunit}}{}{}
\xpretobibmacro{url+urldate}{\usebibmacro{bbx:parunit}}{}{}

% Suppress eprint
\xpretobibdriver{inproceedings}{\clearfield{eprint}}{}{}

% Suppress date, event data
\renewbibmacro*{date}{\ifkeyword{-showdate}{}{\printdate}}
\renewbibmacro{event+venue+date}{}

% Print ISSN
\xpatchbibdriver{inproceedings}
  {\printfield{isbn}}
  {\printfield{isbn}\newunit\newblock\printfield{issn}}
  {}{}

\begin{filecontents}{\jobname.bib}
@INPROCEEDINGS{stevens,
  author = {Matthias Stevens and Ellie D'Hondt},
  title = {Crowdsourcing of Pollution Data using Smartphones},
  booktitle = {Proceedings of the Workshop on Ubiquitous Crowdsourcing, held at
    Ubicomp '10 (Copenhagen, Denmark, September 26-29, 2010)},
  keywords = {-showdate},
  year = {2010},
  month = {9},
  url = {http://soft.vub.ac.be/Publications/2010/vub-tr-soft-10-15.pdf}}
@INPROCEEDINGS{test,
  author = {John Doe and Jane Doe},
  title = {Seminar Title},
  booktitle = {Proceedings Title},
  year = {2010},
  month = {12},
  isbn = {1234},
  issn = {5678},
  eprint = {http://eprint.com}}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
\null\vfill\noindent
\fullcite{test} \\
\fullcite{stevens} \\
Filler text.\footfullcite{test}
More filler text.\footfullcite{stevens}
\printbibliography
\end{document}

enter image description here

  • Thanks! However, would this xpatch stuff also work if I put in my bbx (biblatex bibliography style) file? Or does this only work in tex/cls? – Matthias Feb 2 '12 at 22:47
  • 1
    @Matthias It should work provided that the patching commands come after \RequirePackage{xpatch} and the bibmacro/driver definitions. – Audrey Feb 2 '12 at 23:03
6

Though not as extensive as Audrey's helpful answer, I found solution that worked for my needs (I only wanted to change the number of authors in the citation). Full credit should go to the github user aboruvka who provided an answer while responding to a biblatex issue on github. Below is the code copied from his/her post. My addition of a period after {\thefield{entrytype}} is more of a hack than a generic solution.

\DeclareCiteCommand{\fullcite}
  {\usebibmacro{prenote}}
  {\usedriver
     {\defcounter{minnames}{6}%
      \defcounter{maxnames}{6}}
     {\thefield{entrytype}}.}
  {\multicitedelim}
  {\usebibmacro{postnote}}

After adding this to the preamble, my \fullcite references appear the same as they would in my bibliography.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.