biblatex 中德语引号简写神秘大写

biblatex 中德语引号简写神秘大写

我试图找出德语引号和babel快捷方式的一个奇怪问题。我已经问了另一个问题(使用 biblatex/biber 进行德语引述biblatex),但这是真正重要的 MWE。处理语言设置的 和"`标题字段的第一个位置之间似乎存在一些奇怪的交互。在我的书中,我遇到了这样一种情况,如果标题字段以 开头,则德语简写不起作用"`。我首先注意到这个问题是因为它将整个标题大写。我现在可以在以下示例中重现此问题:

\documentclass{article}

\usepackage[ngerman,main=english]{babel}
\useshorthands*{"}
\addto\extrasenglish{\languageshorthands{ngerman}}

\begin{filecontents}{ref.bib}

@article{Wegener85a,
        Author = {Heide Wegener},
        Journal = {Linguistische Berichte},
        Pages = {127--139},
        Title = {"`Er bekommt widersprochen"' -- Argumente Test/""Test für die Existenz eines Dativpassivs im Deutschen},
        Volume = {96},
        langid = {ngerman},
        Year = {1985}}

@article{Wegener86,
        Author = {Heide Wegener},
        Journal = {Linguistische Berichte},
        Pages = {127--139},
        Title = {\glqq Er bekommt widersprochen"' -- Argumente Test/""Test für die Existenz eines Dativpassivs im Deutschen},
        Volume = {96},
        langid = {ngerman},
        Year = {1986}}



@article{Wegener87,
        Author = {Heide Wegener},
        Journal = {Linguistische Berichte},
        Pages = {127--139},
        Title = {{"`Er bekommt widersprochen"' -- Argumente Test/""Test für die Existenz eines Dativpassivs im Deutschen}},
        Volume = {96},
        Year = {1987}}

@article{Wegener88,
        Author = {Heide Wegener},
        Journal = {Linguistische Berichte},
        Pages = {127--139},
        Title = {{Test "`Er bekommt widersprochen"' -- Argumente Test/""Test für die Existenz eines Dativpassivs im Deutschen}},
        Volume = {96},
        Year = {1988}}
\end{filecontents}

\usepackage{bibentry}

\usepackage[
style=langsci-unified,
 %    autolang=langname,
        backend=biber,
]{biblatex}
\addbibresource{ref.bib}

\begin{document}
Test"=Sequenz "`Ergative"' Verben

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

如果未设置语言 ID,且引号字符位于标题字段的第一个位置,则文本将大写。如果我在开头添加内容,则一切恢复正常。

在此处输入图片描述

答案1

您遇到了biblatex句子大小写 () 实现的特殊之处\MakeSentenceCase以及它对大小写变化的括号保护。biblatex模拟(在 LaTeX 端)BibTeX 使用的大小写变化change.case$biblatex的版本在很大程度上复制了 BibTeX 的行为,但由于它的实现,存在一些差异(其中最重要的记录在手册biblatex,第 253-255 页,版本 3.14,参见https://github.com/plk/biblatex/issues/871)。

让我们看看下面这个更系统的例子

\documentclass{article}

\usepackage[ngerman,main=english]{babel}
\useshorthands*{"}
\addto\extrasenglish{\languageshorthands{ngerman}}

\begin{filecontents}{\jobname.bib}
@article{Wegener85,
  Author  = {Heide Wegener},
  Journal = {Linguistische Berichte},
  Pages   = {127--139},
  Title   = {"`Er bekommt widersprochen"'
             -- Argumente Test/""Test
             für die Existenz eines Dativpassivs im Deutschen},
  Volume  = {96},
  Year    = {1985},
}
@article{Wegener86,
  Author  = {Heide Wegener},
  Journal = {Linguistische Berichte},
  Pages   = {127--139},
  Title   = {{"`Er bekommt widersprochen"'
             -- Argumente Test/""Test
             für die Existenz eines Dativpassivs im Deutschen}},
  Volume  = {96},
  Year    = {1986},
}
@article{Wegener87,
  Author  = {Heide Wegener},
  Journal = {Linguistische Berichte},
  Pages   = {127--139},
  Title   = {{{"`Er bekommt widersprochen"'
             -- Argumente Test/""Test
             für die Existenz eines Dativpassivs im Deutschen}}},
  Volume  = {96},
  Year    = {1987},
}

@article{Wegener95,
  Author  = {Heide Wegener},
  Journal = {Linguistische Berichte},
  Pages   = {127--139},
  Title   = {\glqq Er bekommt widersprochen"'
             -- Argumente Test/""Test
             für die Existenz eines Dativpassivs im Deutschen},
  Volume  = {96},
  Year    = {1995},
}
@article{Wegener96,
  Author  = {Heide Wegener},
  Journal = {Linguistische Berichte},
  Pages   = {127--139},
  Title   = {{\glqq Er bekommt widersprochen"'
             -- Argumente Test/""Test
             für die Existenz eines Dativpassivs im Deutschen}},
  Volume  = {96},
  Year    = {1996},
}
@article{Wegener97,
  Author  = {Heide Wegener},
  Journal = {Linguistische Berichte},
  Pages   = {127--139},
  Title   = {{{\glqq Er bekommt widersprochen"'
             -- Argumente Test/""Test
             für die Existenz eines Dativpassivs im Deutschen}}},
  Volume  = {96},
  Year    = {1997},
}

@article{Wegener05,
  Author  = {Heide Wegener},
  Journal = {Linguistische Berichte},
  Pages   = {127--139},
  Title   = {Test "`Er bekommt widersprochen"'
             -- Argumente Test/""Test
             für die Existenz eines Dativpassivs im Deutschen},
  Volume  = {96},
  Year    = {2005},
}
@article{Wegener06,
  Author  = {Heide Wegener},
  Journal = {Linguistische Berichte},
  Pages   = {127--139},
  Title   = {{Test "`Er bekommt widersprochen"'
             -- Argumente Test/""Test
             für die Existenz eines Dativpassivs im Deutschen}},
  Volume  = {96},
  Year    = {2006},
}
@article{Wegener07,
  Author  = {Heide Wegener},
  Journal = {Linguistische Berichte},
  Pages   = {127--139},
  Title   = {{{Test "`Er bekommt widersprochen"'
             -- Argumente Test/""Test
             für die Existenz eines Dativpassivs im Deutschen}}},
  Volume  = {96},
  Year    = {2007},
}
\end{filecontents}

\usepackage[
style=langsci-unified,
 %    autolang=langname,
        backend=biber,
]{biblatex}
\addbibresource{\jobname.bib}

\begin{document}
Test"=Sequenz "`Ergative"' Verben

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

魏格纳,海德。 1985. “er bekommt widersprochen” – 德语中表示被动语态的存在论证方法。语言学报告 96. 127–139。//Wegener, Heide。 1986. “需要更广泛的支持”——德语中存在DATIVPASSIVS的论证测试/测试。语言学报告 96. 127–139。//Wegener, Heide。 1987. “被更广泛地讨论”——德语中存在定理的论证测试/测试。语言学报告 96.127–139。

在我们开始讨论结果之前,请注意,一般来说不是title一个好主意是,用一对花括号以所见即所得的方式保护整个字段

title = {{Title That Remains Unchanged}},

在英语(以及其他使用句子大小写的语言)中,您只应保护那些需要大小写保护的单词。如果您的标题是不需要句子大小写的外语,则应使用 来说明biblatex这一点langid。(条目中有langid = {ngerman},langid = {german},没有大小写变化。)

也就是说,如果我们必须保护标题的第一个词,我们就会面临同样的根本问题。

解决了这个问题后,首先请注意"和的\glqq行为类似。这是故意的。如果"处于活动状态(通常是因为它是babel简写),它将触发与中的控制序列相同的行为\MakeSentenceCase。我猜这主要是为了能够将"A\"A(对于)视为相同。(用于确保将活动视为宏的Ä方法可能会破坏如果用作“普通字符”而不是其简写容量。)biblatex""

这里的主要问题是biblatexBibTeX 的句子大小写功能将以控制序列开头的括号组(在括号级别 0)视为单个字符。{\"A}也就是说{\relax Foo}被视为单个字符。该函数允许 BibTeX 正确地构建带有重音字符的名字首字母。它也是“多字母首字母”技巧的基础(请参阅BibTeX:将名字缩写为 2 个或 3 个字母(而不是 1 个))。

这种“以控制序列开头的括号组是单个字符”的行为只有在biblatex括号组位于字符串开头时才会成为问题。与 BibTeX 的大小写转换器不同,biblatex的大小写转换器明确将字符串的第一个字符大写。如果字符串以以控制序列开头的括号组开头,则整个组将大写为一个字符。因此{\"a}变成{\"A}(好)并{\relax Foo}变成{\relax FOO}(嗯......)。

  Title   = {{\glqq Er bekommt widersprochen"'
             -- Argumente Test/""Test
             für die Existenz eines Dativpassivs im Deutschen}},

全部的title 被视为单个字符。由于它是字符串中的第一个字符,因此将其全部大写。所以我们得到全大写。

这就是biblatex文档试图解释的

其参数的首字母用 大写\MakeUppercase。这与 BibTeX 的 不同change.case$,后者不会触及其参数的首字母。请注意,以控制序列开头的一对括号将被视为一个字符以进行大写处理。这意味着,用一对括号保护的命令的整个参数都将大写。

对于您来说,有一个简单的方法可以解决这个困境:如果您最终会得到一个以控制序列开头的单括号组,请使用双括号。

  Title   = {{{\glqq Er bekommt widersprochen"'
             -- Argumente Test/""Test
             für die Existenz eines Dativpassivs im Deutschen}}},

将使用双花括号进行大小写保护作为一般规则是很诱人的,但我会尽量抵制这种诱惑。


请注意,的下一个版本biblatex将基于expl3不再表现出这种行为的代码提供一个新的大小写更改函数,并且总体上更加健壮。请参阅https://github.com/plk/biblatex/issues/960https://github.com/plk/biblatex/pull/1005了解背景和更多细节。特别是,可以使用一种不同的大小写保护机制,这种机制不依赖于花括号,因为花括号的含义在 BibTeX 中过于繁重。

相关内容