# biblatex: semicolon separator for citing multiple sources with \cites

I have kind of the same question as stated in here. Anyway as this approach is already 8 years old it doesnt seem to work anymore.

I use biblatex and biber as well with

\documentclass[a4paper,         % Seitenformat
12pt,                   % Schriftgröße
bibliography=totoc,     % Literaturverzeichnis in das Inhaltsverzeichnis
parskip=false,
abstract=on             % Erstellt Titel für Abstract
]{scrreprt}

\begin{filecontents}{jobname.bib}
@article{Jordan.2015,
author = {Jordan, M. I. and Mitchell, T. M.},
year = {2015},
title = {Machine learning: Trends, perspectives, and prospects},
keywords = {Algorithms;Artificial Intelligence/trends;Computer Systems;Data Interpretation, Statistical;Humans},
pages = {255--260},
pagination = {page},
volume = {349},
journaltitle = {Science},
language = {eng},
doi = {10.1126/science.aaa8415},
number = {6245}
}

@misc{Scherk.,
author = {Scherk, Johannes and P{\"o}chhacker-Tr{\"o}scher, Gerlinde and Wagner, Karina},
year = {2017},
title = {K{\"u}nstliche Intelligenz - Artificial Intelligence},
keywords = {K{\"u}nstliche Intelligenz},
editor = {{P{\"o}chhacker Innovation Consulting}},
abstract = {K{\"u}nstliche Intelligenz},
pagetotal = {54},
file = {kuenstliche_intelligenz.pdf}
}}
\end{filecontents}

\usepackage[style=authoryear,
natbib=true,
backend=biber,
maxcitenames=2,
uniquelist=false,
doi=false,
isbn=false,
dashed=false,
maxbibnames=9,
minbibnames=9,
giveninits=true]{biblatex}

\addbibresource{jobname.bib} % note the .bib is required

\begin{document}

(\cites[vgl.][S. 256 ff.]{Jordan.2015}[vgl.][S. 37 f.]{Scherk.})

\end{document}


What I get is

Even when manually forcing a semicolon ; by

(\cites[vgl.][S. 256 ff.;]{Jordan.2015}[vgl.][S. 37 f.]{Scherk.})


it turns out as

The linked answer is still the correct way to do this and still works. We don't get the expected output in the MWE shown in the question because of the .s at the end of the postnote.

biblatex does a lot of work to avoid unintentional double punctuation. Firstly, there is the punctuation tracker (\setunit) that only prints punctuation in bibmacros and drivers when really needed. Secondly, the punctuation commands \add... try to detect previous punctuation marks and may not print punctuation if that would lead to double punctuation.

The second is what happens here. The \addsemicolon detects the previous . from the page/postnote argument and holds off printing the semicolon to avoid double punctuation.

In this case of course the double punctuation is desired. That is because the . can have two different meanings. It can be the sentence-ending full stop (period) after which double punctuation must be suppressed. Or it can be an abbreviation mark (dot) after which other punctuation marks are usually printed (except for the period). The latter is the case here.

By default biblatex treats a . as a period and thus suppressed double punctuation. You can tell biblatex that a . is actually an abbreviation dot with \isdot. So ff. would become ff.\isdot.

In this particular case, however, there is a much better solution: Use \psq and \psqq.

These two macros are specifically intended to produce "sq." ("f." in German) and "sqq." ("ff." in German) marks without upsetting the punctuation tracker (and without upsetting the page range detector).

Simply write

\parencites[vgl.][256\psqq]{sigfridsson}[vgl.][37\psqq]{worman}


MWE

\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[style=authoryear]{biblatex}