4

I'm currently finalizing a citation style in biblatex for a phd thesis in history. The citation style requested sometimes is a bit... strange. This leads me to the following problem:

All citations use nearly the same citation in the footnote as in the bibliography. Those citations by default are finished with a period, i.e. \finentrypunct is at its default value. Now, suppose I have a cite command like

\cites{LitA}{LitB}

the current behavior is a citation like

Author A: Some interesting book, Somewhere 2016. Author B: Another even more interesting book, Somewhere else 2005. 

What I would like to archive is to replace \finentrypuct just in those situations with a semicolon, i.e. I would like to get

Author A: Some interesting book, Somewhere 2016; Author B: Another even more interesting book, Somewhere else 2005. 

I know that I just could redefine \multicitedelim, but this would leave me with a semicolon after the period and I see no way to remove the period beforehand.

Any ideas?

  • Can you maybe prepare a short MWE of the general situation so we have something to play around with? – moewe Jun 11 '17 at 14:51
  • I will have a try. In this case I'm not sure how trivial the MWE will be, otherwise I would have provided it straight away. – Thilo Jun 11 '17 at 14:55
  • Mhhh, I just played around with the standard styles and they are set up in a way that \finentrypunct is not applied in citations. Please show us a full MWE of your style, I supect there is more to it. – moewe Jun 11 '17 at 14:56
  • I have tried to answer without knowing what exactly your style looks like. I will update as soon as we get more info, but maybe this already helps. – moewe Jun 11 '17 at 15:21
4

This problem occurs if you simply typeset the \finentrypunct by calling \finentrypunct (or \finentry which executes \finentrypunct) directly. Once punctuation has been typeset, there is no easy way to remove it.

Now the naive biblatex solution would be to place \finentrypunct in a \setunit - as is done for most punctuation. This will not work properly, however, because we cannot guarantee that biblatex prints something after the \setunit. And if it does not, then the punctuation is lost.

The standard styles solve this problem by simply not using \finentrypunct in citations.

A solution for your custom style would be to do the same.

  • Don't use \finentrypunct (or \finentry) in your citation commands.
  • Then set \renewcommand*{\multicitedelim}{\addsemicolon\space}
  • Finally, use a wrapper to place the full stop after the last citation. This mirrors what \bibfootnotewrapper and friends do.

    • Define \newcommand*{\citepunctwrapper}[1]{#1\addperiod}
    • Use it for \cite as wrapper

      \DeclareCiteCommand{\cite}[\citepunctwrapper]
        {\usebibmacro{prenote}}%
        {\usebibmacro{citeindex}%
         \usebibmacro{cite}}
        {\multicitedelim}
        {\usebibmacro{postnote}}
      

      and also for \cites

        \DeclareMultiCiteCommand{\cites}[\citepunctwrapper]{\cite}{\multicitedelim}
      

MWE

\documentclass{article}
\usepackage[backend=biber, style=verbose]{biblatex}
\addbibresource{biblatex-examples.bib}

\renewcommand*{\multicitedelim}{\addsemicolon\space}

\newcommand*{\citepunctwrapper}[1]{#1\addperiod}

\DeclareCiteCommand{\cite}[\citepunctwrapper]
  {\usebibmacro{prenote}}%
  {\usebibmacro{citeindex}%
   \usebibmacro{cite}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareMultiCiteCommand{\cites}[\citepunctwrapper]{\cite}{\multicitedelim}

\begin{document}
\cites{sigfridsson}{worman}
\end{document}
| improve this answer | |
  • You've got my respect. That was exactly the problem I was facing and your solution more than sufficient. Thanks! – Thilo Jun 11 '17 at 16:01

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.