4

I have this entry in my bib file, which is a book, but lacks location, publisher and year information. I have it in the following form:

@Book{ARBED1965,
  author       = {{Aciéries Réunies de Burbach-Eich-Dudelange}},
  shortauthor  = {{ARBED}},
  title        = {Un demi-siècle d'histoire industrielle 1911--1964},
  date         = {1965~},
  date+an      = {=attributed},
}

I do employ a "circa" date there, provided by biblatex, alongside with the corresponding datecirca option. But that leaves me with an undesired capitalized "Ca." in my bibliography.

Aciéries Réunies de Burbach-Eich-Dudelange. Un demi-siècle d’histoire indus- trielle 1911–1964. Ca. 1965.

It is easy to understand why this happens, in the absence of publisher and location information in the context of the book bibdriver. We could also argue whether @book is the proper entrytype in this case. We could also argue whether "circa" should or shouldn't be capitalized in this case (I happen not to like it). I'd like though to tackle a simple technical aspect of this, which is: what is the proper way to avoid automatic capitalization of a particular localization string in all circumstances?

The only thing I could come up with is \midsentence, as in:

\DefineBibliographyStrings{english}{%
  circa            = {\midsentence{}ca\adddot},
}

Is this really the best alternative for the case?

A MWE:

\documentclass{article}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@Book{ARBED1965,
  author       = {{Aciéries Réunies de Burbach-Eich-Dudelange}},
  shortauthor  = {{ARBED}},
  title        = {Un demi-siècle d'histoire industrielle 1911--1964},
  date         = {1965~},
  date+an      = {=attributed},
}
\end{filecontents}

\usepackage[style=authortitle, datecirca=true]{biblatex}
\addbibresource{\jobname.bib}

\DeclareFieldFormat{date}{%
  \ifdateannotation{date}{attributed}{\mkbibbrackets{#1}}{#1}}

\DefineBibliographyStrings{english}{%
  circa            = {\midsentence{}ca\adddot},
}

\begin{document}

\nocite{*}
\printbibliography

\end{document}
2
  • 2
    The standard trick in the .lbx files is circa = {{}ca\adddot}, (from german.lbx: nodate = {{ohne\space Datum}{{}o\adddot D\adddot}},). The \midsentence shouldn't do a lot here, since the decision whether or not to capitalise should already have been taken when the string gets read.
    – moewe
    Jan 30, 2019 at 11:20
  • @moewe Ah! I hadn't noticed this particular trick. It seems better than \midsentence (though it does work). Would you like to convert your comment to an answer?
    – gusbrs
    Jan 30, 2019 at 11:24

1 Answer 1

2

biblatex grabs the first 'character' from a bibliography string to capitalise it when necessary. In this example biblatex is in sentence beginning mode (because of the period/full stop after the title), so it will try to capitalise circa.

The standard trick to always avoid capitalisation for a particular string is to add an empty group at the beginning

\DefineBibliographyStrings{english}{%
  circa = {{}ca\adddot},
}

This can be found in german.lbx for example (l. 370)

 nodate = {{ohne\space Datum}{{}o\adddot D\adddot}},

In practice everything that does not generate an output and can be grabbed by biblatex's capitalisation handler works, so you could also try

circa = {\relax ca\adddot},

or (following on from your suggestion)

circa = {\midsentence ca\adddot},

The \midsentence specifically is not useful in itself because at the point the string is read, the decision whether or not to capitalise has already been taken. So the \midsentence does not help because it changes the state of the capitalisation tracker, it only helps because it is eaten by the capitalisation macro. That can be confirmed by testing

circa = {\bibsentence ca\adddot},

Alternatively, you can add \midsentence to the date format, where it will have an impact

\DeclareFieldFormat{date}{%
  \midsentence
  \ifdateannotation{date}{attributed}{\mkbibbrackets{#1}}{#1}}
1
  • With an explanation why \midsentence appeared to work included. Thank you!
    – gusbrs
    Jan 30, 2019 at 11:42

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.