我们如何让 Polyglossia 语言变体与 Biblatex 书目兼容?

我们如何让 Polyglossia 语言变体与 Biblatex 书目兼容?

介绍

我正在biblatex使用 (修改日期 2016-08-03 18:31) 后端测试软件包的开发版本 (3.5) biber。这些版本添加了各种日期支持(例如近似日期、公元前/公元前日期、日期时间)。

我正在尝试biblatex使用polyglossia(版本 1.42.1;打包于 2016-03-29)。特别是书目条目中的日期会受到polyglossia语言variant设置的影响。主要是 - 日、月、年顺序;以及月份名称 - 取决于语言。

我正在使用 xetex 引擎。

我的最小工作示例(MWE)是:

\documentclass{article}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
  @article{barker_2016_swiss,
    author = {Barker, Anne},
    title = {Swiss voters say no to guaranteed free money},
    date = {2016-06-06},
    journaltitle = {ABC News},
  }
\end{filecontents}

\usepackage{fontspec}

%\usepackage[british]{babel}

\usepackage{polyglossia}
\setdefaultlanguage[variant=british]{english}

\usepackage[%
  style=authoryear,%
  alldates=long,%
  language=auto,%
  autolang=langname,%
  backend=biber]{biblatex}

\addbibresource{\jobname.bib}

\begin{document}
  Current language: \currentlang. \autocite{barker_2016_swiss}
  \printbibliography
\end{document}

结果

我得到:

当前语言:英语。(Barker 2016)
参考
安妮·巴克 (Anne Barker) (2016 年 6 月 6 日)。“瑞士选民拒绝保证免费资金”。引自:ABC 新闻。

也就是说,输出似乎将日期格式化为美式英语(这是 biblatex 后续版本的默认设置)。

预期的

然而,我预期的是“当前语言:英国”,日期格式为“2016 年 6 月 6 日”。事实上,如果我将 MWE 更改为使用babel...,我就会得到这样的结果。

\usepackage[british]{babel}

%\usepackage{polyglossia}
%\setdefaultlanguage[variant=british]{english}

...也就是说,结果是(正如我所料)...

当前语言:英语。(Barker 2016)
参考
巴克,安妮 (2016 年 6 月 6 日)。“瑞士选民拒绝保证免费资金”。出处:ABC 新闻。

使用主要语言测试多语能力

此外,如果我使用polyglossia主语言设置,而不是变体,那么我会得到预期的结果。例如,如果在我的 MWE 中我有

%\usepackage[british]{babel}

\usepackage{polyglossia}
\setdefaultlanguage{french}

...然后我得到...

当前语言:法语。(Barker 2016)
参考
Barker, Anne (2016 年 6 月 6 日)。“瑞士选民拒绝保证免费资金”。出处:ABC 新闻。

问题摘要

总之,使用我的 MWE,babel和在使用和时分别polyglossia按预期工作。但使用时不起作用。biblatex\usepackage[*mainlanguage*]{babel}\setdefaultlanguage{*mainlanguage*}polyglossia\setdefaultlanguage[variant=*somevariantlanguage*]{english}

其他考虑因素

我已经将它交给 biblatex 开发人员(日期支持)、@PLK 和他们写

我认为 Polyglossia 仍然存在一些问题 - 我认为已经发布了一个待发布版本来解决其中的一些问题。

我曾尝试使用 LuaTex 引擎,但没有成功。

设置\usepackage[ ... language=british ....]{biblatex}没有帮助。

此时感觉像是 Polyglossia 中的一个错误。但在向 Polyglossia github 提出问题之前,如果有人能指出我做错了什么,我将不胜感激。此外,如果有人能用生产版本重现此问题,biblatex/biber我就可以免去降级的繁琐程序。

更新:

2016-08-16 07:39:从评论来看,这似乎是多语症的问题。所以我发了Github > Polyglossia > 将 Polyglossia 语言变体暴露给其他软件包,例如 Biblatex。#154. (编辑:2016-08-16 08:00 更正链接)

2016-08-17 19:31 我的解决方法是使用babel(感谢@UlrikeFischer 扫清障碍)。

答案1

更新的所有多语言功能都应在v3.14(或更高版本)和v1.46(或更高版本)biblatex上按预期运行。biblatexpolyglossia

MWEbabel现在给出了预期的(等效)输出。

polyglossia如果您在使用和时遇到任何问题biblatex,请更新您的系统,以便至少拥有biblatex3.14(和匹配的 Biber 版本)和polyglossia1.46。如果这没有帮助,请在以下位置打开错误报告https://github.com/plk/biblatex/issues

以下该答案的其余部分仅供历史参考。

这样就能得到答案了。

记录csquotes,由同一位作者设计biblatex并使用了类似的技术,第 2 页指出

请注意,polyglossia由于 缺少其他软件包的适当接口,因此支持目前处于初步状态polyglossia。实际上,这意味着csquotes可以检测语言(例如english),但不能检测语言变体(例如british)。

同样的考虑也适用于biblatex。由于polyglossia不提供检测所用语言变体的界面,因此biblatex始终仅使用主要语言。在您的示例中,这意味着无论variant您选择哪种语言,都只会english.lbx加载 ,因此您无法british.lbx使用polyglossia

对于某些语言来说,一个可行的解决方法是切换到babel而不是polyglossia。因为british这当然是一个选择。但对于其他语言来说,这可能不那么容易。

biblatex3.11 开始,你可以使用\DeclareLanguageMapping{english}{british}这种方法。不是的预期用途\DeclareLanguageMapping,但目前有效作为一种解决方法只要您不在english文档中使用。(不能保证这种方法会继续有效,因为文档中明确反对滥用不同方言或语言的语言映射而不是风格版本。)


polyglossia我已经在回答中讨论了\DeclareLanguageMappingBiblatex 中的后缀、继承和多语种从更技术的角度来说。我不会重复整个解释,但简而言之,问题如下。

babel将语言方言/变体视为具有文件.ldf和单独标识符的语言。polyglossia另一方面,它具有可以使用属性/选项进行修改的主要语言的概念。最突出的选项之一是variant,它恰好与英语的babel方言非常对应。对于德语,需要variantspelling。对于语言变体应该使用哪些属性,既没有约束性约定,也没有跨语言模块的统一属性实现。这使得软件包很难检测到所使用的语言变体polglossia并将其转换为babel语言名称(反之亦然)。

答案2

我最终创建了最简单的解决方案,即 Polyglossiagloss-australian.ldf文件(请参阅SE 问题 166739),只需gloss-english.ldf进行一些细微的调整,语言australian就可以融入 Biblatex,日期也可以采用澳大利亚格式显示。

将管理处理(语言/方言集群的默认设置是什么?)与操作处理(每个/the的具体设置是什么?)分离可能是可行的方法,以便于维护和使用等等。variantdialect

在我看来,从拓扑学角度来看,这与刑法典的组织方式类似,刑法典分为一般部分和特殊或具体部分,而澳大利亚的法规则杂乱无章。另一种表述方式是将对象之间的关系与对象本身分开。

目前还没有足够的代码gloss-english.ldf来处理六组(真正独立的)设置(variants),以及设置默认处理,实际上,所有这些都包含在一个if语句中。不过,这是一次勇敢的尝试。也是一个好的开始。

澳大利亚方面的下一步是能够在同一文档/参考书目中使用所有三种日期格式,并且在引用/援引其他司法管辖区和/或样式时保留原始格式。

相关内容