Biblatex .lbx 文件与 babel 或 polyglossia 配合使用:无法加载非标准 lbx

Biblatex .lbx 文件与 babel 或 polyglossia 配合使用:无法加载非标准 lbx

我一直在尝试解决自定义样式的错误。它与.lbx文件有关,特别是它们如何与babel和交互polyglossia

以下是我用 MWE 术语表达的内容:

  1. 一个名为的简单.lbx文件english-rev.lbx。它所做的只是重新定义日期宏,仅用于测试目的。

  2. 一个包含行的测试文件\DeclareLanguageMapping{english}{english-rev}\DeclareLanguageMapping{british}{english-rev}据我了解,它应该告诉biblatex它应该在english-rev.lbx其默认文件中找到特定于语言的定义。

如果我按照要求的次数编译该测试而没有明确使用babel,我就会得到我所期望的结果:我的默认语言(我猜)是英语,并且biblatex会适时加载english-rev.lbx,结果很好:使用了修订后的日期宏。

类似地,如果我babel明确选择加载english,它似乎可以工作。

但我真正想要的是处理british。现在,如果我使用所选的语言\DeclareLanguageMapping{british}{english-rev}加载,则不起作用。我的日志文件显示正在加载:babelbritishenglish-rev

(./english-rev.lbx
Package biblatex Info: Trying to load language 'english' -> 'english-rev'...
Package biblatex Info: ... file 'english-rev.lbx' found. 
 (./english-rev.lbx
Package biblatex Info: Trying to load language 'english'...
Package biblatex Info: ... file 'english.lbx' found.

(/usr/local/texlive/2016/texmf-dist/tex/latex/biblatex/lbx/english.lbx
File: english.lbx 2016/05/14 v3.4 biblatex localization (PK/JW/AB)
)))

我认为这一切都是我所希望的:english-rev.lbx应该从中加载一些定义english.lbx

british.lbx但随后它会返回并再次加载(默认) :

Package biblatex Info: Trying to load language 'british'...
Package biblatex Info: ... file 'british.lbx' found.

(/usr/local/texlive/2016/texmf-dist/tex/latex/biblatex/lbx/british.lbx
File: british.lbx 2016/05/14 v3.4 biblatex localization (PK/JW/AB)
)

在这样做时(我假设),它会“破坏”修订文件中的修订定义。

有人知道发生了什么事或我做错了什么吗?我显然遗漏了一些简单的东西,但我不知道是什么。我用 得到了相同的结果polyglossia

下面的示例包括filecontents生成示例.bib文件和修订.lbx文件。它应该要做的是在参考书目中显示“(LONG DATE)”而不是 2008,而不是任何实际日期。显然,这只是为了测试目的:我真正想要的是不同的日期格式——但我现在关心的只是诱导biblatex使用.lbx我想要的文件。

\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{testbib.bib}
  @article{booky,
    author = "A N Author",
    title  = "A Title",
    journaltitle = "Some Journal",
    date = "2008-11-11",
    }
\end{filecontents}
\begin{filecontents}{english-rev.lbx}
\InheritBibliographyExtras{english}
\DeclareBibliographyExtras{%
  \protected\def\mkbibdatelong#1#2#3{% %
    LONG-DATE}
  \protected\def\mkbibdateshort#1#2#3{%
    SHORT DATE}
}
\InheritBibliographyStrings{english}
\endinput
\end{filecontents}
%\usepackage[british]{babel} <-- If this is uncommented, it breaks
\usepackage{csquotes}
\usepackage[style=authortitle]{biblatex}
\DeclareLanguageMapping{english}{english-rev}
\DeclareLanguageMapping{british}{english-rev}
\addbibresource{testbib.bib}
\begin{document}
\cite{booky}
\printbibliography
\end{document}

答案1

biblatex3.11 彻底修改了.lbx加载(https://github.com/plk/biblatex/pull/702),这样您问题中的例子现在就能给出预期的结果。

在早期版本中,加载嵌套文件时以及在之前已解析别名的其他奇怪情况下,biblatex不会跟踪语言映射别名。希望现在加载会更加可靠。.lbx.lbx

这些更改已利用现有资源进行了尽可能广泛的测试,在 comp.text.tex 发布之前进行的测试并未发现任何新问题。如果您碰巧遇到与语言加载相关的问题,请随时报告该问题https://github.com/plk/biblatex/issues

相关内容