5

I'd like to print a colon after a period, i.e. after Hrsg. (German version of eds.). How can I achieve to have a colon after the string for {editors}?

Picture

enter image description here

MWE

\documentclass[
a4paper,
12pt,
ngerman
]{scrartcl}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage[ngerman]{babel}

\usepackage[
language=german,
style=authoryear-ibid,
backend=biber,
hyperref=true,
dashed=false,
isbn=false,
doi=false,
maxcitenames=2,
maxbibnames=99,
sorting=nyt,
firstinits=true,
uniquename=init,
uniquelist=false,
autocite=footnote,
ibidtracker=true,
date=comp,
mincrossrefs=1,
]{biblatex}
\usepackage{xpatch}

\DefineBibliographyStrings{german}{%
    byeditor = {Hrsg.},%
    byeditor = {Hrsg.},%
    andothers={et \addabbrvspace al\adddot},
}
\renewbibmacro*{byeditor+others}{%
    \ifnameundef{editor}
    {}
    {\usebibmacro{byeditor+othersstrg}%
        \setunit{\addcolon\addspace}%
        \printnames[byeditor]{editor}%
        \newunit%
        \clearname{editor}%
        \newunit}
    \usebibmacro{byeditorx}%
    \usebibmacro{bytranslator+others}}

\begin{filecontents}{\jobname.bib}
@incollection{abc,
Title                    = {Stuff},
Author                   = {Lamp, Jones},
Date                     = {2011},
Crossref ={ddd}
}
@collection{ddd,
    Title= {Words},
    Editor={Smith, John and Doe, Jane},
    Date={2012},
    Location={Towntown}
}
\end{filecontents}

\addbibresource{\jobname.bib}
\nocite{*}

\listfiles

\begin{document}
Words.

\printbibliography
\end{document}
2
  • 1
    Just go with byeditor = {Hrsg\adddot} instead of byeditor = {Hrsg.} (see In biblatex, treat periods in journal as abbreviation dots for example). biblatex by default thinks a "." is a full stop and suppresses following punctuation to avoid double punctuation, if an "." is actually an abbreviation dot, you need to tell biblatex, either by issuing .\isdot, or by using the appropriate \adddot command.
    – moewe
    Sep 9, 2014 at 15:02
  • @moewe That worked. Please provide your comment as a reply so I can mark it as solved.
    – henry
    Sep 9, 2014 at 15:10

1 Answer 1

5

That behaviour is due to biblatex's punctuation tracker. biblatex tries - with all its might - to avoid double punctuation like ".," or ":." and the like.

The "." character can have to different "meanings", it can be (1) a full stop signalling the end of a sentence, or (2) it can be an abbreviation dot indicating an abbreviation. By default, biblatex's punctuation tracker will treat any "." it encounters as full stops (i.e. sentence endings). Obviously it is not desirable to have a colon directly after a full stop.

But here, in "Hrsg.", the "." is an abbreviation dot, and as such (and unlike the full stop) has no particular aversion to being followed by a colon or a comma.

So all we need to do is to convince biblatex that the "." in "Hrsg." is a dot. This can be done by the \isdot command (see biblatex documentation §4.7.3 Adding Punctuation, p. 199)

\isdot Turns a previously inserted literal period into an abbreviation dot. In contrast to \adddot, nothing is inserted if this command is not preceded by a period.

So that would be byeditor = {Hrsg.\isdot} then.

In this particular case, however, (especially when defining bibstrings) \adddot is more appropriate (see p. 198 of the previously mentioned section in the doc)

\adddot Adds a period unless it is preceded by any punctuation mark. The purpose of this command is inserting the dot after an abbreviation. Any dot inserted this way is recognized as such by the other punctuation commands. This command may also be used to turn a previously inserted literal period into an abbreviation dot.

So we just write

byeditor = {Hrsg\adddot}

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .