我一直在尝试解决自定义样式的错误。它与.lbx
文件有关,特别是它们如何与babel
和交互polyglossia
。
以下是我用 MWE 术语表达的内容:
一个名为的简单
.lbx
文件english-rev.lbx
。它所做的只是重新定义日期宏,仅用于测试目的。一个包含行的测试文件
\DeclareLanguageMapping{english}{english-rev}
,\DeclareLanguageMapping{british}{english-rev}
据我了解,它应该告诉biblatex
它应该在english-rev.lbx
其默认文件中找到特定于语言的定义。
如果我按照要求的次数编译该测试而没有明确使用babel
,我就会得到我所期望的结果:我的默认语言(我猜)是英语,并且biblatex
会适时加载english-rev.lbx
,结果很好:使用了修订后的日期宏。
类似地,如果我babel
明确选择加载english
,它似乎可以工作。
但我真正想要的是处理british
。现在,如果我使用所选的语言\DeclareLanguageMapping{british}{english-rev}
加载,则不起作用。我的日志文件显示正在加载:babel
british
english-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
biblatex
3.11 彻底修改了.lbx
加载(https://github.com/plk/biblatex/pull/702),这样您问题中的例子现在就能给出预期的结果。
在早期版本中,加载嵌套文件时以及在之前已解析别名的其他奇怪情况下,biblatex
不会跟踪语言映射别名。希望现在加载会更加可靠。.lbx
.lbx
这些更改已利用现有资源进行了尽可能广泛的测试,在 comp.text.tex 发布之前进行的测试并未发现任何新问题。如果您碰巧遇到与语言加载相关的问题,请随时报告该问题https://github.com/plk/biblatex/issues