Ich bekomme den Fehler bei \DeclareFieldFormat[article]{title}{\MakeSentenceCase{#1}} auch mit der neusten Version von biblatex und gehe nicht davon aus, dass es eine Version gibt, in der es jemals funktioniert hat.
\DeclareFieldFormat[article]{titlecase}{\MakeSentenceCase{#1}} hingegen funktioniert prinzipiell, es macht nur nicht genau das, was Du Dir wünschst.
Um zu verstehen, wieso das so ist, sehen wir uns mal an, wie title und titlecase im Allgemeinen verwendet werden
\newbibmacro*{title}{%
\ifboolexpr{
test {\iffieldundef{title}}
and
test {\iffieldundef{subtitle}}
}
{}
{\printtext[title]{%
\printfield[titlecase]{title}%
\setunit{\subtitlepunct}%
\printfield[titlecase]{subtitle}}%
\newunit}%
\printfield{titleaddon}}
Dieser Abschnitt zeigt, dass normalerweise das Feldformat title nicht direkt auf den Feldinhalt des title-Feldes in der .bib-Datei losgelassen wird, sondern stattdessen "nachträglich" auf den ganzen Block mit den \printfield-Befehlen losgelassen wird.
Das Format titlecase hingegen bekommt den Feldinhalt unverändert kredenzt.
Das ist wichtig, da das Makro \MakeSentenceCase zu den etwas komplizierteren Makros gehört (meiner Meinung nach grenzt es fast an
Schwarzmagie). Denn TeX ist nicht unbedingt für die Aufgabe prädestiniert, die es ausführt. Das führt dazu, dass dieses Makro gewissen Einschränkungen unterliegt, es ist sehr wählerisch, was seine Eingabewerte angeht.
Normaler Text wie Lorem ipsum dolor sit amet im Argument ist kein Problem, kompliziertere Konstrukte mit weiteren Makros hingegen können schwierig sein, ganz besonders, wenn die Ausgaben dieser Makros noch weiter verarbeitet werden müssen.
Im title-Format können wir \MakeSentenceCase also nicht verwenden, stattdessen gibt es titlecase.
Das Problem bei titlecase ist, dass biblatex da einen Alles-oder-Nichts-Ansatz hat: Entweder werden alle title-Artigen Felder behandelt oder keine. Das optionale Argument für den Typ hilft Dir nicht weiter, da Du hier die zwei Felder title und journaltitle unabhängig voneinander bearbeiten möchtest.
Wenn man das ordentlich machen möchte, würde ich
\renewbibmacro*{title}{%
\ifboolexpr{
test {\iffieldundef{title}}
and
test {\iffieldundef{subtitle}}
}
{}
{\printtext[title]{%
\printfield[titlecase:title]{title}%
\setunit{\subtitlepunct}%
\printfield[titlecase:title]{subtitle}}%
\newunit}%
\printfield{titleaddon}}
\renewbibmacro*{booktitle}{%
\ifboolexpr{
test {\iffieldundef{booktitle}}
and
test {\iffieldundef{booksubtitle}}
}
{}
{\printtext[booktitle]{%
\printfield[titlecase:booktitle]{booktitle}%
\setunit{\subtitlepunct}%
\printfield[titlecase:booktitle]{booksubtitle}}%
\newunit}%
\printfield{booktitleaddon}}
\renewbibmacro*{maintitle}{%
\ifboolexpr{
test {\iffieldundef{maintitle}}
and
test {\iffieldundef{mainsubtitle}}
}
{}
{\printtext[maintitle]{%
\printfield[titlecase:maintitle]{maintitle}%
\setunit{\subtitlepunct}%
\printfield[titlecase:maintitle]{mainsubtitle}}%
\newunit}%
\printfield{maintitleaddon}}
\renewbibmacro*{journal}{%
\ifboolexpr{
test {\iffieldundef{journaltitle}}
and
test {\iffieldundef{journalsubtitle}}
}
{}
{\printtext[journaltitle]{%
\printfield[titlecase:journaltitle]{journaltitle}%
\setunit{\subtitlepunct}%
\printfield[titlecase:journaltitle]{journalsubtitle}}}}
\renewbibmacro*{periodical}{%
\ifboolexpr{
test {\iffieldundef{title}}
and
test {\iffieldundef{subtitle}}
}
{}
{\printtext[title]{%
\printfield[titlecase:title]{title}%
\setunit{\subtitlepunct}%
\printfield[titlecase:title]{subtitle}}}}
\renewbibmacro*{issue}{%
\ifboolexpr{
test {\iffieldundef{issuetitle}}
and
test {\iffieldundef{issuesubtitle}}
}
{}
{\printtext[issuetitle]{%
\printfield[titlecase:issuetitle]{issuetitle}%
\setunit{\subtitlepunct}%
\printfield[titlecase:issuetitle]{issuesubtitle}}}}
empfehlen. Dann ist die Einstellung von titlecase für jedes title-artige Feld separat geregelt.
Du möchtest dann nur \DeclareFieldFormat{title}{\MakeSentenceCase*{#1}}.
Man beachte den Stern, denn \MakeSentenceCase* ist der Variante ohne Stern vorzuziehen.
Die gesternte Variante hört nämlich auf die Spracheinstellung, während die ungesternte und ungestüme Variante den Sentence Case auch bei Sprachen einsetzt, die damit nichts anfangen können.
Darauf bezieht sich auch die von Dir zitierte Stelle in der Dokuementation.
Das "
y default, converting to sentence case is enabled for the following language identifiers" bedeutet dabei nicht, dass die Konversion automatisch stattfindet, es bedeutet lediglich, dass sie (nur) für diese Sprachen zur Anwendung kommt, wenn sie denn mit \MakeSentenceCase* angefordert wird. Die Stelle ist vielleicht etwas verwirrend, wenn sie aus dem Zusammenhang gerissen wird; wenn man den Satz im Kontext der Fußnote liest, in der er steht, impliziert er nicht mehr wirklich, dass die Case Conversion überall stattfindet. Mir fällt leider gerade keine klarere Formulierung ein, Verbesserungsvorschläge sind aber immer gerne gesehen: https://github.com/plk/biblatex/issues
Ich bekomme den Fehler bei [tt]\DeclareFieldFormat[article]{title}{\MakeSentenceCase{#1}}[/tt] auch mit der neusten Version von [tt]biblatex[/tt] und gehe nicht davon aus, dass es eine Version gibt, in der es jemals funktioniert hat.
[tt]\DeclareFieldFormat[article]{titlecase}{\MakeSentenceCase{#1}}[/tt] hingegen funktioniert prinzipiell, es macht nur nicht genau das, was Du Dir wünschst.
Um zu verstehen, wieso das so ist, sehen wir uns mal an, wie [tt]title[/tt] und [tt]titlecase[/tt] im Allgemeinen verwendet werden
[code]\newbibmacro*{title}{%
\ifboolexpr{
test {\iffieldundef{title}}
and
test {\iffieldundef{subtitle}}
}
{}
{\printtext[title]{%
\printfield[titlecase]{title}%
\setunit{\subtitlepunct}%
\printfield[titlecase]{subtitle}}%
\newunit}%
\printfield{titleaddon}}[/code]
Dieser Abschnitt zeigt, dass normalerweise das Feldformat [tt]title[/tt] nicht direkt auf den Feldinhalt des [tt]title[/tt]-Feldes in der [tt].bib[/tt]-Datei losgelassen wird, sondern stattdessen "nachträglich" auf den ganzen Block mit den [tt]\printfield[/tt]-Befehlen losgelassen wird.
Das Format [tt]titlecase[/tt] hingegen bekommt den Feldinhalt unverändert kredenzt.
Das ist wichtig, da das Makro [tt]\MakeSentenceCase[/tt] zu den etwas komplizierteren Makros gehört (meiner Meinung nach grenzt es fast an [url=https://github.com/plk/biblatex/blob/dc644b3341d2771a0d2dca35ff653e6edb275f7c/tex/latex/biblatex/biblatex.sty#L3625-L3796]Schwarzmagie[/url]). Denn TeX ist nicht unbedingt für die Aufgabe prädestiniert, die es ausführt. Das führt dazu, dass dieses Makro gewissen Einschränkungen unterliegt, es ist sehr wählerisch, was seine Eingabewerte angeht.
Normaler Text wie [tt]Lorem ipsum dolor sit amet[/tt] im Argument ist kein Problem, kompliziertere Konstrukte mit weiteren Makros hingegen können schwierig sein, ganz besonders, wenn die Ausgaben dieser Makros noch weiter verarbeitet werden müssen.
Im [tt]title[/tt]-Format können wir [tt]\MakeSentenceCase[/tt] also nicht verwenden, stattdessen gibt es [tt]titlecase[/tt].
Das Problem bei [tt]titlecase[/tt] ist, dass [tt]biblatex[/tt] da einen Alles-oder-Nichts-Ansatz hat: Entweder werden alle [tt]title[/tt]-Artigen Felder behandelt oder keine. Das optionale Argument für den Typ hilft Dir nicht weiter, da Du hier die zwei Felder [tt]title[/tt] und [tt]journaltitle[/tt] unabhängig voneinander bearbeiten möchtest.
Wenn man das ordentlich machen möchte, würde ich
[code]\renewbibmacro*{title}{%
\ifboolexpr{
test {\iffieldundef{title}}
and
test {\iffieldundef{subtitle}}
}
{}
{\printtext[title]{%
\printfield[titlecase:title]{title}%
\setunit{\subtitlepunct}%
\printfield[titlecase:title]{subtitle}}%
\newunit}%
\printfield{titleaddon}}
\renewbibmacro*{booktitle}{%
\ifboolexpr{
test {\iffieldundef{booktitle}}
and
test {\iffieldundef{booksubtitle}}
}
{}
{\printtext[booktitle]{%
\printfield[titlecase:booktitle]{booktitle}%
\setunit{\subtitlepunct}%
\printfield[titlecase:booktitle]{booksubtitle}}%
\newunit}%
\printfield{booktitleaddon}}
\renewbibmacro*{maintitle}{%
\ifboolexpr{
test {\iffieldundef{maintitle}}
and
test {\iffieldundef{mainsubtitle}}
}
{}
{\printtext[maintitle]{%
\printfield[titlecase:maintitle]{maintitle}%
\setunit{\subtitlepunct}%
\printfield[titlecase:maintitle]{mainsubtitle}}%
\newunit}%
\printfield{maintitleaddon}}
\renewbibmacro*{journal}{%
\ifboolexpr{
test {\iffieldundef{journaltitle}}
and
test {\iffieldundef{journalsubtitle}}
}
{}
{\printtext[journaltitle]{%
\printfield[titlecase:journaltitle]{journaltitle}%
\setunit{\subtitlepunct}%
\printfield[titlecase:journaltitle]{journalsubtitle}}}}
\renewbibmacro*{periodical}{%
\ifboolexpr{
test {\iffieldundef{title}}
and
test {\iffieldundef{subtitle}}
}
{}
{\printtext[title]{%
\printfield[titlecase:title]{title}%
\setunit{\subtitlepunct}%
\printfield[titlecase:title]{subtitle}}}}
\renewbibmacro*{issue}{%
\ifboolexpr{
test {\iffieldundef{issuetitle}}
and
test {\iffieldundef{issuesubtitle}}
}
{}
{\printtext[issuetitle]{%
\printfield[titlecase:issuetitle]{issuetitle}%
\setunit{\subtitlepunct}%
\printfield[titlecase:issuetitle]{issuesubtitle}}}}[/code]
[url=https://github.com/moewew/biblatex-ext/commit/5b11faabd2b5c5e9399f0eaca3c1e6e549a78890]empfehlen[/url]. Dann ist die Einstellung von [tt]titlecase[/tt] für jedes [tt]title[/tt]-artige Feld separat geregelt.
Du möchtest dann nur [tt]\DeclareFieldFormat{title}{\MakeSentenceCase*{#1}}[/tt].
Man beachte den Stern, denn [tt]\MakeSentenceCase*[/tt] ist der Variante ohne Stern vorzuziehen.
Die gesternte Variante hört nämlich auf die Spracheinstellung, während die ungesternte und ungestüme Variante den Sentence Case auch bei Sprachen einsetzt, die damit nichts anfangen können.
Darauf bezieht sich auch die von Dir zitierte Stelle in der Dokuementation.
Das "[b]y default, converting to sentence case is enabled for the following language identifiers" bedeutet dabei nicht, dass die Konversion automatisch stattfindet, es bedeutet lediglich, dass sie (nur) für diese Sprachen zur Anwendung kommt, wenn sie denn mit [tt]\MakeSentenceCase*[/tt] angefordert wird. Die Stelle ist vielleicht etwas verwirrend, wenn sie aus dem Zusammenhang gerissen wird; wenn man den Satz im Kontext der Fußnote liest, in der er steht, impliziert er nicht mehr wirklich, dass die Case Conversion überall stattfindet. Mir fällt leider gerade keine klarere Formulierung ein, Verbesserungsvorschläge sind aber immer gerne gesehen: https://github.com/plk/biblatex/issues