1

I want to cite an item that appeared in an edited volume the title of which ended with an abbreviation. How can I tell biblatex to treat that dot at the end of booktitle as an abbreviation dot?

The manual points out \isdot, but I seem to be using it wrong. MWE:

\documentclass{article}
\usepackage{filecontents}
\usepackage[style=authoryear]{biblatex}
\begin{filecontents}{bib.bib}
    @incollection{VanRooyFca,
        address = {Place},
        title = {abc},
        booktitle = {Development of xyz (18--20th cent.\isdot)},
        publisher = {Publisher},
        year = {2020}, 
        author = {A. U. Thor},
        editor = {E. di Tor},
    }
\end{filecontents}
\addbibresource{bib.bib}
\begin{document}
    \nocite{*}
    \printbibliography
\end{document}

That comes out as enter image description here but I wanted to get the separating dot between the volume's title and the editors.

(Yes, it is weird that the original publication had an abbreviation in its title)

  • Could you mabye show what you want it to look like? Also: https://tex.stackexchange.com/questions/340478/biblatex-equivalent-to-adddot-or-isdot-for-ellipsis – nhck Feb 21 '20 at 09:49
  • @nhck The output should be "... (18-20th cent.). Ed. by ...". As far as I can see, the question you link treats a general solution, but I think I'd need a case-by-case solution – Felix Emanuel Feb 21 '20 at 09:59
  • There should also be an elipses after by? Otherwise why not use utf8 dots? or booktitle = {Development of xyz \dots (18--20th cent.)}, ? – nhck Feb 21 '20 at 10:13
  • Ah sorry, the dots only mark what I left out (i.e. name of editor after "by", rest of bootktitle before "(18-20th)" – Felix Emanuel Feb 21 '20 at 10:15

2 Answers2

1

One solution is to add another period to the title. Then biblatex will use that as final punctuation.

So this:

\documentclass{article}
\usepackage{filecontents}
\usepackage[style=authoryear]{biblatex}
\begin{filecontents}{bib.bib}
    @incollection{VanRooyFca,
        address = {Place},
        title = {abc},
        booktitle = {Development of xyz (18--20th cent.).},
        publisher = {Publisher},
        year = {2020}, 
        author = {A. U. Thor},
        editor = {E. di Tor},
    }
\end{filecontents}
\addbibresource{bib.bib}
\begin{document}
    \nocite{*}
    \printbibliography
\end{document}

produces this:

cktai
  • 823
1

This is a very interesting issue. biblatex's punctuation tracker is set up in a way that means that it ignores all kinds of parentheses. That means that for the punctuation tracker the title might as well have been

booktitle = {Development of xyz 18--20th cent.\isdot},

In that case it is clear that the punctuation tracker should do its thing and suppress double punctuation (namely, the abbreviation dot and the sentence-ending period afterwards):

*Thor, A. U. (2020). “abc”. In: Development of xyz 18–20th cent.. Ed. by E. di Tor. Place: Publisher.

would look wrong. You'd want

Thor, A. U. (2020). “abc”. In: Development of xyz 18–20th cent. Ed. by E. di Tor. Place: Publisher.

There are two ways to get around this.

The first method is to manually reset the punctuation tracker after the parentheses with \@.

\documentclass{article}

\usepackage[style=authoryear]{biblatex}

\begin{filecontents}{\jobname.bib}
@incollection{VanRooyFca,
  address   = {Place},
  title     = {abc},
  booktitle = {Development of xyz (18--20th cent.\isdot)\@},
  publisher = {Publisher},
  year      = {2020}, 
  author    = {A. U. Thor},
  editor    = {E. di Tor},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
  \nocite{*}
  \printbibliography
\end{document}

The second methods makes sure parentheses are no longer invisible to biblatex's punctuation tracker.

\documentclass{article}

\usepackage[style=authoryear]{biblatex}

\makeatletter
\def\blx@setsfcodes{%
  \let\blx@setsfcodes\relax
  \let\frenchspacing\blx@setfrcodes
  \let\nonfrenchspacing\blx@setencodes
  \ifnum\sfcode`\.>2000
    \blx@setencodes
  \else
    \blx@setfrcodes
  \fi
  \@setquotesfcodes
  \sfcode`\(=\@m
  \sfcode`\)=\@m
  \sfcode`\[=\@m
  \sfcode`\]=\@m
  \sfcode`\<=\@m
  \sfcode`\>=\@m}
\makeatother

\begin{filecontents}{\jobname.bib}
@incollection{VanRooyFca,
  address   = {Place},
  title     = {abc},
  booktitle = {Development of xyz (18--20th cent.\isdot)},
  publisher = {Publisher},
  year      = {2020}, 
  author    = {A. U. Thor},
  editor    = {E. di Tor},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
  \nocite{*}
  \printbibliography
\end{document}

The output in both cases is the desired

Thor, A. U. (2020). “abc”. In: *Development of xyz (18–20th cent.)*. Ed. by E. di Tor. Place: Publisher.

A very similar issue was discussed in BibLaTeX Punctuation after parentheses, but there \isdot was enough, because ., i.e. abbreviaton-dot & comma is a valid combination.

moewe
  • 175,683
  • It's very convenient that the user is able to reset the tracker with \@, much obliged – Felix Emanuel Feb 22 '20 at 14:11
  • @FelixEmanuel \@ is actually a standard LaTeX command that was intended to be used for something else: https://tex.stackexchange.com/q/22561/35864. biblatex builds on space factors for its punctuation tracker and conveniently \@ does the right thing here. – moewe Feb 22 '20 at 14:28