For the original question, the modification required is:
\renewbibmacro*{title}{%
\ifthenelse{\iffieldundef{title}\AND\iffieldundef{subtitle}}
{}
{\printtext[title]{%
\printfield[apacase]{title}%
\setunit{\subtitlepunct}%
\printfield[apacase]{subtitle}}%
\setunit{\addspace}%
\printfield{titleaddon}%
\iffieldequalstr{entrytype}{book}%
{\setunit{\addspace}\usebibmacro{bookaddinfo}}%
{}%
\ifthenelse{%
\ifnameundef{author}\AND%
\(\ifnameundef{editor}\AND\NOT\boolean{bbx:editorinauthpos}\)\AND%
\ifnameundef{producer}\AND%
\ifnameundef{director}\AND%
\ifnameundef{writer}}
{\newunit\newblock
\usebibmacro{labelyear+extrayear}}
{}}}
\DeclareFieldFormat{origyear}{%
\mkbibparenss{\bibcpstring{origyear}~\thefield{origyear}%
\iffieldundef{origtitle}
{}%
{\addcolon\addspace\printfield{origtitle}}}%
}
\newbibmacro*{origyear}{%
\ifthenelse{
\NOT\iffieldundef{labelyear}
\AND\NOT\iffieldsequal{labelyear}{origyear}
\OR
\NOT\iffieldsequal{title}{origtitle}}
{\printfield{origyear}}
{}%
}
\DefineBibliographyStrings{german}{%
origyear = {Original erschienen}
}
This can be inserted in the preamble of your document.
For the extended version one has either to introduce new fields (this can be done,by modifying the data model, or by using the BibLaTeX facilities for related
).
EDIT 1 and EDIT 2
To accommodate the case where the author of the original publication is different the first step is to modify the data model, this can be done with:
\begin{filecontents}{biblatex-dm.cfg}
\DeclareDatamodelFields[type=list, datatype=name,skipout=false]{origauthor}
\DeclareDatamodelEntryfields{origauthor}
\end{filecontents}
This generates a file called biblatex-dm.cfg
in the current directory with the instruction about how to extend BibLaTeX data model.
Notice that BibLaTeX provides a titleaddon
field and this could be used to the extra information for the title ("Die Liebe" in the OP).
Eventually, one could add a field titletranslation
for the selfmade translation, i.e., one can include the following two lines in the datamodel file.
\DeclareDatamodelField[type=field, datatype=literal,skipout=false]{titletranslation}
\DeclareDatamodelEntryfields{titletranslation}
Another possibility is to use an "unused" field, for example, reprinttitle
. In what follow I'm going to use this option.
The next step is to modify the appropriate bibmacro
s. In this case, title
and origyear
for the formatting of the title (and related information about the original publication)
\renewbibmacro*{title}{%
\ifthenelse{\iffieldundef{title}\AND\iffieldundef{subtitle}}
{}
{\printtext[title]{%
\printfield[apacase]{title}%
\setunit{\subtitlepunct}%
\printfield[apacase]{subtitle}}%
\setunit{\addspace}%
\printfield{titleaddon}%
\setunit{\addspace}%
\printfield{reprinttitle}%
\iffieldequalstr{entrytype}{book}%
{\setunit{\addspace}\usebibmacro{bookaddinfo}}%
{}%
\ifthenelse{%
\ifnameundef{author}\AND%
\(\ifnameundef{editor}\AND\NOT\boolean{bbx:editorinauthpos}\)\AND%
\ifnameundef{producer}\AND%
\ifnameundef{director}\AND%
\ifnameundef{writer}}
{\newunit\newblock
\usebibmacro{labelyear+extrayear}}
{}}}
For originyear
the first thing to do is to define the format. To this we check that originauthor
is defined, and we set the punctuation accordingly:
\DeclareFieldFormat{origyear}{%
\mkbibparens{\bibcpstring{origyear}~\thefield{origyear}%
\ifnameundef{origauthor}
{}
{\addspace\bibstring{as}\addspace\printnames[FirstLast]{origauthor}}%
\iffieldundef{origtitle}
{}%
{\ifnameundef{origauthor}
{\setunit{\addcolon\addspace}}
{\setunit{\addcomma\addspace}}%
\printfield{origtitle}}}%
}
Then we have to consider the cases when we have to output the information about the original publication (here the condition is that either the year, or the title, or the author(s) is different).
\renewbibmacro*{origyear}{%
\ifthenelse{
\NOT\iffieldsequal{labelyear}{origdateyear}
\OR
\NOT\iffieldsequal{title}{origtitle}
\OR
\NOT\ifnamesequal{author}{origauthor}
}
{\printfield{origyear}}
{}%
}
Caveat A problem with the above solution is that not all bib entry types include instructions to format the information about the original publication using the above method. A more robust technique would be to use the facilities provided by BibLaTeX to handle related publications.
The last step is to use the appropriate value for the localisation strings origyear
and as
.
\NewBibliographyString{origyear,as}
\DefineBibliographyStrings{ngerman}{%
origyear = {Original erschienen},
as = {als}
}
\DefineBibliographyStrings{american}{%
as = {as}
}
Finally, to change the rendering of names, we have to modify the formatting instructions for apaauthor
\DeclareNameFormat{FirstLast}{%
\ifthenelse{\value{listcount}=\maxprtauth\AND\value{listcount}<\value{listtotal}}
{\addcomma\addspace\ldots}
{\ifthenelse{\value{listcount}>\maxprtauth\AND\value{listcount}<\value{listtotal}}
{}
{\iffirstinits
{\usebibmacro{name:first-last}{#1}{#4}{#5}{#7}}
{\usebibmacro{name:first-last}{#1}{#3}{#5}{#7}}}}
\ifmorenames{\andothersdelim\bibstring{andothers}}{}}
Update
A few things have changed since this answer was written.
tl;dr
With a current TeX system you only need one pair of curly braces to protect words starting with Ö
from case changing. (Just like words with US-ASCII chars.)
Full answer
New versions of biblatex-apa
use the language-sensitive \MakeSentenceCase*
macro that tries to apply sentence casing only when it makes sense. \MakeSentenceCase*
will only apply sentence casing if it detects that the current language is English (or another language declared with \DeclareCaseLangs
). To detect the language, the macro takes into account the langid
field of the .bib
entry as well as the currently active language.
That means that in the example, where the main language is German, sentence casing is not applied.
\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[backend=biber, style=apa]{biblatex}
\begin{filecontents}{\jobname.bib}
@book{elch,
author = {Anne Elch},
title = {Eine Theorie über Brontosaurusse},
year = {1972},
publisher = {Monthy \& Co.},
location = {London},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
Lorem \autocite{elch}
\printbibliography
\end{document}
But even in English documents sentence casing can be 'turned off' for foreign-language sources for which it does not make sense if you specify the language in the langid
field.
\documentclass[american]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[backend=biber, style=apa]{biblatex}
\begin{filecontents}{\jobname.bib}
@book{elch,
author = {Anne Elch},
title = {Eine Theorie über Brontosaurusse},
year = {1972},
publisher = {Monthy \& Co.},
location = {London},
langid = {ngerman},
}
@book{elk,
author = {Anne Elk},
title = {A Theory on {Brontosauruses}},
year = {1972},
publisher = {Monthy \& Co.},
location = {London},
langid = {british},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
Lorem \autocite{elch,elk}
\printbibliography
\end{document}
If you absolutely don't want sentence casing for English titles, then you can disable it completely with \DeclareFieldFormat{apacase}{#1}
.
\documentclass[american]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[backend=biber, style=apa]{biblatex}
\DeclareFieldFormat{apacase}{#1}
\begin{filecontents}{\jobname.bib}
@book{elch,
author = {Anne Elch},
title = {Eine Theorie über Brontosaurusse},
year = {1972},
publisher = {Monthy \& Co.},
location = {London},
langid = {ngerman},
}
@book{elk,
author = {Anne Elk},
title = {A Theory on {Brontosauruses}},
year = {1972},
publisher = {Monthy \& Co.},
location = {London},
langid = {british},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
Lorem \autocite{elch,elk}
\printbibliography
\end{document}
All of this means that the entry from the question should be input as
\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[backend=biber, style=apa]{biblatex}
\begin{filecontents}{\jobname.bib}
@incollection{Brosse.1995,
author = {Brösse, Ulrich},
title = {Ökonomisches Verhalten als bester Weg zu einer nachhaltigen Umweltverbesserung},
booktitle = {Ökonomie contra Ökologie?},
year = {1995},
langid = {german},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\begin{document}
Lorem \autocite{sigfridsson,Brosse.1995}
\printbibliography
\end{document}
(though in this instance the langid = {german},
could be dropped because the main document language is already ngerman
).
If you do find yourself in a situation to have to protect a word starting with Ö
in an English language title, for example
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[backend=biber, style=apa]{biblatex}
\begin{filecontents}{\jobname.bib}
@book{elk,
author = {Änne Elk},
title = {The {Öresund}},
year = {1972},
publisher = {Monthy \& Co.},
location = {London},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\begin{document}
Lorem \autocite{sigfridsson,elk}
\printbibliography
\end{document}
then a single pair of braces is enough if you are using an up-to-date TeX installation and your document is encoded in UTF-8 (the LaTeX standard encoding since April 2018) so that you use the new expl3
case changing code.
The old biblatex
case changing code had some peculiarities with respect to non-ASCII characters and their protection. The new expl3
code is much more predictable.
Outdated answer
Some code shown below is obsolete. The hints given here are no longer useful for a current version of biblatex
. This part of the answer is kept for historic interest, but should not be relevant for new documents.
If you are writing in German - or are not too fond of sentence case (in its English meaning, that is capitalisation of the first letter of the sentence, and only that) anyway - you might want to "turn off" the conversion by \DeclareFieldFormat{apacase}{#1}
in the preamble.
If you just have the occasional German entry, or prefer English sentence case, save for very few exceptions, you can go down the road of protecting certain portions of the title from being converted.
For umlauts and curly braces "the more the merrier" seems to be the name of the game.
You will need a total of three pairs of curly braces to protect a single \"O
or Ö
.
It is, however, better to enclose the whole word (not just the first letter) in curly braces to allow LaTeX to achieve proper kerning (see pp. 181 sq. of the biblatex
documentation), in that case two pairs will suffice.
In the following entry, the first two "Ökologie"s in the title
will render as expected whereas the latter two will not; the subtitle
field will be rendered correctly.
@book{umlaut,
author = {Ulf Martin Laut},
title = {Alle {{Ökologie}} ist {{\"Okologie}}, aber {Ökologie} ist {\"Okologie} wird nichts},
subtitle = {Einzelne {Buchstaben} sind noch grässlicher: {{{\"O}}}kologie {{{Ö}}}kologie!},
year = {1995}
}
The MWE
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{csquotes}
\usepackage[backend=biber,sorting=nyt,style=apa]{biblatex}
\DeclareLanguageMapping{ngerman}{ngerman-apa}
\begin{filecontents}{\jobname.bib}
@book{umlaut,
author = {Ulf Martin Laut},
title = {Alle {{Ökologie}} ist {{\"Okologie}}, aber {Ökologie} ist {\"Okologie} wird nichts},
subtitle = {Einzelne {Buchstaben} sind noch grässlicher: {{{\"O}}}kologie {{{Ö}}}kologie!},
year = {1995}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
gives
Best Answer
You might want to try this slightly modified mapping command
It will turn the non-standard
reprintedfrom={something}
intorelated={something}
andrelatedtype={reprintfrom}
.A problem though is
origpages
; the best solution is to add the contents oforigpages
aspages
to the related entry as done above.But if you cannot, for the life of you, live with changing your bibsource, this redefinition of
related:reprintfrom
might be for you.You will have to tell
biblatex
/Biber to recogniseorigpages
though. This can be done viaAnother MWE
To get rid of the
origyear
information at the end of a reprint, we modify the macro to include a test for reprinted entries (it checks ifrelatedtype
is set toreprintfrom
; the mapping takes care of that); the information is skipped if it is a reprint.Both MWEs yield