3

The problem

I'd like to display conference presentations with a different preposition introducing them. E.g., in English, it would be preferable to have "At: Conference Name" than "In: Conference Name". The latter appears because I've been recording conferences as articles, and the name of the conference as a journal—perhaps there is a better way?

MWE

Here's an MWE for the normal behaviour:

\documentclass{article}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{public2000,
  author = {Sam Public},
  year = {2000},
  journal = {Journal of Amazing Ideas},
  title = {Some Hargle Bargle},
  pubtype = {peerreviewied}
}

@article{public2001,
  author = {Sam Public},
  year = {2001},
  journal = {Conference of Amazing Ideas},
  title = {Some Hargle Bargle},
  pubtype = {presentation}
}
\end{filecontents}
\usepackage[backend=biber,style=authoryear-comp]{biblatex}
\addbibresource{\jobname.bib}

\begin{document}
\cite{public2000}, \cite{public2001}

\printbibliography
\end{document}

And here's what it results in: enter image description here

Attempts at a solution

To obtain the desired behaviour, I've added a pubtype field (see MWE), and I've tried hardcoding the output to "At:" based on the value of pubtype:

\renewbibmacro{in:}{%
  \ifentrytype{article}{
    \iffieldequalstr{pubtype}{presentation}{%
        \printtext{At:\intitlepunct}%
    }{%
      \printtext{\bibstring{in}\intitlepunct}%
    }%
  }{\printtext{\bibstring{in}\intitlepunct}}
}

However, it doesn't seem to consider pubtype a valid field—or at least, it doesn't seem to be able to test its value. (The output is unchanged, though it does print "At:" if take it out of the if block.)

I've tried defining pubtype as a field a few different ways based on answers that appeared to be related, but nothing seemed to change anything.

  • 1
    Is your public2001 really an @article or rather an @inprocedings? Note that there already is the field entrysubtype which you could use instead of a self-defined pubtype. – moewe May 25 '18 at 5:24
  • Let's say that in this hypothetical example there could be both @articles and @inproceedingses :) Are you implying that entrysubtype is limited to just @inproceedings, or does it work for anything? – Jonathan W. May 25 '18 at 6:04
  • No entrysubtype can be used for all entry types. I was just thrown off by the @article, with the intended code what is normally the journal/journaltitle would end up after the "At:" and I could not imagine that making sense (a conference is not a journal and vice versa), so I suggested @inproceedings where it could make sense. – moewe May 25 '18 at 6:15
  • If you mean that it might make sense to use @inproceedings for a conference presentation, then the conference would end up as the booktitle, which probably makes as much sense as journal or journaltitle. And proceedings papers and presentations are different beasts anyway—you might want to cite one or the other, even when they have the same title, author, and year. (Of course the proceedings paper would be preferable as a tangible source of information.) – Jonathan W. May 25 '18 at 6:21
  • 2
    Mhhh, my point is that this looks like an abuse of the @article type. Using @inproceedings is probably also a bit of a stretch over the intended meaning (published paper version), but it comes closer in meaning and has the additional advantage of venue and eventdate fields. In fact @unpublished might be an ever better possibility (that is what the talk is, after all), especially since it supports eventtitle, eventdate and venue since biblatex 3.11. – moewe May 25 '18 at 6:26
2

David Purton has answered the immediate issue at hand, but let me collect my comments and additional thoughts into an answer.

  1. You could use bibstrings instead of a hard-coded "At:", that way it can be translated into other languages more easily.
  2. All entry types support the entrysubtype field and some types support an additional type field (@unpublished, @report, @thesis, @misc, @manual, @booklet, ...). The contents of the type field are normally printed in the bibliography, entrysubtype is not printed. So you could just use entrysubtype instead of a self-defined pubtype that needs to be made kn known to biblatex and Biber with a .dbx file.
  3. I would not use @article for talks/presentations. @articles are really only for papers published in a journal.
    • I would be kind of OK with using @inproceedings, but that is still a bit of a stretch. @inproceedings is intended for published papers in conference proceedings, so it comes closer to what we have here, but doesn't quite cut it. It has the advantage of supporting the useful fields eventtitle, eventdate and venue, though.
    • Since biblatex 3.11, @unpublished also supports eventtitle, eventdate and venue (by popular demand). So @unpublished is a very good idea if you are not too worried about backwards compatibility.

So I would probably try something like

\documentclass{article}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{public2000,
  author = {Sam Public},
  year = {2000},
  journal = {Journal of Amazing Ideas},
  title = {Some Hargle Bargle},
}

@unpublished{public2001,
  author       = {Sam Public},
  date         = {2001-04-06},
  eventtitle   = {Conference of Amazing Ideas},
  venue        = {Duckburg},
  eventdate    = {2001-04-05/2001-04-07},
  title        = {Some Hargle Bargle},
  type         = {presentation},
}
\end{filecontents}
\usepackage[backend=biber,style=authoryear-comp]{biblatex}
\addbibresource{\jobname.bib}

\NewBibliographyString{at}
\NewBibliographyString{presentation}
\DefineBibliographyStrings{english}{
   at           = {at},
   presentation = {presentation}, 
}

\DeclareFieldFormat[unpublished]{eventtitle}{%
  \iffieldequalstr{type}{presentation}
    {\bibstring{at}\addcolon\space}
    {}%
  #1}

\begin{document}
\cite{public2000,public2001}

\printbibliography
\end{document}

enter image description here

If you prefer not to see the "Presentation" in the bibliography, use entrysubtype instead of type (also in the test of the eventtitle field format).

\DeclareFieldFormat[unpublished]{eventtitle}{%
  \iffieldequalstr{entrysubtype}{presentation}
    {\bibstring{at}\addcolon\space}
    {}%
  #1}
3

A custom field needs to be defined before you can use it.

You can put the definition in biblatex-dm.cfg in the same directory as your tex file.

MWE

\documentclass{article}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{public2000,
  author = {Sam Public},
  year = {2000},
  journal = {Journal of Amazing Ideas},
  title = {Some Hargle Bargle},
  pubtype = {peerreviewied}
}

@article{public2001,
  author = {Sam Public},
  year = {2001},
  journal = {Conference of Amazing Ideas},
  title = {Some Hargle Bargle},
  pubtype = {presentation}
}
\end{filecontents}

\begin{filecontents}{biblatex-dm.cfg}
\DeclareDatamodelFields[type=field, datatype=literal]{pubtype}
\end{filecontents}

\usepackage[style=authoryear-comp]{biblatex}
\addbibresource{\jobname.bib}

\renewbibmacro{in:}{%
  \ifentrytype{article}
    {\iffieldequalstr{pubtype}{presentation}
       {\printtext{At}}
       {\bibstring{in}}}
    {\printtext{\bibstring{in}}}%
  \printunit{\intitlepunct}}

\begin{document}
\cite{public2000}, \cite{public2001}

\printbibliography
\end{document}

enter image description here

  • How would a custom field be defined in the dbx file? – Jonathan W. May 25 '18 at 1:18
  • 1
    You can do it in a few ways, e.g., with a source map or by one of the ways from section 4.5.4 of the biblatex manual. I'll update my answer for you. – David Purton May 25 '18 at 1:40
  • So according to tex.stackexchange.com/a/175780/90570, I should be using \printunit too. It makes the space (\intitlepunct) a much more reasonable size. – Jonathan W. May 25 '18 at 4:55
  • @JonathanW. Yes, good pick up. I'll update things. – David Purton May 25 '18 at 5:14
  • 1
    If you are using \printunit you can move it out of the \printtext (that feels nicer to me) and you can even drop the \printtext for the \bibstrings. – moewe May 25 '18 at 5:22

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.